Island Life

< ピアノレッスン133回目 | プログラムは書いたとおりに動くのか >

2014/07/20

誠実さ

プログラミング教育における「ふたこぶラクダ」の話はプログラマ界隈では有名だろう。 2006年の論文で、 プログラミングの入門教育をすると、好成績グループと 低成績グループの二つの山に分かれる、そして好成績をおさめられるかどうかは、 生徒があらかじめ「一貫したメンタルモデル」を持っているかどうかでだいたい決まる--- つまり、メンタルモデルを持ってない生徒にはいくら教えても無駄になる可能性が高い--- という話 (少なくとも、そう受け取られた話)だ。

Coding Horrorで取り上げられたのがポピュラーになった一因かな。

わかりやすいサマリ

その当の論文の著者から、「あれは言い過ぎでした。取り消します。」という記事が出された。

元論文にあるテストを行ってかような結果が得られたのは事実で、 しかもその実験自体には再現性がある。しかし、その実験事実からだけでは、 「一貫したメンタルモデルを持ってる生徒がプログラミングをマスターしやすく、 そうでない生徒は落ちこぼれやすい」ということは言えない、ということだそうだ。

科学的事実というのは、直接目に見えないことが多い。見て分かるものがすべてなら 手品師は皆本物の魔術師だ。人間の目や体験は事実を正しく捉えられないからこそ、 様々な測定をして客観的な指標を得ようとする。けれども、その実験が 本当に欲しいものを測っているのかどうかを判断するのは難しい。

実験は、目隠しして対象物に触ってるようなものだ。触って、何らかの感触が得られたなら、 そういう感触が得られたというのは事実だ。でも触っているものが本当に触りたかったものなのか、 それは別に証明しないとならない。 「触っているものが違うものだったとしたら、どういう可能性があるか」 「直接触ってるつもりで間に何か別のものが挟まってるとしたら、どういう可能性があるか」 といったことを思いつく限り列挙して、それらの可能性を排除するような実験を組む。 それでも、全ての可能性を網羅することはできない。ただ、そうやって慎重に実験を 重ねることで、徐々に元の仮説の蓋然性が高まってゆくだけだ。

元論文の実験は、何かの事実を指している可能性がある。けれども ふたこぶラクダ現象自体は別の説明が可能で、 また使われたテストが本当に見ていたのは何かもはっきりとはわからない。 科学的に誠実な態度は、「まだわからない」ということになる。

上のretractionの記事は、少々読んでて苦しくなるのだけれど、 誠実さというのが伝わってくる文章だった。

Tags: Programming, Science

Past comment(s)

seiki (2014/08/04 16:38:28):

そもそも教育とか訓練とか自体が実は思ったほど効果がないかもしれませんね。 以下のような論文を見るとそんな感じがしないでもないです。

http://pss.sagepub.com/content/early/2014/06/30/0956797614535810.abstract

shiro (2014/08/04 20:23:36):

そのHambrick教授らの研究は、「訓練には効果が無かった」みたいな紹介のされ方をしてちょっと前に話題になってましたね。でも著者らの立脚点はいわゆる「10000時間の法則」で有名になった、Ericssonらのdeliberate practiceが全てという論に対するカウンターという理解なんですが。プログラミング教育に持ってくるのは少々強引なような。

seiki (2014/08/05 17:24:12):

>「訓練には効果が無かった」みたいな紹介のされ方をして 「効果がない」というよりは、「思ったほど効果がない」ということなんでしょうね。 We conclude that deliberate practice is important, but not as important as has been argued. とありますし。

>deliberate practiceが全てという論に対するカウンターという理解 その理解でいいんだと思いますよ。ただ、コンピューター科学者のCal Newportが以下で言っていますが、プログラマーなどの知的労働者はほとんどゼロと言っていいほどdeliberate practiceをしないので、ほかの分野に比べて輪をかけて教育や訓練の効果がないかもしれないですね。

http://youtu.be/qwOdU02SE0w?t=28m

seiko (2014/08/05 17:36:57):

