Ryukalice

教育による能力の再現性に対する幻想

2019-01-04

年末に読んだ mizchi 氏の記事を読んで、プログラミング教育のあり方について考えた。
プログラマという現代の傭兵 | mizchi's blog

この記事では、現代のプログラミング技術がコモディティ化しない原因として、下記を挙げている。

・教育による能力の再現性がない
・優秀なプログラマが教育によって育つ例がない
・システム側(社会)による受け入れ体制が整っていない
・プログラミング技術自体が(歴史が浅いので)進化し続けている

その結果、勝手に育った一部の人間が、プログラマに金を出してくれる会社に集まっている、という状態にある。

起業してたくさんのエンジニアに技術継承しまくって最強の技術集団を作ろう、といった夢を想像することはあるが、その夢が現実的に感じない理由は mizchi 氏が上記で上げている「教育による能力の再現性がない」ためだ。この「教育」とは恐らく学校やセミナーによって行われる教育のことを指していると思われる。

人から人への技術継承のランダム性

上記の記事では

今のプログラマが育つ環境のリアルは、親方が弟子に伝授するという中世のギルド制度に近いのではないか、というのが界隈を見渡した際の予想としてある。親方は大学の教授かもしれないし、最初に入った会社のメンターかもしれないし、Twitter の強い友人かもしれない。どういう親方に技術を学んだかによって、その人の方向性が決まってしまうところが大きい。

と書かれているが、ここに関してだけは私はあまり共感していなくて、親方によるマンツーマンの教育によってもプログラミング能力の再現性はほとんど期待できないと思っている。(記事中では「勝手に育った一部の人間」といった表現もあるので、私が mizchi 氏の記事をまともに読み取れていない可能性もある。)

私は人から人への技術継承に関しては一切期待していない。「適正のある人間だけが勝手に育つので親方は関係ない」とまでは思わないが、親方が弟子のために割ける時間や熱量はランダムなので、教育に失敗した大量の親方と弟子の屍の上に偶然噛み合った親方と弟子のペアが少数立っているようなイメージをしている。

プログラミングに目覚める条件のランダム性

親方の教育に費やす時間や熱量の他に、そもそも弟子側がプログラミングをやりたいのか、という問題がある。プログラミングそのものに楽しみを見出すとか、プログラマーとして食っていくと誓いを立てるとか、プログラミングで稼ぐのが1番楽だと気付くとか、やりたいビジネスがプログラミングとマッチするとか、そういった覚醒タイミングが人によってバラバラであるのも、教育による再現性がない原因の1つだと思う。(稀にプログラミングに一切のモチベーションを感じていないのにプログラマーとして大成する人もいるが...)

最高のパターンは、「いい親方に出会えた」がそのままプログラミングに目覚めるトリガーになることだ。ただ、「いい親方」であるかどうかを見極めるには一定の経験値がいるので「いい親方がいる = プログラミングに目覚められる」が成り立つ訳ではない。

私を例に出そう。新卒で入社した会社で偶然ソフトウェア開発の事業部に配属された当時の私は、それほどプログラミングに興味を抱いていなかった。そんな中、今思い出してもとんでもない技術レベルを持った UNIX 博士が私に技術を教えてくれることになったのだ。当時、ただ C, C++ で何となくコードを書いていた私に、Linux カーネルのビルドの仕方や、デバイスドライバーの作り方、TCP/IPやコンパイラとリンカのコードリーディング等、様々な教育を高度なレベルで施してもらった。過去の私を羨ましく思えるほどに「いい親方に出会えた」環境にあった私だが、プログラミングそのものに若干の喜びを感じてはいたもののプログラマーとして食っていくビジョンは全くなかった。

プログラミングを本気で楽しいと感じて、一生プログラマーでありたいと思い始めたトリガーはハッキリと覚えている。同僚に勧められた CODE COMPLETE を読んだ時だ。私がプログラミングに目覚めたトリガーは最高の技術力を持った親方ではなく書籍だったのだ。CODE COMPLETE はソフトウェア開発の方法論について書かれた本で、設計との向き合い方や美しいコードの書き方、テストの書き方等について、上下巻で13,000円程する分厚いページ数を持つ。読めば読むほど開発に対するモチベーションが湧いてきて、当時良くない暴走を繰り返しはしたが、明らかに開発に対する向き合い方が変わった瞬間だった。

ただ、私が CODE COMPLETE によってプログラミングに目覚めたからと言って、他の人が CODE COMPLETE と出会って衝撃を受ける可能性は低い。親方との出会いも、書籍との出会いもそうだが、出会う瞬間の背景によって衝撃の度合いは異なるからだ。どんな悩みを持っているか、どんな技術に飢えているか、どんな将来を夢見ているか等によって、その出会いの良し悪しは変わる。このランダム性が、不特定多数に対しての一斉教育(プログラミング塾、セミナー等)で個々人の適正以上の成長差を生む現場を沢山見てきた。

結論

ゼロからの教育において、プログラミングにモチベーションを感じるまでのプロセスには多大なランダム性がある。コードの書き方や設計の方法論について教えることはできるが、その教育による結果は本人の資質(センス)以上にモチベーション次第となることが多い。教育の現場において、この人が教えれば必ずプログラマーとして大成するとか、この教育メソッドに従えば一人前に育つとか、そういった幻想に身を寄せるのは危険だ。プログラミング教育において、能力の再現性はほぼ皆無だと考えていいと思う。ある人に対して噛み合った教育メソッドやカリキュラムが、別の人に使い回せる訳ではない。自分に刺さった良書が他人に刺さるかは分からない。

プログラミング教育における理想のゴールは、完全無欠の教育メソッドやカリキュラムを作ることではなく、放っておけば勝手に育つための動機や環境を与えることだと思う。とはいえ、ひたすら本人に噛み合いそうな親方を紹介しまくる訳にも、良書の山を全て読ませる訳にもいかない。教育終了後も次々に誕生する要素技術や現実の問題に対して対処できる「放っておけば勝手に育つ」人材の再現性については、一種の諦めを感じざるを得ない。全従業員が生産性でぶん殴れるタイプの最強技術集団を、優秀な人材を引き抜いて集めるのではなく、教育の結果でゼロから組織できれば個人的に理想の業界になるのだが、その夢はまだ遠い。