最初から強いやつの特徴

## はじめに
どんな仕事でも強い人は存在する。
でも最初から強い人は珍しい。
これは、web 業界に身を置いてみて、信じられないくらい**ムキムキ**になっていった人たちを見てきた私が送る **こうしたら強くなれるかもしれない？指南書**である。もしエンジニア職に興味があるのであれば、一考になるかもしれない。

## 最初から強いやつの特徴
- 平日の稼働時間以外も勉強 or 開発する
- 土日も勉強 or 開発する
- 公式ドキュメントをちゃんと読む

以上のような当たり前のことは、**最初から強い人じゃなくてもやる**ので特徴に入れません。

### 1. 読解能力が異常に高い  
 - 国語の力です。
 - これは、ちゃんとドキュメントに書いてあることが理解できると同義です。
 - そしてこれが本当に大事です。
 - 強い人に質問すると必ず「**ん？ Docs 読んだ？**」って聞いてきます。私は (...読んだわ！) って内心思ってますが、それは読んだだけです。内容をちゃんと汲み取れてない可能性が非常に高いです。　
   - 強い人が同じドキュメントを読むと、「ほら、ここに書いてあるじゃん。」って必ずいいます。

### 2. 「そもそもそれいるん ？」を臆せずに言える
 - タスクにアサインされたら、**何がなんでもその通りにしないといけない！** という強迫観念に苛まれることがあります。
 - それは幻想らしいです。
 - 「そもそもそれやる必要あるん？」という呪文を強い人はみんな何故か口を揃えて詠唱してきます。
 - **これは最終的なゴールがちゃんと見えているからこそ言えると思っています。**

### 3. タスクを適切な粒度で実行する
- タスクのスコープが広範囲すぎると、自分でもゴールを見失いやすく、レビュワーも「**これ何をレビューすればいいの？**」という大変不幸な状態になります。
- また、スコープが広いので、実装に時間がかかってしまい、どうしても停滞している感が否めなくなってきます。
- 最初から強い人は、**何故かこのタスクの粒度設定が信じられないくらいうまいです**。タスクが大きすぎたり難しすぎたりすると、細かくタスクを分割し、周りの人の協力を得ながら、着実に階段を登って行きます。
- ベテランのエンジニアと一緒にストーリーの作成をするとき、抽象的なイメージでモヤモヤしている状態から、明確にストーリーが出来上がってくる様は、ある種の感動を覚えます。最初から強い人は、ベテランのエンジニアと同じ視点を持っていると思っています。

### 4. 優先順位を理解している
- これはベテランになればみんな到達するかもしれないですが、最初からできる人はなかなかいません。
- でも最初から強い人は不思議とできます。
- ゴールが明確に見えている証拠ですね。

### 5. Log をちゃんと追える 
- これも強い人は何故か最初からできる。
  - というか何で最初の頃はあんなにできなかったんだろうってくらい私はできなかった。
- そして error 箇所がわかったら、その内容をググるんだけど、強い人たちは、見に行くところが共通している。もう、びっくりするくらい一緒。
  - 公式ドキュメント
  - GitHub の Issue 

### 6. 最下層に到達できる
- コードを書いていると、「多分間違ってないけど上手くいかない...」的なことが私にはよく発生します。(100 % 間違っているから動かないんですが...)
- それは、**誰かが作った関数は絶対正しい！という前提で進めているから**そういうことが起きます。
- どんなに優秀なエンジニアが作ったものでも疑いましょう。
- 直に書いてあるソースならば、「ああ、ここがおかしい」と気づきますが、こと Library で使っている関数は**無条件スルー**をしてしまいます。
- しかし最初から強い人は、Library であろうがなんであろうが、その関数が「何やってんねん？」 というところまで潜っていきます。それは公式ドキュメントや Github の該当ソースコードまで潜って何をしているかという事実を集め、問題の切り分けにいかします。

### 7. 横着な commit をしない
- これは 3 と似ているが、確実にできるようになったところで一旦 commit するというものです。
- そのまま変更を commit せずに開発すると、うまく動作しなくなったときに、どこで躓いたかのかが分かりづらくなり、速度が落ちてしまいます。
- 強い人は綺麗な commit メッセージを残す。
    - 補足します。
    - これは、横着な commit をすると、commit するメッセージがとても長くなってしまいます。すると、その commit メッセージを書くのがだるくなって、私は fix hoge とか add fugaFunction etc とかだけにしてしまいます。
    - それは、一気に機能を実装しているから(横着しているから)よくない commit メッセージになります。
    - 綺麗な commit メッセージとは、**何を実装したのかを過不足なく記す**ということです。
    - これは、人にもよるのですが、強い人とペアプロをするとよくわかります。非常に綺麗です。

### 8. 質問がまとまっていて回答しやすい
- ちょっと当たり前すぎて入れるか迷ったけれど、特徴なので入れます。
- 何がわからないかを言語化するというのは、思っている以上に難しいです。
  - 今どこまでできているのか？ そして何ができていないのか？ できないことに対しては、何が障壁になっているのか？ どういうアプローチを実践してみたのか？ を簡潔に文書に起こす力が必要です。
  - 自分だけなのかもしれないのですが、私は説明を端折る癖があり、いっつも PM に「5W1H を適切につけて説明してくれ...」と呆れられます。(とは言っても PM はエスパーなので高確度で捕捉してくれるんですが...)
    - 自分の中にしか前提条件はありません。
    - 最初から強い人は、誰が聞いたって意味が一意に決まるものの言い方 or 書き方しかしません。

### 9. 新しいことに対して一切物怖じしない
- 羨ましい限りである。
- どうしても私は「うわっ！」って思ってしまう。
- 強い人たちは「**ちゃんと読めばわからないわけがない**」というマインドもさることながら、**常に何か新しいことを探していて、隙あらば使おうとしている。**（個人ではすでに使用している。）
- 「もう動くから今のままでええやん..」というのは普通の人の考え方である。


## 強くなるには？
強くなるには上にあげたようなことをすれば、多分強くなれると思います。
加えて、私が大事だと思っていることを書きます。

- **強い人とディスカッションする**
  - これは凡人にとって非常に有効です。
  - 我が社には Boot camp という制度があるのですが、これは、Java をベースとしてプログラミングの大事な概念やオブジェクト指向を勉強し、強い人に理解度をチェックしてもらうというものです。
  - この強い人が強すぎて大抵の理解度チェックはボコボコにされ、1 回ではなかなか pass できません。
    - ちなみに以前の記事 [Web 業界に参入して 1 年経ったけど、なにしてきたん？](https://qiita.com/zamis/items/abea48e1fdb16a3bf6eb) でもちらっと書いたんですが、私はクラスとインスタンスの章で 3 回やり直しをくらいました。
    - しかし、このディスカッションを経て、正解に辿り着いた時には**新しい自分に出会えます**。
    - 読解力の低い人間は、ちょっと本を読んだくらいでは、その真髄に辿り着くことはできません。
    - 強い人は、弱い人がわかるレベルにまで落として基本となる概念を説明してくれます。
    - なので、できるなら強い人にたくさんのことを聞きましょう。

- **頑張っている人は、夢中になっている人には勝てない**
  - これは私の PM の言葉ですが、我々が強くなるには最も有効かもしれません。
  - 結局、夢中になれるからこそ、今の自分がいると思っています。


## 最後に
ここにあげたものはあくまでも私の観測範囲内のことで、サンプル数が少なすぎますが、参考になれば幸いです。また、思いついたらこっそり継ぎ足していきます。

最後まで読んでいただきありがとうございました。

## （宣伝）
私が未経験からエンジニアになるときの戦略を書いてます。
良かったら読んでください。

https://note.com/zamis/n/neea5509aec8e