えふしんに聞く「僕が若手エンジニアならこれを学ぶ!」トップランナーの考える成長戦略
「モバツイ」の生みの親であり、現在はBASE株式会社の取締役CTOを務める、「えふしん」こと藤川真一氏に、「もし、あなたがいま若手エンジニアだったら、どんな成長戦略を採りますか?」と聞いてみました。若手エンジニア必読のえふしん流7つの戦略とは?
「何を学び、どのように技術力を向上させていくべきか」は、若手エンジニアにとって非常に悩ましいテーマのひとつ。
キャリアが浅いころは学習を進める“勘どころ”がないため、なかなか効率の良い技術習得ができません。加えて、過去の時代と比較すると学ぶ対象であるプログラミング言語やIT領域も圧倒的に広範囲になっています。そのため、少し方向性を見誤ってしまえば、無駄な技術の学習に時間を割いてしまう可能性が高いのです。
その課題を解決する有効な方法があります。それは、著名なエンジニアの方々から、「若手エンジニアが採るべき成長戦略」を聞くこと。彼らの深い考察力と長い経験からアウトプットされた戦略には、有益なノウハウが詰まっています。
今回は、モバイル端末向けのTwitterウェブサービス型クライアント「モバツイ(現在はサービス終了)」の生みの親であり、現在はBASE株式会社の取締役CTOを務める、「えふしん」こと藤川真一(ふじかわ・しんいち/@fshin2000)氏に、「もし、あなたがいま若手エンジニアだったら、どんな成長戦略を採りますか?」と聞いてみました。若手エンジニア必読のえふしん流7つの戦略とは?
- (1)「どの言語から学ぶべきか?」なんて、考えなくていい
- (2)コンピュータの仕組みを学ぶには「モバイル」をやるべし
- (3)“学びどき”の領域は、機械学習と人工知能
- (4)えふしん流・プログラミングの心得
- (5)「自分の適性はどのレイヤーにあるのか?」を考えよう
- (6)今あえて話す。モバツイの「しくじり」エピソード
- (7)えふしんの「しくじり2」に学ぶ、何かの分野を極めておく重要性
(1)「どの言語から学ぶべきか?」なんて、考えなくていい
エンジニアの間で、ときおり「どのプログラミング言語から学ぶべきか」について議論されることがあります。きっと皆さんも、「えふしんが選ぶ、最初に学ぶべき言語は〇〇だ!」という答えを期待されていることでしょう。
いきなり期待を裏切ってしまい非常に心苦しいのですが、「最初に学ぶべき言語はどれ?」という議論は、正直なところほとんど意味のないものだと思っています。なぜなら、言語のトレンドは必ず変化していくものだからです。
例を挙げると、現在Go言語がとても流行していますが、10年前この言語は存在すらしていませんでした。また、多くの方がご存知のように、IT企業は規模が大きくなってくると自社製のOSやプログラミング言語、フレームワークなどを新しく作り始めるケースが多い。なぜかというと、自社で技術の普及にコミットすることで、技術トレンドの変化というリスクを低減することができるからです。
たとえば、FacebookがReact.jsやHipHop Virtual Machineを開発したことはその好例です。きっとこれから5年後、10年後には、今とは全く違ったテクノロジーが流行しているでしょう。逆説的に言えば「最初に選んだ言語が何か?」によってそのエンジニアの価値が決まることなんてあり得ないのです。
あえて「最初に学ぶべき言語」の解を出すなら、「自分が入った会社で使われている言語」で全く構いません。
それでは、若いエンジニアは何に注力すべきなのでしょうか。その答えは、どのようなプログラミング言語を使ったとしても、その技術のポテンシャルを最大限に引き出せるように使うことです。その際に、「コンピュータはなぜ動くのか?」「どうすればコンピュータリソースを効率的に使えるか?」などの本質的な知識を身につけておくと助けになるでしょう。そのための具体的な方法を、次の章で解説していきます。
(2)コンピュータの仕組みを学ぶには「モバイル」をやるべし
コンピュータの仕組みを学ぶ一番てっとり早い方法は、モバイルやIoTのプログラミングをやることです。モバイルやIoTのコントローラはハードウエアリソースが限られており、メモリやCPUを意識しながらプログラミングする必要があり、必然的にコンピュータの仕組みに詳しくなれるのです。
もしかしたら読者の中には「自分はWebエンジニアだから、モバイルやIoTに携わる機会がない」というエンジニアもいるかもしれません。しかし、こうした考え方は自分のチャンスを自分で逃しているとも言えます。
PCさえ持っていれば、プログラミングを始めるのにお金はいりません。開発環境からプログラミング言語、各種フレームワークに至るまで、ありとあらゆるツールが無料で手に入ります。スマートフォンやArduinoなどのハードウエアも自分のお給料で買えないものはありません。にもかかわらず、自分にとって未知の領域にチャレンジしないのは非常にもったいないことです。自ら成長の機会を少なくしているわけですから。
また、コンピュータの仕組みを学ぶ上で役立つ書籍もたくさん出版されているので、そうした本を読むのも有益だと思います。
モバイルやIoTの本ではありませんが、たとえば、ベストセラーとなった『プログラムはなぜ動くのか』。
C言語の基本中の基本を解説してくれる『はじめてのC』。
普段使っているPHPの仕組みを解説した『PHPはどのように動くのか ~PHPコアから読み解く仕組みと定石』。
オブジェクト指向の概念をわかりやすく理解できる『Java 謎+落とし穴 徹底解明』(ただし、この本は絶版ですが)などがおすすめです。
これらは、エンジニアの技術向上に大きく寄与してくれます。
(3)“学びどき”の領域は、機械学習と人工知能
あえて“学びどき”の領域を挙げるならば、それは間違いなく機械学習・人工知能でしょう。
Webアプリではユーザーからどんな情報でも取れるわけではありません。ユーザビリティの観点からも「長いフォームを用意して、ありとあらゆる情報をユーザーに入力させる」のは避けるべきです。
そのため、個人属性のような取りにくい情報は、Web上で収集できるデータ(行動ログなど)から類推する仕組みが必要になります。各IT企業がこぞってその仕組みを導入していることは、多くの方がご存知でしょう。それゆえに、機械学習・人工知能のニーズが高まっているのです。
だから、それらの技術の方法論をしっかり理解しておくと強いです。仮に自分がコードを書かずチームで分業するとしても、各メンバーと連携するうえで、システム実現の難易度を理解しておくに越したことはありません。
ただし、機械学習・人工知能の技術を利用する際に気をつけなければいけないことがあります。それは、「そのアルゴリズムによるアウトプットを、いかにして具体的なサービスに結びつけるか?」を常に考えておく必要があるということです。
「この課題を解決したい」とか「このデータを活用してこういう効果を出したい」という明確な方針がなければ、たとえこれらのテクノロジーを利用したとしても成果に結びつけることはできません。使い道のない大量のデータが生み出されてしまうだけです。
しかし、「サービスに結びつける」ことができるエンジニアは、現在とても少ないと私は考えています。だからこそ、機械学習・人工知能を担うエンジニアは「サービス全体を設計するスキル」もしくは「サービス全体を設計できる人と連携をとって仕事をするスキル」を持っておくと、今後はとても重宝されるでしょう。
(4)えふしん流・プログラミングの心得
このあたりで、プログラミングを学習する際のアプローチについて話したいと思います。
私が何か新しいプログラミング言語に手をつける場合、基本的に本は読まないです。オンラインのリソースから学んでいくことがほとんどですね。私がその言語にたどり着く段階では、アーリーアダプターの人たちがだいたい情報を出し切ってくれていることが多いので、ありがたくそれを参考にしながら学習を進めます。
若手エンジニアの方々には、「公式サイトのドキュメントが優れている技術を活用すること」を勧めます。たとえば、PHPの公式マニュアルやMySQLのリファレンスマニュアルなどはすごく質が高いですよ。
あと、「エラーハンドリングの実装方法」をきちんと学んでおくと、スキルの高いエンジニアになれると思います。エラー時の挙動は、アプリケーションの品質を左右する重要な要素だからです。
その技術は経験によって培われる部分も大きいのですが、それ以外にも効率的にエラーハンドリングのスキルを磨く方法があります。プログラムのソースコードや公式ドキュメントを読むことです。発生しうるエラーの種類は、それらの中にすべて定義されているからです。
この学習法は、エラーハンドリングのみならずプログラミング習得全般において有効なので、覚えておくといいでしょう。
(5)「自分の適性はどのレイヤーにあるのか?」を考えよう
私はWebサービスを作るのが大好きです。というより、人にサービスを使ってもらえるのが好きなのです。
この「○○を作るのが好き」というポイントってエンジニアごとに違っているので、「自分は何に対して情熱を注げるエンジニアなのか?」「その適性はどういった方法を取れば生かすことができるのか?」を把握しておくのが大切だと思います。
たとえば、ミドルウェアのように中間レイヤーのツールを作るのが得意な人がいる。こういう人って現代においては、開発したものをGitHub上で公開しておくとすごく有名になれるし、重宝されるんです。
でも対照的に、私みたいにWebサービス開発に適性がある人ってGitHubとの相性が悪い。サービスとは最終製品なので、GitHub上に公開しても他のエンジニアが応用できないから、相当作り込まないと、なかなか人気が出ないんですね。
だから、「意識の高いエンジニアはGitHub上に自分の開発したソースコードを公開すべし」みたいな風潮が最近あるけれど、必ずしもみんながそうでなくてもいいと私は思っています。
サービス開発に適性がある人は、自分で要件を考えてサービスを作ればいい。インフラを整備するのが好きな人は、個人で活動してもそんなに楽しくはないでしょう(笑)。なので、組織の中で誰かを手伝った方がいい。
大事なのは、数あるレイヤーの中から自分のやりたいものや適性を見極めた上で「ロールモデルとなる人」を設定することだと思うんです。その人がどんな活動をしているのかじっくり研究していけば、「エンジニアとしてどのような活動をすれば成功できるのか」がなんとなくわかってくるんじゃないでしょうか。
(6)今あえて話す。モバツイの「しくじり」エピソード
堅苦しい話ばかり続くのもなんですから、このあたりで私のキャリアにおける「失敗談」とそれに関連する「心得」みたいなものも話しておきたいと思います。
エンジニアというよりは経営者としての失敗なんですが、私はモバイル端末向けのTwitterクライアント「モバツイ」をスマホへシフトさせるタイミングを完全に見誤りました。その結果、Jig.jp社にサービスを譲渡して延命する選択を取りました。
スマホへのシフトが出遅れたのには理由があります。「iモードを使っているケータイのシェアはまだまだ大きいから、急いでスマホへ移行する必要はない」と考えてしまったからです。実はいまだにiモードを利用可能なケータイのシェアは日本全体の4割近くあって、その山は非常に大きいのですね。
でも、「iモード向けの広告」はiモードよりも早く衰退してしまいました。なぜかというと、広告ビジネスというのはメディアへの“期待感”に対して投資するようなところがあって、「山は大きいけれど過去のメディアになったもの」にはもはや投資をしないんです。気づいたときには、すでに手遅れでした。
その経験を踏まえて、若い方々にアドバイスしておきたいことがあります。それは「おっさんの言うことは信じるな」です。
他社の方は他社の成功モデルで動いていますし、ビジネスモデルも違います。他社の成功事例を聞いて、「まだ大丈夫」などとつい安心してしまうと、現状維持バイアスに飲み込まれてしまいます。実はこれがすごく厄介なんです。
人間ってどうしても「自分が安心できる意見」を聞いてしまうので、その結果リスクのある決断ができなくなってしまうのですね。だから、大人たちの言うことはあまり信じすぎちゃいけない。時世を読み、次に取るべき行動を冷静に見極めていく必要があると思います。
(7)えふしんの「しくじり2」に学ぶ、何かの分野を極めておく重要性
最後に、ちょっと視点を変えて話をしたいと思います。いま、IoTの技術が普及していますよね。実はあれって、ベースとなっている技術自体は目新しいものじゃなく、私が大学生の頃にはすでにあったんです。私は大学の頃その領域に手をつけていたんですが、ものすごく深掘りしていたわけではありませんでした。
また、私が最初に入った製造業の会社では、ハードウエアの制御技術とインターネット技術を組み合わせた製品も出していたのですが、まだ応用例もなく深掘りできないままネット企業に転職しました。
でもそこから10年以上が経った今、インダストリー4.0やIoTの波が来ています。今になって思うと、ハードウエアの分野を深掘りしておけばよかったかもしれない。その技術を突き詰めていれば、今とは違う仕事をしていたかもしれない。
それを踏まえて若手エンジニアの方々に伝えておきたいことがあります。今、携わっている特定の分野において「一流」と呼ばれるくらいまで、自分の技術をぜひ磨いてほしいです。何をやってもいいと思うんです。自分の好きなことをやれば。
そのスキルは、絶対に無駄にはなりません。その時の経験は必ず他の技術でも流用ができます。コンピュータとかサービスの本質って、時代が変化してもさほど変わらないものなんですよ。
短期的な「流行りもの」に惑わされるんじゃなく、長い目で見て「地力を身につけること」を大事にしてほしい。それが結局は、エンジニアとして成功する近道になると思います。
取材:中薗昴(サムライト)/写真:小堀将生