2016-05-05

MITがSICPを教えなくなった理由

Programming by poking: why MIT stopped teaching SICP | posterior science

このNYC Lisp meetupの動画で、Gerry Sussmanに対する質問として、SussmanとAbelsonの古典、The Structure and Interpretation of Computer Programs(SICP)に基づく、伝説的な6.001講義をなぜMITはやめたのかと聞かれている。

Sussmanの回答としては、SussmanとHal Abelsonは1980年代から延々と教え続けるに嫌気が差し、1997年に、学部長の事務所に行って、「俺らはやめる。後どうするからは勝手に考えろ」と宣言した。より重要なこととしては、SICPのカリキュラムは、今日のエンジニアリングに求められるエンジニアを育てることができないからである。1980年代と1990年代には、エンジニアは複雑なシステムを組むのに、単純で十分に理解されている部品を組み合わせた。SICPの目的は、そのようなシステムを理解するための抽象的な言語を提供することだ。

今日では、状況が変わっている。今のエンジニアは、自分が完全に理解していない複雑なハードウェアのためのコードを日常的に書いている(そして、大抵の場合、企業秘密により完全に理解するのは不可能である)。ソフトウェアでも状況は同じだ。プログラミング環境は、多大な機能を提供する巨大なライブラリ群の集合として存在している。Sussmanの今日の生徒は、その時間の大半を、ライブラリのマニュアルを読み、どのように組み合わせれば目的が達成できるのかを把握することに費やしている。Sussman曰く、今日のプログラミングは、「より科学に近い。ライブラリを持ち寄って、つっつき回すのだ。プログラムを書くには、突っつき回して、どのように動作するかを観察する。そして、「目的を達成するために改造できるか」と考えるのだ」。SICPの「合成による解析」という物の見方である、小さな、単純な部品を組み合わせて大きなシステムを作るということは、もはや今日の状況にそぐわなくなった。今や、我々のプログラミングはつっつき回すことで行われている。

なぜPythonを選んだかということについて、Sussmanは、"late binding"に決定したと冗談を飛ばした。Pythonには大量のライブラリがあり、教育者の様々な実習に使いやすい(たとえば、ロボットを制御するソフトウェアを書くなど)

Sussmanは、SICPカリキュラムは現在のカリキュラムより洗練されていると考えているものの、正しいカリキュラムのあり方についてはまだ答えが出ていないという。

たしかに、今のプログラマーは、ハードウェアの仕様書を元にを直接操作するコードは書かないし、OSを実装していないし、コンパイラーも実装していないし、古典的なアルゴリズムやデータ構造さえ自分の手で書く必要がなくなっている。ライブラリが発達してその必要がなくなったためでもあり、また個々の機能があまりにも高度になりすぎて、到底一個の人間の手に負える作業量ではなくなったということもある。

不自由なハードウェア、ソフトウェアが蔓延してその詳細がわからなくなり、また自由なソフトウェアであっても、その内容が複雑になりすぎ、一つ一つ完全に理解するには時間が足りなすぎる。

何にせよ、平均的なプログラマーが実現できる機能は昔よりはるかに複雑になっていることは確かだ。

