too late amatuar programmer

[reading log] Corders at work

2010-06-26 by ebon | Lavel:

Coders at Workを読んだ.

著名なプログラマーによる著名なプログラマーへの,
プログラミングに関するインタビュー集といった内容.
実録!天才プログラマー が面白かったので、同系統で期待できると思い、購入。

インタビューアーは実 践Common Lispの著者,
答え手は,
Guy Steele(Schemeの共同開発者),
の主要設計者),
Peter Norvig(実 用 Common Lispの著者で現在G
Simon Peyton Jones(haskellの共同開発者,GHCoogleの研究者),
Dan Ingalls(smalltalkの設計者),
Donald Knuth,
他多数..
と誉れ高い方ばかりのようで名前だけでテンションが上がる.

インタビュー形式で、以下のような質問中心に話が進む.

  • 何からプログラミングを始めた?
  • どうやってプログラミングを学んだ?
  • 公式な教育を受けることは重要?
  • いいプログラマーの条件とは?
  • どの言語は優れていて、どの言語がひどいもの?
  • プログラミングスキルを延ばすために、他に必要なスキルは何?
  • コーディングするときのアプローチはトップダウン or ボトムアップ?
  • 他のプログラマーを協業するときの良い方法は?

etc... ここに挙げたのはあくまで一例で、他にも多種多様なプログラミングに関する質問.

勿論、あらかじめ用意している同じ質問を全ての人物にしている訳ではない.
それぞれの答え手に沿って会話が進むよう,準備に大きな労力を払っていると思われる濃さだ.

哲学的な事からツールの使い方まで、
多くのプログラマーが気になるであろう質問を次々と繰り出している.
同時にインタビューアーが優れたプログラマーであるためか、
答え手も能弁、本音が素直に出ているようで、非常に刺激的な会話が続いている.

一人分が、約40ページある.結構な量だと思う.
答えてのターンが、2ページ弱に渡っていることなどもある、
なかなか見られない量であり、ただのインタビュー/回答とは違う.
どんなレベルの方が読んでも参考になるような、考え方・方法論・哲学が詰まっていると思う.

以下に質問に対する印象的な答え/参考にしたい答えをメモ.
とても雑多な消化の仕方ではあるが...

Seible:
プログラマーとしてのスキルを磨くためにやったことで、何か特別な方法があったと思う?

Armstrong:
いや.特になかったと思うよ.私は新しい言語を学ぶけど、良いプログラマーになることがゴールじゃない.良い言語設計者になりたいと思ってるんだ.たぶんね.
僕はものがどうやって動くのが理解することが好きだ.何かを理解しているかどうかを測る良いテストは、それを自分で実装することだ.
僕にとって、プログラミングは機械にコードをタイプすることじゃない.プログラミングは理解することと近いんだ.
~~
これが、僕が何かを実装することに駆られるモチベーションだね.この方法はおすすめだよ.
Cを理解したかったら、Cのコンパイラを書くといい.Lispを理解したかったら、Lispのコンパイラか、インタープリタを書くといい.
よく人が、”わお、コンパイラを書くのは難しいよ..”と言うのを聞く.それは間違ってる.とても簡単な事なんだ.
確かに、たくさんの事を学ばなければいけないけど、どれも難しいことじゃない.
データ構造を知らなければいけない.ハッシュテーブル、パーシングを知らなければいけない.コード生成について知らなければいけない.
インタープリタのテクニックについて知らなければいけない.どれも特別難しいって訳じゃない.
もしあなたがビギナーだったら、これらは壮大で複雑な事だと思い、やろうとはしないんだろう.
あなたができないことは難しくて、あなたが既にやったことがある事は簡単なんだ.だからやってみようともしない.
そしてそれは間違いだとと思う.

Seible:
プログラミングとは直接関連しないけど、プログラミングスキルの向上に繋がった、
あるいは価値あるプログラマーになることに役立った、何か他のスキルはある?

Armstrong:
書くことだね。
あるコンピューターサイエンティストも言ってたよ、「ああ、英語が上手く書けなきゃ、言いプログラマーには決してないれないぞ.」

気が向いた時に読み返してみたい.
メモは概念的なやり取りのものばかりになってしまった.
技術的にこみいった議論になると、自分に受け皿がない.少し悲しい..

0 comment:

Post a Comment