天然パーマです。

言語習得にまつわるエピソード

完全に見逃していた「Kamakura Perl Mongers テクニカルトーク #2」というイベントでtypesterさんが「typester式Perl勉強法」なる題名でPerlの勉強方法についてトークしたとのこと

今自分なりにも「Webサービスに必要なプログラミングの言語習得」にまつわる話をまとめようと思っていたので、エピソードを交えて書いてみます。



Webサービスを作るためにほぼ必須なプログラミングに対する知識。 プログラミング言語の習得法に興味のある方は多いでしょう。

はじめてのプログラミング

僕がはじめてプログラムを書いたのは、大学の情報処理の授業でいきなりJavaを触らせられた時にさかのぼります。 最終課題がJavaアプレットという仕組みを使ってGUIのゲームなりを作るというものでした。 基本的なデータの扱いや操作は分かるのですが、「オブジェクト指向」なるものがやはり馴染まずで、 何をやっているのかサッパリ。ただ課題では誰かが書いたコードをうまくパクることに成功。 当時得意だった映像制作ソフトを使って作った「アニメーションGIF」を埋め込んで見てくれをかっこ良くしたので、 それなりにハッタリの効くゲームができました。おかげで授業の評価は「A」でした。 ちなみにそのゲームの名前はJavaをもじって「ジャバシックパーク」と言い、恐竜を育てる今で言う育成ゲームです。 名前は気に入ってるのですが、まともにプログラミングで作品を作ったという感覚は得られなかったなぁという印象です。

次に受けたプログラミングの授業は「データ構造とアルゴリズム」というもの。これが面白かった。 Cを学びながら最終的には「シェル」と呼ばれるマシンとの対話ソフトを作っていく。 Javaに比べればCはより単純で、結果がコマンドラインですぐわかるような課題を毎回出してくれたので理解が早い。 Cの理解だけなのでいきなりWebサービスを作るのは難しいかもしれませんが、 言語を書いて結果が実行されるってことの楽しさ、ワクワク感に味を占めることができたと思います。

さて、この2つのプログラミングの授業の経験から得られる教訓はこのようなものです。

GUIアプリより書いていて結果がすぐ分かるCLIで学ぼう。 また、いきなりJavaのようなオブジェクト指向必須な言語はきつい

CLIからはじめる

僕の経験からも学べることですし、例えば「Webサービスを作りたい!」という人ですと、 ついつい、いきなりブラウザで結果が確認できるプログラムを書こうとしがちです。 個人的にはCLIと呼ばれる「コマンドラインインターフェース」のプログラムを作って実行していくのが 言語を習得する際に一番早い、というか気持ちがいい気がします。

例えばの話をします。 言語入門の際には「Hello World」を表示するだけのプログラムを書くのが定石と言われていますので、 それをPerlで書いてみます。もしブラウザで表示させたい!とCGIなるものを作ってみるとこのようなコードになります。

#!/usr/bin/perl
print "Content-type: text/html \n\n";
print "Hello World";

ここでいきなり躓きがちなのは「Content-Typeほにゃららってなんぞー」ってことです。 しかも、このプログラムが正確に実行されるのかを確かめるにはCGIが動くサーバを用意しなくてはいけません。 めんどくさいし時間がかかります。さらに、ちなむと最近のPerlを使ったWebプログラミングでは、 このようなCGIはあまり使いません。いきなりWebアプリを作ると、 どうしてもサーバの実行環境依存を考えなくてはいけないので言語習得に向いていないと思うのです。

ではCLIで「Hello World」はどうするか。このようなコードになります。

print "Hello World\n";

一行になりました!しかも単純明快です。多分Perlを知らない人でも意味はわかると思います。 「printってのが表示させる命令なんだなぁ」と。ちなみに「\n」は改行を表します。

実行も簡単です。Mac OSXを使っているならば、このプログラムを「hello.pl」などの名前にして保存し、 以下のコマンドをターミナルというアプリから起動します。

$ perl hello.pl

おそらくこれで「Hello World」という文字が出力され、Perlを触ったことの無い人でしたら「Perl処女」を 脱出したことになります。

CLIプログラムを作るということは言語理解そのものを考えるのに最低限のことを書けばよく、 また、実行までの時間が極力短いため、作っては試すという繰り返しがしやすいです。 上記CGIの例の「Content-Typeほにゃららってなんぞー」という疑問に対して答えられる知識は後ほど必要ですが、 いきなりそこで躓く必要はないのです。

とある高校生の話

誰と言うとかなり問題がありそうなので言いませんが、とある高校生の話をします。 ちなみに残念ながら女子高生ではありません。男子高校生です。

YAPC::Asia 2011 Tokyo というPerlのカンファレンスでの出来事。 一度だけお会いしたことのある高校生の方が発表するということで勇んで発表を見に行きました。 主題はなぜ高校生の自分がPerlを使ってプログラミングをするかということで、そのキッカケについて触れられてました。 過去に何度か本を読んだりしてPerlを学ぼうとしたが挫折したという話のあと、面白いことが起こります。 「再び僕がPerlをはじめるキッカケになったのは...」と切り出すと、 僕のBlog「ゆーすけべー日記」が紹介されているではありませんか!

とあるBlogのこの記事に触発されたからです

そこで見せられたのは過去に書いた 「いかにして効率よく大量のおっぱい画像をダウンロードするか」という記事でした。 題名からして発表会場内は爆笑。僕も声をあげて笑ってしまいました。

該当するBlog記事では「おっぱい」というキーワードで検索をした結果の画像を一気に何千枚も手元にダウンロードするという CLIのプログラムを掲載していました。以下は実行している様子の当時のスクリーンショットです。

スクリーンショット

高校生の彼は「あくまで」例として「おっぱい画像」に触れていて、 彼曰く、Webから何かをダウンロードするCLIを作ることが楽しいことを知ってPerlにのめり込んで行ったとのことです。

まぁ高校生に対して「おっぱい画像ダウンロードするのっていいよね」ってあまり公に言えないので言いませんが(笑)、 確かに一般的にはクローラーと呼ばれるWeb上のリソースを取得するCLIプログラミングは非常に楽しいです。

いろんなやり方を

いくつかエピソードを紹介してきましたが、僕もその高校生もある程度挫折をしてることがわかります。 どこからそのプログラミングを使いこなし、言語の理解が高まるか?というのは人によってそれぞれだと思います。 本や講義で学べる人も入れば、コードを書くことで学ぶ人もいる。 そしてどんな本を読むか、どんな講義を受けるか、どんなコードを書くかによっても学べるものは様々です。 言語習得には「これだ!」というのに出会うまで、いろんなやり方を試すのがいいのかなぁなんて思います。



このようなWebサービス開発にまつわるエッセイをメルマガでも連載しています。興味があれば是非購読を! ちなみに火曜日発行です。