見出し画像

優秀なエンジニアに共通するのは想像力? ZOZOのVPoEが語る、成長するために学生時代・若手時代にやるべきこと【技育祭2022秋 前編】

ZOZO DEVELOPERS BLOG

優秀なエンジニアとは? 成長するには? 学生時代にやっておくべきことは?
エンジニアの成長について、VPoEの瀬尾(@sonots)が自身の経験を交えながら語ります。

※株式会社ZOZOは、日本最大の学生向けテックカンファレンス 技育祭2022秋 にゴールドスポンサーとして協賛しました。本記事は、カンファレンスにて発表した内容を書き起こして再構成したものです。

自己紹介

それでは「エンジニアの成長 ZOZO新卒エンジニアの活躍について」というタイトルで発表させていただきます。よろしくお願いいたします。

まず自己紹介ですが、株式会社ZOZOで技術本部 本部長 兼 VPoEをやっております瀬尾と申します。インターネットと社内では「そのっつ」という愛称で活動しております。よろしくお願いいたします。

瀬尾(そのっつ)のキャリア

私は、ここはちょっとどうでもいいかもしれないんですが、山形で三男として生まれまして、その後、会津大学に進学してコンピューターの基礎を学びました。中学・高校時代からプログラミングをやっていたみたいな感じではなくて、大学に入ってから学んだというキャリアですね。

その後コンピューターを突き詰めるなら発祥の地であるアメリカに行くべきだと勧める教授がおりまして、その影響を受けてアメリカの大学に行ってみるかと。アメリカのメリーランド州という、ワシントンD.C.の近くにあるメリーランド大学というところに進学して、コンピュータービジョンの研究、顔認識とかをやっていました。

アメリカ生活をしばらくやっていたんですが、日本食が食べたくなって、それで帰国しちゃいまして。画像処理をやっていたので、デジタルカメラとかを扱っている光学機器メーカーとかなら親和性があるかなと思って光学機器メーカーに入社し、最初は組み込みエンジニアをやっていました。

その後「時代はクラウドだ」みたいな、メーカーが炊飯器なり冷蔵庫なりをこぞってクラウドにつなぐみたいなムーブメントが起きた時代があり、その頃に私が所属していた会社でもそのクラウドにつなぐみたいなプロジェクトが走りまして、そのクラウド側、サーバー側の開発をRuby on Railsでやる仕事にアサインされて、それ以降ウェブエンジニアをやっているというようなキャリアになっています。

その後DeNAに転職したんですが、DeNAの面接を受けた時に「インフラもできそうだし、インフラやってみない?」って言われたのが運のつきで、バックエンドエンジニアからインフラに転向したということがありました。

それ以降、もっぱらインフラエンジニアをやっていたというようなキャリアになります。モバゲーのインフラで大規模トラフィックをさばく経験を積みまして、分析基盤でビッグデータを扱うデータエンジニアリングとかを学びまして、「時代はディープラーニングだ」みたいになった時に機械学習基盤を作るML Opsの経験を積んだりしてまして、その後ZOZOに入社して今に至るというようなキャリアになっております。

ここで言いたいのは、ほかのCTOの方たちも(このカンファレンスで)発表してるかなと思うんですけど、たぶん中学・高校時代から独学でプログラミングをやってましたみたいな方たちが多いのかなと勝手ながら分析してるんですが、私のキャリアはそうではなくて、プログラミングは大学に入ってから授業で学んだというところで、ごくごく一般的な学生の皆さんが今から参考にできる再現可能なキャリアであるというふうに自分は考えています。そこが今、たくさん発表を聞いてらっしゃるかなと思うんですが、違いの1つとしてあげられるかなというふうに思っています。

私がどういう学生だったのか、ちょっと自分語りをさせていただくと、まず、授業はすごく真面目に受けてましたね。プログラミングの基礎もコンピューターサイエンスの基礎も授業で学んだという形で、この授業の基礎が今の自分を形作っているかなというふうに感じています。

 ただ、その授業だけだと満足できなくて、3度の飯よりプログラミングという感じで寝落ちするまでコードを書くみたいなことをやってたように思います。周りも中高からプログラミングをやってましたみたいな同期がいっぱいいて、追いつけ、追い越せの精神でその頃は結構焦ってたように思います。

 プログラミングだけじゃなくて、自作PC組んだりとか、そのPCをサーバーにしてミドルウェアをセットアップしてファイル置き場にしたりとか、Wikiを立てたりとか、iptablesでLinuxをルーター化したりとか、今思うとインフラエンジニアっぽいこともやってたように思います。

 逆にやればよかったなと思うのがインターンですね。今の時代だとリモートで、会津やアメリカからも就業できると思うんで、そのあたりはすごくうらやましい時代になってきてるのかなと感じておりまして、学生の皆さんはぜひその利点を生かしてほしいかなというふうに思ってます。ZOZOも今インターンを受けつけておりますので、ご興味あればご応募お待ちしております。

