ゆめみのサマーインターンでプロダクトエンジニアを学んできました

# はじめに
こんにちは。進捗ゼミです。夏休みにゆめみのサマーインターンに参加してきました。今回は、その感想の記事です。

https://www.yumemi.co.jp/2024summer_intern_2627_start

この記事では、**インターンの内容よりも「どんな学びが得られるか？」「どうして学びが得られたか？」などを書こう**と思います。

インターンの内容については、いっしょにインターンに参加した方の記事が参考になると思います！

https://zenn.dev/imoken777/articles/12c09690eac456

:::note warn
あくまで2024年のサマーインターンの感想なので、来年以降どうなるかは分かりません！
:::

# インターンの内容
はじめに、インターンの内容について軽く紹介しておきます。

- Rustで書かれた社内システムのコードを読み、簡単な機能追加をする
- 利用者にヒアリングを行い、必要な機能を考察する
- 機能の提案を行い、プロダクトオーナーにプレゼンする
- 提案した機能を実装する

# 何が学べた？
**プロダクトエンジニア**としての技術力が圧倒的に高まりました！
私はプロダクトエンジニアを、次のようなことができるエンジニアだととらえています。

:::note info
**プロダクトエンジニア**
- 価値あるソフトウェアとはなにかを探求できる
- 価値探索をチームで協力して行える
:::

プロダクトエンジニアとしてのよりよい振る舞いを学ぶことができました。
もう少し学べた内容を深堀りしてみます。

## 正しい「学び方」
プロダクトエンジニアは、ソフトウェアがプロダクトとしてどうして有用なのか、どうすればより価値を生み出せるかを学ぶ必要があります。そのような「学び」は、技術の勉強とは異なるものなのです。

### 技術の学び方
技術とか科学とか言語とかの学習は、**正しい理屈を理解すること**です。したがって、次のような特徴があります。

- 正解が用意されていて、誰かが「採点」してくれる
- すでに正しさを説明する文書があるため、正しい理由を説明する責任がない
- 周囲が納得しようがしまいが、正しいものは正しいし、間違ってるものは間違っている
- 本質的に孤独で、自分が理解しているかしていないかが重要

科学技術には、すでに確固とした基盤があり、「知の高速道路」が整備されているため、正しい学習方法は以下のようになります。

- 頑張って考え込み、「正解」の意味するところを理解する
- よく知っている人の答えを飲み込む
- 「自分独自の考え」は間違っているため、なぜ間違っているのかを考える

他人に教えるときも、似たような方法を使うべきです。

- 間違いがあれば正解を伝える
- 「相手独自の考え」は誤りであるため、正解を詰め込む

### プロダクトの価値の学び方
プロダクトの価値は、学問とは違って、誰も検討したことがありません。したがって、**協力して正しさを探ること**が大切です。

- すべての考えは仮説であり、検証が必要である
- 自分の考えの正しさを理解してもらう責任はがある
- 多くの人が納得できる考えに価値がある
- 本質的にチーム戦で、全員の理解が重要

知の高速道路は整備されていないため、学ぶときに正しい態度が変わってきます。

- すべての考えが間違いの可能性を考慮して鵜吞みにしない
- 相手の考えがそうなった理由と背景を理解する
- 自分の考えと相手の考えを両方尊重して、差分を考える

同時に、教えるときの正しい態度も変わります。

- 「教える」というより、「自分の考え方も理解してもらう」という方向
- 相手の考え方は、別の視点から見た正しさであるため、相手からも学びつつ、自分も教える

## プロダクト開発はカードゲームと同じ
プロダクトエンジニアとして重要なのは、プロダクトに価値をもたらすことです。そのために開発をするのですが、開発における重要なメンタルモデルとして、カードゲームの例を考えつきました。

ここでのカードゲームとは、MTGとかポケモンカードとか遊戯王とかの、カードに効果があってそれを組み合わせて勝利を目指すようなものを指しています。

### 技術はカード
エンジニアにとって技術は、カードのようなものです。多くのカードを手札に持っているほど、目の前の問題に対して取れる手段が増えます。

カードの効果、使い方、意味は、「自分の考え」などとは関係なく、覚えなければ使いこなせません。

