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

著者: Peter Norvig

日本語訳: yomoyomo、竹中明夫


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

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


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

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

     pubdate: after 1992 and title: days and
      (title: learn or title: teach yourself)
     (タイトルに「日」と、「学ぶ」か「独習」という単語を含む、
       1992年以降に出版された本)

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

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

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

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

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

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

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

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

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

以上は、既に優れたデザイナーになるのに必要な資質を持っている人が存在するということを前提にしている。そこでやるべきことは、彼らをしっかり誘導してあげることだ。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

付録:言語の選択

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

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


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

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


注記

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 にページもできている。[本文に戻る]


[翻訳文書 Index] [TOPページ]


初出公開: 2001年07月02日、 最終更新日: 2007年11月18日
著者: Peter Norvig
日本語訳: yomoyomo (E-mail: ymgrtq at yamdas dot org)、竹中明夫