プログラミングの対象となるモデルと人間の脳みその能力の乖離

Data Structures Considered HarmfulWhy OO Sucks
2番目の記事にはてブコメントをつけようとしてスペースが足りなかったので、ここにメモ。以下、超与太話。
ポイントは、

  • なぜ僕らはオブジェクト指向をありがたがるのか
  • なぜRubyは書きやすいと感じるのか(残念ながら、Rubyをもってしても自分はコードが書けないダメなやつであるが)
  • なぜデータ構造とアルゴリズムの結びつきを本質的だと感じるのか

思うに、僕らの脳みそがそういう風にできているからなんではなかろうか。
僕らの脳みそに処理できる5(7)±2のワークエリアのサイズや記憶の構造(歌のようにシリアライズされた経験の蓄積とその結びつき)が、

  • すべてはモノ(object)だ、というover simplificationをありがたがる
  • アヒルを作るためには、アヒルっぽいと思いついた機能を実装することしかできない(公理的にきちんとした定義が無い「モノ」を実装するなら、思いつかない機能なんて実装できないから、そりゃ当り前なんだけどね)
  • 型の定義を一時記憶に置いて、assertionを実施しながらの思考という負荷を嫌がる
  • 機能の還元をどんどん深くしていく関数型思考のスタック構築処理によって簡単にオーバーフローしてしまう
  • stateを抱え込むモノというblack boxに、当面実装できないごたごたを詰め込んでしまって、見えている世界をシンプルにしたくなる
  • 頭の中のデータモデルやアルゴリズムのモデルがとてもvolatileなので、その一部をすぐにデータ構造にcompileしてしまう必要がある。

といった現象を「引き起こしてしまう」のではないか。

関数型プログラミングの還元的分析やimmutableなデータを扱うとか、型付けをきびしくするとか、それ自体はプログラムを正しくする*1のに有効、というか必須だと思うのだが、残念ながら脳みそはそういう処理に向いていないし、脳みそに向いていない処理を人間は行おうとしない。
というわけで、現実に利用されるプログラミング言語を設計しようとすれば、人間の脳みそに構文糖をなめさせつつ、開発ツールが破たんしない程度に、現実から脳みそが抽出したプログラムのヒントをより多く入力させることになるんだろう。大変な仕事だ。

2010/6/11追記 人間の脳みその限界に関する著作

こんな与太話に関連して紹介されたら迷惑なのかもしれないが,,,

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

予想どおりに不合理―行動経済学が明かす「あなたがそれを選ぶわけ」

予想どおりに不合理―行動経済学が明かす「あなたがそれを選ぶわけ」

セイラー教授の行動経済学入門

セイラー教授の行動経済学入門

投機バブル 根拠なき熱狂―アメリカ株式市場、暴落の必然

投機バブル 根拠なき熱狂―アメリカ株式市場、暴落の必然


そして、直接論文を読むことはないだろうが、ダニエル・カーネマンの仕事は上記の著作の中でもよく取り上げられている。

2010/6/14追記「まぐれ」は面白かった

俺に褒められても全然意味無しだろうけどw
実証主義的科学、そして全然実証主義的じゃないxx学、および人間についての本であるな。
帰納的な知の本質ってのは、

  • 反証されてしまった命題
  • まだ反証されていない命題

の境界について意識的であるということ。
で、人間はそれが得意ではなさそうだ(まだ明確は反証は無い)という認識。
そして、人間が得意でないことを実行させるための工夫をする努力、、、あー、とってもプログラミング環境。

*1:そもそも正しさの判定をするための仕様策定に使える能力もコストも有限だという重大な問題もある