※2024卒向けのインターンは募集を終了しました


Q. 学生時代にやっておいて良かったことは?

次に、学生時代にやっておいて良かったことですが、学生時代にコンピューターサイエンスとプログラミングを身につけられたのはやっぱり良かったですね。

特に、使ってるOSSのコードを読んで高い品質のプログラムの書き方を学んだのは、今になっても糧になってる気がしています。インターンに行ってなかったので、なおさら他の人のコードを読むという経験が薄くなってしまうところだったので、OSSでそこを学べたというのが良かったかなと思います。

ちなみに、弊社の技術顧問でRubyの生みの親であるMatzさんにも同じような質問をしたことがあったんですが、同じような回答をしてくれてましたね。お勧め手法というところで参考にしていただければと思います。


Q. CSの知識はどう役に立っていますか?

次にコンピューターサイエンスの知識はどう役に立っていますか、ですね。

Webエンジニアをやる上で必須なのかと問われると、必須ではないものも正直あって。例えば自分だと数値解析、例えばπの計算、3.141592をもっと出すみたいな計算のところとか、CGとかロボティクスの知識を使ってるかと言われると使ってはいないんですが、でも、基礎体力にはなっているかなというふうには感じています。

具体的にあった過去の事例だと、急に言語処理系を読まないといけないとか、実装したくなったみたいな時に、Yaccとかそういうものがあるんですけど、なんか授業でやったなという記憶があるので、それを思い出しながら進めることでなんとか数日で仕事ができたりとか。あと「時代はDeep Learningだ」とか急に言われた時に、ニューラルネットワークをやったなという記憶があるんで、Deep Learningの本を買ってきて、「はい、はい、はい」って読みながらパラッパラッてその日に一応内容を把握できたりとか、そういうことはあったりしたかなというふうに感じています。

こういうのって急に社内で「できる人います?」みたいに人探しが始まったりすることがあるので、それから半年掛けて勉強するんでやらせてくださいとかって言うと、やっぱりアサインされないという事情はあったりして。そういう時に基礎体力をつけてあったのは良かったなというふうに感じますね。


Q. 若手時代に成長するためにやっていたことは?

次に、若手時代に成長するためにやっていたことは?というテーマなんですが、若手の時はやっぱり成長できる環境に身を置くというのは意識していましたね。先輩もそうなんですけど、同期の人たちが優秀で切磋琢磨できる環境に身を置けるように、という努力はしていました。

あと若手の頃は、知の高速道路に乗るというか、何かに入門する時にだいたい体系立てられた教科書的な本があるので、そこから入って効率よくキャッチアップするというのは意識してやっていました。自分が若い頃だとWeb開発もまだベストプラクティスがまとまった本がなかったりしたんですが、今だとそういう本があったりするので、先人たちが試行錯誤して至った境地に素早く到達できるんじゃないかなというふうに思います。

さらに心持ちに関してはなんですが、新卒には「新卒特権」というのがありまして、それを駆使して分からないものは全部聞くようにしていました。「聞くは一時の恥、聞かぬは一生の恥」という言葉がありますが、分からないままにしとくと2年目になった時に後輩に聞かれて分からないと答えざるを得なくてつらい思いをしたりするので、そこは新卒の時にしっかり潰しておいたのは良かったと思いますね。

自分は全員が先生だと捉えるようにしていて、後輩だとしても何かしらここは見習いたいと思える部分を持ってるもんなんですよね。自分はそのロールモデル、目指したい人物像ですかね、というのを誰か特定の人に当てはめたりとかしてなくて、先輩も後輩も含めてみんなの見習いたいと思うところを集めて「僕の考えた最強のロールモデル」みたいなものを作って、そこを目指して日々頑張っているというような感じですね。

あとはインプットだけじゃなくて、アウトプットも心掛けていました。アウトプットをしようと思うと、それなりに体系立てて説明する必要が出てくるので、その過程を通じて自分の理解が深まったりですとか、アウトプットすることによって突っ込みが入ってきたりとかもするんですが、それが勉強になったりとか。なにしろ自分の記憶に残りやすくなるので、すごいお勧めですね。アウトプットの量を増やすコツとしては、自分は何か調べたらメモを取るように常にしていて、そうすると、ちょっと整えたら記事にできたりします。

