IT芸人に学ぶエンジニア成長術、長く活躍するための勉強方法とは

変化の激しいエンジニアの世界で、どうすれば成長し続けられるのか。そのヒントを、飲食店向け予約台帳アプリを手がける「トレタ」の増井雄一郎さんが、3回にわたって解説します。第1回のテーマは勉強の仕方について。「IT芸人」の異名でも知られ、本業の傍ら年30回以上の講演をこなす増井さんは、どうやってエンジニアの成長に欠かせない勉強を続けてきたのでしょうか。

masui_top

初めまして、トレタというレストラン向けのアプリを作っている会社のCTOをしているmasuidrive(増井雄一郎)です。個人的にはPukiWikiというCMSを作ったり、メモ帳アプリ「wri.pe」の作成などをしています。数年前には「Titanium Mobile」のエバンジェリストをしていたのでそちらでご存じの方もいらっしゃるかもしれません。

この連載では移り変わりの激しいこの世界でどうやってエンジニアを続けて行けばいいのか、私が悩んできたことを解説します。みなさまの役に立つかは分かりませんが、一つのアイディアとして読んで頂ければ幸いです。

どうやって勉強すればいいの?

講演の質問の中で「どうやって勉強すればいいのか」という質問はよく聞かれます。「エンジニアは一生勉強しなければいけない」というのはよく言われていますし、エンジニアを続けて行きたいと思っている人には危機感もあると思います。しかし実際に勉強し続けられる人は多くないと思います。

「エンジニア35歳定年説」も良く言われていますが、この原因の一つは勉強にあるんじゃないかと思っています。多くの人は大学生や新人の頃に初めてプログラムに触れ勉強します。大抵25歳ぐらいまでは本を読んだり仕事を通じて多くのことを勉強すると思います。

しかし、プログラムを一通り覚えると、新たに勉強することなく仕事を進められるようになり、勉強する機会がぐっと減ります。

プログラムの世界は10年ぐらいで大きく技術が入れ替わるので、ちょうど35歳ぐらいには新しい技術に追いついていけなくなっているのではないでしょうか。いまから10年前にはまだスマホもなく、Railsがリリースされた直後で実際に使う人は少なかった時代です。逆に言えばちゃんと勉強をし続ければ35歳を過ぎてもエンジニアとして一線で働いていけるのではないかと思っています。

さて、では実際に何を勉強するかというのも問題です。私は勉強には大きく二つあると思います。一つは「今やってることの勉強」、もう一つは「まだやっていないことの勉強」です。

「今やってることの勉強」は、仕事などで使っている技術の延長線上にあることを学ぶ事です。新しいライブラリだったり、使っているフレームワークの新機能だったりします。これは勉強するための資料も多いし、結果もすぐ仕事に現れやすいので取り組みやすいと思います。

「目新しいこと」だけが将来の勉強ではない

私がよく聞かれる事の一つに「次は何が流行ると思いますか?」「次は何を勉強しておくとプラスになりますか?」というものがあります。次に流行ることを勉強しておいて、人より先に立ちたい、流行らないことを勉強して時間を無駄にしたくない、という理由からだと思います。あとエンジニアは新しいものが好きな人が多く、「目新しい技術」を人より先に覚えておきたいと思う人も多いでしょう。

確かに、エンジニアとして長く生きていくためには「今やっていることの勉強」以外に「将来のための勉強」が必要です。しかし、それは「目新しいこと」である必要はありません。新しい言語やフレームワークを覚えるのは楽しいですが、まずは基礎的なことを覚えることをオススメします。

個人的にはコンパイラやVMなど原理といえるような技術は一通り押さえておくことはオススメします。新しい言語はつぎつぎ出てきますが、その根幹をなすコンパイラは変わらない部分が多くあります。

フレームワークやツールといった上位層は動きが激しく、流行り廃りが数年単位で起こります。それに比べ、言語やアルゴリズムなどの下位層では10年20年という単位で大きく変わることはありません。

ちょうどメトロノームのようになっています。

masui01

長く活躍するには勉強グセをつける

しかし基礎的なことを勉強するのは難しい側面もあります。私もアルゴリズムや数学を勉強しようといつも思うのですが、今のところほとんど進んでいません。

いきなり基礎的なことを学ぼうとしても、具体的に使い道も思いつかないのでモチベーションを保つのは難しいと思います。なのでいきなり全然違うことを始めるのではなく、いまやっていることを掘り下げていくのが良いと思います。

JavaScriptなど特定の言語が好きなのであれば言語そのものの実装、いま流行りのディープラーニングに興味があるのであれば数学について勉強するなど、興味のあることに関する基礎的なことを勉強すると良いと思います。

ただそれだけだとやっぱりつまらないので、新しいことも勉強したくなります。今だとディープラーニングとかIoTがホットな分野なので、この辺を押さえておくことは無駄にならないと思います。ただこの二つともそのままの形で使われるようにならないかもしれません。でも勉強した知識は無駄にはなりませんし、なにより「定期的に勉強する」というクセを付けることは非常に大事です。

学生の頃、勉強していた人も社会人が長くなると勉強するクセが抜けてきます。会社から帰ったあとや休日に机に向かって勉強するクセがないと、次に自分がやりたいことを見つけたときに、それを勉強するのが難しくなります。このクセを持っているかどうかがエンジニアとして長くやっていけるかを分けると思っています。

いま学んでみたいと思うものがない場合は、ムリに新しい事をする必要はないと思います。私も1年ぐらい新しいことにチャレンジしなかった時期がありました。実際、2014年はほとんど新しいことを学びませんでした。しかし、その間も過去に勉強したことを整理して講演したりブログを書いたりと、机に向かって考える時間は定期的に取るようにしていました。

どうやって勉強時間を確保する?

勉強グセをつけろと言っても忙しくて時間を確保するのは難しいし、土日も予定があったりするものです。実際に、勉強する時間を確保するのは年を追うごとに難しくなっていきます。

勉強時間の確保の仕方としては、コツコツと毎日・毎週少しずつ時間を取るか、平日も夜中まで休日も一日中集中して一気にやる方法があります。

私は飽きっぽいので集中型です。例えば2012年にmrubyとMobiRubyを作っていたときは、毎日仕事から帰ってきたらすぐパソコンに向かい、土日も基本的にはコードを書いていました。こういうモードに入っている時は移動中の電車もコードをチェックしたり、外出時にもiPadでコードを書いています。

外出時にもiPadでコードを書いている

外出時にもiPadでコードを書いている

勉強したらアウトプットしよう

私は勉強するときに心がけているのは、必ずアウトプットすることです。新しく学んだことはブログを書いたり講演したり、その技術を使ってコードを書いてみんなが見えるようにします。小飼弾さんと対談したときにも「人が見えるところで遊ぶ」という話が出ました。私は勉強する目的が「新しいことを習得したい」というより「外に何かを発表したい」ということが多くあります。

本を読んだらまとめを書いたり、勉強したことを疑問点を含めてブログに書いたりすると意外に反応があって面白いです。今だと技術ネタはQiitaに書くと多くの人の目に触れさせることができます。

私は自分の毎年の目標として「1本個人アプリを出す」「英語で発表する」というものがあります。勉強する内容も大事ですが、それと同じぐらいそれを公表して評価してもらうことも大事です。

勉強した内容を公表すれば意見が集まったり、同じ事をやっている人達に出会うことができます。ネットであればブログやQiita、大都市圏であれば勉強会などで発表する方法があります。

ブログを書くまで行かないというのであれば、Twitterでも良いと思います。Twitterは検索が容易にできるので、実は同じ事をしている仲間を簡単に探すことができます。

例)
https://twitter.com/search?q=lang%3Aja%20react&src=typd
https://twitter.com/search?q=mruby&src=typd

アウトプットしても誰も見てくれないんじゃないか、見てくれても変なコメントが付くんじゃないかという不安もあると思います。初めはうまくいかないことも多いと思いますが、結果として必ずプラスになるので、勉強した内容は公開することをオススメします。