体で覚える?


プログラミングは体で覚えるしかないとよく言われます。とくにプログラマの書いたホームページなどを見ようものなら、「やる気がある奴は既にやっている。人に質問する時点で駄目だ。そこで負けている」などとのたまう人もいます(決してその考えが間違っているわけではありません)。実際、ぶっちゃけた話が、その通りなわけで、理屈で覚えただけではどうにも使いこなせません。コンピュータという奴は。(1999/05/03 現在)

プログラミングの勉強するにはどうするかというと、やっぱり日常に組み込んでしまうのが一番いいわけで、実際、ソフトハウスなんかに就職すると阿呆でも実力がつくでしょう。私も就職して一ヶ月、既に大学五年間以上の勉強をさせてもらいましたもん。やらなくちゃいけないことがあって、プログラミングの課題は次々と現れ、分からないところは教えてくれる人がいる。これほど恵まれた環境もないでしょう。

で、じゃあ、なんというか仕事でない人が自分の情熱で「コンピュータを使いたい(こっちの命令通りに動かしたいということ。つまりプログラミング)」と思ったらどうすればいいのか? 昔の人はすんごい情熱でもって独学ですべてをこなしていたのである。だが、今は無理だ。ネットにある情報も、すごく役に立つかというと、これが難しい。

独学で勉強できるのは本当に選ばれた少数の人間だ。私の知っている人で、小学生の頃からプログラミングがしたくて、プログラミングの本を買って、その頃はパソコンを持ってなかったから、プログラムを紙に書いていたという人がいる。あまりに一生懸命、夢中でやっているから、親が不憫に思って、中学生のときにパソコンを買ってくれたそうである。夢中になってプログラミングをしていたが、高校二年くらいになると、自分の作りたいプログラムはあらかた書いて、もう作りたいプログラムがなくなったそうである。──話は少しずれるが、こういう人にとってこそ、プログラマという職業は天職である。プログラミング技術はあっても、作りたいプログラムがない、という人は、誰かの依頼に沿ったプログラムを作るというのが、まさにその人の役割だといえるだろう。それに反して、これを読む多くの人は、こういうプログラムが欲しい、という、目的があってプログラムに興味を持った人だと思う。当たり前だけど、プログラミングそのものに興味を持てる人間というのはそれほど多くない。もしあなたが、欲しいプログラム、作りたいプログラムのアイディアを無尽蔵に次から次へと出せる自信があるなら、お金を集めて、プログラマを雇い、プロデュースする側に回ることを勧める。そういう人こそ、プロデュースするにふさわしいからだ。しかし、多くの人が「無尽蔵に」という部分でためらいを覚えるだろう。「1個や2個、5個、10個までは出せるが、20個は難しい」などと思った人は、プロデューサも天職とは言い難いから、やめておいた方がいいかもしれない。無理矢理作り出したアイディアなどは、そのことが使う方にも伝わるからだ。もっとも、今はまだプログラムが充分揃っているとは言いがたい状況なので、必要なプログラムもいくつか簡単に思いつくかもしれない。私も、今(1999/06/05)現在、欲しいと思うプログラムは四つくらいある。馬鹿でかい総合的なプログラムというのは、(マイクロソフトオフィス、とかね)とりあえず置いておいてだ。いつかはそうなるのかもしれないが……OSから何から何まですべてが一つのプログラムとして機能するというのは、多分不可能だ。必要なプログラムはまだいくつかあるというのは、多分この先20年くらいは変わらない状況なのではないだろうか。

ま、それで、それでも多少、プログラミングをしてみたいという人の方が多いと思う。私も結構、気楽に、「こんなゲーム作りたいな」とか考えている方だ。

けど、書いてきたように、本はあまり役に立たない。最初の一冊は役に立つが、大体、知識が必要なときというのはつまずいたときなので、つまずいたときには本は役に立たない。本には、文法が書いてあって、つまずいたときというのは自分のプログラムがちょっとその文法からずれていたりするときなので、「自分のプログラムがどのように文法的に間違っているか」なんてのは、それが分かったらもともとミスなんてしない(本当のミス以外は)ってなもんである。もしそれを独学で解決しようというなら、もう一度、最初の一冊を読み直して、自分の文法知識の再確認をし、それから自分のプログラムをじっと見て、その間違いを探すしかない。