20 comments:

  1. それだけにオーダーの計算が甘いということですよね。
    3Ghzで動くコンピュータが遅いわけがないのに、まだ強欲にも処理能力を要求する。
    レイヤー重ねすぎなのですが、それを覆す決定権のない人は悲惨です。

    ほんと3Ghzで動くコンピュータが遅いってやつにPC98のベーシックで開発させたくなります。
    N88BASICは偉大でした。

    ReplyDelete
  2. Pentium 4ぶつけんぞ!

    ReplyDelete
  3. >3Ghzで動くコンピュータが遅いわけがないのに、まだ強欲にも処理能力を要求する。
    トマト姫とか一つの画面描くのにすらちんたら描いてたじゃねーか

    ReplyDelete
  4. ここまで老害なコメントだといっそ清々しいな
    余生はずっと古典BASICで閉じこもってろよ
    頼むから外にでてこないくれ

    ReplyDelete
  5. 老害というのは権力があってこそなんで、
    現状を愚痴ったくらいでそんなことを言われる筋合いはないと思う。

    ReplyDelete
  6. 言ってる内容が害だって話なのに、なんで権力が関係あるんだろう?

    例えば老害と同じ内容を、若い人が言ったとして
    老人じゃないから問題ないとは思わないでしょう?

    権力がなくても老害は老害なわけでw

    ReplyDelete
  7. もはや「老害」も歴史的な言葉ということですかね。
    「助長」や「敷居が高い」並の。

    ReplyDelete
  8. ユーザーの時間はプログラマの時間より貴重だが、それよりも早くリリーススリことが大事だししかたない

    ReplyDelete
  9.  責任をユーザーに求めるようになったお気楽な職業のプログラマーですから、金儲けするには一番の職業ですね。

    ReplyDelete
  10. いろいろな環境が複雑に絡み合っているのが現在の状況である。
    そしてそれをすべて把握することは困難かつ不合理である。
    って記事じゃないの?
    それなのに全責任をプログラマが負えと言うなら、何も出来ない気がするけどね。

    例えば家を建てる大工が原料全てに責任をもつかな?
    農家が作った野菜に、市販の変な肥料使っていて問題になった時に農家が全責任を負うかな?
    会社を作った社長が全社員・全商品の責任を本当に持ってるかな?
    これ全部絶対に守れなんて現実的なじゃないと一緒で、プラグラマの責任を過度に求めるのは生産性を下げる。
    こんなガッチガッチなこと言ってるから日本のIT活用なりは遅れてビジネス的にも負けまくっているんじゃないかな。

    もっとエンジニアが広く視野を持って、やりたいことやるべきことを自由に積極的にやるべきだと思う。
    でもプログラム義務教育化で今までの古臭い枠なんて無視されるようになるだろうねきっと。

    ReplyDelete
  11. 愚痴ったくらいで何が「害」なんだかw

    ReplyDelete
  12. これは害悪ですわ。自覚がないのが何より害

    ReplyDelete
  13. 計算量のオーダーくらい把握してデータ構造やアルゴリズムを選べって話がなんで老害なのか分からないから教えて欲しい。

    N88BASICは偉大でしたって部分にみんな反応してるのかな?
    そこは元々遅い8bitマシンをますます遅くさせる処理系のおかげで、計算量を考慮せざるをえなかったという話だと思うけど、まあそこは確かに老害部分かもしれんなあ。
    当時のBASICを偉大だったとは思わないし。

    ReplyDelete
  14. よく分からないんだが
    なんで"3Ghzで動くコンピュータが遅いってやつにPC98のベーシックで開発させたくなる"の?

    ReplyDelete
  15. 全部が全部そうじゃないけど、3GHzで動くコンピュータで遅いプログラム書くような奴の9割方は、まず間違いなく非効率なアルゴリズムを選択しているだろうし(選択しているというよりは何も考えてなくて結果的に非効率なアルゴリズムになっているというのがより正確な表現)、N88-BASICの場合、速度が現代的な環境の千万分の1くらいで目茶遅いので、そういう効率の悪いアルゴリズムとか使ってると全く使い物にならないから嫌でも勉強するようになるんじゃないかって理屈でしょうね。まあ実際にはそんなことは無理だってのはさすがに分かって書いてる筈。

    N88-BASIC(86)じゃなくてN88-BASICとあるから、素直に読むとPC-9801じゃなくてPC-8801ってことかもね。

    ReplyDelete
  16. 「BASICは偉大だった」は老害染みてるけど、前半はその通りのことしか言ってないでしょ

    ReplyDelete
  17. 何度読み返しても後半が意味不明なのは確か。
    老害かどうかは知らないけど。

    ReplyDelete
  18. すげえ、お前ら本文の話一つもしてないな!
    #1がAPI出したらみんなそれに習うんだな!
    感心したわ

    ReplyDelete
  19. コメントを見ると第二のスラドだ
    #名前を晒したくないのでAC

    ReplyDelete
  20. 現実を見るとSussmanと同じ気持ちといいますか、考えに賛成です。

    サクッと作って、サクッと動かして、
    学生たちが「面白い!」と言ってくれるのが楽しい。

    学生は面白ければいいんです。
    プログラマになるわけじゃないので、
    その場その場で楽しいことをやればいいのです。

    そのためにはPythonの膨大なライブラリを使って、
    げームや機械学習など表面的にすぐに結果のでることを教えるのが最もいいのです。

    学生に基礎から教えようとすると大変です。
    学生が理解できないし、興味を持てないし、何も勉強できない
    ということになってしまうのです。

    Pythonでライブラリの使い方をちょっと教えるだけで
    お互いに楽しく授業ができて、興味をもてって学習してもらえるので、
    Pythonで教えるのが最もいいと思います。

    これをママゴトだと言って非難している人がいますが、間違いです。
    誰だって子供のころのママゴトからスタートするのですから。

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.