### 目標は勝利
カードを増やすことは重要ですが、適切なタイミングで適切なカードを使わないとゲームには勝てません。あくまで手札は手札なのです。
ゲームのプレイヤーは、戦略に基づいてカードを使います。

これと同じように、エンジニアも技術を戦略に基づいて利用して、プロダクトの価値という勝利を目指します。この段階では、「自分の考え」が大事になってきます。

さらに、カードの効果を覚えたり、カードを集めたりするのは個人の努力ですが、複数人でカードゲームを遊ぶ場合には、友達の持っているカードを使うこともできます。友達が彼の持つ別のカードを使うべきだと主張したとき、おそらく彼には独自のデッキと戦略があり、そのカードを使うべき理由があるのでしょう。

これと同じように、勝利を目指す段階では、複数人がカードを持ちより、全体最適なカードを相談したほうが良いのです。

# どうして学べた？
ゆめみのインターンでこのようなプロダクトエンジニアとしての重要な視点が得られたのは、**インターンの設計が良かったから**だと思っています。

## ヒアリング
私は、**技術に強いだけのエンジニアからプロダクトエンジニアになるのに最も重要なことは、協働して価値を探索すること**だと思っています。個人の理解度が高いだけだと何の役にも立たないという実感が必要なのです。
今回のインターンでのヒアリングは、この重要性を痛感させる最も効果的なやり方だったと思います。

ヒアリングでは、顧客にプロダクトの価値を高めるために必要な方針を聞きます。しかし、たいていの場合、顧客はどうして価値があるかなど考えていないため、うまい言葉が出てきません。
このとき、二種類の学び方のうち、「知の高速道路がある」パターンしか認識できていないと「自分の方がよりうまく言語化できているのだから、顧客から学ぶことはない」という発想になります。

:::note warn
顧客はプロダクトの価値を言語化できないが、顧客に自分の考える正しさを押し付けると失敗する！
:::

顧客は顧客でプロダクトの価値の別の側面を知っているはずです。そのため、「価値探索」パターンの学び方をすると、重要な知見が得られます。

:::note info
顧客に、自分の仮説を分かりやすく説明すると「そうそう！！」だったり「うーん、ちょっと違うな」だったりの反応が返ってきて、自分の仮説の正しさを別の観点から検証できる
:::

**顧客には顧客の理解度が高い場所がある**ため、顧客が、エンジニアの話している内容を理解できると、顧客の理解度が高い分野の知見に基づいた反応が返ってくるのです。

:::note info
**ヒアリングは協力しないと絶対にいい結果が出せない課題なので、課題を通じて半強制的に協力の価値を学ぶことができる**
:::

## 優秀なプロダクトオーナー
このインターンでは、プロダクトへの新機能提案をプロダクトオーナーに対してプレゼンしました。
このプレゼンで、インターン生は自分がどのぐらい良い課題解決をできるかのフィードバックが得られます。
プロダクトオーナーは、プロダクトに対して高い解像度で理解したうえで、提案がどのぐらい多角的に考えられているかをチェックしてくれます。
例えば、次のような観点からのフィードバックをしてもらいました。
今振り返ってみると、とんでもなく負荷の高いフィードバックをそつなくこなしていてすごいと思います。

:::note info
**プロダクトオーナーへのプレゼンでの要求水準が高く、フィードバックが丁寧だったため、協調する能力が大幅に鍛えられた**
:::

### 顧客の視点を明確に理解できているか？
本当にニーズはあるのか？顧客のニーズの理解は正しいのか？などを考えます。
カードゲームの例えにおける「他人のカード」を正しく理解できているかをレビューします。

自分が勝手に考えているニーズだけを想像で語ってしまうといけません。

### 開発者の視点が正しいか？
実現可能な作業量か？実現可能な技術力はあるか？などを考えます。
カードゲームの例えにおける「自分のカード」が正しく認識できているかをレビューします。

### 納得してもらうための論理が適切か？
開発者、顧客の視点から、最も価値の高い選択肢を選べているのか、価値が高いと判断した理由は明確で妥当かを考えます。
プロダクトエンジニアとして、価値探索の学び方をするためにもっとも重要な部分です。
カードゲームの例えにおける、複数のカードを吟味して、最適な行動ができているかをレビューします。

