世界を動かす技術を、日本語で。

MITがSchemeからPythonに移行した理由 (2009)

概要

MITが Scheme から Python へ移行した理由を Sussman が説明。 1980年代と現代で プログラミングの本質 が変化。 現代のプログラミングは 未知のライブラリ複雑な環境 への対応が必要。 新しい6.001は ロボット制御 を中心に設計。 Python 採用の理由は 実装済みライブラリ の存在。

MITの6.001がSchemeからPythonへ移行した理由

  • CostanzaSussman にMITの 6.001 がSchemeからPythonへ変更した理由を質問
  • Sussmanの説明:1980年代のエンジニアリングと 2000年頃のエンジニアリング の違い
  • 1980年代:優秀なプログラマーは 深く考え抜きシンプルなコード を記述
  • 当時のコードは ハードウェアに近い 動作、Schemeも 全体像が理解可能
  • 抵抗器 の例え:バンドを読めば 全ての特性 が分かる単純さ
  • 元の6.001: 理解可能な小さな部品 を組み合わせて 大きなシステム を構築する教育
  • 現代のプログラミング: 誰が書いたか分からないソフトウェア不完全なマニュアル と格闘
  • ライブラリの挙動 を自分で 実験 し、動作を確認する必要
  • 仕事内容が 根本的に異なる ため、 新しいカリキュラム が必要

新しい6.001の特徴とPython採用の理由

  • 新6.001は ロボット制御 を中心に設計
  • 学生は 小型ロボット をプログラムし、 移動制御 を行う課題
  • ロボットは 抵抗器のような理想的な挙動 をしない
    • 車輪の滑り環境変化 などの不確実性
    • システムに ロバスト性 を組み込む必要性
  • こうした課題は SICP (Structure and Interpretation of Computer Programs)で議論されている内容とは異なる
  • Python 採用の理由: ロボットインターフェース用ライブラリ が既に実装されていたため
    • 特別な思想ではなく 実用的な選択

まとめ

  • 時代の変化 により、 教育内容 も進化
  • ロボット制御 を通じて、 現代的なプログラミング の本質を学ぶカリキュラム
  • Python既存ライブラリ の利便性から選択

Hackerたちの意見

ガテックでは、昔はSchemeをコンピュータサイエンスの入門コースとして教えてたんだよね。講義中に、関数を関数に渡してそれを変更できるって教授が言ったとき、機能型プログラミングの意味に衝撃を受けたのを今でも鮮明に覚えてる。2年生のときに先生がLOGOで複雑そうな虹の花を見せてくれた瞬間と同じくらい、心に残る瞬間だったな(彼女は数少ないカラーマッククラシックの持ち主だった)。花びらのパスを描く作業をして、その後に2つの値(開始角度と色)を変えて同じ「作業」を繰り返すだけだったんだ。

これがもう通用しないかもしれない。私が最後にスキームで入門CSを教えたときのエピソードをはっきり覚えてる:ファーストクラス関数を紹介した後、クラスで一番優秀な子が私のところに来て、「何が大したことなの?Pythonでもできるじゃん。」って言った。

それは、2年生の時に先生がLOGOで本当に複雑に見える(当時はね)虹の花を見せてくれた瞬間と同じくらいの formative な瞬間だった。彼女は数少ないカラーマッククラシックの一つを持っていて、ただ一つの花びらの道を描く作業をして、2つの値(開始角度と色)を変えた後に同じ「作業」を繰り返すだけだって教えてくれた。小学校でLogoを学んでいる時に再帰の概念を理解した瞬間の感動もよく覚えてる。最近数年間、主に書いてきたコードがEmacs Lispなのは、上の瞬間と無関係ではないと思う。

