野球選手にはキャンプがあるのに、エンジニアにはキャンプがないのはなぜ？

タイトルは完全に釣りです。

私は「働くを楽しくする会社」でエンジニアリングマネージャーをしています。
※執筆時点では、就任1か月程度。
ただし、今回はマネージャーとしての内容では全くありません。プレイヤーとしてどう成長して、どうやって自分よりも優秀な人達にくらい付き追いつくかを考え、今までやってきたことについてです。

タイトルの通り、プロ野球には11月と2月にキャンプがあります。
前者は「秋季キャンプ」、後者は「春季キャンプ」と呼ばれます。
高校の部活などで言えば「強化合宿」に当たるもので、つまり「４ぬほど練習する期間」です。

今回記事にしたいのはこの **「練習」** についてです。
プロのスポーツ選手は、練習をします。部活の経験がある人はわかると思いますが、放課後毎日のように練習して、土日に試合があって、という感じだったと思います。
しかし、プロのエンジニアになってどうでしょうか？
全員が練習していますか？半分以上の人は練習していないんじゃないでしょうか？
エンジニアに限らず、社会人で練習をしている人はかなり減るんじゃないでしょうか？

そんなことに対し記事にしてみたいと思います。


# プロスポーツ選手とエンジニア（社会人）の違いを理解する

まず、そもそもエンジニア（社会人）にとっての練習って何？てことから理解する必要があります。

練習とは「本番や試合に備えて技術力や能力、経験値を高めておく」事だと考えます。
国語辞典だと **「学問や技芸などを繰り返し学習すること。また、一定の作業を反復して、その技術を身につけること。」** のように書かれていたりします。

スポーツ選手であれば **練習** という言葉がしっくりくると思います。
- 野球であれば、試合でヒットを打つために、スイングの軌道やタイミングを考えながら **何回も** バットスイングしたり、ボールを打つということをします。
- 陸上であれば、速く走るために、ひざを上げるほうがいいのか、地面をたたく方がいいのか、腕をしっかり縦に振るなど、どうしたら速く走れるか考えながら **何回も** 走ります

いずれも **試合で成果を出すため** に、事前に反復練習などによって技能を向上させるという過程があります。

