コンピュータはどれほど賢いのか―知の可能性を広げるコンピュータ数学への招待
・コンピュータはどれほど賢いのか―知の可能性を広げるコンピュータ数学への招待
根本的に書名と内容が一致していないという、問題はあるのだが、日曜プログラマとしては楽しめた部分も多くあり、書評。
まず書名の「コンピュータはどれほど賢いのか」というテーマについてはほとんど書かれていないので期待してはいけない。「知の可能性を広げるコンピュータ数学」の「知」や「コンピュータ数学」はあるといえばあるのだが、その言葉の持つ深さには至っていない。この書名は変えるべきで「できるかな?JavaScript 数学アルゴリズム編」あたりが適当。
この本は、主にJavaScriptを使って、たくさんの数学理論を実装する。アルゴリズムは図表を使って丁寧に解説されるのでわかりやすい。知りたかった理論の幾つかが明確になった。
例えば円周率πを計算するプログラムを作る。円周率の求め方はそもそもご存知だろうか?私は知らなかった。文系人間なら9割以上知らないのではないか。幾つか発見されている計算方法が紹介された後、JavaScriptで、そのうちのひとつ「ライプニッツの公式」を実装している。
ライプニッツの公式では、
π/4 = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 .....
という計算方法で、計算を続ければ続けるほど値がπに正確に近づいていく。
この式は、
「
1 分子は1に固定されている
2 分母が2ずつ増えていく
3 足し算/引き算が交互に入れ替わる
」
であり、それをプログラムで書けば円周率計算プログラムができるというわけである。
この本を読みながら、最近、頭を使ったプログラミングをいかにやっていなかったことに気がつかされる。現代のプログラミングは、予め用意された関数やクラスを呼び出すやり方ばかりを学ぶことが中心である。開発環境の使い方のマスターといってもいいかもしれない。誰かが作ったものをゼロから作る=車輪の発明をしないということが、コンポーネント指向、オブジェクト指向、オープンソースという時代の潮流であるから、それを回避するのが賢いという風潮もあるような気がしている。
だけれども、車輪の発明も仕事でなければ考える楽しさがある。概念レベルのアルゴリズムをプログラムに翻訳するには、どうしたらいいか、自分で工夫を試す楽しさにこそ、プログラミング本来の面白さがあったはず。この本はそこを突いてくる。
8QUEEN問題や騎士巡回問題、素数の発見、カオス、フラクタルの計算など、実用性はともかく、アルゴリズム自体に面白さのあるサンプルが次々にでてくる。JavaScript自体の文法解説はほとんどないので、JavaScriptを既にある程度書ける人におすすめ。
ところで、最近、Lightweight languageという言葉がプログラマのコミュニティでは少し流行っている。Perl、PHP、Python、RubyなどWeb開発でもおなじみのスクリプト言語の総称。JavaScriptもこの範疇に入るだろう。複雑な文法を持つC言語やJava言語と違って、これらの言語は比較的とっつきやすい仕様で、初心者にもやさしい言語である。
・Lightweight language magazine―ライトな言語でプログラミングを楽しもう!
こんな本も出ていて楽しめた。
私は今、あるプログラミングコンテストの企画書を書いている。アルゴリズムを考える楽しさが参加者に共有されるようなルールを考える日々である。このコンテスト、実現できれば、夏頃には、表舞台にだせると思うので、ちょっとご期待ください。プログラミングの苦手な人でもアルゴリズムを考えることができれば参加できるようにしたい。
(えー。加藤さん、すいません。草稿の金曜提出、間に合ってません。え、言い訳をここに書くなよって?。)
言い訳をblogに書くのは反則だよー:) 良い企画になるように頑張りましょう!
「Perlの文法が単純でC言語の文法が複雑」って全くの逆でしょ。
た、たしかに。
「一般的に習得が難しい」
に訂正します。