グラッドウェルがEricssonの論文を有名にしたせいで、「練習がすべて」みたいなスローガンを分かったような顔をして繰り返す人が増えていますが、他にもいくつか考えるべき要素(IQ、特定のドメインにさらされる年齢、性格。作業記憶など)があって、それらが優れたパフォーマンスに何らかの影響を与えている可能性が高いのだから、「練習すれば誰でもエキスパート」みたいな明らかなウソを広めるのはよくないと個人的には思います。真面目に受け取った人が人生を棒にふるかもしれないので(shiroさんのことじゃないですよ!)

shiro (2014/08/06 01:29:36):

trainingはdeliberate practiceだけではないので、後者をしないから全てのtrainingは効果がないかも、というのもちょっと強引ですよね。例えば、素質ある人なら自己流でもプログラミングを身につけられるとしても、体系立てた知識と効率的な実習をパッケージにしたカリキュラムを使ったら加速できるかもしれないわけですし。練習時間以外に影響を与える要素が多いほど、万人向けのカリキュラムを組むのは難しい、ってことは言えるかもしれません。

seiki (2014/08/06 05:11:17):

いや、素質のない人の場合は、訓練はトップレベルのパフォーマンスを達成するのには効果がほとんどなくても、当然パフォーマンスの向上には効果があると思いますよ。素質がない人が向上してもたいしたことないかもしれませんが、そもそもトップレベルのパフォーマンスが必要ない場面だってたくさんあるわけですし。

真実はもっと条件付きで確率的なんだろうと思います。「*素質のある人が*長時間トレーニングすれば*わりと高い確率で*トップレベルのパフォーマンスを出せるかも」でいいんじゃないでしょうか。

shiro (2014/08/06 05:21:32):

あーちょっとコメントが不明確だったかもしれませんが、トップレベルとトレーニングの話はその通りで特に異論はなくて、言いたかったのは(大学のCS入門レベルでの)プログラミング教育の効果についての話です。過程も目的も違うのでHambrick vs Ericssonの話は直接適用できないんじゃないかってことです。

seiki (2014/08/06 17:23:29):

> [プログラミング教育は]過程も目的も違うのでHambrick vs Ericssonの話は直接適用できないんじゃないかってことです。

そうでしょうか。たとえば(遺伝によって)IQが低い人やある種の性格(集中力が低い)を持っている人がまったくプログラミングに向いていない(訓練してもあまり向上が見込めない)とわかったとしたら、事前にIQテストなりなんなりして、その成績が低くて、さらに本人がプログラミングを楽しんでいなかったり向上する意欲がない場合は、他の楽しめる活動(テレビゲームなど)をすすめたほうがみんなにとっていいんじゃないでしょうか。

僕はちなみにブライアン・カプラン教授が言っているみたいに(現在行われている形での)ほとんどの教育はなくしてもいいと思っています。

The Case Against Education

https://www.youtube.com/watch?v=bpk_u_VmPD4

ピンカーやホリエモンもカプランと似たようなことを言っています:

How to Get Inside a Student's Head

http://pinker.wjh.harvard.edu/articles/media/2003_01_31_newyorktimes.html

堀江貴文のQ&A vol.333〜大学は不必要!?

http://youtu.be/yhTgEULJTXM?t=1m17s

shiro (2014/08/06 19:43:52):

本人がやりたがってないなら最初から今回の話の対象外ではないですか。本エントリの元の話は一応やりたくて来てる学生対象だと思うんで。向いてない人にやらせるのは無駄って話は総論としては同意ですが、じゃあ向いてないことをどうやって測るのかとかを分野とレベルごとの各論に落としていかないとあまりおもしろい話にならない予感が。

例えばCSの中高等教育ってあたりに絞ったとして、どうやって向き不向きを判断します?

seiki (2014/08/06 22:27:52):

>本人がやりたがってないなら最初から今回の話の対象外

まあそれはそうかもしれません。

>CSの中高等教育

これがまず、ピンカーが上にリンクした記事でいっているような他の優先順位が高いかもしれない科目(読み書きとか四則演算とか統計とか基礎経済学)に比べて大事なのかがまず知りたいですね(shiroさんはそう思われるのでしょうか)。

もしそうでないなら、向き不向き(とその測り方)以前にそもそもCSやらプログラミングやら数学(の大部分)を中高等教育で教える必要あるのかが疑問です。好きな人が適当にネットで論文読んだり図書館で教科書読んだりオープンソースソフトの開発したりするのではダメなんでしょうか。