「スピードを上げて加速する」

日本語なら、まあ、どこが間違っていて、どこを直せばいいか、なんとなく分かる。「スピードを落としつつ加速してハンドルを切ってブレーキは減速するアクセルに近い」まで、滅茶苦茶な文を書く人はいない。大体、何を言いたいのか分からないんだから、書いてる本人も、こういう文には気がつく。

「マンガもたくさん持っているが、文庫本の数も少ない」

プログラミングのミスというのはこういうレベルである。この日本語が相手にうまく伝わらなかったとして(人間なら大体、分かってくれるんだけどね……)、大変なのは、「相手がどのような勘違いをしているのかよく分からない」ということだろう。相手がどのような勘違いをしているのか確認していくのが、デバッグの第一歩である。それが分かったら、言葉を直して、また伝えてみる。そしてまた誤解がないか確認する。意味が正確に伝わっていることを確認して、それはやっと完成となる。

「マンガはたくさん持っているが、文庫本の数は少ない」

「マンガもたくさん持っているが、文庫本の数も多い」

「マンガもあまり持っていないが、文庫本の数も少ない」

日本語には多少詳しいつもりだが、これ以外に変更の方法は思いつかない。「マンガもたくさん持っているが、エロマンガも大量にある」とか? ま、それで、厳しいのは次のミスだ。

「マンガもたくさん持っているが、文庫本の数は少ない」

これでもまあ分かる。日本語は難しいので、もっと微妙で、もっと気がつきにくいミスもたくさんあるのだけど、私が言いたいのは、日本語の難しさではなくて、日本語の文法書を読みながらミスを探していく作業が難しいということである。大体想像できると思うが、このとき役に立つ文法書というのは、正しい文法書である。微妙な所をごまかさずに書いてある本が理想的だ。「例外」もすべて載っていると、もう素晴らしい。これは厚さや値段ではなく、著者の姿勢によるものなので、読んで感じるしかないと思う。もしそういう本が見つかったら、ぜひ買って欲しいと思う。それが安ければめっけもんだ。

さて、できれば本はその一冊くらいにして、後は、自分で考えてもどうにも分からないときに聞ける人がいた方がいい。プログラムを組んで、うまく動かないときに人に聞く。これしかないのである。ネットには FAQ などもあって、自分と同じ質問をしている人もいるが、そういう FAQ を見つけるのも大変だし、その人の質問が、本当に自分の質問と同じであるか見極めるのがまた大変だ。

*──実は、プログラマは本は書けないものだ。大抵の人が、自分もそうやって人から聞いて覚えたというものだし、ミスするたびに人に聞いたりして、その知識と技術を深めていった人ばかりだからだ。体系的な知識より、ケースバイケースの小さな知識( Tips とか呼ばれるけど)の集まりだったりするのである。そういう人が、「よく分かるプログラミング」なんて本を書けるはずもない。私が理想的に思うのは、プログラマを何人か、実際に書くライターを何人か、ライターが兼ねてもいいけど、質問する人も何人か揃えて、そのチームで本を書くことである。最初に誰かにプログラミングをさせて、ミスをプログラマに聞いて、その知識を集める。プログラマの説明に分からない語句があったら、それも質問する。最終的に概念やハードウェア制御にまで話が及んでも、途中で端折(はしょ)ったりしない。分からないのに相手に気を使って途中で質問を切り上げる方が、時間の無駄であることを意識して、「何が分からないかも分かりません」レベルまで突っ込んで話す必要があると思う(ここでは、ハードウェアについては「文書」のコーナーに集める予定だけどね)。理想だから、そんなにうまくいい本が作れるとも思わないけど。

ここでは、自分の覚え書きに留めた。FAQ ではないし、入門講座でもない。