私は古いSchemeカリキュラムの最後の世代の学生の一人だった。大好きだったよ!すべてのループが再帰でできることや、副作用が何かを理解したとき、コンピュータサイエンスに恋に落ちたんだ。新しい、そして今はさらに新しいカリキュラムについて良い話を聞いたけど、Schemeがなかったらあの目覚めはなかったと思う。SICPよ、安らかに --- ちなみにもう一つ面白い話があるんだけど、テストのときに1ページの参考ノートを持ち込むことが許可されてたんだ。で、全てのScheme仕様を圧縮すれば両面に収まることがわかったんだ。だから、友達が冗談半分でテストにSchemeの仕様書を持って行って、すべての質問に答えられると思ったんだ!

全てのScheme仕様を圧縮すれば両面に収まることがわかった これはR4RS以前の話だけだと思うよ。十分に圧縮すれば、「戦争と平和」を1ページに収めることもできる。

MITのプログラマーと一緒に働いたことがあるんだけど、彼はSchemeのカリキュラムを自慢してたんだ。でも、実際には一緒に働いた中で一番ダメなプログラマーだった。彼はClojureが大好きで、Pythonの文法についてずっと文句を言ってた。結局、彼の手作りのDatomicベースのシステムが却下されて、突然辞めちゃった。変わった教え方が優位性をもたらすって考えるのは罠だと思う。自分が他の人よりも賢いと思ってる人と働くのは本当にイライラするよ。

これは、コンピュータサイエンス学科がコンピュータ工学を教える方向にシフトしているという、より広いトレンドの一部じゃない?それは、大学がより職業訓練的になっているという一般的なトレンドの一環でもあるし。SchemeのようなLISP方言は、純粋なコンピュータサイエンスを教えるのに最適だよ。なぜなら、ラムダ計算の式を実行するのに最も近いから。一方で、Pythonは応用コンピュータ工学を教えるのに優れている。なぜなら、基本的に命令型言語の実行可能な擬似コードだからで、命令型言語はコンピュータエンジニアが現実世界で最もよく遭遇する言語なんだ。

そうだね。コンピュータサイエンス学科が学生からよく受けていた不満の一つは、雇用主が使っている言語を学んでいないことだった。

機能型言語は、命令型言語よりもコンピュータサイエンス的なのかな?

コンピュータ工学は独自の分野で、通常は電気工学と一緒に扱われるけど、システムアーキテクチャやデザインに関することが多くて、プログラミングはデバイスのファームウェアみたいな低レベルの部分にしか触れないんだよね。あなたが本当に嘆いているのは、CS教育が職業的なプログラミングに退化していることだと思う。

大学がより職業的になっているのは、学生にとって大学の費用が高くなっているからだよね。そんなにお金を払って大学に行くなら、いい仕事を得るべきだと思う。これは必ずしも悪いことではないけど、研究に進みたい人のためにもっと良い道があればいいなと思う。SML(またはその派生物)が、ラムダ計算や型理論の観点からも、より良い教育用言語になると思うんだよね。

CS学科でこういう切り替えが起こっていたとき、大学院生として私はエリートCS機関での入門クラスでSchemeからPythonに切り替えることを提唱する「運動」の一部だったんだ。(他にも学際的な研究を重視していたけど、それはまた別の話。)当時の私の理由は、1. 広く使われているツールや実践は、学部生が計算について学ぶモチベーションを高めるフライホイールの役割を果たすから。Schemeを学んでも、結局Schemeを学んだだけなんだよね。でも当時Pythonを学んでいれば、PythonのシステムやソケットAPIを使ってラボや個人のLinuxシステムで遊ぶことができた。ウェブの方では、web.pyやFlask(あはは、これは2000年代後半から2010年代初頭の話)で自分を奮い立たせることができた。学生は夏にアプリやツールを作って、計算の「美的」な魅力以上の価値を理解できるようになるんだ。この頃はCS自体があまり権威がなくて、給料も今ほど高くなかったから、SchemeやMMIX、LC3に頭をぶつけていた人たちはEEや機械工学の学科に流れていった。2. 大学院生として、ほとんどのクラスをふるい落とす試験問題を作るのはほぼ簡単だった。特にSchemeが教えられる入門クラスではね。厳密さが問題なら、他の方法でその厳密さを保つのはとても簡単だった。3. 良くも悪くも、多くの学部生は大学院に進むつもりがなくて、私たちのクラスを受けている学部生の中にはコンピュータサイエンスの学生じゃない人も多かった。彼らは電気工学や産業工学の学生で、自分の分野で自動化するために十分なプログラミングを学びたいと思っていたけど、実際の専門分野にもっと興味があったんだ。この数年で私の考えは進化したけど、当時の信念は今でも変わらない。今のPythonの普及を考えると、ますますそう思う。

