かとじゅんの技術日誌

技術の話をするところ

1万時間の訓練

プログラマが知るべき97のこと』の 『22 1万時間の訓練』P44 をもう一度読み返してみました。以下、だらだらと感想文を書いてみます。

プログラマが知るべき97のこと

プログラマが知るべき97のこと

 集中的訓練の目的は、あくまで自らの能力を高めることにあります。いわゆる「スキル」や「テクニック」を身につけることが目的なのです。集中的訓練において重要なのが「反復」です。身につけたい能力をいくつかの小さな要素に分割し、その一つ一つについて反復訓練をし、習熟度を高めていきます。つまり「反復の反復」が必要になる、ということです。ゆっくりと、能力全体の習熟度を望ましいレベルにまで引き上げていきます。集中的訓練の目的は習熟度を上げることであり、個々の課題、作業をこなし、完了することではないのです。

「反復」は重要なのは言うまでもないですが。この「反復」についてもう少し考察してみるならば、単純に繰り返しても記憶に定着しにくいという事でしょうか。

情報を長期記憶に送り込むには、同一の符号系列の単純な反復である維持リハーサルではなく、情報に対するイメージの構成や意味的処理によって既有知識と関連づける精緻化リハーサルが有効である。 記憶したい情報を相互に関連づけたり情報の意味づけを行う、いわゆる《深い処理》にあたるものだ。
単語のスペルや音韻に注意したり,繰り返し読み上げたり書き写したりするような「浅い」処理を行うよりも,意味を考えたり,イメージしたり、自分の経験と関連づけるような「深い」処理を行う方が,その単語の保持成績は優れたものになる。

この話を、プログラミング言語の学習で置き換えて考えるならば、サンプルプログラムを見て動かすぐらいは「浅い処理」で、自分で設計し考えて実装することが「深い処理」かもしれません。いずれにしても、「深い処理」は意味を考えたりするので、当然 手間はかかりますね。でも、逆に言えば、一手間を掛ければ定着しやすいかもしれませんね。

 代金をもらって開発をする場合、その主たる目的は、製品を完成させることにあります。集中的訓練の場合はそうではなく、自分の能力を高めることを主たる目的とします。両者は本質的に違うものです。まず自分に問うてみてください。普段、仕事での開発作業に費やしている時間はどのくらいですか? それに対し、自分の能力を高めるのに費やしている時間はどのくらいですか?

私は98年(SIer経験2年目)に、Windowsのプリンタードライバを作っていました。特殊なDDKでINIファイルに設定を記述すると大半のドライバーのソースが生成されるという環境でした。そして、このINIファイルが機種やOS、言語リソース毎にできて爆発しましたw INIファイルをDRYにするための対策として、C言語プリプロセッサと同等の機能を持つツールをC++で実装することにしました。これは業務外でやったんですよね。楽しかったから。BNFもASTも分かっていなかったので、今思えばひどいですが*1オブジェクト指向のモデリングはある程度こだわった記憶があります。漠然と研鑽しても身に入らなくて、何かゴールがあるよいのではないかと思いますね。結局はこういうことが「深い処理」になるような感じですね。

果たして「エキスパート」と呼ばれるだけの能力を身につけるには、一体、どのくらいの量の訓練が必要なのでしょうか。それについては次のようなことが言われています。
● Peter Norvig は、何かでエキスパートになるには約1万時間の訓練が必要と述べている。いわばこの1万時間というのが「マジックナンバー」ということになる。
● Mary Poppendieck も、著書『リーンソフトウェア開発と組織改革』の中で「どんな専門的職業であれ、入念に計画された、集中的な訓練を最低10,000 時間積み重ねることとで専門家になると言う」と書いている。
 専門的な技術や知識は、ゆっくりと徐々に身につくものです。1万時間が経過した途端、急に身につく、というわけではありません。それでも、ともかく1万時間やる、ということが大切なのです。ただ1万時間と言ってもそれは膨大な時間です。週に20時間なら10年かかることになります。

1万時間は長いですが、週20時間で10年間続ければエキスパートになれるわけですね。できないことはないですね。

「1万時間努力したはいいけれど、結果、自分にはエキスパートになる素質がないとわかるだけかもしれない」そう心配する人はいるでしょう。そんな心配はいりません。エキスパートには必ずなれます。
何かに秀でた人間になるかどうかは、ほぼ、自分がなろうとするかどうかだけで決まるのです。すべてはあなたの意志次第なのです。過去20年間におよぶ調査でも、ある知識や技術が身につくかどうかは、大部分が、訓練に費やされた時間の長さで決まる、という結果が得られています。天賦の才はさほど重要ではないのです。

"自分がなろうとするかどうかだけで決まる"というのが印象的ですね。結局は、人間の行動を決定するのは自分自身の意志ですね。そして、"天賦の才はさほど重要ではない"ということだそうです。どれだけ訓練したかですね。「かとうさんとは、違うんですよ。僕らは」と聞かされることが多いのですが、そういう人はつべこべ言わずに「1万時間の訓練」を読んだほうがいいと思うよ!

*1:その当時の自分に、Scalaを教えてあげたいw