22-1万時間の訓練

プログラマが知るべき97のこと」の22個目のエピソードは、エキスパートになるために必要な学習に関する話題です。このエピソードでは、プログラマとしてエキスパートとなるには「1万時間の訓練」が必要と述べています。
他のエピソードでも触れられていますが、プログラマとして必要な素質や才能というのはほとんどありません。適正は必要かと思いますが、コンピュータを触るのが嫌いだったり論理的に考えるのが嫌いでなければ難しい適正ではないでしょう*1。ごく一部の天才プログラマは恵まれた才能があったのかもしれません。ですが、そのような天才プログラマであっても、一般プログラマに対しては少なくかもしれませんが、十分な学習と努力をしているでしょう。プログラムのエキスパートと言えるレベルであれば十分な努力と学習により、知識やスキルは習得できるのです。
スキルや知識の習得は、「やさしい」「簡単に」「1週間で」「猫でもわかる」と言った事はありえません。ですが、ほとんどのスキルや知識は誰でも習得できます。問題となるのは、その習得には時間がかかり、すぐに効果が出るものでもないため、継続的で地道な努力をするしかないという事です。その目安となるのが1万時間なのです。
また、スキルや知識を得るために必要な訓練は、日々の業務では身につくものでもありません。業務で行う開発の場合、新しいことや困難な事に挑戦する機会よりも、慣れた技術で問題を書いけるしていくほうが求められるわけです。その業務に慣れてしまった時点で「訓練」とはならないのです。
では、どうやって訓練すれば良いのでしょうか?1つは業務時間外で行うことです。毎日3時間の訓練と土日の片方は訓練に費やすとすれば、本文にある「週20時間の訓練」となるでしょう。それを10年間継続してください。そうすればあなたはエキスパートになっているでしょう。5年も続けてみれば、十分に効果が見えてくると思います。もう1つは職場を変えることです。同じ職場で長く働いていると、新しい技術に挑戦する機会が減ります。常に新しい技術にチャレンジする風土が職場にあるのであれば問題ありませんが、枯れた技術を好む職場であれば、職場に慣れた時点で得るものはなくなるでしょう。ならば、新しい分野の仕事をするために職場を変えるのです。うまく職場を変えることができれば、業務時間の一部が「訓練」になります。自分のスキルよりも少し高い技術を必死に覚える事が業務時間内に出来れば、「週40時間の訓練」になるでしょう。そうなれば5年でエキスパートです。個人的には「訓練」が可能な職場への転職は年収が下がる事よりも長期的なメリットがあると思います。プログラマにとって、業務で学習できる事は最大の報酬だと思います。
自分も必死に「訓練」をし始めたのは20代後半になってからかと思います。5−6年といったところでしょうか?それまでは勉強はしていたとしても「訓練」とは言えず効率も悪かったのではないかと思います。現在は、毎日3−5時間程度は「訓練」しており、きのこ本の考察についてもその1つです。才能なんて欠片もない自分でも、継続し続けていくことである程度まではスキルや知識を身につける事はできています。まだまだエキスパートとは言えませんが、努力をすれば一定の結果は出てきます。諦めず学習しましょう。

最後にMary Poppendieckの言葉を引用しておきます。

集中的訓練は、専門技術を身につける上で欠かせないものだ。ただ反復訓練をすればいいというのではなく、自分の現在の能力を少し超える課題に取り組むことが重要である。それで自分の限界を引き上げるのだ。困難な課題に挑戦し、その結果を分析し、何か失敗すれば修正する、その繰り返しである。

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

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

*1:不幸なことに明らかに適性のないPGやSEというのは存在しますが…