Perl入学式について振り返ってみた

@nqounetです。

YAPC熱冷めやらぬ今日このごろ、いかがお過ごしですか?

私は熱くてもうダメです。

Perl入学式のゴール

どうやって決まったかは忘れましたが、ゴールは一行掲示板のようなウェブアプリを作る、ということにしました。

簡易版twitterのような「一言掲示板」の完成を目標にして, その為に必要な知識を学んでいこうと考えています.

何故ウェブアプリか、というと、ウェブアプリを作ることができる言語、という位置付けでPerlを捉えてほしいと思ったから、だろうと思います。

既に3年目も半ばを迎える頃になって、今更感じたのですが、ゴールと中身が噛み合っていないですね。

初年度は、12回の目標で結果11回になりましたが、ウェブアプリを作るためのMojoliciousというウェブアプリケーションフレームワーク(以下WAF)が登場したのは第10回でした。

2回分でWAFの説明をしたのですが、出てくることがほぼ新しいことばかりで、とても大変だったと思います。

応用編というのは、基礎編の知識があって成り立つのが大事で、こういう積み重ねで基礎が大事だな、という認識が得られるのだと思います。

しかし、突然のウェブアプリ作成で、基礎編とほぼ無関係の新しいWAFを覚えなければならないというのは、覚えることが横に広がってしまって、達成感が得られないんじゃないかと。

そして更に問題なのは、ここから応用するのが非常に難しいことです。

もし、ゴールの設定を変えないのであれば、Perlの基本部分は軽めにして、WAF(例えばMojolicious)の使い方を初回から実施して、応用の仕方や応用に必要な知識をフォローしていく、という方が良い気がします。

ウェブから離れたゴール設定

今のカリキュラムのままで進むのであれば、コマンドラインのアプリを作るほうが、より達成感が得られるような気がします。

そういう意味では、YAPC::Asiaでのbot作りがゴールでも良い気がします。

1行掲示板の場合、ユーザーインターフェイスとしては、発言するボックスと、発言の一覧があれば良いです。

ということは、モードで考えると入力モードと一覧モードがあれば良い。

昔風のプログラムであれば、入力の時は1、一覧は2、終了は9を押してEnter、という風に作っておき、それぞれ機能を分岐させる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env perl
use utf8;
use 5.012001;

use DDP {deparse => 1};

my @list = ();

while (my $in = <>) {
    chomp $in;
    if ($in == 1) {
        print '>>> ';
        my $msg = <>;
        unshift @list, $msg;
    }
    if ($in == 2) {
        print @list;
    }
    if ($in == 9) {
        exit;
    }
}

見た目はかなりしょぼいですが、一応機能的にはこれで満足しているはず。

あとは、ちゃんとメニューっぽくしたり、if文の中身を関数にしたり、@listをファイルに保存したり、項目を追加してCSV(またはJSON)で保存したり、という風に拡張したりもできる。

これらは少しずつ追加で覚えればいいのですが、あらためて考えると、たったこれだけのことをウェブで動くようにするだけで1回分の説明がいるのはやっぱり大変ですよ。

本当に今さらですが、ゴールがおかしいですね。えぇ。

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。