🏔️

エンジニアの成長を支える技術

2024/12/26に公開

株式会社ウェイブのプロダクトエンジニアリング部で副部長を努めている内田です。

どんな会社?

株式会社ウェイブは、電子コミック出版を軸に、人気作の単行本化・アニメ化といったメディアミックスや、ComicFesta, AnimeFesta, Coolmicなどの電子コミック・アニメ配信のプラットフォーム事業を展開しています。
さらに、新たなエンタメの領域にも挑戦を続けており、年に1〜2つのペースで新規サービスも立ち上げている組織です。

どんな部署?

プロダクトエンジニアリング部は、ComicFesta, AnimeFesta, Coolmicなどのプロダクトをエンジニアリング面で担当し、デザイナー、企画職と協働して、よりよいサービスをつくっています。

組織の課題感

弊社は、平均年齢30歳前後の比較的若い組織です。スキルアップに熱心で成長真っ盛りのメンバーが多くいます。担当するシステムは、事業規模の成長に伴ってアクセス数の増加により、システムの難易度も上がってきています。それに合わせてメンバーのスキルの向上が求められています。

これまでの育成は、本人の成長意欲や興味関心に任せて、チャレンジできる環境を提供し、そのチャレンジを促す、というやり方をとってきました。しかし近年では、メンバーが「自分はどうしたら成長できるのか」「どんなスキルを身につけるべきか」ということに悩むメンバーが目立ってきました。

行き当たりばったりな努力から、成長を実感できる努力へ

エンジニアとして学ぶべき知識は無数にありますが、すべての知識が一様に等価なわけではありません。知識には、基礎的なものから応用的なものまであり、理解の難易度もバラバラです。そのため、学習を効率的に進めるには、学ぶ順番を計画する必要があります。
たとえば、コーディングを始めたばかりでifやforを覚えたてという段階で、ドメイン駆動設計を学ぼうとしても、それを理解するのは難しいでしょう。ドメイン駆動設計を学ぶための前提知識はもっとたくさんあります。

しっかり着実に成長を積み重ねていくためには、バラバラな知識をつまみ食いしていくのではなく、基礎から順番に理解を深めていき、体系的な知識のマップを描けるようになる必要があります。ある概念が別の概念とどう関連しているのかを描けるようになる必要があるのです。
各概念は独立したものではなく関連し合っています。個別に概念を一つ一つ暗記するのではなく、概念どうしの"関連"をイメージできることで、点と点が、線になり、面になっていきます。そうなることで、新しい知識がどんどん積み重なっていき、成長を実感していけると考えています。

エンジニアのスキルアップをガイドする

この知識のマップを得る学習の道標になるように、エンジニアの成長段階に応じて "どんなスキルを学んでおくといいか" をまとめた表を作成し、「エンジニアスキルガイド」と名付けました。

ウェイブのエンジニアに期待する成長段階とそのスキルを考え方をご紹介します。

レベル1: 機能単位の開発を独り立ちできる

ウェイブのエンジニアのキャリア初期段階では、「ある程度の規模感の機能(ユーザー認証、決済、広告成果通知など)の開発を独り立ちできる」ことを求めています。先輩におんぶにだっこで、やっと開発が完遂できるというレベルではなく、自身でタスクを細分化し、ざっくりしたアイデアから必要な機能を割り出し、仕様を整理し、それを実現するためのデータ構造やアルゴリズムを設計し、コーディングしていく。一貫してゼロから機能を作り出せるようになることが求められます。

このような独り立ちができるようになるためには、言語やフレームワークの基礎を理解できていることが必要です。機能開発を進めていくうえで、技術課題にぶつかったときに、それを解決するための手段を自分自身で編み出せる必要があるからです。
機能レベルの開発技術課題の突破には、CS基礎、アルゴリズムとデータ構造、エラーハンドリング、トランザクション、排他制御、イベントハンドリングなどのプログラミングの基礎理解が必要でしょう。Web技術ならHTTPセマンティックや、セッションの仕組み、Cookieやキャッシュが基礎的な技術です。
これらの知識は地味だと思われるかもしれません。そのせいで、若手には"つまらないもの"と認識されて疎かにされてしまうかもしれません。もっと最新のフレームワークやツール、流行っている技術を学びたいと思うのがエンジニアです。
しかし、このような基礎知識を疎かにしたままでは、いつか成長が停滞してしまいます。成長の壁にぶつかったときに、それを突破する地力が備わっていないと、そこから先に進めなくなってしまいます。

