読者です 読者をやめる 読者になる 読者になる

こけつまろびつプログラミング



このたびデバッグではじめるCプログラミング』翔泳社、2008/05/28、ISBN:4798114197)というプログラム入門書を上梓した。


相棒・吉川浩満id:clinamen)との共著『心脳問題』朝日出版社、2004、ISBN:4255002770)や『問題がモンダイなのだ』ちくまプリマー新書、2006、ISBN:4480687521)、あるいはジョン・サール『MiND』朝日出版社、2006、ISBN:4255003254)の翻訳ときて、つぎがこの書物ということで、われながらどうご紹介したらよいのか、戸惑いを覚えていないと申せば嘘になる。


例えば、プログラムにご関心のない方に向けてなにかお伝えするとしたら、プログラミングの次元でコンピュータの使い方がわかると、現代社会に不可欠となっているこの道具について、ものの見方がちょっと変わるかもしれない、ということはあると思う。あ、なんだか書けば書くほど胡散臭い。


気をとりなおして、なぜこのような書物をこしらえることになったのか、同書の「あとがき 増補版」として、経緯のようなことを書いてみたい。


いつのことだったか、本書を編集してくださった瀧澤さんと雑談をしているときに、彼からこんな話を聞いたのだった。


プログラムに関する書籍や雑誌では、文章の他に原稿の一部として著者がプログラムを書くのだが、このプログラムがうまく動かないことがある。すると、著者ならぬ編集者の瀧澤さんが校正ならぬデバッグ(プログラムのバグ=まちがいを取り除くこと)をすることになる。これがプログラムのブラッシュアップに役立ったというのだ。


文章の校正だってかなり神経を使う大変な作業なのに、プログラムのデバッグまでやらねばならないとは! というのも、経験から言うと、他人が書いたプログラムをきちんと読んで理解することは、存外めんどうなことなのだ(バグが含まれていたり、可読性が低いプログラムならなおのこと!)。


と言うよりも、その話を聞いた私は、著者は自分が書いたプログラムが正しく動くかどうかをチェックしないまま編集者にわたしているのですかと、滂沱を禁じえなかった。


一方、この話を聞いた頃、私は専門学校でゲームの作り方を教えるという講師の仕事を始めていた。学生さんたちとつきあっていくなかで、彼らがどうも困っていることの一つに、プログラムをどうやって習得したらいいのかわからないということがあった。


プログラム言語の文法は理解できるし、誰かが書いたプログラムを読むこともできる。でも、いざなんらかのプログラムを自力で書かなければならなくなったとき、いったいなにをどう組み立ててよいのかがわからないという話をたびたび耳にした。なんだか文法はわかるけど話せない学校英語に似た問題がそこにあるようだと思った。


そういえば、自分はどうやってプログラムを書けるようになっただろうかと思い出してみた。私がパソコンを使い始めたのは、1980年代のはじめ頃のこと。当時はまだカセットテープでソフトを販売しているような時代だった。いや、もっと言えば紙でプログラムを「配信」していた。


例えば、パソコン雑誌を開くと、雑誌の後ろのほうにプログラムが延々と印刷されており、これを一文字ずつ間違いなく入力すれば、自分のパソコン上でソフトが動くという按配。


そこで、未知のゲームをプレイしたい一心で毎月新しい雑誌を入手しては、自分のパソコンで動くプログラムを手当たり次第に入力した。一度の入力でばっちり動くということは稀で、たいていは入力するうちにミスをする。だから入力し終わったプログラムをいざ動かそうと思うとエラーの嵐が起きる。「はてな?」と思ってページに印刷されたプログラムと入力したプログラムを見比べて、どこがまずいのかを調べる。


言ってみればこれを繰り返すうちに、なんとなくプログラムというものがわかってきた。これはちょうどピアノを習得するときに、誰かが書いた楽譜をひたすらなぞって演奏をするうちに指の動かし方が身につくことに似ているかもしれない。いや、漢文の素読のようなものだろうか。


当時は市販のソフトの種類もそれほど多くはなかった。それだけに現在のように目移りすることもなく、一本のソフトをじっくりと触り、その挙句に「自分ならここはこうしたいなあ」などと思うようになる。そこで、見よう見まねで、「こんなソフトを作ってみよう」というのでプログラムを書いてみる。また、市販のソフトでもBASICという言語で書かれたものなどは、簡単にプログラムを覗いて見ることができた。


そのうち様子がわかってくると欲も出て、「もっとはやく動くようにしたい」などと思えば、おのずとマシン語機械語)でプログラムする必要があるということがわかり、誰に教えられるというのでもなく、雑誌や書物を手がかりに試行錯誤を繰り返す……。


ズボラではちょっと人後に落ちない私が、そんなことをしてみようという気になれたのは、おそらくパソコンもソフトもいまの目から見ればずっと単純でわかりやすいものだったからだと思う。


そして、徐々に複雑化・高度化するコンピュータやOSを乗り換えながら、そのつど新たに覚えるべきことを押さえれば、だいたいの見通しは立つ。そんなふうにして簡単なところから出発して少しずつ階段を上ってきたために、なんとかなっているのではないかと思う。つまり、自分の努力というよりも、タイミングがよかったというわけだ。


では、物心ついたときからWindows VistaMac OS X、あるいはPlayStation3WiiといったOSやコンピュータがあって、その上で動く大規模なプログラムを使いなれてきた人に、「じゃあ、いまからこのコンピュータでプログラムをやってみようか」と言えば、なにから手をつけてよいのかわからなくても無理はない。


どうしたらそんな学生たちにプログラムの考え方を身につけてもらえるだろうか。瀧澤さんから上記の話を聞いたとき、ちょうどそんなことを考えていた。


そこで、よくあるプログラム入門書のようにきちんと動くサンプル・プログラムを示すだけでなく、はじめから間違いが埋め込まれており、読者はそれを自分で入力してはその間違いの原因を発見して直しながら先に進むような本を作ったらどうだろうかという話になった。要するに瀧澤さんの経験と私の経験とを紙上で再現するといったらよいだろうか。


それならついでに、プログラマがプログラムを組むときに、どういう考えの流れで或るプログラムにいきつくのかを見せてしまってはどうか。というのも、多くの場合、入門書で提示されるサンプル・プログラムは、いわばきれいに整えられた「完成状態」だ。けれども入門者が知りたいのは、いったいどうやったら白紙から完成の状態へ進むことができるかということだ、と考えて、プログラムが作られてゆく途中のいきつもどりつも含めて書いてみた。


結果としてちょっとへんてこな入門書ができたと思う。



⇒turky in the new world > 掲載コードがあらかじめ間違っているプログラミング書籍
 http://newworld.ddo.jp/turky/463
 編集を担当してくださった瀧澤さんのブログです。


⇒日々の破片 > 2008/05/27
 http://arton.no-ip.info/diary/20080527.html#p01
 書評をしてくださっています。ありがとうございます。