できることならば即戦力のエンジニアを採用したいのはどの企業も同じだろうが、エンジニア不足が叫ばれて久しいWeb業界。そうは問屋が卸さないというのが正直なところである。即戦力が採用できなければ、育てるしかない。では、どうやって育てればよいのだろうか?
現在BASEのCTOとして活躍し、エンジニア養成学校『ジーズアカデミー TOKYO』のメンターとしてエンジニア育成にもかかわるえふしん氏と、業界の酸いも甘いも知り尽くす村上福之氏に、新人エンジニアの育成に必要なものが何なのかを尋ねてみた。
藤川真一(えふしん)
FA装置メーカー、Web制作のベンチャーを経て、2006年にGMOペパボへ。ショッピングモールサービスにプロデューサーとして携わるかたわら、2007年からモバイル端末向けのTwitterウェブサービス型クライアント『モバツイ』の開発・運営を個人で開始。2010年、想創社を設立し、2012年4月30日まで代表取締役社長を務める。その後、想創社(version2)を設立しiPhoneアプリ『ShopCard.me』を開発。2014年8月1日からBASE(ベイス)株式会社のCTOに就任
株式会社クレイジーワークス 代表取締役 総裁
村上福之(@fukuyuki)
ケータイを中心としたソリューションとシステム開発会社を運営。歯に衣着せぬ物言いで、インターネットというバーチャル空間で注目を集める。時々、マジなのかネタなのかが紙一重な発言でネットの住民たちを驚かせてくれるプログラマーだ
モノづくりの新人時代は現場でペアプロ的育成
えふしん 僕がFAの装置メーカーに新卒で入った時は、初日から板金の仕事をやってました。僕とふくゆきさんの新卒時代はWebサービスではなくモノづくりの会社だったので、新卒は最初は配属初日から現場で修行だったんですよね。いきなり溶接をやってカルチャーショックでした。
村上 改めて思うと、製造現場に出るのって大事ですよね。
えふしん 設計の仕事をする時に現場の苦労が分からないとダメだ、という話ですね。
村上 大事大事。2、3年は現場でやれと。特に大きい会社とかだと、ジョブローテーションでエンジニアでも販売から現場までひと通り経験させられますね。僕も家電メーカーの新卒時代は、リワーク(部品交換)ではんだごてを持ってラインに立たされました。
えふしん 最初の研修は、基本現場でしたね。モノづくりって、プログラミングと違ってダメなところが丸見えなんですよ。溶接だと穴が空いてたらバレちゃうし、機械の組み付けがきれいに作れていないとまず動かないし。現場で言われたのは、「機械はごまかしが効かないからちゃんとやらないとダメ」ということ。それを、新人としてやりながら先輩方から教わりました。製造業はペアプログラミングなんですよね。
「現場を知る」ことと「怒られる」ことは、成長に必要な栄養素
―― なるほど。今回は「新人エンジニアの育成」というのがテーマですが、お2人は製造業出身で、現在はWebの世界に身を置いていますよね。製造業時代のエンジニア育成とWebサービスの世界でのエンジニア育成とで、違いはありますか?
えふしん Webの世界だと、作業する時にリアルタイムにどう指導するかっていうのがカギかなと思っていて。冒頭で話したようなペアプロって最近聞かないですよね。
村上 ペアプロっていうか、最初は上司とか研究者とかにコードを書き換えられましたけどね。自分が書いたコードをコメントアウトされて全部エレガントなコードに書き換えられるんです。やっぱり偉い人のコードは、新人と違ってめちゃくちゃ速く動くコードを書くんですよ。当時はマシンスペックが低いから、コードの差が分かりやすく出ましたね。
えふしん 今だと分からないですよね。ベンチマークを取ればいいんだろうけど、そこまで完成して初めて分かる。データをつなぎこんで分かるくらい。できるだけリアルタイムに問題が発覚した方が本人にとって学びになります。これは、製造業であろうがWebの世界であろうが、共通のポイントだと思います。
村上 それはすごく分かります。新人エンジニアが成長するためには、問題が発覚して泣かないと上手くならない部分はありますよね。自分のせいでサービスが止まったとか、自分のせいで製造ラインが止まったとか、そうした経験を経て学ぶことは多い。
僕が新卒1年目のころに、プリンターのドライバを僕のパソコンで作っていて、それを工場で1万枚焼いたわけですけど、それがウイルスに感染しちゃったんですよ。その時にウイルスに感染した1万枚のCDがヨーロッパに行ってしまい、海外から膨大の報告書が届きまして。自分の責任で大変な迷惑を掛けてしまいましたけど、すごく学びましたね。
えふしん 確かに、怒られた経験とか今も覚えてるもんなぁ。
村上 お客さんや上司に怒られると伸びますよね。そう考えると、最近のネット業界は“怖い人”が減ったような気がします。
えふしん 最近のネット業界というところで話すと、Webサービスの場合は、カスタマーサポートの部門でブロックしてくれてるので、エンジニアにお客さんからのクレームが直接届かないんですよ。
村上 それはあるなぁ。お客さんの声はエンジニアにも直接届けるべきですよね。最初に痛い目に遭うと、「これくらいなら大丈夫」といった判断ができるようになる。FA業界の上司は怖かったですか?
えふしん そうですね、やっぱり現場の人は怖かったですよ。
村上 僕も、品質管理の人たちは怖かった。
えふしん 正常に動作するモノを作るために管理する部門だから、役割として開発側と戦わないといけないんですよね。
村上 僕らはそういう厳しい人に育てられた感覚はありますよね。めっちゃ怒られるんですけど、その後に飲みに連れて行ってもらったりして。「ちょっと言い過ぎたかもしれんけど、あそこは怒らんとあかんとこやねん」みたいな。
―― 「現場を知る」ということと、「怒られる」ということは、どちらも若手時代に経験しておいて損はないですね。技術についてはどうやって伸ばしていきましたか?
村上 若ければ、1年間育てればたいていは伸びますよ。ある程度は偉い人のコードを写して学んでいくんです。写経ですね。
えふしん 素直さとか地頭の良さがあれば、確かに1年で成長しますよね。あと、最近思うんですけど、「これからはプログラミング学習だ!」なんて言っていろんなところでプログラミングを学べるところが増えてきましたけど、あれはプログラミングが嫌いになっちゃう人を増やすんじゃないかと思ってるんです。
―― というと?
えふしん 単にプログラミングが学べる環境があっても、そこだけで勉強していても楽しくないですもん。もっとプログラミング自体が楽しいんだ、ということから伝えるべきだと思っています。
―― 技術的な部分の成長については、受け手側の素養は大きく影響しそうですね。
えふしん 「数学はセンスだ」という話もありますからね。ただコーディングを学ぶだけじゃなくて、ちゃんとサービスやプロダクトが動くところまで作るのが重要なんですよ。そこにセンスが発揮されるし、変なこだわりだけが強くてうまくいかない人はけっこういますから。
村上 いろいろな場面で失敗を経験させるといいかもしれないですね。
若手エンジニアの「育成」なんてできない!?
―― 「失敗を経験させる」のは、育成と呼べるのでしょうか?意図せずに起こってしまうことなのでは?と思ってしまいます。
えふしん そもそも僕は「育成」という話自体が難しいと思っていて、人は育成なんてできないんですよ。会社に入ってくる新人といっても、20歳そこそこのいい大人じゃないですか。それくらいの年代の人たちはもう、人から教えてもらうというよりも、自分が学び取っていくものだと思うんですよ。
村上 それはあるかもしれませんね。僕がかつて部下にやっていたのは、少しハードルが高い仕事をお願いするんです。例えば、デジカメを作る時にFATのフォーマットのファイルシステムとドライバを実装をするように伝えるなどして、あえてオーバースペックなことをやらせました。
人間って、無理難題を目の前にした時に本性が現れるんで、僕はその時の部下の悩み方を見るんですよ。悩むと自ら学ぼうとするじゃないですか。英語のドキュメントを読み始める人もいれば、「FATの歴史」みたいな必要のない情報を調べ始める人もいるし、そもそも調べ方すら分からない人もいる。
優秀な人間なら、英語のドキュメントが出てきても、3~4日死に物狂いで読んで、分からない部分を上司に質問し始めます。
えふしん 僕はそれも人によると思っていて、成長の仕方は一般化できないんじゃないかなぁと思っています。教える側が追い詰めても上手くいかない人もいますからね。だから、僕の場合は、育つ環境をどうにかして用意するしかないかなぁと。環境を用意して、あとは「君たち新人の成長を待ってます」というスタイルです。
村上 待ってるだけだと、僕みたいな人間はサボっちゃうんですよね。
えふしん サボらせないためにも一応マイルストーンを切って、設計レビューをいつまでにするかといったスケジュールと進捗確認だけはやります。それまでの間、必要であればレビューすることもあります。あとは、時々様子を見に行って、「何かお悩みありませんか?」と言うだけ。
先ほどのふくゆきさんの話ではないですが、そこで出てくる「お悩み」のスジが良い人、悪い人はたしかにいます。そこで、悩みを抱え込むタイプの人だと自分で頑張っちゃうし、質問が苦手な人もいるし、投げっぱなしだと上手くいかないからどこかで介入しないといけないところはありますよね。
企業に求められる、失敗を許容する懐の深さ
村上 動くものは作れるという新人は中にはいると思うんですけど、スケーラビリティを考えたサービス設計なんかは体で覚えるしかないですよね。Webサービスって、サーバを落としてナンボみたいな部分があったりするじゃないですか。
ただ、僕らの時代はまだサーバがダウンしても許されてたところもあるけど、もう今はインターネットは動いて当たり前だから、育成のためだからといってサーバをダウンさせるのは難しいですよね。
えふしん コンプラ的なところで話をすると、会社によってはサーバ管理とプログラマーの権限を分けたりしていますよね。データベースのクエリの処理が滞っているのを感じられないというか、起こっている問題を肌で感じる状況を作れないところはあります。
やっぱり、本質的には「失敗してなんぼ」なんですよ。インデックスを貼り忘れていて、自分が書いたクエリがグッと貯まって焦る、みたいな経験は新人が成長するためには重要です。ただ、そういう経験って多様なユーザーデータがないと発覚しないこともあり、本番サーバにログインする権限がないと見れなかったりするんですよ。
村上 クックパッドさんが開発環境と本番環境のデータを一緒にしているという話を聞いて、あれはすごいなぁと感動したのを覚えています。
えふしん 本番環境のデータをコピーしてるんですよね。それでいてちゃんと同期している。本番環境で開発しないと良い状態を保てないというクックパッドさんの思想を感じますね。
―― 限りなく本番と思っていい環境で開発できるから、失敗もリアルな体験として経験できるということですね。
えふしん 結局他の人がバグを見つけて対処しちゃうと、報告ベースでしかその事象を知ることができない。そうなると、学びの度合いは少ないですよね。自分で悩んで分からない状態で上司からアドバイスを受けるのと、答えがいきなりやってきて解決してくれるのとではまるで違う。
村上 確かに悩んで覚えたことって大きいですよね。
えふしん それをサービスとして許容してあげられる環境にないと、学びは得られません。良い失敗をさせてあげないと得られない学びはありますよね。非常に難しいですけど、クックパッドさんは技術でそれを実現してるのがすごい。
村上 新人のPC環境で書いたコードは本番環境で動かない、みたいなことはWebサービスだとものすごくよくあることですからね。クックパッドさんの例で言えば、レシピが10個のテスト環境だと動くコードが、何千万インデックスある環境だと動かないなんていうのはすごくよくある。
―― そうなってくると、サービス提供側としても、どこまで失敗を許容できるか、という懐の深さが求められますね。
えふしん 絶対起こしちゃいけない失敗がすごく高いラインにあると、そういうのってリリースできないし。それを別の人がカバーしちゃうと良くないなと。本人の問題でなくなっちゃう。
村上 例えば先輩たちも答えを言わないで「ヒント」みたいな感じで新人に伝えられないですかね?「ヒント: シャーディングでググれ」とか。
えふしん 問題に対しては極力自分たちで考えて解決してください、というのが良いですよね。それ自体が一個のプロジェクトして導いていくというかね。
―― 現実問題、そういう環境にするのは難しいですか?
えふしん その場で解決しないといけないものはその場で解決しちゃうケースが多くあります。そうすると再現性がなくなっちゃうんですよね。最近思ってるのは、サービスを1つ作るのってけっこう難しいんだなって。他人を見ていてプレッシャーが大きいんだということに気が付きました。心が折れてしまって、サービスが完成に至らないケースとかもかなりある。
新人エンジニアの「折れない心」を鍛える方法
村上 プレッシャーとか折れちゃうとかって、あるなぁ。あれどうやって鍛えるんでしょう。僕の場合は、「ドラゴンボールの法則」ってけっこうあると思うんですよ。修行したり、死にかけて復活したら過去の強敵がすごく弱く感じるという。フリーザを倒すとヤムチャとかどうでも良くなったりするじゃないですか。
えふしん 経験する人じゃないと分からないもんね、その傷は。そもそもヤムチャと戦って折れちゃうと先に進めないもんね。
村上 ザッカーバーグも、Facebookの前に作ったサービスを封鎖してたりしますよね。どんな人でも失敗を経て大きくなっている。
えふしん Webサービスに関してはユーザー心理を理解していかないといけないわけで、炎上や失敗で心が折れていたらムリですよ。例えばこれまですべて無料だったWebサービスがマネタイズを考えるようになるなど、既存のユーザーさんに新しいものを提供する時にユーザーの声が怖かったら何もできないですよ。
村上 3日経ったらみんな忘れるよ、と。最近で言うと、テレビ番組でも「子どもの産めない女性に対して~」みたいな批判もありましたけど。すべての批判を聞いてしまうと手も足も出せなくなっちゃいますね。
―― BtoCのWebサービスをやっている以上は、「ユーザーからの声」は避けて通れないですよね。そうなると、けっこうメンタルの鍛え方も重要ですね。一方で、技術面の育成についてはいかがでしょうか?
Webエンジニアが身に付けるべき、コーディングスキルよりも大事な技術
えふしん やっぱりそれは効率が悪いコードがあれば、効率の良いコードを見せるとか、セキュリティの問題を指摘するとかで改善していくんじゃないですかね。
村上 Webの場合、正直あんまりアルゴリズム的にクリティカルなスキルはいらないと思うんですけど。もちろん、プログラマーとしてゴリゴリコードを書いてきたい人とかは別ですが。
えふしん アルゴリズムやロジックってほとんどないですね。Webって、スケーラビリティの部分はRDBやKVSが担保しているので、あとはそれを出し入れするのをいかに効率良くするか、という問題なんですよ。あとは、セキュリティをいかに気にしながら開発できるかですね。
そう考えると、技術面ではコーディングスキルというよりは、汎用のフレームワークや言語を使っているうちは、運用技術のノウハウ部分を身に付ける方が重要です。Twitterやクックパッドみたいに自分たちでフレームワークやライブラリを開発したりする時には、スーパーエンジニアたちがコーディングスキルを発揮するんでしょうね。
―― 多くのWebサービスに関わるエンジニアにとっては、コーディングスキルよりも、フレームワークを上手く使える技術が重要だと。
えふしん Webサービスを作る技術、と考えてもいいかもしれません。技術力よりも、成果物やビジネス的な話をいかに実現できるか、いかに効率良くできるか、といった能力がエンジニアにとって重要ですよね。
村上 フレームワークの選択や言語の選択についてもCTOとか偉い人が決めるから、あとは現場のエンジニアがそれらをどう使っていくかを考える、といった感じでしょうか。
えふしん そういえば、BASEはエンジニアを面接する時にコーディングスキルはそこまで重視していないですね。
―― どんなところに注目していますか?
えふしん これまでどれだけ炎上してきたか、です。例えばアクセスが急増した時に発覚したバグを徹夜で直したとか、そういったところをどれだけ経験してきたかを聞きますね。
そういう話を聞くと、技術的な判断力とWebサービスに対するその人の姿勢を理解できるんです。これは別に四六時中そんなことをしているわけではないですが、例えばSlackで突然バグのメッセージが来た時にちゃんと見てくれているか、とか。24時間Webサービスは動いているから、会社を出て一切連絡がつかないとちょっとつらいじゃないですか。
自分のかかわるWebサービスに愛情を持ち、トラブルが発生したらすぐに対応するんだ、という気持ちの部分はとても注目しています。
村上 その当たり前が分からないと、確かにWebサービスのエンジニアは厳しいですよね。1つのバグがユーザーさんにどれだけ迷惑を掛けてしまうことになるか、といことが想像できないと厳しい。やっぱり、それらを考えると「失敗が人を成長させる」ということに尽きるような気がしますね。
えふしん そのためにも、失敗させられないとか、失敗だらけだったり、絶対失敗できない環境や組織だと学びがない。成長させられるかどうかは、会社や組織に余裕が必要かなと思います。社内がギスギスしていて、仮に失敗してしまった時に周りから集中砲火を浴びるようであれば、失敗させられないような環境になっちゃうじゃないですか。それならば、ちゃんと失敗できる場を提供できるような環境であるべきですよね。
―― 逆に、新人側に必要なマインドはありますか?
村上 とりあえずは、言われたことをやってみるというところからではないでしょうか。考え過ぎない。「新人の時に考えたこだわりはだいたい無駄だ!ちゃんと動いてから文句を言え」ということは言っておきたいですね。
えふしん ソースコードやら関係ないところに気を取られちゃうと辛いなぁ。今やるべきことは何なのか、今やってほしいことは何なのか、それを理解できる力は持っておくべきだと思います。こだわるポイントを間違えてはいけない。
村上 そのあたり、空気読めない人もいますからね。僕は今でも読めてないですけど。それを考えると、教える方もある程度気が長くないとダメですね。
えふしん あとは、すごくシンプルですけど、新人のエンジニアたちには元気であり続けてほしいなと思います。インターネットは楽しい仕事ですから!
―― 貴重なお話をありがとうございました!
取材・文/小禄卓也 撮影/鈴木 渉