基本読書

基本的に読書のこととか書く日記ブログです。

教養としてのプログラミング講座 (中公新書ラクレ) by 清水亮

Kindle版が出ていたので買ったこの『教養としてのプログラミング講座』。僕は職がITなのでプログラムには日常的に接している。その為ここに書いてあってためになったことはほとんどないのだけど、それはそれとしてこれぐらいは広く一般教養として広まっていてくれたらなあという内容ではある。

プログラミングをやるというよりかはエンジニア的な考え方をしてくれと思うことが多いが。たとえば何かをミスしたときに、どうやって今後ミスを起こさないようにするかを話すときに「人間が」「努力する」的なことは基本的に無駄であるという発想があるかないかとか。人間が何か作業をする場合は、絶対にミスをするっていう考え方がない人が入るんだよね。

ミスがあるかないかのチェック、それを防ぐ手段は自動化したほうが絶対に確実なのだ。彼らは疲れて見逃したりせず、すべてをロジックで等価に処理するのだから。ミスがあったとしたらそれを組んだ人間の側で、やっぱり人間が穴なのだ。だから絶対にミスが起こらないようにプログラムを組むのだ、とプログラムに仕事として関わっている人間なら自然と「人間は信用できない」と、そう考えるものだ。

また、常に自分の作業が自動化できないかどうか考えるというのもプログラマの人間の特徴の一つだろう、自分でやるよりも自動化した方が早ければその方法を探る、常になんとかして早く出来ないかを考える。そうした当たり前の改善へ向けた考えが、なかなか現場以外では受け入れられていないのに気がついてびっくりすることがある。

僕が個人的に思うプログラムをやる意味とは、それがそれ自体でおもしろいからである。オブジェクト指向とか最初に知った時は、そんな考え方があるのかとびっくりして、その発想をした人に尊敬の念を抱いたものだ。自分が最初に書いたプログラムが、自分が手を出さずとも、自分がやったら何十時間もかかったであろう作業を延々とやってくれているところを見た時に、なにやらうまくいいがたい興奮がわいてきた。

あるいはプログラムで木に葉っぱがついているのをいかに自然に見えるようにするかという自動生成ロジックの話とかを延々と読んだ後で外に出ると木は無造作にそこら辺に立っているはメダカは泳いでいるわで「自然の情報量って凄いな」と極々シンプルに感動するようになる。これなんかはプログラムという形で世界を再現するのにどれぐらいの労力がかかるのかを自分で実感したことで、世界の情報量の多様さに気がついた例だ。

成功と失敗は厳格なルールにのっとって決められており、望んだ通りに動かないのであればそれは運が悪かったわけでも道具が悪いわけでもなく、自分自身が絶対にどこかでミスをしている(ツールそのものにバグがなければ)というシンプルさもイイ。僕にとってプログラムを学ぶことは現実世界をどうやって抽象化し、ロジックに落としこんでいくかを学ぶことであったと思う。

小説を読めば「これぐらいの小説なら自動生成できるんじゃないかなあ」とかんがえるし絶対にプログラムでつくれなさそうな小説に出会った時には人間の能力の底力に心底感動する。プログラミングは基本的な少数のルールからほとんどが成り立っていて、世界はそうした極小数のルールを組み合わせて表現可能なのだと知ることは物を考えるときにずいぶん助けになってきた。

それは結局のところ、世界の見え方を根底から一変させることなんだろうと思う。物事を出来る限り抽象的に捉えて表現しようとしてみたり、簡単な論理式に落としこんでみたり、それを知るのは何もプログラミングをやらなくたっていいが(『行動と思考における言語』を読むとか)でもプログラミングをして自分で何かひとつの世界をつくりあげてみるとそれがすぐに実感できる。

本の紹介ではまったくなかった。本書はアルゴリズムとはなにかとか、処理、分岐、ループというプログラムの基礎パーツなどから解説していて小学生向けのような内容だ。中学生高校生なら、読むならこの本でなくてもいいと思う。enchant.jsのようにお手軽にゲームが作れる入門書だったり、今は入門書で溢れかえっているから適当に好きなモノをみつくろってくればいいだろう。

はじめて学ぶ enchant.jsゲーム開発

はじめて学ぶ enchant.jsゲーム開発