shiro (2014/08/07 06:18:47):

中高等教育って高校~大学あたりを指してるつもりです。まさか大学でプログラミングや数学の講座を開く意味がないないて論じゃないですよね?

ピンカーの記事とかには基本同意するんで、何がseikiさんとの間で議論のトピックになってるのかよくわからんのです。

seiki (2014/08/07 14:34:32):

>まさか大学でプログラミングや数学の講座を開く意味がないないて論

すみません、自分でもあまり整理がついてませんが、

(1)プログラミングのスキルとか(遺伝とかで決まってる部分が大きそうなんで)学校教育とか受けてもあんまりパフォーマンスに影響なさそう論

(2)学校教育(たとえば高校)でプログラミングとか数学(の大部分)はやらなくていいんじゃ論(あと、他にもっと大事な教えることがあるんじゃ論)

(3)そもそも大学なんかいらないんじゃ論(好きな人が自分の興味に従って自分で学習すればいいんじゃ論)

が混ざったのが話のトピックですね、たぶん。Camels & Humpsの著者が論文のクレームを取り消したことの誠実さ(や実験と実験が証明しようとする仮説の(非)関連性)へのコメントではないです。はじめにそう言うべきでした。

大学教育をみんなに受けさせてそれによって学力なりスキルなりを高めようとしている人(やそういう理想を語る人)って、背の低い人を(平均身長がすごく高いという理由で)NBAのチームに入れて背を高くしようとしているような感じがしなくもないんですよね。

で、当然彼らは失敗して、多くの場合借金まみれになるわけです。税金を使わない教育機関やカルトグループならある程度は好きにすればいいと思いますが。

shiro (2014/08/08 00:35:01):

総論として最後のパラグラフには異論は無いです。各論としては議論するところがありますが、私は前提として、生徒一人一人の進捗と適性をみながら個別のカリキュラムが提供されるのがいいんじゃないかって思ってるので、例えば今の段階で「小学校でプログラミング教育を」と言った場合は「小学校で既に興味を持った子や持ちそうな子を対象としてさらに伸ばす」といったものを考えてます。(この場合、教師/生徒比が今は全然足りないので、現実化するには教育費をどっかからもって来ないとならないんですが。)

それとは別に、現在のカリキュラムは再編されてしかるべきだとは思います。その中で、将来的に初等教育に「読み書き四則計算」と並んで「ある種のプログラミング」は入れざるを得なくなってくるんじゃないかと思います。ただしここで言うプログラミングは現在のプログラミング言語を教えてっていうものではなく、「問題を基本的なロジックに分解して、それを決まった言葉で対象に伝える技術」です(今の国語と算数の中に重なる要素もあります)。

中学校・高校での数学の位置づけですが、現代の科学がそれなりの数学を前提としてるので、「科学をやるための準備」と考えるとまだ足りないくらいなのに、そうでない人にとっては今後使わない知識、という差がどんどん広がってるのが難しいところだと思うんですよね。これについはちと思うところがあるんですが長くなりそうなので別の機会に。

大学の位置づけも変わらざるを得ないでしょうね。既にやる気のある人はCoursera等でどんどん進んでゆける環境がありますし。知識の習得はアラカルト式の個別学習に任せるとして、実験・実習などの技術伝授や、議論を通した学問的思考スキルの訓練、などその場でないとできないことに特化していくことになるのかなあと何となく思っています。

seiki (2014/08/08 02:57:12):

>将来的に初等教育に「読み書き四則計算」と並んで「ある種のプログラミング」は入れざるを得なくなってくるんじゃないか...ただしここで言うプログラミングは...

なるほど、そういう広義のプログラミングなら、そういうのを義務教育でやるのには異論はありません。

>中学校・高校での数学の位置づけ ... についはちと思うところがあるんですが長くなりそうなので別の機会

興味があります。ぜひなにか書いてください :-)

僕個人としては、隣人がiPhoneアプリが書けようが三角関数やベルヌーイの定理を知っていようがどうでもいいんですが、「国益のために、アジアからの製品輸入を禁止すべき」とか言っているとちょっとなんだかなーと思います(現在バンクーバーに住んでいるんですが、実際こういう人います)。

Post a comment

Name: