まったく個人的な考え方だけど、プログラミングを勉強する上で必要な一歩というのは、アルゴリズムを日常の中から見つけ出して抽出し、コードという非日常に落としこむことなんだとおもう。条件分岐や反復処理は原始的すぎて日常に隠蔽されているから、それを発見することに始まるのだとおもう。
おれはずっと初学者の人が学ぶ最初の言語について考えていて、いくつか必要だとおもう要素をあげてみる。
- ファイルと文字列に対する処理に優れていること
- コードを書いて実行して結果を得るまでの時間とコストが少ないこと
- 実行環境および編集環境を整えるコストが少なくすむこと
ファイルと文字列の処理に優れていることを挙げたのは、日常の作業の中で必要な単純作業はほとんどこの2つが絡んでいる、とおもったから。文字列の置換だとかファイルのリネームや移動だとか。
そして、コードを書いて実行するまでの手間暇がかからないというのは大切だとおもう。プログラミング初学者は勤勉な者ばかりではなく、怠惰な者だっている。そういった才能あふれる未来の優秀なプログラマを失わないためにも、できるだけコストが少なく済むというのは大切な要素だとおもう。
それは単にコンパイルするかしないか、といった程度の問題だけでなく、文法などにもあてはまる。
おれは記号まみれになりすぎない、自然言語に近い文法やキーワードを使ったほうがいいとおもっている。だからいまだにPerlのシジルを使った中途半端な型付けみたいなのには抵抗がある。
これらの要素を満たして、おれが初学者にお勧めしたいのはRubyにほかならない。単に初学者にとって易しいだけでなく、ブロック引数という考え方でコールバックへの理解を手助けするなど優しい一面もある。
べつにRubyでなきゃダメだとはおもっていない。PerlはActivePerlというWindowsでかんたんに導入できる実行環境があるし、PythonはGoogle App Engineで手軽にWebアプリを動かす環境があるし、実行環境の身近さで言えばJavaScriptは群を抜いている。
おれが毛嫌いしているPerlのシジルだって静的型付けへの導入だと考えられるし、Pythonは関数呼び出しに括弧が必須だけどそれのおかげで関数をファーストクラス・オブジェクトとして扱えるので関数型への次の一歩が近いと考えられるし、JavaScriptの関数とハッシュマップを基礎とする考え方はとてもシンプルながら奥深い。
世の中にあるプログラミング言語はとても頭のいい人たちがきちんと考えて作って、たくさんの人手と時間によって洗練されているから、まるでこの文章をひっくり返すようだけど、どんな言語を選んでも問題ないとおもう。
たくさん使い倒して、それから次の言語の品定めをすればいいとおもう。
ある程度使い倒してきたと自負する人間は、そんな迷える子羊たちを懸命に引きづりこもうとすればいいとおもう。