ギーク直伝の技術習得メソッド!トレタ増井雄一郎の考える、効率のよい言語選択のワザ
最初に学ぶべき言語は? 新たな技術の習得フローは? 若手エンジニアの成長戦略にまつわるメソッドを日本を代表するギーク、トレタのCTO増井さんに聞いてみました。
自身の技術力を向上させるために、皆さんはどのような羅針盤を持っていますか? 情報や選択肢が無数に存在するなかで、「自分にとってのベストな成長戦略」を採用するのは、なかなかに難しい作業です。ならば、人に聞いてみましょう。それも、未開の領域を切り拓いてきた、トップエンジニアに。
今回、若手エンジニアに向けて技術習得にまつわるメソッドを教えてくれたのは、株式会社トレタのCTOであり数多くの講演・執筆活動も行っている増井雄一郎(ますい・ゆういちろう/@masuidrive)さん。増井さんがここまで培った技術・知識を一挙に棚卸ししていただくと同時に、その中から若手に伝えたいエッセンスを抽出してもらいました。
日本を代表するギークの一人として知られる増井さんが、これまでのプロセスから得られた珠玉のメソッドをご覧あれ!
- 【大原則】価値観の根底にあるオープンソースの思想
- 【学習メソッド1】最初に学ぶべきは、質問できる人が近くにいる言語
- 【学習メソッド2】新技術の習得からコミュニティ参画まで
- 自分がもし新人エンジニアなら、この領域に手を付ける
- 【学習メソッド3】アイデアをオープンにすると磨かれる
- 僕のしくじりは、英語をきちんと学ばなかったこと
- 「エンジニアの眼」を養うためには、“核”になるスキルを1つ持て
【大原則】価値観の根底にあるオープンソースの思想
まず解説しておきたいのは、僕のエンジニアとしてのキャリアを振り返ったとき、最も影響を受けたのが「オープンソースの思想」であることです。
僕がちょうど大学生の頃、エリック・レイモンドという方が『伽藍とバザール』という本を著したのですが、それを読んで当時大きな衝撃を受けました。
伽藍とバザール
著:エリック・レイモンド/訳:山形浩生/刊:USP研究所
このエッセイでは、Linuxのようなみんなで寄ってたかって開発するというオープンソースプロジェクトの仕組みを分析して、著者が実際にオープンソースプロジェクトを始める話が書かれていました。
僕は中学時代にコンピュータと出会ったので、その本を読む以前にもプログラミングは大好きでした。でも、オープンソースを活用して、1人ではなく大勢の人が力を合わせてプロダクトをつくるために何をすべきなのか。志を同じくする人たちとの関わりをどう増やすべきなのか、という方法論は、『伽藍とバザール』を読んでから強く意識するようになりました。
過去、フリーランスのエンジニアとして仕事をしていた自分にとって、『伽藍とバザール』から学んだ要素は、当時僕が開発にコミットした「PukiWiki」というサービスに集約されています。
「PukiWiki」は、もちろんこうしたサービスを作ってみたかったという思いもありましたが、モチベーションがもうひとつありました。それは『伽藍とバザール』に記されているOSSという概念やチームで作り上げるという考え方、手法を自分の手で実行してみたかった、という思いです。
ここで培ったオープンソースの思想が、僕のエンジニアとしての全ての活動の根底に流れていますし、アイデアの源泉だと思います。
【学習メソッド1】最初に学ぶべきは、質問できる人が近くにいる言語
それを前提として、「若手エンジニアの方は最初にどんなプログラミング言語を学ぶべきか」について話をしたいと思います。いろいろな方からこの質問をされることが多いのですが、僕の答えは明確に決まっています。「質問できるエンジニアが近くにいる言語」です。
各プログラミング言語は、異なる特徴を持っています。でも、どんな言語でも一定以上のスキルまで到達すれば、同じようなことが実現できます。選択した言語による優位性って実はほとんどありません。Javaであろうと、アセンブラであろうと、Rubyであろうと、変わらない。
それよりも重要なのは、何か困ったことや理解できない内容があったとき、相談できる人が近くにいることです。プログラミングって、自分で数日間調べても全くわからなかった内容が、誰かに質問すれば数分でわかるなんてことがよくあります。だから、いつでも質問できる環境があることが何より大事なんです。
それは、優秀なプログラマが物理的に自分の近くにいる、という意味合いでもそうですし、プログラミング言語のコミュニティが活発でオンライン上ですぐ質問できる、という意味合いでもそうです。2017年現在で言えば、PythonやRuby、JavaScriptなどの言語はすごく良質なコミュニティが育っていると思います。だから、最初に習得するならばそれらの言語は非常におすすめですね。
僕の1番好きな言語ってRubyなんですけど、それは言語そのものの仕様が好きというだけではなくコミュニティも好き、というのが大きいんです。だから、習得したい言語やフレームワークの選定時には、「どんなコミュニティが存在しているのか」「そのコミュニティはどういった思想を持っているのか」を理解しておくといいと思います。
個人的な意見を言うと、言語固有のコミュニティが持つ思想は明確であれば明確であるほどいいと思っています。思想がはっきりしていれば、エンジニアから見た場合に「好きか」「嫌いか」も判断しやすくなりますから。人間って自分の好みがモチベーションに大きく影響するので、言語選定においても好き嫌いという要素はとても大きいのです。
ちなみに言語開発者の思想を学ぶという意味だと、僕は37signalsという企業のエンジニアが執筆した本である『Getting Real』にも大きな影響を受けています。
これは、Ruby on Railsの開発メンバーが、どんなことを考え、なぜ会社を運営し、そして、なぜRuby on Railsを作ったのかが解説されている書籍。これを読んで、その根底にある思想に大きな感銘を受けたのも、僕がRubyを好きな理由のひとつです。
【学習メソッド2】新技術の習得からコミュニティ参画まで
それに関連して、僕が新しい言語を習得して、そのコミュニティに加わるまでの具体的なプロセスを示しておきたいと思います。
僕が何か新しい言語やフレームワークを学ぶ場合には、「何かを作りたい」という明確な動機があるケースが多いです。例えば、React.jsを使い始めたきっかけも、いくつか作りたいJavaScriptのツールがあってフレームワークを探していたときに偶然出会って、でした。
言語やフレームワークを見つけた後は、まずチュートリアルなどで実際に手を動かします。まずは「使えるか、使えないか」という視点で見るわけです。
サンプルコードを書いてみて「これは面白い」と思ったら、その開発者のブログやGitHub上にあるIssuesの履歴などをチェックします。それから、何かのイベントで登壇しているなら、そのレポート記事にも目を通します。そうすることで、開発者の持つ思想がぼんやりと見えてくるんです。
そうしたプロセスを経て、開発者やコミュニティの思想に賛同できれば、そのコミュニティに加わる、というケースが多いですね。
自分がもし新人エンジニアなら、この領域に手を付ける
仮にもし僕が新人エンジニアになったとしたら、どういったところから手をつけてどの領域を深掘りしていくか。まずは、自分が使うためのアプリを作ると思います。メモ帳やToDoリストなどがその候補になるでしょうか。
そのツールを開発する際、今の僕はRubyが慣れているのでRubyを使うと思うんですけど、もし全くゼロからのスタートだとしたらPHPやフレームワークのLaravel、Symfonyなどを使うかもしれないですね。なぜかというと、純粋にユーザーの数が多いから。
そこからさらに、データベースの知識は必ず必要になってくるのでデータベースを学びます。そして、現代はGoogle BigQueryのようなビッグデータ解析プラットフォームの需要も高まっているので、そういった領域も次に学ぶ。
あと、僕はテキスト処理がすごく好きなのでテキストマイニングも学ぶかもしれません。チャットBotなんかは初心書でもコーティングしやすいのでおすすめです。UIを考慮する必要がなく、プログラミングのみで形にできるからです。さらに、公開すれば多くの人に使ってもらえるから、エンジニアの仲間も増えると思います。
【学習メソッド3】アイデアをオープンにすると磨かれる
オープンソースという意味で言うと、僕はインターネット上に「作りたい物&試作品リスト」を公開しています。何かサービスのアイデアを思いついたら、ここに書いておくんです。そうすることで、新しい人との交流や仕事に結びつきやすくなるから。
そもそも、僕がトレタ代表取締役の中村仁と知り合ったのも、このリストがきっかけなんです。僕がリストに書いていたアイデアと中村が考えていたアイデアが一緒だということに共通の友人が気づいてくれて、会う機会を設けてくれました。そうして今、僕はトレタのCTOをやっているので、改めて不思議な縁だなと思います。
プロダクトのアイデアをインターネット上で公開しておくことは、若手エンジニアのみならず全てのエンジニアにおすすめしたいです。情報を定期的にSNSやブログなどで発信していると、たまに全く知らない人から「そのサービス既にありますよ」とか「一緒に作りませんか」とコメントを貰えます。
何かを勉強をしているならばその内容を。サービス開発がしたいのならその旨を。定期的に外部に発信しておくことで、キャリアの幅は大きく広がります。
そして情報発信するときに重要なのが、「どう見せるか」を徹底的に考えること。要するに、エンジニアとしてのPR戦略を練るということです。例えば僕はかつて、RubyでiOSのアプリが開発できるMobiRubyというツールを提供していました。そのMobiRubyの公式Webサイトを、こういった感じに作りこんでいたんです。
こういうページがひとつあるだけで、「ちゃんとしたものを作っているエンジニア」っぽく見えるので、ブランディングに繋がります。ひと手間をかけて、適切な形で自分のことをPRするのが大事なんです。
僕のしくじりは、英語をきちんと学ばなかったこと
少し真面目な話が続いたので、このあたりで自分のキャリアを振り返って「しくじりエピソード」も話しておきたいと思います。それは、英語をきちんと勉強しなかったことです。
僕は社会人になってから数年間アメリカに住んでいた時期があったんですが、当時は部屋にこもって開発ばかりやっていて、英語を学ぶ機会を設けませんでした。良い環境があったのになんてもったいないことをしたんだろうと、今では思っています。
僕、ブロークンな英語では話せるんですけど、本当にブロークンなんです。議論ができない。だから、ビジネスに必要となる難易度の高い交渉は、未だに英語ではできません。僕を反面教師として、これから第一線で活躍していくエンジニアの方々には、ぜひ英語を学んでほしいと思っています。
なぜなら、オープンソースのさまざまな活動をするにあたり、英語は絶対に必要になってくるから。流暢に話せる必要はありません。読み書きができるだけでも十分です。GitHubのIssuesでのやり取りを追ったり、StackOverflow上で質問をしたり。その際に英語のスキルがあるだけで、コミュニケーションできる世界は圧倒的に広がります。
「エンジニアの眼」を養うためには、“核”になるスキルを1つ持て
最後に、これからの未来を担っていく若手エンジニアの方々へ、アドバイスをしたいと思います。それは、何かひとつ自分の“核”になるスキルを持ってほしいということです。エンジニアとして、周りの誰よりも詳しいと自信を持って言えるくらいのものを身につけてほしい。何か自分が興味を持って打ちこめる領域を見つけて、それを深掘りすることが大事。そして、その領域を探す際には、ぜひ今回解説したような方法を参考にしてほしいです。
なぜかというと、特定の技術を突き詰めておくことで、他の技術を学ぶ際、業務上の課題に向き合う際など、何らかの課題があるときに、その解決策を思いつけないんですよ。むしろ、起こっていることが課題であると認識することすらできなくなるんです。
私の場合、初期に築いた“核”は、高校生のときに学んだdBaseというデータベース管理システムの操作言語でした。高校生だけど周りの大人よりdBaseは詳しいという“核”があるから対等に話をしていけました。いま考えればずいぶん自分勝手な仕事をしていましたが(笑)。
技術という光があって、それを軸にして物事を考えるからこそ、発見しにくい課題を見ることができるのだと僕は思っています。
昨今、フルスタックエンジニアがもてはやされて、さまざまなスキルをバランスよく習得するのが良しとされたりもしますけど、決して最初からそうならなくていい。一定以上のスキルになれば必然的に新しい領域の技術を学ぶ必要が出てきますから、そのタイミングで勉強すればいい。
技術の“核”を持っておくことが、世の中にある課題の本質を捉え、その解決策を導き出せるエンジニアになるための第一歩なんです。
取材:中薗昴(サムライト)/写真:丸山慶子