It's interesting.

いつまでも中二病。

【20時間の魔法】エンジニアはいかにして速くスキルを高めるのか?

はじめに

「天才になりたい!!」と思って、最近はいくつか勉強法や読書法に関する本を読んでいます。
その中でも面白いなと思ったのが、ジョシュ・カウフマン著の「たいていのことは20時間で習得できる」という本です。
何かの中級者になるには20時間で十分っていう理論と実践について書かれた本でした。

ところで、IT業界の技術の変遷って激しいですよね?
常に新しい技術が生まれてそれを身につけていかねばならない。
そんなIT業界で生きる人たちにとって、この本の内容はぴったりだと思ったので、知見を共有したいと思います。

tl;dr

身につけたいスキルをいくつかの重要なサブスキルに分けて、それらを20時間みっちり練習しよう。

超速でスキルを身につけるには?

この本にはスキルを習得するための方法論が書かれているのですが、ここでの”習得”はマスターとは異なります。
一般的にスキルをマスターした人=プロになるには、何時間の練習をすればいいのでしょうか?
ベストセラーとなった以下の書籍では、プロになるのに1万時間の本気の練習が必要だと書かれています。

しかし、エンジニアがプロダクトに新たな技術を組み込む時にそんなに時間は取れません。
本質的な要素をつかんで、ある程度使いこなせるようになっていればいいんじゃないでしょうか?

数十時間の練習では、機械学習のスペシャリストやPHPのプロには到底なれないでしょう。
しかし、機械学習をサービスに組み込めるようになる、PHPを使ってWebサイトが作れるようになるといったことはできるはずです。

この”ある程度使いこなせるようになること”をこの本では”習得”と言い、それには20時間あれば十分だと言っているのです。
そして、そのスキル獲得法について、本の中で以下のように述べられています。

超速スキル獲得法とは、習得したいスキルをできるだけ小さなパーツに分解し、そのうち特に重要なものを見極め、まずそれを意識的に練習するというプロセスである。

このプロセスは大きく4つのステップに分けられます。

  1. スキルをサブスキルに分解する
  2. サブスキルについて学習する=インプット
  3. 集中して練習できる環境を作る
  4. サブスキルを練習する=アウトプット・実践

ここで重要なのが、学習とスキル獲得は異なるということです。
もう少し分かりやすく言うと、学習=理論でスキル獲得=実践であり、それらを同一視してはいけないということです。
サービス・アプリを作りたいなら、プログラミング言語について詳細に知る必要はありません。
サービス開発に支障が出ないレベルの知識があればいいのです。

とにかく練習しろ!

超速スキル獲得法を本当に超速に行うために、本の中ではいくつかコツが紹介されています。

  1. 身につけたいスキルを一つ選び、目標を明確に定めます。
  2. スキルを重要なサブスキルに分解します。
  3. サブスキルを一つずつ質より量と速さを重視して練習します。どんな壁が立ちはだかろうとも20時間は頑張ります。

身につけたいスキルをすでに身につけている人にフィードバックをもらいながら進めるのもいいそうです。

どれも当たり前のことかもしれませんが、できていない人が多いんじゃないでしょうか?
とにかく、どうやって練習すればいいんだろうか?とぐだぐだ考えず、早くそして速くたくさん練習することが重要ってことです。

事前準備を怠るな!

先程、とにかく早くたくさん練習することが大事と言ったのですが、何もやみくもに練習すればいいわけではありません。
練習の効果を最大限高めることが大切です。

そのためには、練習前のスキルについての学習・リサーチが重要です。
本やネット、目標とするスキルのプロから情報を収集し、重要なサブスキルを見極め、目標までのロードマップを明確にするのです。
最低限何ができれば、そのスキルを身につけたと言えるのか考えることもスキルの分解に役立ちます。

このように、練習の前に情報収集することで、無駄な努力をしなくても済むのです。
プログラミングで言うなら、Rubyの入門書を読んで配列の使い方や文字列の操作方法を一生懸命覚えるんじゃなくて、Rails使ってWebアプリ作る方法を勉強しろよ!ってことですね。

事前準備を怠り、完全独学オリジナルの方法でいくのはバカなので、先人の知恵を存分に活かしましょう。

おわりに

この本では、難しいテクニックについては言及していません。
どれも当たり前のことばかりです。
ただ、この当たり前を行動に移すのが意外と難しいので、習慣化するまで意識してやっていくことが大切だと思いました。