Peter Norvigの記事

メモ。明日読む。


追記(2008/3/3):

良いところを抜粋。

Alan Perlis はかつて、「プログラミングに対する考え方に影響を与えないような言語は知る価値はない」と言った。

他のプログラマーと話をし、他人のプログラムを読むこと。これはいかなる書籍やトレーニングコースよりも重要なことだ。

こういうチャンスは積極性が要求される気がする。私自身、周りに真の言語オタクがいないのでチャンスが少ない。

「特定領域において個人が最大限のパフォーマンスを発揮するのは、長期にわたる経験があれば自動的に実現されるというものではなく、非常に経験を積んだ人であっても、向上しようという真剣な努力があればこそ、パフォーマンスは増し得る」ものであり、「最も効果的な学習に必要なのは、その特定の個人にとって適度に難しく、有益なフィードバックがあり、なおかつ繰り返したり、誤りを訂正したりする機会のある、明確な作業である」のだ。

新しいことを勉強し続けることは重要だと思う。しかし、プログラミングをどうやって身に付けるかは意外と難しい。

少なくとも半ダースのプログラミング言語を学ぶこと。そのうちの一つはクラス抽象をサポートするもの(例えば JavaC++)、一つは関数抽象をサポートするもの(例えば Lisp や ML)、一つは構文抽象をサポートするもの(例えば Lisp)、一つは宣言的記述をサポートするもの(例えば PrologC++ テンプレート)、一つは coroutine をサポートするもの(Icon や Scheme)、そして一つは並列処理をサポートするもの(例えば Sisal)であること。

これは同様なことが、『達人プログラマー』にも書いてあるらしいが、頻繁に目にする。しかし、上記で引用したようにプログラミングに対する考え方に影響を与えない程度の習得では意味がないと思う。


あと例えば、オブジェクト指向について理解したい場合、恐らくオブジェクト指向言語を1つ極めるより、2つ以上のオブジェクト指向言語を理解する方が良いと思う。私自身、クラスの考え方でJavaで見えていなかったことでPythonの学習で見えたことがたくさんある。逆に、Pythonだけでは静的言語のオブジェクト指向の発想や、それにまつわるエトセトラが学べない。


全体的に、書籍のメリットはあまり書かれていないが、良い書籍は実践でも気が付かないことを気づかせてくれるし、新しい発想が生まれるためのきっかけになると思う。それこそ考え方に影響を与えない書籍や、そういう書籍の学習の仕方には意味がない。