エンジニア（社会人）であれば以下のような感じでしょうか。
- プロダクトのコードを修正するのに必要なプログラムのコーディング手法を[Progate](https://prog-8.com/)などで学んでおく。
- 単体テストをどんなコードにも書けるように、テストコードに対する記法の引き出しを増やしておく。
- AWSで運用しているプロダクトのインフラの改善のために、認定試験などを利用して知識を学んでおく。

こちらも「プロダクトのコードを修正」「単体テストをどんなコードにも書けるように」「プロダクトのインフラの改善」のように、会社などで商材となっているものに対して **成果を上げる** ために、技能の向上をしようとします。

これがエンジニア（社会人）にとっての練習だろうと考えます。

# 練習に費やす時間の違い

次に試合時間と練習時間の違いについても理解する必要があります。
エンジニアにとっての試合時間は「業務時間」、つまり普通の会社であれば8時間×5日＝40時間/週が該当します。
1週間で見てみます。※サッカーはあまり詳しくないので間違っていたら教えてください。

||試合時間|練習時間（ウォーミングアップ込）|
|---|---|---|
|プロ野球|18時間<br>(3時間×6試合)|30時間<br>(試合前全体練習3時間＋自主練習2時間)×6日|
|プロサッカー|3時間<br>(90分×2試合)|24時間<br>4時間練習×5日＋試合前練習2時間2日|
|エンジニア|40時間<br>(8時間×5日)|？？？？|

これを見てどうでしょうか？
スポーツ選手は試合に向けて、試合時間以上の時間を練習に費やしていることがわかると思います。
一方、エンジニア（社会人）はというと、最も長い本番時間のわりに、それに向けたスポーツ選手同等の練習時間は物理的にとれないことがわかります。（80時間も無理ですよね？）
そして、エンジニアに限らず社会人でも練習時間をほぼ取ってない人、結構いるんじゃないですしょうか？

当然企業によっては、

- 配属前研修(プログラミングやインフラの基礎など)
- 配属後研修(プロダクトで使われてる技術など)
- OJT

などが「業務時間内」で用意されており、「最低限の知識」を身につけるための期間が用意されている場合も多いと思います。

ただ、これでいきなり成果が出せるかというとそんなことはないと思ってます。
前述のものは採用直後の期間のみであり、IT業界の変化のスピードに追従しながら、またプロダクトのフェーズにより必要なことも変わるため、すぐに陳腐化します。

つまり、継続して成果を出そうと思ったら、できることを増やすこと、できることの精度を上げるなど、日々の成長が重要で、そのための自己研鑽(練習)は避けて通れないわけです。

自己研鑽(練習)をせずに

- 成果でないな、、
- 給料上がらないな、、

というのは **当然ちゃ当然** で、
スポーツ選手はこんなに練習しても、プロ野球なら毎年1球団10~20人が選手としての職を失います。
大半が戦力外です。

練習や後述するような工夫もなく、成果出ない、給料上がらないとか **「寝言は寝て言え」** って話なんです。

# エンジニアが勉強し続けなければならない理由

幸いにも日本で仕事をしているエンジニアであれば、スポーツ選手のようにすぐさま戦力外でクビとはなりませんが、できない人に面白い仕事を選ぶ権利はないし、集まってくることもありません。
エンジニアも技能を磨き、成長していかなければ、成果は出せません。
年功序列ではなくなってきているため、給料アップも保証されません。
特にエンジニアは、技術の入れ替わりが早い職種なので、他の社会人よりも学び続けることが多いし、成果を出し続けるには、キャッチアップし続けなければなりません。


# エンジニアが練習時間が少ない場合どうしたらいいか？

でもスポーツ選手のように練習時間を取ることは難しい。
だから、我々エンジニアは、プロスポーツ選手以上に **「試合時間で練習時間の不足を補う」** 必要があります。

半分くらいの業務時間を自己研鑽に投下していい会社はほとんどないでしょう。
いわゆる試用期間のような、入社後半年くらいならあるだろうと思います。
しかし2年も3年も社員に対して半分近い時間を自己研鑽に充ててよいというような余裕は、普通はないだろうと思います。

だからといって1日16時間働けって意味ではありません。スポーツ選手が「試合勘」とかいうのと同じです。試合でしか身につかない事もあります。これらは試合を通じて身に付けるしかないのです。
逆に言うと、エンジニア（社会人）は試合でも身に付けられる能力がたくさんあります。それを試合時間で確実に身に付けていくことで練習不足を補おうということです。

当然、毎日仕事以外の時間で読書したり、個人開発したりするのは、練習時間０の人に差をつけ圧倒するためにはやった方がいいに決まってるし、成功者といわれる人の多くはやっているはずです。

# 私が考えるアクションプラン

言い放って終わりだと「こいつ口だけかよ」と思われたくないので、 **「試合時間で練習時間の不足を補う」**  についてのアクションプランを例示しておきます。

私自身、入社2〜4年までは、次に上げるようなことを愚直にやってました。会社から提供されるものが自分にとって足りないなら自分でやり方を工夫、変更するしかないからです。
教えてくれないからできない、教わる機会がないからできない、などというのは簡単です。
しかし私は「変えられないものに文句を言ったって簡単に変わらない」と思ってるので、まずは自分が変わればいいわけです。

参考:
[相手は変えられない ならば自分が変わればいい: マインドフルネスと心理療法ACTでひらく人間関係 (単行本) ](https://www.amazon.co.jp/dp/4480843183/ref=cm_sw_r_cp_api_glt_i_E6WS9ETAT2NH876BRSGZ)

以下3つに大別します。

- 学んだことを即実践投入
- 日次振り返り
- 日曜大工


## 学んだことを即実践投入

弊社ではここ1~2年、勉強会の文化が根付いて、常時数10の現場発の勉強会が開催されています。
業務時間内で開催されているため、そういうところに積極的に参加して、自分の知らない事を学ぶ機会にします。

- 100％体得することは当然難しいのですが、メインイシューを自分で見つけ、定義し、それだけは４んでも体得するつもりでinputします。
- inputしたものはすぐにoutputします。できれば24時間以内に。
- outputすることで自分の能力、技術として定着します。

例）MockMvcの書き方を勉強会で学んだ。⇒翌日、自分の担当しているモジュールで実際に見よう見まねで書いてみる。

## 日次振り返り

- 日々の仕事の中で、できなかったこと、苦戦したこと、誰かにサポートをうけて突破したものを思い出します。
　→ 次回、同じような問題に直面した時、自力で突破するにはこれらを克服している必要があります。
- すべてをリストアップします。これらがそのタスクを実行するために自分に足りなかったモノです。
- すべてに対し、身に付けるためのアクションプランを決めます。アクションプランは **必ず** outputを含めます。
- 愚直にこのアクションプランを実行し、消し込んでいきます。

※アクションプランにoutputを伴うとは、以下のようなことです。

- プログラミングであれば、実際にコーディングしてみる。
- プロダクトの仕様や知識であれば、ドキュメントに整理しまとめ、第三者にむけて発表する。

日次で実行するのがいいですが、時間的に難しいものは日次じゃなくてもよいと思います。
ただし1か月後のようにあまりにも時間がたつと、記憶から完全に消えるため、その前に取り組んだ方が効果は高いはずです。
**「想起」** という、忘れかけたことを思い出したりするタイミングでより強く残ります。

参考：[最も効率のいい勉強法を身に着けてからいい感じな話](https://soepysoechang-af.hatenablog.jp/entry/2021/11/24/095339)


## 日曜大工

これに関しては試合時間で練習時間を補うではありません。完全に練習の時間を作るです。
個人的に、休日に個人開発をすることを日曜大工と呼んでいます。
プロダクトコードで実験しにくい場合は、Githubなどにレポジトリを作成し、個人開発でいろいろ実験してみるのが良いと思います。
かくいう私も、Spring frameworkを学ぶために、Webアプリをちょこちょこやっていたりします。（リリースするレベルじゃないですが）
フロントエンド、バックエンドエンジニアであれば、0からWebアプリをコーディングし自力でローカル環境で動かすくらいの経験は絶対やった方がいいと思います。
想像以上に知らなきゃいけない事がたくさんありますし、かなり力付きます。
私も忘れるので、結構頻繁にやったりしているし、Hello WorldくらいならJavaだけでなく、GoやPythonもかじったりしています。


# 最後に

私は、中学生までは、クラスでも勉強ができる優等生で、授業を聞けば大体すべて理解できるような感じでした。
しかし、高校生になってからそう上手くいかなくなりました。今思えば「要領悪くて、人の何倍もやらないと駄目な人」だったんです。

それ以降、社会人になっても同じです。とにかく回数と量を無理やり詰め込む昭和な方法でここまでやってきています。
そこにここまで記載した内容のような観点を含め、日々成長していこうとしているわけです。

要領悪くて成長遅い、なかなかできるようにならないと思っているそこのあなた。
あなたが成長するのに必要な量こなせてないんですよ！たぶん。
上手くやろうなんてのは、最低限の知識や能力が備わってからの話です。
難しいこと考えず、とにかく反復練習、繰り返し数をこなす。可能なら終業後や休日の時間を自己成長の時間に使ってみると、停滞していた人生変わるきっかけになるかもしれません。

私もそうやってここ2~3年でそれなりにレベルアップできだ実感があります。
参考になれば幸いです。