新しい言語の学び方の一工夫

「見渡したい」

人それぞれだろうが、私は新しいものを学ぶ時、全体像を把握したい人間だ。「見渡したい」という表現がしっくりくる。

プログラミング言語に関しても同様である。Hello Worldだけ見せられても、スッキリしない。まずは「文法の一覧と標準ライブラリを見せてくれ」という思いが先につく。最近は言語にせよフレームワークにせよライブラリにせよ、キレイなWebサイトを持っていて、トップページに簡単な説明が書いてあるのだが、PowerfulだのSimpleだのFlexibleだのFastだのLow Costだのが大げさな修飾語を伴っていたりするだけのことが多くて、欲しい情報ではなかったりする。

とはいえ、チュートリアルは有効なことも多い。というのも、文法や標準ライブラリだけではわからない「文脈」が見えるからだ。「歴史」「文化」と言い換えてもいい。その点では自然言語と似ているなあ、と思う。

具体的なチェックポイント

一方プログラミング言語は、自然言語よりも範囲が明確に決まっている分、全体像が把握しやすい。知らないプログラミング言語フレームワーク・ライブラリ)を学ぶ第一歩は、文法・標準ライブラリ・チュートリアルのコード例と、その他ドキュメントに書いてある「その言語のアピールしたそうなポイント」を見比べながら、だいたい以下のようなポイントに考えを巡らせる。

  • 既存のどの技術に影響を受けているのか
  • 既存技術のどこに不満があって作り始めたのか
  • アピールしたい一番のポイントはどこなのか

学ぶ順番を見定める

ふんわり全体像がわかった気になるだけであれば、上記でなんとかなるのだが、実際に使う分には、結局コードを書かないと上達しない。しかし、チュートリアルを終えた後は大抵、彷徨う羽目になる。Webで情報を漁ったりしても、応用しようとした時に少しのことでつまづいて、数日間ちょっとしたことで悩み続けることになってストレスマッハである。

というわけで、こういう時に私が使うちょっとした工夫がある。

その技術の「ライバル」をいくつかピックアップするのである。

「ライバル」と比較する

「競合比較」自体は目新しい手法ではないはずだが、勉強する順番を決めるために使う、というのを喧伝しているのはあまり聞いたことがない。例えば、自分がWebフレームワークについてほとんど知識がない(Webの仕組みはふんわりわかっている)状態で勉強を始めるとしよう。

Railsのようないわゆるフルスタックと呼ばれるフレームワークは全体像の把握が困難である。本を読んで色々できるのはわかったが、どうもまとまらない、という状態になる。そこで私が行った次の一手は、闇雲にRailsのコードを書いたりドキュメントを読むのではなく、他のフレームワークを調べることだった。Railsは確かにRubyでは有名だが、Sinatraというのがある。これは全体が小さいことをアピールしているので、その方が全体像を把握しやすいし、Railsを勉強するにしても、まずはSinatraとの共通部分になっていそうなドキュメントを読む方が良い。Rubyじゃなくても、PHPにもPythonにもNode.jsにもたくさんWAFがあるので、たくさん見ているうちに同じようなキーワードがたくさん出てくるはずである。まずは、その部分が大切なのだな、とわかる(以下はそのキーワードの例)

  • 「リクエスト」
  • 「レスポンス」
  • 「ルーティング」
  • 「テンプレート」
  • 「セッション管理」

「書籍」を比較する

上記の変形バージョンなのだが、全く無知な分野の場合、関連書籍の目次を読みまくり、その共通キーワードをあぶり出す、という手もよく使う。一度重要なキーワードが分かればググりやすくなるので、格段に進歩が早くなる。ただ、これは近くに巨大書店がある時に一番有効な手なので、そうでない場合は得られる情報の精度が限られるという問題はある。

個別事例より先に、体系を学ぼう

「別にほしい機能が作れればそれでいいよ」という方もたくさんいるし、場合によるのだが、実際に使うつもりのある技術に関しては、基本的にはTIPSではなくて全体像を掴むような学び方をしてほしいなあ、とは思う。