最近、コンピュータサイエンスなどの基礎的な知識を学習するように心がけている。できる限り今後も長い期間役に立つ、寿命の長い技術や知識を付けておきたいためである。その一貫で アルゴリズムを学習 してみている。
学習をはじめて感じた課題
しかし、とりあえずアルゴリズムを学習してみると、学習を続けられるか分からないという課題も感じた。
- 寿命の長い技術であるほど、日々の開発にすぐに利用できないことが多い
- 例えばアルゴリズムを学んだとしても、それが役立つまでいくにはある程度長い時間が必要
- 日々の開発に利用できていないと、モチベーションをずっと保ち続けるのが難しい
- モチベーションが保てないと、結局途中で勉強をやめてしまい、日々の開発に利用できるレベルまでたどり着けない
流行りの技術とかは、すぐに開発に導入してみるとかができるので、とりあえずモチベーションは保ちやすい。しかし、数学とかアルゴリズムとかLinuxカーネルの内部構造とかは、ずっと勉強していればほぼ確実に役立ちそうだけど、日々の開発にずっと利用できなければモチベーションを保つことが難しい。
では、どうすれば寿命の長い基礎技術を、モチベーションを保ちつづけながら学習し続けることができるのだろうか。
自分の中の解決策
それで最近いろいろ考えてみたのだけど、自分の中では「正に今開発をしているサービスの分野の、基礎分野を学習していく」と良いではないかと考え始めた。
例えば、小説投稿サービスは文字を扱う分野である。そこで、ざっくりアルゴリズム全体を学ぼうとせず、アルゴリズムの中でも特に文字に関係することを学んだり、全文検索エンジンの中身を学ぶようにする。他にも、ソーシャルな要素が強いサービスならグラフのアルゴリズムを学んだり、AWSをメインで運用するならOSの仕組みやネットワークの仕組みなどを学ぶなどが考えられる。
このようにすると、自分の中でその基礎技術を実際のサービスに利用できるレベルまでいかなかったとしても、実際のサービス開発の中で基礎技術との繋がりを見つけたりすることがある。繋がりを見つけられると、日々の開発で少しは役立った感を得られ、モチベーションが増加する。さらに、もしかしたらこういう風に応用できるかも?という夢想も出来ることもあり、それを試してみることで、さらにモチベーションを高められる。
このようなことを繰り返していくと、寿命の長い基礎技術でも、モチベーションを保って学習を続けられるのではないかと思った。