１週間前に「Common Lispと関数型プログラミングの基礎」というCommon Lispの教科書であり、プログラミングの教科書であり、関数型プログラミングの本でもある、という世界でもあまり例のない本を改めて出版しました。ＫＤＰでの電子出版です。

どういうわけかこういう形でしかリンク張れないですが、リンク。

https://www.amazon.co.jp/Common-Lisp%E3%81%A8%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E-%E5%B1%B1%E7%94%B0%E3%80%80%E6%96%B0%E4%B9%8B%E4%BB%8B-ebook/dp/B01JGK90U0/ref=sr_1_1?ie=UTF8&qid=1470576362&sr=8-1&keywords=%E5%B1%B1%E7%94%B0%E3%80%80%E6%96%B0%E4%B9%8B%E4%BB%8B

改めて出版した、というのは、これは去年の冬に同じ内容のものをすでに発行しているんだけれども、その時は相当におかしな形で発行してたから。プログラミングと英語の学習法の本を一つにまとめて１２５０円で発行していた。６０冊くらいダウンロードされたのかな？内容的には１２５０円の価値は余裕であるはずだけど、それにしても完全に無名の人間がこういう形で１２５０円の本を出すというのは気違いじみた事だった。１２５０円にしたのは、値段設定でアマゾンセレクトだったかのくくりが２５０円から１２５０円だったからで他に意味はない。

しばらくして、これは英語の話とプログラミングの話を分けてまともな形で出版しないといけないと思ったんだけれども、本を出版するだけで完全に力を使い果たしてしまって、しばらく何もやる気がせずに放置していた。しかし、ようやくここに来て重い腰を上げて、プログラミングの本はプログラミングの話だけにして改めて出版しました。部分的に手直しをしたり少し書き加えたりした所もある。

自分でいうのもなんだけど、この本はものすごい画期的な本です。だと思いますとか言わないで言い切ってしまうけれども、実際画期的だと思います。どう画期的かというと、まずこの本はものすごい簡単に読めます。関数型プログラミングの本というのは専門家でないと読めないけど専門家は誰も読まない、という誰のために書いた本なのか分からない本が多いですが、僕の本は本当に簡単に読めます。簡単に読めるようにありとあらゆる工夫をしました。本というのは途中で投げ出しては意味がないですが、これなら誰でも最後まで読めるはずです。

それから、この本が違うのは扱っているテーマのレベルです。ＨＴＭＬファイルの生成、３Ｄアニメーション、楕円軌道の計算、 ＬＩＳＰコンパイラ（これはコンパイラというよりＬＩＳＰのプログラムをPostScriptに変換するトランスレーターなんだけど）、ＬＺハフマン圧縮までやります。予備知識ゼロから初めて、ここまでやってしまう本というのは世界でこれだけだと思います。しかも誰でも簡単に理解できる方法というか、プログラムでやりますからね。

本の知的なレベルは考えうる最高レベルに取りました。東大生さんだろうが京大生さんだろうがＭＩＴの学生だろうがケンブリッジの学生だろうが大学でコンピューター科学を研究している研究者だろうが面白く読める本になっているはずです。自分でも、ものすごい面白いプログラムが書けたと思います。この本の内容を難しい方法でごちゃごちゃやるのは簡単です。でも、同じことを誰でも分かる簡単な方法でやるのは難しい。クレイジーなアイディアが必要になってくるから。

プログラミングそのものに関する本というのは、たくさんあるようでほとんどない。ほとんどが言語とライブラリの機能の紹介で終わってしまう。なんでそういうゴミみたいな本ばっかりになるかというと、結局は命令型プログラミングでやっているから。

命令型のプログラミングだと、入門レベルだとコンピューターというのは人間の指図通りに動くだけで面白い事は出てこない。ただ人間の行動をプログラムにしてるだけで新しい事はなにもないです。はっきりいってプログラミングのなにが面白いか、なんて全く分からないと思います。

関数型プログラミングだとそこらへんが全く違う。関数型プログラミングというのはごり押しができない。プログラミングをするには工夫が必要になる。それで、うまくプログラムが書ければ関数的なプログラムというのは本当に美しいです。ものすごいシンプルなプログラムですごい結果が出てくる。はっきり言って感動しますよ。関数型プログラミングを勉強すれば、プログラミングというのは単なる人間がやる作業の自動化ではないという事が分かると思います。

それに、関数的なプログラミングというのは、プログラムの各要素を完全にバラバラに分解できる。それで、小さな関数を組み合わせて１つの大きな関数を構成していくわけですが、この分解がものすごいきれいにできるのでどうやって大規模なプログラムを構成していくかが非常に分かりやすいです。よく、おもちゃみたいなプログラムは書けるけど大規模なプログラムはどう書けばいいか分からない、という人がいますけれども、関数的なプログラミングから入ればそういう事は絶対ありません。

そういうわけで僕はプログラミング教育というのは関数型プログラミングから始めるべきだと確信していて、この本は腐りきったプログラミング教育の世界に革命を起こすべく書いた本です。ほんと、まともな形で再出版できてほっとしています。