見出し画像

巨人を探せ。そして、肩の上に乗れ。

効率厨・最適化厨iOSエンジニアの田畑です。

今のお手伝い先の会社でも、若いiOSアプリエンジニアの育成やメンタリングを行っているのですが、彼らの話を聞いてると「誤解が萎縮・諦めへとつながり、成長を阻害してしまったらもったいないな」と感じることが多かったので、この記事を書きました。

今回、育成・メンタリングしているメンバーは全員iOSアプリエンジニアでしたが、iOSアプリエンジニア/ソフトウェアエンジニアに限らず、知識の蓄積が重要であり、かつ方法論がある程度体系化されている職種であれば、全般的に通用する話かと思います。

よくある悩み

育成・メンタリングで話を聞いていると、今の会社に限らず、以下の2つがよくある悩みとして出てきます。

チームの先輩や、社内のすごい人が書くようなコードが思いつかないし、
 思いつくようになるイメージがわかない。
チームの先輩や、社内のすごい人ほど早くコードが理解できないし、
 できるようになるイメージがわかない。

一般化すると
できる人と同じような発想ができないし、自分ができるようになる
 イメージがない。
できる人と同じようなスピードで思考・理解できないし、どうすれば
 同じようにできるようになるかわからない。
ですね。

こういった悩みの多くは単なる誤解で、体系的な学習をすることで誰でも同じような能力を再現性高く身につけられると思っているので、これらの悩みに関する誤解を1つずつ解いていきます。

できる人、そんなに思考してない

まずは、「できる人と同じような発想ができない」という誤解について。

「同じような発想ができない」という言葉から推測されるように、経験の浅いエンジニアは「発想が降りてくるのを待つ」「一から考える」と考えているようです。

画像6

しかし、勉強を積み重ね、それなりに経験も積んできたエンジニアが実際に仕事をしている間に考えていることはこうです。

画像2

一から考えるなんてしません。今直面している問題と、それに対して有効そうな解決策・解法を自分の知識の中からピックアップして、うまくいきそうか頭の中でシミュレーションしているだけです。

直面している問題に対する完璧な答えなんてものは用意されていませんが、よほど先進的 or 特殊なことでもやっていない限り、我々が直面している問題は既に誰かが直面し、何らかの解決策により解決済となった問題です(多くの問題は抽象化 / 分解すれば、ぴったりの解決策があります)。

そして、そのような解決策のうち、普遍的に有効なものについては、
原理原則(例:SOLID原則、依存性逆転の原則、etc...)
思想(MVC、MVVMといった設計思想や、プログラミングパラダイムなど)などとして残っています。

つまり、すごい発想ができるように見えている人も、過去の賢い人達が考えた解決策を今の問題に当てはめているだけなのです。

画像3

できる人、そんなに思考速度早くない。

では次に、「できる人と同じようなスピードで思考・理解できない」という誤解について。

経験の浅いエンジニアと、ある程度経験を積んだエンジニアだと、
・機能追加
・GitHubのプルリクエストのレビュー
の所要時間が数倍〜10倍になることも珍しくなく、経験の浅いメンバーは👇のように勘違いをしているかもしれません。

画像4

そんなわけはありません。

作業スピードの違いについては、👆で解説したように発想に要する時間の差である程度は説明できるかと思います。

一から全部考える、経験の浅いエンジニア
vs
思い出して当てはめるだけの、経験積んだエンジニア

という図式ですね。

GitHubのプルリクエストのレビューについても基本的には同様です。

経験の浅いエンジニアは「逐語的に1つ1つの処理を追う」方法でレビューする人が多いようで、全ての処理を自分の頭で理解しながら進むため、時間がかかってしまいます。

画像6

一方、ある程度経験のあるエンジニアは、👇のようにレビューしています。

画像6

原理・原則から考えられる理想的な実装現状の実装を比較し、原理原則に沿っていないと感じられた部分のみ、質問や指摘を行います。

つまり、これも本質的には先程の話と一緒で、チームメンバーが書いてきたコードと、過去の賢い人達が考えた解決策を比較しているだけなのです。

画像7

「型」を理解し、体得すると誰でもできるようになる

プログラミングや仕事に限らず、僕たちが遭遇する問題のほとんどは、既に誰かが直面した問題であり、その問題に対する解決策は「」「方法論」「原理原則」として残されています(分野によって呼び方に違いはあれど)。

自分はこの分野における天才だ」「趣味なので自分のやり方でやりたい」とかでもない限り、解決済の問題を一から解きなおすのは効率が悪いので、まずは「型」を学び、実際に運用し、腹に落ちるまで練習すれば良いかと思います。

そうすれば、柳先生の特別授業の④→②は効率よく実現できるかと。

まとめ

というわけで、手っ取り早く力を付けたければ、先人の知恵・方法論(巨人)を探し、それを学び、腹落ちさせる(肩の上に乗る)のが良いのではないでしょうか。

ちなみに「巨人の肩の上」って表現、ニュートンが初出じゃなかったんですね、初めて知りました👀
巨人の肩の上にのる矮人 - Wikipedia

サポートする代わりに個人開発はじめましょ! iOS👇 https://developer.apple.com/jp/support/enrollment/ Android👇 https://play.google.com/apps/publish/signup/