「コンピュータ工学」は職業的なものじゃないよ。ハードウェアの理論と応用を含む全体のサブスペシャリティなんだ。「プログラミング」は、伝統的には学術カリキュラムの範囲外だった職業的なシフトだよ。期待される結果を出す再現可能なプロセスがなければ、何もエンジニアリングしていないんだ。プログラミングだけではその基準を満たさないよ。

WGUの「コンピュータサイエンス」の修士課程を修了したばかりなんだけど、「コンピュータサイエンス」と言うのはちょっと怖い意味を込めてる。というのも、アルゴリズムとデータ構造のコースとAIのコース(これは非常に高レベルだった)以外は、純粋にエンジニアリングの内容だったから。一つの課題ではAWSを使って何かをデプロイしたり、作成できる「アプリ」のワイヤーフレームを設計したり、HTTPサーバーを一つ書かなきゃいけなかった。ちょっと楽しかったし、早く終わらせられたのは良かったけど、これを「コンピュータサイエンス」と呼ぶべきじゃない。ソフトウェアエンジニアリングと呼ぶべきだと思う。ソフトウェアエンジニアリング自体は悪くないけど、CSとは異なるけど関連していると見ているんだ。

スキームから始めるのは馬鹿げてると思う。Pythonを知ってるけどスキームを知らない卒業生は、コンピュータサイエンスで何かできる可能性がある。スキームを知ってるけどPythonを知らない卒業生は、技術的なレベルでコンピュータを使うことが基本的にできない。選択肢は「Python」か「スキーム + Python」のどちらかだけだ。(もちろん、その時点で自分でPythonを学ぶこともできるけど、自己学習の話をしているなら、全カリキュラムと両方の言語を自分で学べるから、ここでの議論は大学が学生に何を学ばせるべきかということだ。)

Pythonは応用コンピュータ工学を教えるのに優れているけど、基本的には命令型言語の実行可能な擬似コードだからなんだよね。そんなに単純じゃなくて、Pythonは細かくて複雑な高級言語で、非常にアドホックな方法で機能が増えてきたんだ。これが、実際の厳密さにちょっとでも注意を払う方法で教えたり学んだりするのを非常に難しくしている。たぶん、Schemeと同じくらいシンプルで厳密に定義された「ベビーパイソン」のサブセットを作って教えることはできるけど、今のMITの入門コースはそんな風には設計されてないんだよね。

Pythonは応用コンピュータ工学を教えるのに優れているけど、基本的には命令型言語の実行可能な擬似コードだからなんだよね。Pythonはかなり良いマルチパラダイムのサポートを提供していて、SICPの多くの重要な概念を探求するのに絶対使えるよ(確かに、Lisp系のようにメタプログラミングができる言語はないけど、他の言語でASTを操作するには追加のステップが必要だからね)。特に、Pythonのオブジェクトモデルには関数が含まれているから、高階関数も可能だし(実際、mapは組み込み関数で、reduceは以前の組み込みから標準ライブラリに降格されたんだ)。今はもちろん、型ヒントをコードに散りばめるのが流行ってるけど、これは教育的なアプローチにはちょっと邪魔になるね。でも、完全にオプションだし、実行時にはほとんど影響がないから、無視しても全然大丈夫。

