7つの言語 7つの世界 を読んで一瞬で7つの言語を身につける(前編)

一瞬は言い過ぎでした。普通に年末休み中かかりました。

というわけで、年末休み中に “7つの言語 7つの世界” を一気読みした。

原語のタイトルが “Seven Languages in Seven Weeks” であることからわかるように、本来は7週間かけてじっくり習得するのが望ましい。程よい難易度とテンポだったので楽しく読むことができた。

非常に密度が高い本なので2回に分けて紹介する。

構成

7つの言語が選ばれているが、単に有名とか人気な言語という基準ではない。それぞれの言語ごとに違った方向性で特徴があり、新鮮な気持ちで学ぶことができるようになっている。

学ぶ順番に配慮されていて、ていねいに毎章で概念を学び積み上げていくイメージだ。前章の知識を前提として進めるので新しい言語にすんなり入りやすい。いきなり最終章の Haskell から始まっていたら挫折していたかもしれない…。

各言語の感想

Ruby

Ruby はいかにシンプルに書くか、という点にフォーカスされた言語だ。そのシンプルさを実現するためのシンタックスシュガーが豊富にある。後置 if などが代表的だ。

後半ではメタプログラミングが紹介される。 Ruby では全てがオブジェクトであり、オブジェクトは全て自由に拡張することができるから、メタプログラミングに向いた言語だ。

私も以前 Ruby でメタプログラミングをしたことがある。非常に強力で楽しみながら書けるが、使いどころを弁えないと収集がつかなくなってしまう諸刃の剣だ。特に大規模のプロジェクトでは慎重に使う必要があると思う。

Io

Io はプロトタイプベース言語だ。オブジェクト指向の一種だがクラスベースの言語ではない、ということだ。クラスからオブジェクトを作り出す代わりに、既にあるオブジェクトをクローンする。

Ruby と対照的に、 Io にはほとんどシンタックスシュガーが存在せず、構文も最小限だ。欠点かと思われるかもしれないがそうとも限らない。学習コストが小さい、誰が書いても似たようなプログラムになる、といったメリットがある。

驚くべきことに if や for すら構文ではなく関数として実装されている。つまりそれらも他の関数と同様に拡張できるということだ。あらゆるものを拡張できるので、ドメイン特化言語を作るのに向いていそうだ。

Prolog

Prolog は宣言型言語だ。他の言語と違うのは、問題の解き方は必要なく、問題だけを定義すれば解き方は Prolog が考えてくれる、という点だ。事実を羅列し、最後に質問をすれば答えを返してくれる。

そう書くと夢のような言語だが、非常にクセがある。その性質上、動作がブラックボックスに近いのでデバッグが難しい。解き方をプログラミングする必要はないが、どのように解かれるかは頭で理解しなければ厳しい。

一方で、用途次第では非常にコードが読みやすくシンプルになる、というメリットがある。本書では 数独エイト・クイーン が紹介されている。こういった組み合わせを導く問題には向いている。

直感的にAIのような言語だな、と思ったが 実際に数十年前はAI開発で利用されていた らしい。

後編はこちら (Scala, Erlang, Clojure, Haskell)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です