加えてリーダー経験、とサラッと書いてますけど、何かチャンスがあったら積極的にリーダーの経験をするというのはすごくお勧めです。将来マネジャーになることを見越してというのもあるはあるんですけど、リーダー経験を積んだことがあるメンバーとそうではないメンバーではやっぱり動き方がすごく違うんですよね。リーダーをやった時にメンバーにこう動いてほしかったな、みたいに思った経験があると、メンバーになった時にそういう振る舞いができるようになってきます。こういうのをフォロワーシップというんですが、社会人生活においてすごく大きな違いを生むと思っているので、その力を身につけるためにリーダーをやっておくというのはお勧めです。自分もチャンスがあった時にやらせてもらったというのがあるので、経験として良かったなというふうに思っています。


Q. さらに成長するためにやっていたことは?

若手の時代を脱却してくると、今度はあまり知の高速道路が整っていない知識領域になってきます。博士課程の方とかは一番よく分かると思うんですけど、高速道路どころかトンネルを掘りながら進むみたいな、すごく遅いんですけど、それでも前に進まないといけないみたいな領域になってくると感じています。

そこでさらに成長するために自分が意識していたのが、1つがインプットとアウトプットの比率の維持ですね。ある程度経験積んでくるともう勉強しなくてもアウトプットを量産できるような感覚になってきちゃうんですけど、それに甘んじてしまうともう成長しなくなってしまうので、なんとか新しいインプットを常日頃入れるようにというのを意識しています。

若い頃は夜の時間も空いていて勉強時間にあてたりできたんですけど、一番難しくなったのが子どもが生まれた時です。その時でもなんとかインプット比率を2:8ぐらいには保てるように新しい知識を身につけられる業務を探したりとか上司に相談してアサインしてもらったりとか、そういう工夫をして成長を止めないような努力をしてきました。

あとは、「楽をするためにはどんな苦労もいとわない」という精神でいると結構難しいチャレンジを見つけられたりはするなと感じてます。手作業でやると3時間で自動化、スクリプトを書くと5時間かかります、みたいな時ってやっぱり業務判断としては手作業でやったら?という話にはなりがちなんですけど、そこを圧倒的なコーディング速度を身につけることで、スクリプトを書いたほうが早く品質も高く終わりますみたいな話をしたりとか。何だったら業務時間外で汎用的に使えるOSSとして作ってしまって、それを業務で使って楽をするみたいなことをやって、手作業ではない経験値を身につけたりみたいなことはしていました。推奨はできないとしておきますけど、若い頃はそんなこともやってたなというふうに思います。

あとはインフラエンジニアというか、SREをやっていたからというのがあるんですけど、トラブルが起きた時にすぐに問題解決できるように細部を詰める力を身につけるというのは1つ課題としてずっと持っていましたね。アラートが鳴ってから悠長に調べることとかってできないので、トラブルシューティング能力というのはほんと日々の積み重ねが大事なポイントだと思っていて、LinuxシステムコールだったりとかRubyをやっていた時はRubyの言語処理系の中身までイメージできるようになっていた時もありました。


Q. 優秀なエンジニアに共通していることは?

次のトピックは優秀なエンジニアに共通していることって何だろうという話です。

技術力が高いですとか、システム理解が高いとか、ピープルマネジメントが得意、開発プロセス管理が得意、影響力があるとかいろいろあるとは思うんですけど、全部が強い人ってやっぱり少ないと思っていて、むしろみんな違ってみんな良いという話もあると思うんですよね。

この右の図のように能力値を五角形で表した時に、技術力のところが高い人、ピープルマネジメント能力が高い人、みたいにそれぞれの得意分野があって、お互いに補った形で組織が作られていればいいのかなとは思っています。むしろそういうユニークな強みがあるからこそあわせると強いこともあると思っていて、例えば医学部卒のエンジニアであれば医療系スタートアップで最強だと思いますし、ファッションに詳しいエンジニアであればZOZOに来れば強いと思うので、そういうユニーク性も持ってほしいですね。

それでもあえて共通しているところを教えてくださいって言われたら、ロジカルシンキングから生まれる課題発見能力とか、やり切る力・課題解決能力ですね。あとはコミュニケーション能力かなと今回自分の考えを整理していて思いました。

ちなみにコミュニケーション能力と言った時に勘違いしてほしくないのは、自分が言ってるのは口数が多いとかおしゃべりが得意みたいな話ではなくて、丁寧に自分の意図を伝えて相手との認識をそろえる能力、ここがすごく大事だなと、そういう意味で言ってるんです。

さらに、これら3つを支える共通する能力って何だろうと考えたところ、想像力なのかなというふうに考えました。たぶんこれで困ってるんじゃないかと想像するところから見つける課題だったり、やり切るための道筋を想像して計画立てておく力だったり、相手がどこまで理解してるのか想像する力だったり。想像力があればなんとかなるんじゃないかななんて考えたりもしました。