最後の文がポイントだったね:じゃあ、なぜPythonなのか?サスマンが言うには、おそらくロボティクスインターフェース用にすでにライブラリが実装されていたから、それだけなんだ。これがPythonの強さの本質・・・エコシステムなんだよね。エンジニアリングが半分文書化されたおもちゃを、大量のパッケージの中から推論しようとする技術になっているというコメントは、この移行のリスクと挑戦に関してまさに的を射ている。

Schemeからの移行はいつも悲しかった。6.001で最初に学んだのは抽象化と不変性だった。これらは良いソフトウェアを書くための核心なんだ。今でも毎日この原則を使ってる。Schemeには純粋さがある。週末に誰でも学べる美しい軽量言語なんだ。魔法のようなことは何もしてくれないから、欲しいものは自分で作らなきゃいけないし、どうやってそれが組み合わさるのかを理解しなきゃならない。

同意する。私はスキームを教わったし、後に教えたこともある。Pythonよりもコンピュータサイエンスを教えるのにずっとクリーンで適した言語だった。学生は学期の終わりまでにその言語とその動作を完全に理解できた。スキームは数学に近いから、コーディング経験のない強い数学者を教えるのに適していた。それに、ハッカーたちをより厳密にし、「これをやって次にあれをやる」という命令的な考え方から彼らの思考を広げることにもつながった。スキームを最初に教わった人たちと、Pythonを最初に教わった人たちの間には顕著な違いがある。もちろん、どちらもその後PythonやFPなどを学ぶことができるけど、その基礎がなければ、ほとんどの人にとって本当に素晴らしいコーディングを教えるのは難しい。

これは単なる入門言語で、CSプログラムにいるなら、絶対にもっと高度な言語に進むからね。Pythonに切り替えるのは理にかなっているよ、Schemeよりもずっと普及していてアクセスしやすいから。Schemeは商業ソフトウェア開発では広く使われていないけど、学術界ではまだ存在感がある。Pythonは両方で強い存在感を持っている。一方で、Pascalが私の「入門」プログラミング言語だったけど(その時点でBASICはかなりよく知っていた)、私のプログラムではそれだけじゃなかったよ。Perl、Prologue、C、C++などもやった。プロのソフトウェア開発キャリアでは、これが最後の言語になることは絶対にないよ。

これはこの分野の多くの亀裂の一つで、一般的な議論を難しくしているんだ。自分を「Xプログラマー」と考える人(YやZも含めて)や、そういう人を探しているマネージャーや企業がいる。一方で、自分をソフトウェアエンジニアだと思っている人たちもいて、言語はあまり重要じゃない(そういう人を雇う企業も)。この二つのグループが互いに話が噛み合わないことがよくあるよね。

でもこれが問題なんだ。私たちの一流の学術機関は、大手テック企業のための職業訓練プログラムとして存在するべきじゃない。むしろ、テクノロジーは大学の中ではまだマシな分野の一つだと思う。歴史や文学のプログラムを見れば、これがどこに向かっているかがわかる。最近の文学専攻の学生は、ほとんど本を読まないんじゃないかな。50年前には、週に何百ページも読むことが求められていたのに、4年間ずっと続いていたんだ。正直言って、もし大学がただの社会的シグナルのために学位証明書を印刷するだけなら、今すぐ大学を閉じた方がいいと思う。

スキームでの入門コースを受けたおかげで、コンピュータサイエンスについてたくさん学べたよ。キャリアの中で役立った概念がたくさんある。Pythonではなかなか表現できないし、理解も難しいと思う(Pythonは大好きだけど、ほとんどのプロジェクトや個人のコーディングはPythonでやってる)。

