SICPと、6.001の話

調べていたところ、「弱LisperがMITでSICP(シクピー)を受講した結果」( http://qiita.com/kaz-yos/items/d1ecd4bfe9989c290e99 )というQiita記事を見つけたのでリンクしておきます。噂の(?)SICPを懐かしむチューターたちによって実施されている特別授業に潜り込んだ(?)方によるレポートです。

本題の、以前はSICPだった授業である6.001が、どのようになぜ変わったか、という話がこちらのページ( http://wingolog.org/archives/2009/03/24/international-lisp-conference-day-two )にあるのですが、その部分だけ訳してみます。

本文のなかほどの「The "debate" had an interlude, in which Costanza asked Sussman why MIT had switched away from Scheme for their introductory programming course, 6.001.」という所から始まっていますが、そのちょっと先、because〜 から。

because engineering in 1980 was not what it was in the mid-90s or in 2000. In 1980, good programmers spent a lot of time thinking, and then produced spare code that they thought should work. Code ran close to the metal, even Scheme -- it was understandable all the way down. Like a resistor, where you could read the bands and know the power rating and the tolerance and the resistance and V=IR and that's all there was to know. 6.001 had been conceived to teach engineers how to take small parts that they understood entirely and use simple techniques to compose them into larger things that do what you want.

なぜなら、1980年代のエンジニアリングは、90年代中頃や2000年代のそれとは違ったものだったからだ。1980年代には、良きプログラマは思考に時間を掛け、そしてそれが働くべきと考えられる簡潔なコードを作った。コードは金物の近く(close to the metal)で走っていた、Scheme でさえ -- それは全て理解可能だった。例えば抵抗器のように。抵抗器はカラーバーを読むことができ、電力と許容差がわかり、抵抗値がわかれば V=IR それが全ての知るべきことだ。6.001 はエンジニアに、全てがわかっている小さいパーツをどのように扱い、シンプルなテクニックを使ってそれをどのように望むことをする大きなものにまとめ上げるか、を教えるためにあった。

But programming now isn't so much like that, said Sussman. Nowadays you muck around with incomprehensible or nonexistent man pages for software you don't know who wrote. You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts. This is a fundamentally different job, and it needed a different course.

しかし今のプログラミングは全くそのようなものではなくなっている、とサスマンは言った。こんにちでは、知らない誰かが書いたソフトウェアの、不十分だったり存在しなかったりするman pageと格闘しなければならない(訳注: ここでman pageを悪い例っぽく挙げているのは「The Rise of “Worse is Better”」のMIT/New-Jerseyの対立っぽい感じがある)。使おうとするライブラリに対して、異なった入力に対しコードがどう反応するかを確かめてみて、それがどう働くかを見る「基礎科学」(basic science)をする必要がある。これはファンダメンタルに違うジョブであり、違うコースが必要なのだ。

So the good thing about the new 6.001 was that it was robot-centered -- you had to program a little robot to move around. And robots are not like resistors, behaving according to ideal functions. Wheels slip, the environment changes, etc -- you have to build in robustness to the system, in a different way than the one SICP discusses.

And why Python, then? Well, said Sussman, it probably just had a library already implemented for the robotics interface, that was all.

新しい 6.001 の良いことは、ロボットを中心に据えたことだ -- 小さなロボットを動き回らせるようプログラムしなければならない。ロボットは、理想的な関数の通りに働く抵抗器のようではない(are not like)。車輪はスリップするし、環境は変化する、など -- システムにロバストネスに構築しなければならず、それは、SICPが議論しているのとは違ったやり方だ。

そして、なぜPythonか。それはたぶん、単に既にロボットのインタフェースのためのライブラリが実装されてあったこと、それが全てだ。