### プロダクトオーナーの視点を的確に受け入れられるか
プロダクトオーナーも価値を提供するためのチームのひとりです。
そのため、プロダクトオーナーのレビューを正しい真理と認識して鵜呑みにしてはいけません。
同時に、その意見を自分のプレゼンの攻撃だと受け取って拒絶してもいけません。

プロダクトオーナーの考えを正当に理解したうえで、妥当性を考えて、納得できる言葉で説明する必要があります。
質疑応答を通じて、協調の大切さが身についているかをレビューします。

## 360度のフィードバック
プロダクトエンジニアとして重要なのは、プロダクトの価値という軸を持ち、技術研鑽を続けつつ、他人の意見も適切に受け入れることです。

**自分の技術力に自信を持つことと、他人の能力を信じることは両立します。**

この部分に的確にマッチしていたのが、ゆめみの**サマーインターンを通じて重視されていた全員から全員へのフィードバック**です。

:::note warn
一方的な評価だと評価者が「正解」に見えてくる
:::

インターン中、インターン生とメンター（バディ）と運営の間で、たくさんのフィードバックが飛び交っていて、多様な意見からより正しい解を探すという能力が身に付きました。

:::note info
率直なフィードバックをお互いにすることで、全員の視点を組み合わせてより良い方向に進むことができた
:::

特に、**毎日壁打ちの相手になってくれたバディには大感謝です**。

# どうしてこのインターンでないと学べないのか？
プロダクトエンジニアとしての心構えと練習というのは、特に学生には身に付きづらいと考えています。
そのため、ゆめみのインターンは貴重な能力を学べる機会だと思いました。
学生の個人開発や独学で身に付きづらい理由をいくつか考察します。

## 全員にある程度の素養がある
サマーインターンの参加者は、みんな優秀でした。
単に実装能力だけでなく、プロジェクトの運営上の知見だったり、デザインの知見であったりを持っている人もいました。
プロダクトエンジニアとして協調しつつ学ぶためには、当然ですが、**全員が協調に値するだけの何らかの分野での実力を持っている必要があります**。
カードゲームの例えをすれば、カードを持っていない人間と協力したところで、選択肢が増えないのです。

:::note info
様々な分野の実力者が一堂に会する機会なので、多様な刺激を受けられる
:::

## クライアントワークの機会が少ない
学生の開発は、基本的には自分の通りに開発すると思います。
クライアントワークでは、顧客の納得が無いと開発できないという縛りがあります。
この**縛りがあるからこそ、より良いソフトウェアエンジニアになるための実力が身につく**のですが、自分から面倒な縛りを設定したくなる人はほぼいません。

また、クライアントワークをするにしても、就業型だとどうしても学生の裁量が少ないです。これでは、プロダクトエンジニアとして最も大切な意見の統合と合意の形成をやることはできません。

:::note info
**ゆめみの自主性を重視する社風と、短期インターンの形式がかみ合った結果、クライアントワークの再現を高い精度で行うことができ、結果としてプロダクトエンジニアとしての実力が身に着けられた**
:::

## 学生は知の高速道路を走ってばかりである
多くの学生は、未熟なハードスキルを改善することに時間を投資しています。そのため、基本的には正解を理解して、使いこなせるようになるための勉強を必死になっています。したがって、その価値観から脱出するのは難しいです。

:::note warn
学生向けのイベントや教科書は、技術力が足りていない人向けに、正解を提供することを目的としているものが多いし、学生もそのようなものを選びがちである
:::

このような環境を用意すること自体は間違いではありません。正解を学ぶ方式は、カードゲームの手札を増やすための環境としては理想的だからです。
しかし、ある程度の技術力を持った学生が**次のステップに進むための環境は不足していると考えています。**

:::note warn
プロダクトエンジニアとしての成長は、まず技術者としての高い実力を前提としている
:::

# おわりに
私は、ゆめみのインターンに参加してよかったと心から思っています。
プロダクトエンジニアとしての重要なスキルが理解できたときには、まるでゲームで新しいステージが解放されたときのような衝撃を受けました。

興味がある方はぜひゆめみのインターンに参加してみてください～！