じゃあその想像力ってどうやって鍛えるんだ、みたいな話になるんだと思うんですけど、「なぜなぜ分析」みたいな感じで、常日頃「なぜなぜ」と疑問を持って仮説を立てる訓練をしておくのがいいんじゃないかと思っています。子どもとかも「なぜなぜ」とよく聞いてきますし、そういうマインドをずっと持ってると想像力は身につくような気がしています。


新卒の活躍について

では次にZOZOに入社するエンジニアってどんなエンジニアなの?というところで新卒たちの活躍について紹介させていただこうと思います。

まず1つ目は2022年新卒入社のrockyさんがやってくれた仕事です。うちには内定者アルバイトという入社前にアルバイトができる制度がありまして、データ基盤でアルバイトしてくれていた時の仕事ですね。BigQueryのUDFを使って関数の引数に時間を指定すると、その時点でデータを取り出せるような仕組みを作ってくれました。


次が2022年新卒入社のOgijunさんですね。iOSDC Japanという毎年恒例のiOS系のカンファレンスがあるんですが、そこで登壇しましたという内容です。学生時代に作ったアプリのネタでの登壇なので、ZOZOに入ってどうこうという話ではないんですが、こういう新卒もいますよという紹介です。


これは2021年新卒入社のぞえさんです。社内でプロダクション環境でも使っているsqldefというOSSがあって、それにコントリビューションしましたよという、入社して半年後に書いた記事ですね。このソフトウェアはSQLを構文解析するようなツールで、そういうプログラミング言語を作るみたいな研究室にいない限りは難易度が高い仕事だったかなと思うんですけど、彼はすごくうまくやり遂げてくれました。


次が2021年新卒入社のすだけんさんですね。Kubernetes Meetup TokyoやDatadog Japan Meetupという比較的規模の大きいMeetupで登壇して発表してくれたりしています。DatadogやAWSの全社管理者の役割も私と一緒にやってくれたりしてます。


同じく2021年新卒入社のいちびさんです。AkamaiというCDNの設定が今までは手作業で行われていたんですが、そこをTerraformでコード化して、誰が何の設定をしたのかレビューできるような体制を作ってくれました。彼もすだけんと同じくSaaSの全社管理者で、億単位の金額の支払いをやってもらったこともありました。


次は2020年新卒入社のやまちょふさんで、ZOZO Data Catalogというプロジェクトです。ZOZOには大量のデータがあるんですが、いかんせん大量過ぎてどこにどういうデータがあるのかよく分からないという声が上がってました。それを解決するために、どういうデータがあるのかを可視化するツールを入社半年ぐらいの時期に作ってくれて、とても便利という声が上がっています。

あとは、ZOZOTOWNのホーム画面を去年リプレイスしたんですが、そのホーム画面のモジュールという部分はパーツを切り替えられる仕組みになっていて、このあたりのプロジェクトの調整から実装までを2020年新卒入社のてらちゃんが行ってくれました。彼は今はもう推薦基盤チームのチームリーダーをやってくれていたりします。


次はですね、今日このあとパネルトークがあるんですが、そこで一緒に話してくれる2020年新卒のたけうぇるさんがやってくれたmicroCMSの導入ですね。ZOZOTOWNでは、キャンペーンページという「ZOZOGLASS出しました」みたいな静的ページを用意することが多々あり、それを今まではエンジニアがHTMLやCSSを書いて用意していたんですが、それをCMS化して企画職の人が自分で文章を書いて公開できるようにしたというプロジェクトです。

あと、ZOZOTOWNのリプレイスプロジェクトというのを私主導でやっているんですが、その中のWebフロントエンドリプレイスでアーキテクチャと技術を刷新したりと、そこのプロジェクトにおいても彼は主要人物として貢献しています。


最後に、こちらもこのあと一緒に話してくれる2020年新卒のtippyさんですね。彼は今ZOZOTOWNリプレイスプロジェクトにおけるSREの役割を担ってくれています。このスライドはマイクロサービス間のリトライやタイムアウト、カナリアリリースなどを実現するためのミドルウェアであるIstioをZOZOTOWNに入れたという内容で、今もプロダクション環境で稼働しています。

こんな感じで若手たちが自分たちで前のめりに貢献してくれています。どういう若手が活躍してるのかなというのを分析してみると、自学自習する姿勢ですとか、他人と協力・協調して成果を出す姿勢ですとか、何事にも挑戦するような姿勢とか、そして弊社でやりたいことがあって技術は事業に貢献するための手段として活用する姿勢とか、そんなメンバーたちが活躍している気がします。

▼後編に続く…

撮影:小松悟(ZOZO)


みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!

ZOZOでは、エンジニア・デザイナーを含む各職種で採用を行っています! 採用情報はTwitterでもお知らせしているのでぜひチェックしてください!