勉強
勉強と聞くと、どうしても学生時代を思い出してしまう。期末テストや受験などである。社会人になると定期的なテストもなくなり勉強をする必要はなくなると思っていたが、勘違いだった。筆者はIT業界のことしかわからないが、社会人になっても周りは「勉強」だらけだ。「先週リリースされたABCというライブラリの勉強会に行ってきた」「最近は深層学習を勉強していて画像認識を試している」などと、みなさんの周りにも勉強熱心な人がいるだろう。ソフトウェア技術の移り変わりが早いのもポイントだ。1年前に勉強したことが役に立たなくなっていることもまれではない。小学生のころは、大人がまさかこんなに勉強しているとは想像していなかった。
そんな事情を踏まえて、今回はソフトウェアエンジニアとして一線で活躍するために役立つかもしれない勉強についてまとめてみたい。
勉強のメタレイヤ
ソフトウェアエンジニアとして働いていくには、CPUアーキテクチャから始まり、各種低級、高級プログラミング言語、リンカ、コンパイラ技術をマスターすることが必須である。というのはもちろん冗談である。本稿では筆者からそのような「勉強すべきテーマ」を具体的に挙げることはしない。それよりも、
- 何を勉強するのか(テーマ)
- どのタイミングで勉強するのか(順序)
- どれだけ勉強するのか(時間)
- どのように勉強するのか(テクニック)
といった1つ上(メタ)のレイヤの「勉強」について説明する。
一般的に個人の学習能力の差はそんなに大きくないというのが筆者の実感である(ごく一部の例外を除く)。なので勉強で大事なのは個人の能力よりも、上記を戦略的に決めることである。
なぜ勉強するのか
なぜ勉強するのかは個人によって大きく違うだろう。例を挙げれば、
- 知的好奇心を満たしたい
- 仕事で必要になった
- 最近流行っているから
- 世界にインパクトを与えたい
- 将来に備えるため
などがある。理由はどんなものでもよい。ただし、自分がなぜ勉強するかを理解することは重要だ。詳しくは後述するが、その理由により勉強のしかたが変わる可能性があるからだ。
テーマ
テーマはわかりやすいだろう。個人の嗜好(しこう)が大きく影響するところだ。できれば楽しいテーマを選びたい。iOS開発を勉強する、機械学習を勉強する、ファイルシステムのしくみを勉強する。どれを選ぶかで将来自分が関わる仕事、会社、コミュニティ、さらに言えば年収も違ってくるだろう。年収と聞いてぎょっとしたかもしれないが、たとえば求人のプログラミング言語別平均年収ランキングも発表されている。
テーマとして新しいものと枯れたもののどちらに取り組むかという選択肢がある。次の比較を読んで、自分に合ったものを選んでほしい。
新しいものに取り組むことには、次のメリットがある。
- 自分がそのテクノロジの方向性に大きく関与できる可能性がある
- 何らかの先行者利益を得られることがある
- 最先端にいるという高揚感がある
逆に次のデメリットがある。
- 誰もまだ解決していない問題や落とし穴に多くの時間を使う必要があり、本質的な「やりたいこと」にたどり着くのが大変(yak shaving)
- 書籍やWebの情報が少ない
- 「定まっていないこと」が多いので、勉強したことが1~2年後に全然異なるものになっている可能性がある
- 時の洗礼を受けていないので、ほぼ無価値の可能性がある
枯れたもの取り組むことには、次のメリットがある。
- ほとんどすべての問題は誰かによって解決されているので、自分が取り組んでいる本質的な問題に取り組める時間が多くなる
- 書籍やWebにたくさんの情報がある・時間が経っても生き残っているので、それなりの価値が保証されている
- 求人の件数が多い
- 成熟したコミュニティが存在する
逆に次のデメリットがある。
- テクノロジの方向性に大きく寄与することは難しい
- コミュニティの規模が大きいので突出することは難しい
何を勉強するかを選ぶ基準として、迷ったら「見晴らしの良いものを選ぶ」という方法がある。AとBというテーマで迷ったとき、次のことを考えて題材を選ぶのだ。
- AはBを含むだろうか?
- AをマスターすればBの習得はたやすいだろうか?
- 自分の視点を上げるのは、AとBのどちらだろうか?
- AとBのどちらを勉強したら、次にできることが増えるだろうか? もしくは勉強できることが増えるだろうか?
順序
勉強の順序には依存関係がある。勉強は積み重ねや、事前知識があることで効率や理解度が上がる場合が多い。Android開発をやったことがあればiOS開発の勉強は効率良く進められるだろう。1つの関数型言語をマスターしていれば、別の関数型言語をマスターするのはたやすい。高校数学をやらずに機械学習をやるのは難しいかもしれない。勉強するテーマの依存関係を理解することが大事だ。
時間
勉強に使う時間はどうやって決めればよいだろうか。単純に楽しくてやっているならば好きなだけやればよい。そうでない場合は何らかの指標が必要だ。そこで出てくるのは、勉強は投資という考え方だ。作家の森博嗣先生は以前本の中で、「最も良い投資は勉強することだ」というようなこと言っていた。筆者も同感であり、少なからず先生の影響を受けている。つまり勉強は投資であるという見方もできるのだ。楽しく勉強する際は気にしなくてもよい。ただそういう考え方もできるということだ。
投資と考えれば、いかに少ない投資で多くのリターンを得るかという視点で物事を決められる。具体的に言えば、
- おしゃれカフェで勉強するのはお金がもったいない。家でやるべきでは?
- 3,000円の本で自分のペースで独学するか、日曜日を丸一日使って勉強会に参加して勉強するか?
というような問いかけに対して、「3時間集中して勉強してそれが将来につながるのであれば、カフェ代は安い投資である」といった「自分なりの」結論が出せるだろう。
関連して、時間は常に同質とは限らないことに注意しよう。朝起きてからまったく疲れていない状態での勉強、通勤中のほかに割り込みがない状況での勉強、仕事のあと疲れていて家でやる勉強。これらの勉強効率が違うことはみなさんも容易に想像が付くだろう。また「週末勉強する人は続かない──データから見えた外国語学習に成功する人の3つの特徴」という記事も興味深い。
テクニック
語学、数学などは人類がずっと勉強して取り組んできたものだ。過去無数の人たちが試行錯誤している。その先人たちの遺産を最大限に活用しよう。独自の勉強方法を発明するなとは言わないが、筆者だったら自分よりも賢い人たちが発見したより効率の良い方法で学習するほうを選ぶ。一方で自分に合った効率的な勉強方法を見つけることも大事である。おしゃれカフェで勉強するのがよいのか、家の中で半裸で勉強するほうが自分に合っているのかを追求してみよう。
勉強するテーマは日々変わっていく。ただ自分の学習を支える環境は大きく変わらないので、常に改善し続けよう。具体的はにツールやフレームワークだ。
- 自分は紙を使って勉強するのが効率が良いだろうか。それともiPadのほうが良いだろうか
- ストレスなく書けるペンを持っているだろうか
- 絶対に誰にも割り込みされない勉強スペースや時間帯を確保できているだろうか
- 困難な問題を乗り越えるための自分なりのやり方を持っているだろうか
- 勉強の進捗を客観的に評価するしくみを持っているだろうか
- プロダクティビティを上げる方法はないだろうか[1]
まとめ
前号で紹介したプロダクティビティテクニックと、今回の1つ上のレイヤの勉強方法は、どちらも一度マスターすれば、そのあとの応用範囲が広く、効果が高い。日々の忙しさに追われて後回しになりがちなみなさんの勉強の一助となれば幸いである。
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT