優秀なエンジニアとは? 成長するには? 学生時代にやっておくべきことは?
エンジニアの成長について、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ぐらいには保てるように新しい知識を身につけられる業務を探したりとか上司に相談してアサインしてもらったりとか、そういう工夫をして成長を止めないような努力をしてきました。
続きはこちら