なぜ60%の人はプログラミングが出来ないのか | 舩木俊介 『かつて未来とよばれたソサエティ』

なぜ60%の人はプログラミングが出来ないのか

プログラミングが出来る人間からみると、プログラミングが出来ない人の理由は単純に「ちゃんと勉強しないからだ」ということになる。

たしかに、自分達が歩んできた過程は、SDKやIDEの設定を行ってコンピュータの開発環境を整え、全く意味不明なアルファベットを打ち込んで、ウェブサイトや本で言われたとおりの表示が出ることを確認して、また次のステップをやってみて、という「地味で地道な(そして性格まで暗くなりそうな)」ことを繰り返して出来るようになったものなので、その過程から逃れているからプログラミングが出来ないんだろ、というのはごく自然に思う。

このため、プログラミングを教えようというときに、地味で地道で性格が暗くなってハゲて死にそうな学習過程の苦しみを、いかに和らげられるかという試みは数多くなされている。codecademyRails for zombiles: code schoolなど、ゲーミフィケーションやクイズ、パズルなどでハードルを下げてプログラミング入信者を増やそうというのは一つのトレンドにもなっている。

これ自体は間口を広げるためにすごくいいと思うけど、そもそもデキる素質を持つ少数しか対象にならないかもしれない。プログラミングが出ない人は、出来るようになる「素質(natural aptitude)」がないから出来ないんだ、という有名な論文がある。


●プログラミング教育は、どんな手立てをつかっても「かなりできる人」と「できない人」という明確な成績の差が生まれ、中間はほとんど存在しない。(ここから「ふたこぶラクダ」というタイトルになっている。)この差は、年齢、性別、学歴に関係なく起こる。

●電子計算機が発明されて以来、多くのことが変わったが、頑なに変わらないのは「多くの人はプログラミングを学ぶことができない」ということ。コンピュータサイエンス学部に入学するくらいの人でも30%~60%は単位を落とす。なぜこのようなことが起きるのか?

●実験調査の結果、無意味なものでもそれを受け入れ、他にも一貫してその受け入れたルールを適用できるかという、一貫性の高さがプログラミングの適性と高い相関があった

●通常の学力とは独立したプログラミング素質が存在し、プログラミングを学習する以前に決まっている。


今まで多くのエンジニアを見てきた自分の経験からも納得できる。プログラミングの学習コストや難解さが問題だと思われていたが、プログラミングを学習するメンタルモデル(脳の許容性)こそが出来るか出来ないかの最初のハードルになるのは確かだ。

プログラムではa=bはbの値をaに代入することであって、一般的に我々が知っているaとbが等しいという意味ではない。一般的なイコールを意味するためには==とイコールを2つか3つ書かないといけないが、普通の世界で==は意味をなさない。

プログラミングのメンタルモデルは、新しい世界でのルールを意味を考えずに受け入れ、その世界にいる限り一貫して使用し続けることが必要になる。音楽で8ビートとはどういうことなのかを追求しても無意味だけど、8ビートを使ってセッションしたり曲を作ったりしたほうがはるかに良いし、クリエイティブなのと同じで。

つまりプログラミングの素質というのは、無意味なものに対する姿勢だ。無意味なルールを受け入れて、無意味なルールで指示し、コンピュータは盲目的に従い、無意味な結論を出す。

「そういうものだ」としてルールを学ぶ。最初でつまずかなければ、githubなんかで実際に使われているコードを読む、作って試してみるしてるうちに、あっという間にスキルが伸びて世界が開ける。



(追記 2014/8/21)コメントで教えて頂いたところ『何らかの指標を見つけたのは確かだけれど、生得的な素質がプログラミング学習能力を決めている、というのは言いすぎであるとしています』とのことで著者が論文を撤回しています。いずれにせよ、素質がないと出来ないではなく、素質が実世界では無意味なルールでも受け入れることだとすると、受け入れて進んでいけばプログラミングの楽しさがあるという主旨で読んで頂ければと思います。(shirokさんありがとうございます)