この話は何度も再投稿されてるけど、GJSのコメント(Andy Wingoが記録したもの)は相変わらず面白いね。でも、MITが「スキームからPythonに切り替えた理由」を説明するにはあまり良いアカウントじゃないと思う。ソース:GJSと一緒に働いたことがあるし(Alexeyも知ってるし、Andy Wingoにも会ったことがある)、6.001を受講した。今の研究でも定期的にSICPを参照してるし、2006年にはKaijen Hsiaoと一緒に、Leslie Kaelbling、Hal Abelson、Jacob Whiteが教えた、実質的にそのクラスを代替する最初の提供(6.01)のTAをやった。ストーリーをよく知ってる人に委ねるけど、私の理解では歴史はこうだ。1980年代にMITのEECSの入門カリキュラムが再設計されたとき、「EECS教育は4つの『深いダイブ』から始まるべきだ」という理論があった。4つの15単位のコースがあって、それぞれがこれらの「言語」の一つについてだった:- 6.001: コンピュータプログラムの構造と解釈(「手続き型」言語、AbelsonとSussmanが指導) - 6.002: 回路と電子(「構造型」言語) - 6.003: 信号とシステム(「関数型」言語) - 6.004: 計算構造(「アーキテクチャ型」言語) これらは知的に深いクラスだったけど、痛みもあったし、みんなに愛されていたわけではなかった。6.001はスキームについてのものではなかったと思う。スキームを使う目的は、言語が非常にミニマリストで美しいから、最初の入門コースでも言語に気を取られずにコンピュータサイエンスの基本概念を学べることだと思ってた。この入門シーケンスは2000年代中頃まで続いたけど、ドットコムバブル崩壊後にEECS(「コース6」)の入学者数が減少して、(予想通り、特に心配だったのは)EECSが保持したいと思っていた人口層の間での減少が大きかった。2005年頃の私の理解では、EECSの応用が広がったという見方があって、4つの「深いダイブ」から始まるカリキュラムは、EECSを追求したいかどうか確信が持てない学生にとっては魅力がないとされていた。彼らはその教育で行けるクールな場所(ロボティクス、グラフィックス、バイオメディカル、ゲノミクス、コンピュータビジョン、NLP、システム、データベース、ビジュアライゼーション、ネットワーキング、HCIなど)を知らなかったかもしれない。私はその決定が行われた部屋にはいなかったし、これらの変更には複数の動機があったと思うけど、それが考えの一部だと理解していた。その結果、EECSのカリキュラムは2005-2007年頃に再設計され、4つの15単位の「深いダイブ」を強調しない形に変更され、EECSが行けるクールな場所を網羅した2つの12単位のサーベイコースに置き換えられた。「6.01」コース(Kaelbling、Abelson、Whiteが指導)はロボット、制御、センシング、統計、確率的推論などについてで、学生はロボットが迷路を走り回り(未知の位置からスタート)、小さなソナーセンサーで壁を感知し、ベイズ推論を使って構造や位置を把握するプロジェクトを行った。「6.02」コースは通信、情報、圧縮、ネットワーキングなどについてで、最終的には学生がそれぞれソフトウェアラジオを手に入れてWi-Fiのようなシステムを構築する予定だった(ソフトウェアラジオは難しかったし、ずっと後になって、私はこれを音響モデムプロジェクトにする手助けをした)。これらのクラスの目標は、EECSができるクールなことの幅広い範囲を学生に見せて、早くそこに到達させること(例えば、4つのクラスではなく2つのクラス)だった。これはドットコム崩壊の後で、多くの人が学生に「コンピュータサイエンスを専攻したら、保険会社のキュービクルファームでプログラミングすることになる」と言っていた時期だった。6.01はPythonを使ったけど、6.001がスキームを「使った」のとは全然違う使い方だった。私の記憶では、6.01のプログラミング作業(少なくとも2006年頃)は最小限で、例えばロボットを動かしたり、ソナーセンサーからの読み取りを平均したり、操縦の決定をしたり、ロボットの位置を推測するための短いプログラムを実装する程度だった。6.001の大きなプログラミングプロジェクト(OOPの仮想世界やメタ循環評価器など)とは全く違っていた。だから、MITが「スキームからPythonに切り替えた」と言うのは本質を捉えていないと思う。MITのEECSの入門シーケンスは、4つの深いダイブクラスから2つのサーベイクラスに切り替わったし、最初の「深いダイブ」コース(6.001)は多くのプログラミングを含んでいたけど、新しいサーベイコースの最初は、学生がかなり小さなプログラム(例えば「ロボットを動かして、2つの壁の間の距離を均等に保つ」)を書くことだけだった。必要な情報の少ない部分は、例で教えられるスクリプト言語を使うのが一番簡単だった。でも、そのクラスで学生がPythonを学んだわけではない。私の(あまり現在の)理解では、>この2006年頃のカリキュラム変更から10年以上経った今、学科はEECSのコアカリキュラムの考え方をほぼ廃止していて、MITのCS学部生は今や他のCS学部と同様の一般的なCS0/CS1シーケンスを受けている(https://www.eecs.mit.edu/changes-to-6-100a-b-l/)。でも、これはSussmanとWingoがここで話している変更からはずっと後のことだ。

この詳細な説明ありがとう。ちょっとオフトピックなサイドクエスチョン:>学生はそれぞれソフトウェアラジオを手に入れてWi-Fiのようなシステムを構築する予定だった(ソフトウェアラジオは難しかったし、ずっと後になって、私はこれを音響モデムプロジェクトにする手助けをした)。ソフトウェアラジオが難しかった理由は何だったの?

このコメントは明らかにhttps://news.ycombinator.com/highlightsに載るべきもので、これを機にそのサイトが存在することを言及するのもいいかも。ありがとう!(オフトピックでごめんね)

MITの「単位」を3で割った数が、他のアメリカの大学の単位になる。3、4、5単位はそれぞれ9、12、15単位に相当する。一般的に15単位には実験時間が含まれるけど、純粋な実験クラスもある。単位は週あたりの授業時間で、単位は授業時間に宿題を加えたもので、実際にはそれ以上の宿題があるというのが実情。

歴史を教えてくれてありがとう!当時は学部生で、6.001と6.01の選択肢があったのを覚えてる。まだ正式にコース6に切り替えてなかったと思うし、切り替えた時には6.01しか選べなかったな。

15単位のコースが4つあって、それぞれがこれらの「言語」の一つについてだったんだけど、君の説明はちょっと変に感じるな。Lisp系の言語はマルチパラダイム(言ってしまえばパラダイムに依存しない)で、「手続き的」とは呼べないと思う。SICPの核心的な内容は、プログラミング言語が提供する「結合の手段」と「抽象の手段」を考えることに関わっていて、これは「手続き」よりも「構造」や「アーキテクチャ」、「機能性」にもっと関係しているように思う。

この歴史を教えてくれてありがとう、すごく興味深い!その理由はわかる気がするけど、6.001を楽しみで受けた経済学専攻の私としてはちょっと悲しいな。あのクラスは本当に頭が混乱するくらい面白かった。

こんにちは、Keith!もう一つの考慮事項は、基本的なプログラミングスキルをコース6の学生だけでなく、ほぼ全員に教える必要があったことだよ。ソース:私はHalとGerryの隣のオフィスでKeithと一緒に働いてた—彼がJavaを教えてくれたんだ!面白いエピソード:RMSの物を新しいCSAILビルに移動しなきゃいけなかったのは、彼が壁をパンチして腕を骨折したからなんだ。

経済学が何を教えるか、どう教えるかにおいて、教育的な動機と同じくらい、いやそれ以上に重要な役割を果たすことを思い出させてくれるね。出席が減ると、大学は方針を変えられるからね。とにかく人を座らせなきゃ。20年前、Ciscoはオーストラリアでマイクロコードができる電気工学の卒業生を探してたんだ。アメリカの大学は、ほとんどの仕事のためにエッジケースをコーディングする方法を教えるのをやめてしまって、ルーターやスイッチのベンダーはまだそれをやっている場所を探さなきゃいけなかったんだ。

「じゃあ、なんでPythonなの?まあ、サスマンが言うには、ロボティクスインターフェース用のライブラリがすでに実装されてたから、それだけだろうね。」私はレスリー・ケールブリングと同じ「ヌーベルAI」/ロボティクスのグループ出身だった。当時のAIにおける自律ロボティクスはかなり小さなコミュニティで、みんな(少なくともNATOやその友達)は会議やワークショップで顔見知りだった。その頃、そういうロボットシステムのカーネルやインターフェースライブラリを書いてたから、言語選択を決めるのに問題になるほどの労力ではなかった。コミュニティにいた時の私の無知な推測では、教育が物理的な基盤、制御パラダイム、システムに焦点を当てていて、「世界は自分自身の最良のモデル」とか、以前の象徴的推論システムに対する反発があったから、Scheme/Lispは象徴的パラダイムのアイコンだったから排除されたんじゃないかな。そして、新しい「サブシンボリック」の世界では、基本的にデータ/信号の流れやセンサーからアクチュエーターへの相互結合された層状の微分方程式しか見てなかったから、プログラミング言語には全く注目してなかったんだ。

その学部はEECSのコアカリキュラムのアイデアをほとんど廃止してしまった。私の視点からすると、悲劇だね。

良いコンピュータサイエンスのプログラムは、学生にいろんな言語を触れさせて、それぞれが正当な理由で異なることを教えるべきだと思う。今やいろんなパラダイムがあって、言語の歴史も豊かだからね。Schemeの問題は、学問の世界以外ではほとんど関係がないことだ。学生にいろんなやり方があることを教えるための練習としてはいいけど、それだけじゃちゃんとしたコンピュータサイエンティストやソフトウェアエンジニアにはなれないよ。Pythonはその便利さから知っておくべき言語だけど、関数型やオブジェクト指向プログラミングを教えるにはあまり向いてない。実際、そういう概念を教えるには別の言語を使った方がいいと思う。私が勉強してた頃は、GoferやSmalltalkがそうだった。GoferはHaskellの方言/前身で、Haskellはすでに存在してたけど、まだ一般的ではなかった。Schemeは90年代初頭にはすでに古い話だった。私は1995年の夏に2年生としてJavaを学んで、1年生に教える準備をしてた。私の大学はそんな感じで進歩的だった。1年生の時にCを学んで、翌年にはC++に切り替わった。4年生の時にはProlog、Java、Delphi、C、C++、Gofer、Smalltalk、Modula、Pascal、Lisp(いろんなバリエーション)などに触れて、他にもいくつか忘れちゃったものがある。素晴らしいコースの一つではUNIXのコマンドラインについて教わった(当時は主にHP UNIXで、少しSolarisも)。パイプやフィルター、正規表現、AWKなどについてね。いろんなコースで異なるツールや言語に触れられた。エキスパートシステムやベイジアン信念ネットワークについてのコースも受けたけど、それにはそのためのLisp方言を扱う必要があった。これらのコースを教えてた人たちもちゃんとした研究者だったし、彼らは自分たちが使うものをそのまま使ってた。私はその時は完全には理解してなかったけど、ユトレヒト大学には素晴らしいコンピュータサイエンスの学部があって、素晴らしい人たちがいた。私は後にマイクロソフトやFacebookに参加し、F#やLINQなどを作った若くて熱心なエリック・メイヤーから関数型プログラミングを学んだ。

1980年、優れたプログラマーは多くの時間を考えることに費やし、その後、うまくいくと思われる余分なコードを生み出していた。…でも、今のプログラミングはそんな感じじゃないよ、とサスマンは言った。今では、誰が書いたかわからないソフトウェアの理解不能なマニュアルページや存在しないマニュアルをいじくり回すことが多い。ライブラリがどう機能するかを調べるために基本的な科学をやらなきゃいけなくて、いろんな入力を試してコードがどう反応するかを見る必要がある。最近の人たちはこんな風にコードを読むの?私はずっとコードを読むのが苦手だけど、書くのは得意なんだ。データサイエンティストだから、その理由もわかる。キャリアを通じてたくさんのコードを読む必要がなかったからね。この話題はちょっと怖いな。彼の説明はもっと怖い。