Perl入学式参加レポート&入門者向けお役立ち情報・推薦書など

ひとつ前の記事にも書きましたが、昨日2014/07/26(土)、2014年度Perl入学式の第2回補講in東京。に行ってきました。

猛暑の中でしたが出席率もよく、定員30人のところ25人ぐらいですか。ギュッと集まっていましたね。
キャンセルになってしまった方も都度事前の報告をしてくれていて、運営的にも比較的スムーズに進められたかと思います。

内容的には前半が Hello, world的な前回の復習や環境構築の続き的なことで、後半が本題的な変数、配列、if文やfor文のレクチャー、そしてそれらを組み合わせて取り組むfizzbuzz問題など、という感じでしょうか。

資料は以下で読めます。
https://github.com/perl-entrance-org/workshop-2014-02/blob/master/slide.md

受講生さんのレベルは多様で、ある程度の経験はあるけどPerlは初めて、という人もいればプログラミングじたい初めて、という人もいるので100%正しい進め方というのはナイと思うんですが(それを気にするならレベルごとにクラス分けるしかないというか)、個人的には去年の僕みたいな超ド素人の人が追いかけるにはちょっと速いかなとも思うんだけど、それはべつに悪い意味でもなくて、じゃあこれより遅くしたら理解が(逆に)早まるのか、あるいは深く腑に落ちるのか? というと、案外焼け石に水的なことになりそうというか。

6回のカリキュラムである程度の落とし所に持っていくことを考えると、そして各回の間が1〜2ヶ月空くことを考えると、このぐらいのスピード感が初期設定なのは良いのかな、とあらためて感じたりしました。

よくある間違い

生徒さんが出すエラーのベスト3、みたいな感じで、よくあるハマりどころとして見たのは、

  • 数値と文字列の違いがわからない

というもので、具体的には、たとえば profile.pl というファイルで

#!/usr/bin/env perl
use strict;
use warnings;

my $name = Akira;
my $age = 35;

print $name;
print $age;

と書くと、

Bareword "Akira" not allowed while "strict subs" in use at profile.pl line 5.
Execution of profile.pl aborted due to compilation errors.

みたいなエラーが出てきます。
答えを言ってしまうと、これは5行目の Akira がクォーテーションで囲まれてないよ、ということですね。(ここではシングルでもダブルでもOK)

その他だと、

  • 改行「\n」をどこに入れたらいいのかわからない

というのもあるあるで、たとえば上記のコード、せっかく Akira をクォーテーションで囲んでも出力結果が

Akira35(マシン名): (ディレクトリ名)$

みたいに出てきて一瞬「あれ、実行されてないな」とか見失ってしまいがちだったりするんですが、じゃあそれを避けるためにも改行入れてみましょう! となると、そこで一瞬止まってしまうというか。

で、それを乗り越えるには「ダブルクオーテーションによる変数展開」や「ドットによる文字列の連結」なども複合的に理解しておく必要があって、ムチャクチャ基礎的なサンプルながらじつに複雑な要素を扱っているんだな〜、と感じます。

よくある間違い2

あとはまあ、

  • セミコロンのつけ忘れ
  • typo(文字の打ち間違え)

などもあるあるですね。

あと個人的には「変数への値(数値や文字列)の代入」と「print文」が最初の頃はよくごっちゃになっていて、たとえば

my $foo = 'Akira';
print = $foo;

としてしまうとか。(2行目の「=」は不要)
あとはif文とfor文の構文もよくごっちゃになっていて、

for ($i = @array) {
  ......
}
if $num (5 || 3) {
  ......
}

としてしまうとか。
(どこが違うとかはとくにいいですね・・)

ともあれ、そんなところも結構ツラくはなりがちなので、ましてや文字列の比較でeqとneを使うとか、&&や||というのがあるよとか、さらにはその優先順があるとかまではとてもインプットしきれない・・という人もいるかとは思うんですが、その辺はくり返して身につけていくしかないんですよね、と思います。

真偽とは何か

そういえば、ぼくが初めにとくにわからなかったのは(というか今もそうなんだけど)「真偽」ってよく言うんだけど、そもそもその概念ナニ? っていうのがありますね。
これ、普段プログラミングに関わらない人にはけっこう意味不明なんじゃないかと思うんですが、どうなんでしょう。

個人的には、エンジニアにとっては当たり前にそこにあるものすぎて上手い説明が成されていない気がするというか、「水って何?」と聞かれて「え・・水は水だけど・・」みたいにしか答えられないような、あらためて定義しろと言われても言えない、みたいな状況がある気がしてます。

