SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Boost 2024 セッションレポート(AD)

新卒1年目に知りたかった! 出前館のエンジニアが振り返る3つのスキル領域と効率的な学び方

【Session5】新卒1年目の自分に伝えたかった ~エンジニア成長に役に立つ話~

  • X ポスト
  • このエントリーをはてなブックマークに追加

 韓国出身、大学時代に米国のスタートアップでインターンを経験したことを機に、出前館にエンジニアとして新卒入社したイ ジユル氏。エンジニアとして成長する中で、どのような壁にぶつかり、どのように乗り越え、成長してきたのか。試行錯誤する中で学んだこと、気づいたこと、その上での心構えや実践して効果があったことなどについて、共有した。

  • X ポスト
  • このエントリーをはてなブックマークに追加

エンジニアに必要なスキルには3つの領域がある

 「技術で世の中の問題を解決していくことに興味がある」というイ ジユル氏。エンジニアになったことも自然な流れだったという。入社した出前館は、社員約300人のうち3~4割が技術職で、業務委託も含めると約150人がエンジニアという組織。1999年に創業し、コロナ禍での中食ニーズの高まりもあって急成長中であり、2016年にLINE(現LINEヤフー)との資本業務提携を行って以降、グループシナジーの強化のもと、テックカンパニーとしても勢いを増している。「優秀なエンジニアが多く、就業環境としても魅力的な組織」とイ氏は評する。

 出前館では、エンドユーザーが利用する「コンシューマ」、配達員が使う「デリバリー」、加盟店が利用する「マーチャント」の3領域についてサービス開発を行っており、それぞれが連携して大規模なシステムを成している。そんな出前館で、イ氏が業務を担いながら、成長・挫折を通じて気づき、「新卒1年目の自分に伝えたかったこと」が大きく2つあるという。まず1つめは、「知ることの大切さ」について、そしてもう1つは「論理的な思考の重要性」についてだ。

株式会社出前館 プロダクト本部 マーチャント部 マーチャント連携開発グループ イ ジユル氏
株式会社出前館 プロダクト本部 マーチャント部 マーチャント連携開発グループ イ ジユル氏

 イ氏は「マーチャント」領域に配属され、主に加盟店レジで使用するレガシーなシステムをクラウド環境へとリプレースする業務を担当していた。当時は、JavaやSpring Framework、Terraformなどのプログラミングについて、プライベートと業務時間で必要になった分だけ学習することで、特に大きな問題にはぶつからず、順調に業務を遂行できていた。しかし、1年目が終わる頃から、標準機能を新規で作成する案件が走り、設計や性能試験などの経験のないタスクを担当することになって、その方法では上手くいかないことが判明。知識の難易度や物理的な量が異なり、業務を遂行しながら勉強することが困難になっていった。

 イ氏は、「DDDや性能試験で発生したボトルネック自力で解消できず、自分のエンジニアとしての壁を感じるようになった。同時期に入社した他のメンバーが問題なく解決している様子を見て、ギャップを感じ、落ち込むこともあった」と振り返る。そこで、そうしたメンバーの様子を観察したり、話を聞いたりするうちに、「自分がなりたいエンジニアの姿」を明確に捉え、そのためにどのようなスキルが必要かを事前に把握し、計画的に勉強していたことを知った。

 そこで、イ氏はまず「なりたいエンジニアの姿」として、「実装もきちんと理解しつつ、プロジェクトをマネジメントするエンジニア」という具体的なイメージを思い描き、その上でどのような能力を鍛えるべきか、判断するために、オンラインでメンターを探したり、カンファレンスやセミナーなどで知らないエンジニアの領域を知るようにした。その過程で発見したのが、「エンジニアに必要なスキル3領域」についてのフレームワークだ。

「思考・科学・技術」3つの領域を効率的に学ぶには?

 まず、1つ目の論理的・抽象的な「思考領域」では、しっかりと辻褄が合うように順序立てて考えて設計し、目標達成までにどのような開発方法を取ればよいかを考え、方法論などを用いて構築できること。そして、2つ目の「技術領域」はプログラミング言語やフレームワークを用いて、コンピュータで表現するための能力だ。そして、「科学領域」には、ハードウェアやOS、ネットワークやメモリなど、コンピュータサイエンスに関する勉強が求められる。

エンジニアに必要なスキルの3つの領域

 この三領域はそれぞれ独立したものではなく、お互いが大きく影響し合う。たとえば、「思考」と「技術」がつながれば、考えたことをコードで表現でき、逆に技術を利用して思考を抽象化できる。Webアプリケーションの作成においてフレームワークを利用しているため、リクエストなどを受け取るか、レスポンスを送るかを毎回悩まなくてよいのもこのおかげといえるだろう。

 また「思考」と「科学」の組み合わせにおいては、たとえば、修正に対する知識がないと、設計など論理的な過程で把握しきれなかった例外が発生する可能性が高い。つまり、論理的には正しくてもコンピュータサイエンス的には間違っている可能性があるということだ。たとえば、数字2つを足す関数で、論理的には正しくとも、合計が32bitの定数と最大値を超えたら問題が発生する。科学的な知識が不足するために、こうしたことはよく発生する。

 「技術」と「科学」も同じく、両者についての知識があることで、たとえば必要なメモリ量や計算時間などを判断しながら、安全で効率的なコードを作成できるというわけだ。

 イ氏は、「エンジニアに必要な三領域をバランスよく学習することで、エンジニアとしての能力が上がることを実感した。一方、それまではこのバランスを考えず、すぐに必要な『技術』にフォーカスした学習をしていたことに気づいた」と語る。さらに、今後は設計などの上流のタスクをできるようになるために、計画的な学習を行えるよう行動を開始しているという。

 「知らないことを知る」ために、カンファレンスなどに参加したり、上司や優秀なエンジニアに話を聞いたりすることからはじめ、「計画的に学習する」ために、ネットスクールや書籍、社内の資格支援制度で資格勉強するなど、足りない点を計画的に強化。また、そうして得られた知識をチーム内の勉強会で発表したり、意識して業務に取り込んだり、「アウトプットを出す」ことで自分のものにしている。

