スキルアップなら車輪の再開発（LT再編集）

※本記事は[D-Plus|開発生産性コミュニティ](https://d-plus.connpass.com/)様主催の
[年内さらに成長したい方へ！スキルアップ速度を加速させる取り組み発表会](https://d-plus.connpass.com/event/333284/)で発表させて頂いたLTを再編集したものです。

8分LTのため飛躍も多いかと思いますがご容赦ください。

https://speakerdeck.com/miki0529/d-plus-tokyo-number-8-sukiruatupunarache-lun-nozai-kai-fa

スキルアップ速度を加速させる取り組みとして
個人を対象に「いいから手を動かせ！」というお話をさせていただきます。

# 結論

:::note info
- スキルアップの道を「**守破離**」で考えよう
- **守**（初級者）なら写経がオススメ
- **破**（中級者）なら何かのアプリをまるっと再現がオススメ
- **離**（上級者）は欲しいものを人に聞こう
:::

## スキルアップのため「守破離」を考える

「**守破離**」とは芸道における修業の段階を示したものです。
芸道とは弓道とか剣道とか戦車道とか「道」で終わるもの全般という感じでしょうか。

守破離のそれぞれの段階はざっくりと下記のようになっています。

:::note info
**守**　…　師の教えを忠実に守り、身につける段階

**破**　…　自分で考え工夫し、自立していく段階

**離**　…　独自の新しい世界を確立する段階
:::

初めて見たときは、「守の段階では自分で考えるな」と明記されているのが面白いなと思いました。

さて、プログラミングあるいはエンジニアリングの領域を「芸道」と考えたときに
その守破離の各段階では何をすれば良いかということを考えていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930205/a38b429b-9206-2245-3883-9510265e9e83.png)


## スキルの定義

考えていく前に「スキル」という言葉が広義なので
本記事用の定義は

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930205/1622d969-5b02-8251-2653-edbf91eb165c.png)

ということにします。

とにかく「**理論上の最速**で具現化できる能力を持っている」=「スキルが高い」ということです。

理論上最速とはどういう状況か…を早い順に並べると以下の感じでしょうか

| 早さ | 状況 | 備考 |
| :- | :- | :- |
| :star::star::star::star: | 要請があった時にはもう完成している | 「こんなこともあろうかと」 |
| :star::star::star: | 一度作った事があり、同じことをする | 中途入社などで実際に発生 |
| :star::star: | 近いものを作ったことがあり、追加調査込みで作る | ベテランに多いケース |
| :star: | 初めて作る。調査・ヒアリングから始める | スキルアップ案件！ |

１番目はヤマトのクルーくらいしか見たことがありません。
２番目はベテランの方が中途で入社したりすると割と発生するでしょうか。

## スキルアップのための「離」

先ほどの表を見ながら ベテラン=スキルが高い=**離もしくはその先の状態にある** と考えるなら
離のアクションとしては「作った経験を積んでいく」ことと言えそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930205/0769a466-881b-f64f-a2a0-83fe3b48b655.png)

ベテランエンジニアと言われる人々が何故スキルが高いかというと、沢山作った経験があるからだと思います。
ゆえにマネジメント転向などでコードを書かなくなると、経験を積む機会が少なくなり、自己評価含めてスキル低下を感じることもあるでしょう。

### 「離」から「破」と「守」を逆算して考える

「離」を定義できれば、守破離の流れから「破」と「守」を考えることができます。
守破離は

:::note info
**守**　…　師の教えを忠実に守り、身につける段階

**破**　…　自分で考え工夫し、自立していく段階

**離**　…　独自の新しい世界を確立する段階
:::

となっているので

- 「離」から工夫だけ残し「独自の新しい～」をカットすれば「破」
- 「破」から「考えて工夫する」をカットすれば「守」

です。

## スキルアップのための守破離

よって、プログラミングあるいはエンジニアリングの「守破離」は下記と言えそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930205/2600a2dd-055e-099c-f239-e003123ec15e.png)

どの段階でも、「何かしらコードを書け・作れ」という身も蓋もない話になってしまうのですが
自身のスキル段階によってその書き方を変えましょうという内容です。

### スキルアップのための「守」

この場合の「見本どおりに何かを作った経験」とはどういうものでしょうか。
絶対にこれ！という話ではないのですが

- 社内プロダクトの写経
- よく利用されているオープンソースの写経

あたりがオススメです。

この段階の前提は「師の教えを忠実に守り」となりますので
どうやって作るかとか何を作るかを考えたりするのはノイズです。

上記コードはいずれも多数のレビューを受けて今の形にあると思うので「師」としては理想の形だと思います。

余談ですが、社内プロダクトであれば社内の事業ドメインにも**かなり**詳しくなれるおまけつきです。

スライドには書ききれていませんでしたが
写経したものを**実際に動かしながら**進めることもとても重要です。

### スキルアップのための「破」

「守」に「自分で考えて工夫」を追加したものが「破」です。
しかし「独自の新しい」を足してしまうと「離」になってしいます。
「工夫」だけ追加したいのがミソです。

これについても絶対にこれ！という話ではないのですが

- 例えば自分のスマホなどに入っているアプリをまるっと再現してみる
- 社内プロダクトをコードを見ずに自分で再現する

あたりがオススメです。
デザインや仕様が定まっていて、独自の発想を必要としない理想のゴールと言えます。

「〇〇サイト風に作成」のようなポートフォリオは近いと言えるかもしれません。

## 守のススメ

無策で写経しても十分に効果があると思っていますが
私自身がやっていた時に意識したことを記載しておきます。

#### すべて手入力すること
- コピー&ペースト絶対禁止+Copilot禁止（コード補完は使ってました）
- 手で打つこと脳に覚えさせる

#### 写経しながらもコードの動作・意味を咀嚼すること  
- わからないものは調べましょう
- わからなくても良いのでメモリの振る舞いを意識するのも◎です

#### いずれ「破」になるという事を意識して時々改変してみる
- 「自分ならもっと綺麗に書くのに」と思ったタイミングはGoです
- ↑でバグを引ければとても貴重な経験になります
 
#### 習慣化すること
- 集中力というのは作業を始めてから出てくるものなので、とにかくやる習慣をつける
- ちょっと写経しないと寝付けないくらいがちょうどよい

#### 途中でやめてもOK! 次いこ次！
- 師は沢山います

## 破のススメ

#### 手打ちにこだわらない
- 出来上がることの優先度を上げていきましょう

#### 出来れば完成までもっていく
- 何かを「作った」経験を得たいです
- 完成までにどこで辛くなるのか、勘所を学んでおきましょう
- 完成していればそのままポートフォリオに出来ます

#### 完成が近づいたらアピールを
- ここまでやる人がなかなかいないので、積極的アピールを
- 新規アサインへの案件も夢ではないと思います

## 最後に

職業としてのエンジニアになりたてのころ、抜本的なスキルアップをしないと
**職業として続けていくのは難しい**と感じていた頃があり、どうにかしてスキルアップしようと
上記のようなことを続けていました。

C++/DirectX周りでしたが守に相当する動きをおよそ丸２年
破に相当する動きを丸３年程度やったかと思います。

今の実装力の礎になっていますし、もし今右も左も全く分からない環境に出会ったら同じようなことをするかもしれません。

皆様のスキルアップの一助になれば幸いです。
読んでいただきありがとうございました。