たしかに、基礎ばかりを学んでいては、モチベが続かなくて学習を辞めてしまうかもしれません。最新のフレームワークを学ぶのもありです。しかし、フレームワークやツールを使いこなせるようになればなんでもできるようになるという幻想に囚われてはいけません。たしかにフレームワークやツールを駆使すれば簡単にアプリケーションを作ることができます。しかし、皆が憧れるような "なんでもできる"エンジニア というのは、 "未知の技術課題を突破できる"エンジニア のことです。未知の技術課題の突破には、技術の深い理解が欠かせません。フレームワークやツールも基礎技術の上に成り立っています。「よくわからないけどAIが言ってる通りに直したら動いた」では、未知の技術課題を突破することはできません。問題の原因を"理解"し、その原因の解決策を複数"考案"し、その中から最適な解決策を"選択"する。それを日頃の開発から行えれば、未知の技術課題を突破する力がついてきます。

レベル2: 新規サービスをゼロから開発できる

新規サービスをゼロから開発し、運用に乗せるには、機能レベルの開発よりもさらに深い知識が求められます。言語仕様の一通りの理解、パフォーマンス・チューニングの手段、HTTP標準の理解、Webセキュリティの基礎知識など、機能よりも大きな「サービス(プロダクト)」という単位の開発になると、求められる知識の深さがあがります。

自信をもって、サービスを立ち上げ運用していくには、自らの意思決定に自信を持てるようになる必要があります。もし自信がなければ辛くて疲弊してしまうでしょう。セキュリティの基本は抑えられているという自信、サーバーが落ちても復旧できる自信、ビジネス要求を満たす際にぶつかる技術課題を突破できるという自負など、自信を持つためには、技術を深く理解している必要があります。その理解度が自信につながるのです。
また、サービスレベルの技術課題突破には、解決策のアイデア力が必要です。それには解決策の選択肢を網羅的に思いつけるかがカギになります。サイトが高負荷で止まってしまったとき、原因を突き止められても、それをどう解決したらいいかわからければ課題を解決できません。たとえば、最新のPostgreSQLの新機能をキャッチアップしていたとしても、その新機能が喫緊の技術課題にピッタリ当てはまるとは限りません。その新機能が既存の機能と比較してどこにメリットやデメリットがあるのか、ある場面では新機能が有効だけど、そうではない場面では既存機能の方が有効なこともありえます。だから、最新の機能だけでなく、既存の機能も、枯れた技術も網羅的に知っている必要があります。

レベル3: エンジニアリングで事業をリードできる

このレベルになってきたら、知識の"深さ"をあげることよりも、"柔軟さ"を高めることが求められます。サービスの事業フェーズによりシステムに求められる課題もさまざまなため、その課題解決に必要なスキルを臨機応変に素早く身につけていくことが求められるでしょう。つまり、既知の知識やスキルで対処してきた段階から、"既知の知識やスキルでは対処できない課題に向き合っていく"必要がでてきます。
そのときに素早く新しい知識を身につけるときの基礎になるのが、レベル1~2で得てきた言語仕様やWeb標準などの基礎的な知識です。こういう基礎的な知識の理解度が深くて、単に知識を単独の知識としてではなく、知識同士の関連をマッピングとして描き、既に知っている概念との関係性から、新しい概念の理解を助けることができます。それで新しい知識の理解が早まり、新しい知識を素早く身につけることができるようになるのです。

またこのレベルは、テックリードを担う段階であるため、技術選定を任されることになります。技術選定には、複数の選択肢の一般的なメリット・デメリットを比較するだけでなく、チームの習熟度や、開発の進め方、事業状況を加味して、そのシステムやチームの特殊ケースに合わせた意思決定が必要になります。たとえば、システムの規模拡大に適応するフェーズと、新規サービスを立ち上げたばかりの段階では、システムのスケールに対する考え方も変わってきますし、メンバーのスキルレベルや経験のある技術によって、選択肢は制限されたりもします。
このように技術選定は一般的な正解があるものではないため、検索した結果やAIに聞いた答えをそのまま使えるようなものではありません。テックリードが自分自身の知識を駆使して判断を行う必要があります。その判断の精度を上げるためのスキルアップが必要になります。それには、特定の分野の知識を学ぶだけではなく、「知識の幅を広げること」「知識のマップの解像度を上げること」という抽象的なスキルアップが必要でしょう

宣伝

株式会社ウェイブでは、電子コミックやアニメ配信サービスなどを自社開発で運営しております。
新しい技術を積極的に取り入れているモダンな環境が整っているウェイブで一緒に働いてみませんか?
興味ある方は是非こちらをご覧ください!

https://recruit.wwwave.info/

wwwave's Techblog

Discussion