今回だとこういう説明になっていて、
https://github.com/perl-entrance-org/workshop-2014-02/blob/master/slide.md#perl%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E7%9C%9F%E5%81%BD%E5%80%A4

なるほど、と思った人もいれば「?」という人もいたと思うんですが、まあ・・そのうち「ああ、こういうことかも?」みたいになってくるでしょうから一緒に学んでいきましょう。というか分かったら教えてください。>生徒さん

地味に効くお役立ち情報

サポーターをしながら、何度か別々の人に同じハウツーを伝授して「おお、いいねこれ」みたいな反応をもらったのがありますので、お知らせします。

ターミナルで矢印の上下キー

ターミナルで皆さん、「perl profile.pl」とか呼び出すとき、いちいち毎回「p..e..r..」とか打っていくわけですけど、もしその前にも同じ内容を打ち込んでいたなら、矢印キーの上(↑)を押すことで同じのがすぐ出てきます。
あるいはもし「perl hello.pl」とやった後に「perl profile.pl」を打っていて、その後にまた「perl hello.pl」を呼びたかったら、単純に↑を2回押せばいいですし、連打してずっとさかのぼることもできれば↓キーで直近に戻ってくることもできます。
初めの内はただでさえタイピングに時間がかかりますし、typoもしやすいですから、上下キー(↑↓)をざくざく利用しましょう。

途中まで打ち込んであとはtabキーにやらせる

上記の「perl profile.pl」ですが、以前にターミナルで同じのを打っていたら↑キーを使えばいいんですが、最初に打つときにはその手も使えません。
しかし、そんなときでもわざわざ全部打たなくても大丈夫。「perl p」まで打ったらtabキーを押しましょう。残りの「rofile.pl」を全部勝手に出してくれます。

とはいえ、このとき、もし同じディレクトリ(フォルダ)の中に、pから始まるファイルが複数あったら出てきません。というか、tabを連打すると候補を出してくれるんですが(どこまで親切なんだ)、そういうときには他とカブらないところまで打ち込んでからtabやればOKです。
たとえば、「profile.pl」と「private.pl」とかあったら(どんな内容か知りませんが)、「perl pro」まで打ってからtabすればOKです。

ターミナルでtypoして悩む確率が減りますし、軽くお勧めです。

その他だと、「hoge」とかの仮の変数名などが最初はわかりづらいかなーとか、あとは「ディレクトリとフォルダの違い」とか「ターミナルとシェルとコンソールの違い」とかの同義異語的な用語についてとか、あと「__END__」っていうコメントアウト使うと便利だよとか、それとつなげてぼくがいつも動作確認のために使ってるファイルの置き方とかについても書きたかったですが、ここでそれやるとかなり長くなりそうなのでその辺はまた別の記事で。
※というかコメントアウトの仕方ってレクチャーしましたっけ・・?

とにかく復習(適度に)

上に書いた以外にも、配列の添字とかsortとかreverse、STDINとかchompとか、さらにはそれらを組み合わせるとか、いろいろ一気に進んでちょっと追っつかなかった、という人もいると思うんですけど(想定読者=1年前の自分)、生まれて初めて触れる概念に対して1項目10分程度ずつ聞いただけで分かることはナイほうが自然とも思うので、今回はあくまで、Perlという国に入るためのパスポートをゲットしたようなものだと思って、今後は自分の好きな時に何回でもその国中を旅行するみたいな、好きな時に好きなだけ復習したらよいのではないか、その過程でいろいろ身につくのでは、と思っています。いい喩えだ。

お勧め参考書籍

さてここからは、講座の途中で参加者さんからお勧めの関連書籍を教えてほしい、たとえばアナタは何を読んで学びましたか? と聞かれたので、その場でいろいろ思い出しながらリストアップした内容をまとめてみます。

とはいえ、参考書、入門書というのはその人のレベルによってだいぶ活き方が違うと思うし、また文体や雰囲気によってフィットするかどうかも違うと思うので絶対のオススメとかは言えないわけですが、とりあえずぼくが個人的に良いと思うものを中心に列記します。

プログラミングじたい初心者の人向け

まずは結城浩さんのこちら。

新版Perl言語プログラミングレッスン入門編

新版Perl言語プログラミングレッスン入門編

ご本人のサイトにはサポートページがあります。
http://www.hyuki.com/pb/

たぶん昨日の内容や、次以降にやるであろうハッシュ、サブルーチン、正規表現、各種関数(splitやjoin、pushやshiftなど)までの内容については、Perl入学式の良い副読本になるのではないか、と思います。

とにかく気が利きまくってるので、「Aという概念を説明しているときに、その前提となるBという概念について説明されてない」とかいう入門書の不備あるある、みたいなことがほとんどない(ぼくが認識してるかぎりはゼロ)ですし、なにしろ『数学ガール』などの読み物も書かれている方なので、語り口のやさしさと論理性の高さにおいても自信をもってお勧めできます。

一方、他の言語などをある程度習得されてる方にとっては、Perlにかぎらない基本的要素について多く書かれているので、大半は「それ知ってるよ」になるかもしれず、なのでこれはとくに「プログラミングじたいの入門者」でもある人向けですね。

次は同系統でありつつ、もう少し具体的な内容にレベルアップした感じの本がこちら。

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

Perl界隈ではおなじみの以下のサイトの作者さんによる本なので、
サンプルコードによるPerl入門 〜 Perlで楽しくプログラミングを学ぼう 〜

同サイトをひとしきり見回って相性が良さそうだな、と思ったら読んでみる、とかでもよいかもしれません。
やはり本にまとめられているぶん、サイトを徒然に遊覧するより体系的に役立てることが出来ると思いますし、モダンなPerlの書法やMojolicous(というのがある)の使い方などについてもページが割かれているので、そういう意味ではあまり例のない、新しくて手堅いPerlの本と言えるかもしれません。

それから、同人誌になりますが『雅なPerl入門』もとても良いです。
http://kazhiramatsu.hatenablog.com/entry/2013/08/07/132842
※このリンク先は初版に関するもので、現在は増ページされた第2版が出ています。

小ぶりなボリュームにもかかわらず主要な現代風Perlのエッセンスが詰まっていて、何より二人の登場人物の会話体で内容が進んでいくので楽しみつつ勉強できてしまう良さがあります。

Amazonなどで買えないのがハードルですが、作者さんがPerl入学式のサポーターに来てくれることもありますし、あとコミケで売ってたりYAPCで売ってたりすることもあるので(というか去年のYAPCの一例しかないですが)、アンテナを張っておいたらそのうち入手できるかもしれません。

そしてもう一点、これはKindleブックですが、今年のYAPCを仕切っておられますゆーすけべーさんによるこちら。

Perlについて語ろう

Perlについて語ろう

手軽に買えてお値段もリーズナブルですが、内容は濃いです。
これもゆーすけべーさん特有の流れるような語り口で進んでいくので楽しみながら読めると思います。
後半になるに従ってちょっと難しくなるところもありますし、上記の結城さんの本ほどガッツリと初心者向けに作りこまれているわけでもないので、これ1冊あれば、とは言えないかもしれませんが、初心者がPerlの世界を一望するには良い内容だと思います。

それから、本以外でも以下の情報がお勧めです。

これは去年のYAPCDeNAの方が発表されたスライドですが、大規模新人研修の攻防を描いた一大絵巻、の後半、30ページ目ぐらいから「参考になった書籍」の紹介があって本当に参考になったのでぜひどうぞ、という感じですね。

発表じたいの概要や動画は以下で見れます。
http://yapcasia.org/2013/talk/show/889f1598-da48-11e2-971a-72936aeab6a4

Perl以外にもデータベースやGitその他についても「実際に研修生が参考になったと思った本」がランキング形式で紹介されていて、はっきり言ってこういう情報、かなり貴重&役立つので僕も会場でかなりガン見ガン聞きしていました。
あらためて発表された玉田さんには感謝です。

さてもうひとつ、本以外の情報で、これは2003年の記事なのでそれを念頭に置いておいて頂きたいんですが、伊藤直也さんが書かれていたこのブログエントリーも有用な文献紹介として時々読み返します。
お薦めの Perl 本をいくつか紹介 : NDO::Weblog

で、じつはというか何というか、ここまでに出てない&その直也さんの記事に出ています深沢千尋さんの以下の2冊。

すぐわかるPerl (Software Technology)

すぐわかるPerl (Software Technology)

すぐわかる オブジェクト指向 Perl

すぐわかる オブジェクト指向 Perl

※実際には玉田さんのスライドに後者が入っていますが。

ぼくの極個人的な感覚としてはこれらがほんとにお勧め&大好きです。
なんですが、上に出してないのはとくに前者が古めの本で、Perl入学式の資料などで扱ってる内容とズレがちというか、トータル的には必ずしも大きな齟齬ではないんですけど、結局 use strictやuse warningsの設定が書いてなかったりするので受講生さんに最初にこれ勧めると混乱するかなあ〜、という気づかいからこのタイミングで出しています。

でも個人的にはとくに「オブジェクト指向」の方、P79以降断続的に、コンピュータがリファレンスをどのように解釈しているのかを「コンピュータの内心」風に解説していく部分があるんですけど(これだけじゃ何の話かわからないと思いますが)、これが超絶分かりやすくて「うわー、そうなんだ~、初めてわかった!」みたいになりまして。

またそれだけでなく全般に面白い&わかりやすい&丁寧、そしてそれと引き換えに長い&重い(物体的に。とくに「オブジェクト指向」の方)、さらには上述のようにPerl入学式のカリキュラムとの不整合を自分で読み替えながら進める必要もあるので、その辺も含めて腹を据えて付き合えそうな人にはお勧め、という感じでしょうか。

ちなみに、同書についてはdanさんのブログでも紹介がありました。

あとは何しろぼくが同シリーズを知ったのはこちらを見たからですね。

著者の深沢さんは定期的にブログを更新されていますが、Perl関連のカテゴリもあってやはり面白いです。

その他、中級者向け以降

事前に思った以上にここまで書きすぎたので、上記以外をババっと書きます。

※昨日ぼくに参考書の質問をされた方はすでに一定の技術・知識を持っているようだったので、上記の玉田さんのスライドおよび以下の方が参考になるかもしれないのですが・・。

上記以外ではまずこちら。

Perl CPANモジュールガイド

Perl CPANモジュールガイド

Perl入学式のサポーターさんに聞いたら高い頻度で名前が出てきました。ぼくも持っていますが、とにかく内容が豊富ですし、かといって単純なカタログ的な(網羅指向の)ものではなく、著者なりの観点を通した編まれ方にもなっていて、まだちゃんとは読んでいないんですが比較的読みやすいと思います。

次にこちら。

Perlベストプラクティス

Perlベストプラクティス

つい最近、@songmuさんによる大変素晴らしい関連記事が出ましたのでぜひ合わせてどうぞ。
Perlベストプラクティスのベストプラクティスじゃないやつをまとめてみた | おそらくはそれさえも平凡な日々

そしてこちら。

モダンPerl入門 (CodeZine BOOKS)

モダンPerl入門 (CodeZine BOOKS)

持ってるのですがバッとはじめの方を読んで「あ、まだ全然わからないなこれ」と思ってまだしまってあります。
おっとKindle版が出てますね・・

モダンPerl入門

モダンPerl入門

というか同書については改訂版が出ると聞いていましたがそれとこのKindle版、どういう関係なのか関係ないのか・・よくわからないですがどうなんだろ。
改訂版サポートページのリンクも貼っておきましょう。
http://codezine.jp/book/modernperl2

さらにというかようやくというか、入門書といえばおそらく誰でも最初に出てくるであろう以下2点。

初めてのPerl 第6版

初めてのPerl 第6版

続・初めてのPerl 改訂版

続・初めてのPerl 改訂版

いずれもフランクで濃くて面白いと感じるんですが、どうも自分の勉強工程としてはまず「Perl入学式の資料」、その次に「雅なPerl入門」、そして結城さんや木本さんの本(最初の方で挙げたやつ)、そして深沢さんの本、という感じで辿ってくるのが自然というかフィットする感じだったので、まだこれら(いわゆるリャマ本、アルパカ本)は買ったままという感じです。

それからそうだ、触れていませんでしたがtokuhiromさんによる電子書籍のテスト本、これは読みやすいですし今後のPerl入学式のカリキュラムにも関わってきますのでお勧めです。

KindleでもePubでも買えます。

Perl テスティング ハンドブック

Perl テスティング ハンドブック

そして最後になってしまいましたが、ゆーすけべーさんの以下もありますね。

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

こちらはPerl入門というよりPerlを軸にしつつWebサービスの公開までを一気に&具体的に見渡す、という大変野心的な内容で、そうでありながらけっして厚くもなりすぎず良いボリューム感に収まっています。
エッセイ的な面もマニュアル(ハウツー)的な面もあって、読むたびに発見がありますし、リラックスしながらWeb界隈の今を俯瞰するには良いと思います。

ということでだいぶ長くなりましたがまだ読んでる人、いますかね。
ひとまず、ここまでです。(唐突に終わる)