POSTS
エンジニアとしての成長に必要なものとは
Introduction
GPUEATERの根岸です。 今回は若干趣向を変えて、以前社内での雑談中に中塚CTOが提示した「エンジニアとしての成長モデル」の紹介と、そのモデルを踏まえたシミュレーションの結果、そして シミュレーションの結果を踏まえたエンジニアとしての成長戦略についてお話ししていきたいと思います。
中塚の考える「エンジニアに必要なもの」
略歴は別紙に譲りますが、当社CTO中塚はエンジニアとしては非常に数奇な経験を経て現在のキャリアに至っております。 その中塚が言うには「エンジニアとして成長するには次の二つが極めて大事なのでは無いか」とのこと。
- 十分な休息(睡眠時間)
- コーディングの経験
ソフトウェアエンジニアとしては業務としてコードを書く時間は一定数あるかと思いますが、ただ業務で書くのみに及ばず終業後や休日にもコードに触れる貪欲さが無いと 頭ひとつ抜けたエンジニアにはなれない、と中塚は語ります。 同時に、エンジニアとして大きな成長を得るためには十分な睡眠が不可欠、とも語っておりました。
エンジニアの成長モデル
また、同時に中塚は次の様なコードで、エンジニアの成長モデルを模式化しておりました。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import math
# エンジニアの成長曲線計算機
# -------------------------------------
LEVEL = 3 # 現在のレベル
G=0.5 # センス・才能
W_CODING_TIME = 5 # 平日での平均コーディング時間
O_CODING_TIME = 2 # 平日夜に勉強または趣味でやってる平均コーディング時間
H_CODING_TIME = 0 # 休日に勉強または趣味でやってる平均コーディング時間
SLEEPING_TIME = 8 # 平均睡眠時間
year = 2.0 # 1.0 = 365日
# -------------------------------------
# 1~10:日本の初級者の平均
# 10~20:日本の中級者の平均
# 20~30:日本の上級者の平均
# 30~40:USの上級者の平均
# 50~:スタークラス
def sg(x): return 1/(1+math.exp(-x))
K = (SLEEPING_TIME)
x = []
y = []
C_DECAY=0.001
Wk=265/365.0
Hk=1-265/365.0
TOTAL_DAYS=(year*365)*Wk+(year*365)*Hk
def sleepk(s):
h = sg(s-9)
return h*(1-h)*4*1.1
def wcode(s):
h = sg(s*1.4-4)*1
return h
def ocode(s):
h = sg(s*3-4) + 1.0
return h
def hcode(s):
h = sg(s*1.4-4) + s*0.5
return h
STD=sleepk(SLEEPING_TIME)*wcode(W_CODING_TIME)*ocode(O_CODING_TIME)*G
ADD=sleepk(SLEEPING_TIME)*hcode(H_CODING_TIME)*G
LR = 0.05
print(STD)
print(ADD)
for day in range(int(TOTAL_DAYS)):
x += [day]
LEVELw = STD * LR - LEVEL * C_DECAY
LEVELh = ADD * LR - LEVEL * C_DECAY
if day % 3 == 0:
LEVEL = LEVEL + LEVELh
else:
LEVEL = LEVEL + LEVELw
y += [LEVEL]
plt.plot(x, y)
「エンジニアの成長モデル」解説
上記のコードは、エンジニアとしての成長要因と成長減退要因の二つの要素に分かれています。 また、成長要因としてのコード記述量は「日常業務」「日中業務後の振り返り」そして「休日のコード執筆」とでそれぞれ別のパラメータとなっています。
業務でコードを書く時間より業務を振り返っての業務後のコードの時間の方が、そして業務とは関係ないコーディングの時間が成長に密着する、と言うモデルとなっています。 一方で、成長を妨げる要因や学習効率を減少させる要因もモデルの中に組み込まれています。 忘却に関して、このモデルでは1日に現在のエンジニアとしての力からおよそ0.05毎日奪っていく、と言う形でモデル化しています。 同時に、睡眠不足の悪影響もモデル化されており、睡眠時間が1日の必要睡眠時間より1時間減るごとに、学習効率が1/2、1/3…と著しく減少するモデルとなっています。
実際にシミュレーションしてみた
それでは、中塚のモデルを用いてエンジニアの成長モデルを比較していきましょう。
業務外でコードを書き十分な睡眠を得ている場合
まずは業務でコードを5時間、終業後振り返りで2時間、休日2時間ほどプログラミングを行う、睡眠時間を確保したエンジニアのモデルを見てみましょう。 3年間の経過でエンジニア力25と中堅くらいのエンジニアまでに成長できるのでは、と言う仮説を提供してくれています。 また、同じモデルで休日にも十分なプログラミングを行なっていたと仮定した場合、3年の業務で有力エンジニアとなる可能性が十分にある、 その様な仮説を提供しています。
業務外でコードをほとんど書かない場合
一方で業務以外で全くコードに触れないエンジニアとしたらどうなるでしょう。 この場合エンジニアとしての伸び悩みが目立つ様になります。 3年超の経験で初心者こそ脱却できたものの、中級者から先になるには伸び悩むと言う仮説となります。
睡眠時間を削る場合
それでは、日常の睡眠時間を削ってでもプログラミングに勤しんだ場合はどうなるでしょう。 このモデルに従うのであれば、最初に提示したモデルと同じ量プログラミングしたとしても成長曲線が示す伸び代はずっと小さくなることになります。 不摂生で十分睡眠時間が回らないまま、業務を重ねていてもとても成長は望めないという散々たる未来を提示しています。 プログラミングは単純な力技ではなく、「重要な要素を抽出して模式化する」ものであるため頭の働きが大事と言うのには説得力があります。
Conclusion
上記のモデルはあくまで中塚が過去の経験を元に提案したモデルですので、全ての人に適ったモデルではないですが 「業務外にもコーディングに対して貪欲であること」と「頭がはっきりと機能する様な環境を常に維持すること」と言う点は変わりはありません。
エンジニアとしての好奇心を満たしつつ、自分の体のペースに見合った働き方をすることが、エンジニアとしての成長の鍵なのではないでしょうか
エンジニア募集中
GPU EATERの開発を一緒に行うメンバーを募集しています。
特にディープラーニング研究者、バックエンドエンジニアを積極採用中です。
募集職種はこちら