次に何を勉強するかを決めるための作戦

Webエンジニアが学ぶべき技術範囲はとても広く、いったい何をどこから勉強していくかは難しい問題です。僕も試行錯誤を繰り返しています。

そんな試行錯誤の中で、新しく何を勉強するか決めるときに使ってる作戦がいくつかありそうだなと思うようになりました。そこでこの記事では、僕が次に勉強すべきテーマに困ったときに使っている作戦を紹介してみようと思います。

各作戦の例のコーナーでは実際に僕がその作戦を使って勉強したトピックなどを紹介しています。

このエントリは、はてなエンジニアアドベントカレンダー2016の20日目の記事で、担当はid:hakobe932です。昨日の担当は id:masayoshi さんでLinuxのARPとL2スイッチのお話という記事でした。

作戦1: 新しいプログラミング言語を学ぶ

新しいプログラミング言語を学ぶのは、比較的手を出しやすい作戦です。プログラミング言語を学ぶことで自分が使えるプログラミング言語が増えるのはもちろんですが、これまでとは違ったプログラムの捉え方や考え方も学ぶことができます。

また、プログラミング言語を学ぶ過程で様々な技術をつまみ食いできるのがお得なポイントです。例えば、ファイルの扱い方、プロセスやスレッド、ネットワーク、正規表現、リストや辞書などのデータ構造などの話題は言語の入門本にはよく登場します。詳細に学ぶことはできませんが、とっかかりには悪くありません。複数の言語を学ぶことで、これらの技術を多様な角度から学ぶこともできます。

勉強用の資料には分量が多くて詳しく書いてありそうなものを選ぶのがおすすめです。著者が言語の作者やそれに準ずる人である資料であればなお良いと思います。そのほうが表面的な文法や使い方だけでない考え方や背景についても教えてくれますし、いろんな技術がつまみ食いできます。

例: Scalaスケーラブルプログラミング第3版 / すごいErlangゆかいに学ぼう! / 初めてのPerl 第6版 / 続・初めてのPerl 改訂第2版 / すごいHaskellたのしく学ぼう! など

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

  • 作者: Martin Odersky,Lex Spoon,Bill Venners,長尾高弘,羽生田栄一,水島宏太
  • 出版社/メーカー: インプレス
  • 発売日: 2016/09/20
  • メディア: Kindle版
  • この商品を含むブログを見る

Dave Thomas先生も一年に一個は新しい言語を学ぶべしとおっしゃってるので、丁度良いんではないでしょうか。この作戦ではいろんな技術をつまみ食いできるのが良いのですがつまみ食いでは満足できなくなってきたら作戦2に移りましょう。

作戦2: 計算機科学分野からテーマを選んで勉強する

計算機科学の分野にあげられるような比較的基礎的な技術を学ぶという作戦です。計算機科学の分野といっても幅広いですが、Webエンジニアに関係が深いのは例えば、OSやネットワークの仕組み、アルゴリズムや、計算理論、ソフトウェア設計、並行プログラミング、データベースなどでしょうか。計算機科学の分野はWikipediaにざっくり載っているので、これを眺めたりしてもいいかもしれません。この中から必要性や自分の興味のバランスで分野を選びましょう。得意分野から攻めていくとモチベーションが続きやすい気がします。

一度勉強すれば長く役立つ、基礎的な技術を学ぶのが目的です。特定のソフトウェアやライブラリの使い方のような知識はある瞬間はとても役立ちますが、ライブラリのバージョンが変化してしまったり、そのライブラリが廃れてしまうと役に立たなくなります。「寿命が長い技術」を学ぶのが費用対効果が良い作戦です*1

本を探すときには、自分の得意分野ではちょっとがんばって一番分厚いバイブル的な本を読むと効率が良いと思います。不慣れな分野では、近くのひとに聞いたりインターネットを探したりして、がんばって良い入門書を見つけましょう。

例: オブジェクト指向入門 / エリック・エヴァンスのドメイン駆動設計 / アルゴリズムイントロダクション / プログラミング言語の基礎概念 / スクリプト言語の作り方 / Java並行処理プログラミング / アジャイルサムライ / データベース技術実践入門 / マスタリングTCP/IP 入門編 第5版 など

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

さらなる基礎を抑えるという意味で、数学の復習をしてみたりも良いでしょうが、深みにハマっていくときりはなさそうです。

作戦3: お隣の分野に入門する

自分の専門ではないけれど、近い領域で役立ちそうな技術を見繕って勉強してみるという作戦です。僕の場合は、機械学習や電子工学といった技術は今すぐには必要になってはいませんが、そのうち役立つだろうと、ちょっと入門してみたりします。最近はこの作戦3を使っていることが多いです。

例: 機械学習 / 電子工学 / など

ちょっと別の話題として、作戦1や作戦2を繰り返していると、徐々に自分がもっている知識が増えてきて学習曲線が緩やかになってきます。それ自体は結構なことですが、やっぱり勉強をはじめたところの、高速に成長してる感覚を取り戻したくなるときがあります。そういうときは作戦3で勉強ネタを選ぶと、成長している感が得られて楽しかったりします(ちょっと逃避っぽい側面ですが)。

番外編: 自分がやりたい仕事ができそうな技術を学ぶ

純粋に技術的ではないですが、ある意味王道の作戦です。おもしろい仕事ができそうな技術を学びます。

技術をもっていないとその技術を使う仕事ができませんから、当然学ぶ必要があります。加えて、自分が勉強しているトピックというのものは、なんだかんだで会社の人にも見られていますから、その技術に関係ある仕事を任せられる可能性があったりなかったりするかもしれません。

高難易度の技としてはイケてる技術学んで、その技術を使った仕事を自分で作りだすというやりかたもありそうです。これはできたらかっこいいですね。

まとめ

僕が新しく何を学ぶかを決めるときに使っている作戦を紹介しました。勉強し続けるモチベーションを維持するには、常に勉強したいことをストックしておくのも大事です。Webエンジニアとして勉強をしていく上で、このエントリで紹介した作戦が何かの役にたてばうれしいです。

明日のアドベントカレンダーは id:syou6162 さんです!

*1:このあたりはid:stanakaさんの受け売りです