プログラミングを独習するには10年かかる 著者： Peter Norvig 日本語訳： yomoyomo、竹中明夫

以下の文章は、Peter Norvig による Teach Yourself Programming in Ten Years の日本語訳である。

本翻訳文書については、以下の方々にご教示を頂きました。ありがとうございました。

どうしてみんなそんなに急ぐの？

どの本屋に足を運んでも、『7日で学ぶ Java』といったハウツー本を見かけるし、そのそばには Visual Basic や Windows やインターネットなどについて、同じように数日や数時間で学べると売りこむ本が無限のバリエーションで並んでいる。Amazon.com で以下の条件で検索してみたところ、

248件ものヒットがあった。そのうち上から78冊はコンピュータ関連の書籍だった（79番めは『30日で学ぶベンガル語』）。「日」を「時間」に置き換えてみたところ、とてもよく似た結果が得られた。253冊がヒットし、上から77冊がコンピュータ関連の書籍で、78番目は『24時間で学ぶ文法と文体』だった。上位200冊のうち、96%がコンピュータ関連書籍だった。

結論としては、誰もがコンピュータについて学ぶのに大わらわであるか、さもなくばコンピュータというものが、他のどんなものより、学ぶのがどういうわけか信じられないくらい易しいということになる。だって数日や数時間で学ぶベートーベンやら、量子物理やら、犬の調教といった本は皆無だもの。

『3日で学ぶ Pascal』といった題名が意味するところを分析してみると：

学ぶ： 3日間では、いくつか意味のあるプログラムを書いたり、その過程での成功や失敗から学ぶ時間などありはしない。経験を積んだプログラマーと一緒に作業を行い、そうした環境における生活がどういうものかを理解する間もない。早い話、大したことを学ぶ時間がないということだ。よってそうした書籍は、うわべだけ精通することについて説くばかりで、深い理解にはつながらない。アレキサンダー帝が言ったように、生兵法は怪我の元なのだ。

3日間では、いくつか意味のあるプログラムを書いたり、その過程での成功や失敗から学ぶ時間などありはしない。経験を積んだプログラマーと一緒に作業を行い、そうした環境における生活がどういうものかを理解する間もない。早い話、大したことを学ぶ時間がないということだ。よってそうした書籍は、うわべだけ精通することについて説くばかりで、深い理解にはつながらない。アレキサンダー帝が言ったように、生兵法は怪我の元なのだ。 Pascal： 3日間で Pascal の文法を学ぶことは可能かもしれないが（類似する言語を既に知っていれば）、その文法の使い方までは十分に学べない。つまり、例えばあなたが Basic プログラマーならば、Basic スタイルで Pascal の文法を利用するプログラムの書き方は学べるかもしれないが、Pascal が実際のところ、何に向いているか（向いてないか）を学ぶことはできない。さて、ここでのポイントは何だろう？ Alan Perlis [訳注1] はかつて、「プログラミングに対する考え方に影響を与えないような言語は知る価値はない」と言った。ここで考えられるポイントは、あなたが Pascal（それよりどちらかといえば Visual Basic や JavaScript などの方が現実には多いだろう）をほんのちょっと学ばなければならないとしたら、それは特定の業務を行うために、既存のツールを使う必要があるからだろう。しかし、それではプログラミングを学ぶことにはならない。その業務のやり方を学んでいるだけなのだ。

3日間で Pascal の文法を学ぶことは可能かもしれないが（類似する言語を既に知っていれば）、その文法の使い方までは十分に学べない。つまり、例えばあなたが Basic プログラマーならば、Basic スタイルで Pascal の文法を利用するプログラムの書き方は学べるかもしれないが、Pascal が実際のところ、何に向いているか（向いてないか）を学ぶことはできない。さて、ここでのポイントは何だろう？ Alan Perlis はかつて、「プログラミングに対する考え方に影響を与えないような言語は知る価値はない」と言った。ここで考えられるポイントは、あなたが Pascal（それよりどちらかといえば Visual Basic や JavaScript などの方が現実には多いだろう）をほんのちょっと学ばなければならないとしたら、それは特定の業務を行うために、既存のツールを使う必要があるからだろう。しかし、それではプログラミングを学ぶことにはならない。その業務のやり方を学んでいるだけなのだ。 3日間：残念ながら、これでは十分ではない。次項で解説する。

プログラミングを独習するには10年かかる

研究者 (Hayes, Bloom) によると、チェス、作曲、絵画、ピアノ演奏、水泳、テニス、そして神経心理学や位相幾何学の研究を含む、広範な分野のいずれについても、専門技術を身につけるにはおよそ10年かかるそうだ。近道など実在しないようなのだ。4歳にして音楽の神童だったモーツァルトでさえ、超一流の楽曲を作り出すまでに13年以上を要している。別のジャンルになるが、ビートルズが突如現れナンバーワンヒットを連発し、エド・サリバン・ショーに出演したのは1964年だった。しかし、彼らは1957年からリバプールやハンブルグの小さなクラブで演奏していたわけで、また彼らは初期から大衆の支持を獲得したが、彼らがはじめて批評的にも大きな成功を得た『サージェント・ペパーズ』がリリースされたのは1967年である。サミュエル・ジョンソン[訳注2]は、「どんな分野であれ、生涯にわたる努力なくして優れたものには達し得ない。それよりも安い代償で手に入れることはできないのだ」と、それには十年以上かかると考えた。またチョーサーも「人生はとても短く、技を習得するにはとても時間がかかる」と嘆いている。

ここでプログラミングで成功するための、私なりのレシピを紹介すると：

以上すべてを考慮すると、本で学ぶだけではどこまで習得できるか疑わしいものである。最初の子どもが生まれる前は、私はハウツー本を全部読んでみても、自分が何も分かってない新参者に思えたものだ。30ヶ月後、二番目の子どもが生まれることになったとき、私は本で復習しただろうか？ そんなことはしなかった。それどころか、私は自分の個人的な経験を信じていたし、専門家によって書かれた何千ページの本よりもずっと有能だと自信を持つまでになっていた。

Fred Brooks は、エッセイ No Silver Bullets[訳注7]において、優れたソフトウェア・デザイナーを育てる三段階を明らかにしている。

できるだけ早期にトップデザイナーを体系的に認定する。 有望な人材の育成を責任を持って行うキャリアアドバイザーを任命し、綿密なキャリアファイルを保持する。 育成中のデザイナーが互いに交流・刺激し合う機会を与える。

以上は、既に優れたデザイナーになるのに必要な資質を持っている人が存在するということを前提にしている。そこでやるべきことは、彼らをしっかり誘導してあげることだ。Alan Perlis はそれをより簡潔に表現している。「誰でも教えてやれば、彫刻をできるようにはなる。ミケランジェロは、放っといても彫刻をしていただろう。優れたプログラマーも同様だ」

さあどうぞ、その Java の本をお買いなさいな。それが何かの役に立つかもしれない。でも、24時間や数日や数ヶ月であれ、それであなたの人生は変わらないし、プログラマーとしての実際の技能全般もまたしかり。

参考文献

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

標準的な 1GHz のパソコンで2001年の夏に測定した、いろいろな演算の所用時間

execute single instruction 1 nsec = (1/1,000,000,000) sec L1 キャッシュ・メモリから1ワードを読み出す 2 nsec メインメモリから1ワードを読み取る 10 nsec 連続したディスク・ロケーションから1ワードを読み出す 200 nsec ディスクから新たにロケーションを探して1ワードを読み出す 8,000,000nsec = 8msec

付録：言語の選択

何人もの人が、どのプログラミング言語を最初に学ぶべきか聞いてきた。単一の答えは存在しないが、以下のポイントを考えてみよう。

友人を利用する。「どのオペレーティングシステムを使うべきだろうか。Windows、Unix、それとも Mac？」と聞かれたら、私は普通「何であれ君の友達が使っているものを使えば」と答える。友達から学ぶことで得る強みは、OS やプログラミング言語間に内在するどんな相違も相殺するだろう。また未来の友達も考慮すること。学習を続ける場合、あなたがその一部となるプログラマのコミュニティのことである。選択する言語のコミュニティは大きく成長しているだろうか、それとも小さく死にかけているだろうか？ 答えを得る書籍、ウェブサイト、オンラインフォーラムは存在するだろうか？ そうしたフォーラムにいる人たちのことは好きだろうか？

シンプルに保つ。C++ や Java といったプログラム言語は、コードの実行時の効率を気にする経験を積んだプログラマの大集団が専門的な開発を行うよう設計されている。その結果、これらの言語には、そうした環境向けの複雑な部分がある。あなたはプログラムを学ぶことに関心があるのであって、そうした複雑さは必要ない。一人の新米プログラマが学び覚えるのがやさしいように設計された言語が欲しいわけだ。

動かす。あなたはどちらの方法でピアノ演奏を学ぶだろうか。鍵盤を叩けばすぐにその音が聞こえる当たり前の対話的なやり方か、それとも曲をまるごと弾き終えた後でないとその音が聞こえない「バッチ」モードだろうか？ 明らかに対話モードのほうがピアノを楽に学べるし、プログラミングも同じである。対話モードを持つ言語にこだわり、それを使うこと。

以上の基準により、はじめてのプログラミング言語として私がお勧めするのは、Python か Scheme である。しかし、環境が変われば他の良い選択肢もある。もしあなたの年齢が一桁なら、Alice や Squeak を好むかもしれない（年長の学習者でも楽しめるけど）。重要なのは、選択して始めることだ。

付録：書籍やその他の情報源

何人もの人が、どの書籍やウェブページから学ぶべきか聞いてきた。私は「書籍による学習だけでは不十分」と繰り返しているが、以下のものなら勧められる。

注記

T. Capey が、『Complete Problem Solver』の Amazon のページにおける「この商品を買った人はこんな商品も買っています」のところに現在、『21日で学ぶベンガル語』や『文法や文体を学ぶ（Teach Yourself Grammar and Style）』があるのを指摘している。そうした本を見る人たちの大部分は、このページから飛んでいるのだと推測する。

[訳註1]：ACM の初代議長を務め、チューリング賞の第一回の受賞者でもある著名なコンピュータ科学者（1922-1990）。彼の残したエピグラムは、現在もいろんなところで参照される。[本文に戻る]

[訳註2]：イギリスの文学者（1709-1784）。辞書編纂者として英語学の発展に寄与したことで有名で、彼もまた残したエピグラムで知られる。[本文に戻る]

[訳註3]：この二つの引用は、前者は、Ericsson, K. A. (1996) The Acquisition of Expert Performance: An Introduction to Some of the Issues. In K. A. Ericsson (ed.), The Road to Excellence. Mahwah, NJ: Lawrence Erlbaum. p. 1-50. 後者は、Ericsson, K. A., R. Krampe, and C. Tesch-R[oe]mer (1993) The Role of Deliberate Practice in the Acquisition of Expert Performance. Psychological Review, 3. p. 363-406. からのようである。[本文に戻る]

[訳註4]：新曜社から『日常生活の認知行動 ひとは日常生活でどう計算し，実践するか』（無藤隆・山下清美・中野茂・中村美代子訳）として邦訳が出ている。[本文に戻る]

[訳註5]：ASCII BOOKS から『ハッカーズ大辞典』（福崎俊博訳）として邦訳が出ている。なお、本文に引用されている ESR の文章がどの文章からの引用かは分からなかった。[本文に戻る]

[訳註6]：いうまでもなく、Jamie Zawinski のことである。[本文に戻る]

[訳註7]：原著発行20周年増訂版としてピアソン・エデュケーションから出た『人月の神話 狼人間を撃つ銀の弾はない』（滝沢徹、牧野祐子、富沢昇訳）に第16章「銀の弾などない ―ソフトウェアエンジニアリングの本質と偶有的事項」として収録されている。本文の引用分も、上記訳書の190ページから日本語訳を引用した。[本文に戻る]

[訳註8]：日本語訳は『計算機プログラムの構造と解釈』（ピアソンエデュケーション）。日本語版のサポートページもある。[本文に戻る]

[訳註9]：日本語訳は『コンピュータプログラミングの概念・技法・モデル』（翔泳社）。Wikipedia にページもできている。[本文に戻る]

初出公開： 2001年07月02日、 最終更新日： 2007年11月18日

著者： Peter Norvig

日本語訳： yomoyomo (E-mail: ymgrtq at yamdas dot org)、竹中明夫