計画的な学習が必要

 この結果、次の新規開発案件が始まるまでに、計画的にインフラ分野について学習し、業務でも対応できるようになってきた。また、学んだ知識を周囲のメンバーに共有することもでき、チームにも大きく貢献できたという。

 イ氏は、「エンジニアとして成長するには、まずは知らないことを知ることが大切。自分がどういうエンジニアになりたいか、そのためにはどういうスキルが必要なのか。それを知ったうえで計画的に学習し、意識的にアウトプットすることが大切」と強調した。

開発者からPMに挑戦! 業務内容の違いに苦しむ

 2つめのエピソードは、3年目にしてPMにチャレンジした時のこと。出前館の加盟店ユーザーがAPI連携をするためにWebサイトを新規で構築するという「デベロッパーサイト」プロジェクトが立ち上がり、リードしてきた先輩が育休にはいったこともあって、イ氏自ら手を挙げてPMを担当した。

 これまで一開発者として「何を作るか」が決まっている状態で、「プロダクトをどう作るか」を考えることがメインだったが、PMでは企画から開発リリースまですべての工程において責任を担い、さらに「なぜつくるのか」「何をつくるのか」をほぼゼロから考える役割・業務へと変わった。これにより、自身の能力不足を痛感する自体に陥ったという。

開発者とPMの業務内容の変化

 まず1つめの、“つまずき”は要件定義の工程で起きた。プロジェクトでは、ある手動プロセスの自動化が目的の1つだったが、現状の安全性問題について十分に理解しないまま、自動化の効果がないプロセスまで改善する案を出してしまったことで、レビューを受けた際に指摘を受け、手戻りとなってプロジェクトの進行に影響を与えてしまった。

 そして、2つ目のつまずきはコミュニケーションだ。多くの関係者と頻繁にコミュニケーションをとりつつプロジェクトを進める必要があったが、説明がうまく伝わらず、意図を理解してもらえずに、何度もミーティングを開催する必要が生じ、スケジュールの遅延につながった。

 そこでイ氏は、なぜこうした問題が起きたのか、どうすれば改善できるのかを把握するために、上司からフィードバックを受けた。そして、現在のプロセスがなぜ生まれたか、どう行われているかを知った上で、プロセスの自動化の目的を理解し、企画を立てる必要があったことを指摘される。つまり、「なぜ作るか」という現在問題に対する本質的かつ論理的な思考が不足していたというわけだ。そして、コミュニケーションについても原因が同じところにあると指摘を受け、作成した資料や話し方が、論理的に整理されていなかったことに気づいた。

そもそも「論理」とは? 論理的思考の構造を捉える

 これら2つのつまずきから、イ氏は自身の弱点が「論理的な思考」にあると気付き、そこを鍛えるための学びを開始した。だが、そもそも「論理的な思考」とは何なのか。ピラミッド構造や帰納法、演繹法などとも言われるが、なかなか説明が難しい。そこで、イ氏は「論理とは?」を深堀りし、「結論を支える理由・根拠が明確に繋がっている構造」と理解した。繋がることで、納得・理解・説得が可能になる。

論理的な思考の「論理」とは?

 つまり、「論理的思考」とは、「明確な理由と根拠に基づいて、結論を導き出す思考」のことであり、これができれば、理由と根拠から結論を導き出し、それを整理・構造化して伝えられる。なお、「理由」とは主張に対して「なぜそうすべきか」に対する考えや論理的な側面であり、「根拠」とは主張に対する背景、情報、データなど事実的な側面を指す。つまり、「傘を持っていく」という主張に対し、「雨が降りそうだから」が理由、「黒い雲が広がっているから」が根拠という関係となる。

結論を支える「理由」と「根拠」の違い

 このような論理的思考ができるようになると、常に理由と根拠に基づいて結論を考えられるようになり、的確な問題解決が可能となり、コミュニケーションも円滑になる。

 イ氏は、この論理的思考力を鍛えるために、いくつか意識して行動様式を変えたという。そのポイントについて、下記のように説明した。

  1. 論理的に考える習慣を持つ:日々起きる出来事に、なぜそうなるのか、理由と根拠、背景などについて論理的に考える習慣をつける。
  2. 話が上手な人を真似する:話が上手い人=論理的な話し方ができている人の話し方、資料の書き方、仕事の進み方など観察し、全てを真似する。
  3. 思考を書き出すようにする:考えるだけではまとまりにくいため、文章や図を書き、考えを具体化する習慣を身につける。
  4. 考えをわかりやすく伝えることに意識する:ピラミット構造など、論理的に伝えやすくする方法論を学び、構造化して相手にわかりやすく伝える。

 イ氏は「論理的な思考力は重要ながらすぐに身に着けられるものではない。1年目から論理的思考力を高めることを意識することが望ましい」と語った。そして、あらためて「自分が知らないことを知り、計画的に学習し、アウトプットを出すことで、より良いエンジニアとして成長できる。そして、エンジニアとして上流工程から携わるには、論理的思考力が必要となる」と繰り返した。「ぜひ、エンジニアを目指す学生、新卒、若手エンジニアの参考としてほしい」と訴え、セッションを終えた。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

提供:株式会社出前館

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19899 2024/08/22 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング