この記事はモチベーションクラウドシリーズアドベントカレンダー2021の22日目の記事です。
はじめに
リンクアンドモチベーションでプロダクト開発をしている高橋と申します。新卒でSIerに入社してシステムエンジニアとなり、今年で4年目となりました。
この記事では、私がシステムエンジニアになりたての頃に意識していたものの中で学習に効果的だったなあと感じるものについて記載します!
1年目のエンジニアの方々にとって、少しでも有益になる情報があれば幸いです。
Whyを考える
例えばコードレビューの際に(処理が長くて見通しが悪いので、)「メソッドを切り出しましょう。」といった指摘を受けたとします。
def post():
#
# 長くて見通しが悪い処理
#
return result
Why(指摘を受けた理由、切り出すことで何が良くなるのか)を考えずに対応をすると、このような修正を行ってしまうかもしれません。
def post():
#
# 相変わらず長くて見通しが悪い処理
#
num = calc(num1, num2)
#
# 相変わらず長くて見通しが悪い処理
#
return result
def calc(num1, num2):
# 簡単な計算処理
return result
特にWhyを考えずに指摘どおりに修正をしてもその場を乗り切れることもありますが、「なぜそのような指摘を受けたのか」、「メソッドを切り出すことによって何が良くなるのか」等を考えて理解しておくと、同じような指摘を受けづらくなったり、別の場面で応用が効きます。
また、考えた/調べた結果自分の中で結論が出ても、先輩等に確認することも重要です。
長い処理の見通しが良くなるというメリットがある、と自分の中で結論が出ていても、先輩に聞いてみることによって、「同じ処理を再利用できる」「処理に名称がついて可読性が上がる」「mockがしやすくなってテスタビリティが上がる」といった他の観点を得ることができます。
Howを考える
先程の例ではメソッドを切り出すWhyとして、可読性向上、再利用可能化、テスタビリティ向上が挙がりました。
逆に、「可読性向上」等のHowの一つとして「メソッドを切り出す」という行為があるという見方もできます。
Howを考えるというのは、あるWhyに対して他のHowがないか考えてみる、ということです。
例えば可読性の向上のHowとしては、処理の区切りで空行を挟むことや必要なコメントを残すこと、分かりやすい変数名をつける等が挙げられます。
Why、Howを行ったり来たりすることで単純に知識を増やすだけでなく、頭の中での関連付けが行われるので、実際に知識を使いこなしやすくなります。
基礎的な概念を知る
基礎的な概念を知ることは下記の点において役立ちます。
- 複雑そうな技術も分解して理解できる
- 触ったことのない技術に対するキャッチアップコストが下がる
複雑そうな技術も分解して理解できる
一見複雑そうな技術も基礎的な技術/概念の組み合わせで実現されています。
例えばDockerに関しては、namespace, cgroup, overlayfs等の技術で実現されていて、Docker全体を理解するよりもそれぞれの要素技術を理解する方が(ボリューム少ない分)簡単です。(どこまで理解するかにもよりますが)
また、要素技術を理解しておくことで、開発中にハマったときにどこでハマっているかが理解しやすくなります。(参考: 繋がらないを解決するステップ)
触ったことのない技術に対するキャッチアップコストが下がる
当たり前ですが、自分が触ったことのない技術についても同様に、基礎的な技術等の組み合わせを実現されています。
したがって、組み合わせの内1つの要素技術について知っていればキャッチアップコストは下がります。
また、同様の技術を触ったことがある場合はその差分を理解すればいいだけとなります。
(PythonとRubyではループの書き方等に細かい差分はあるものの、大枠の構文は似ているものが多い→どちらかを書くことができれば、もう一方のキャッチアップコストは低い)
おわりに
最後まで読んでいただきありがとうございます。
偉そうに書きましたが、私自身も日々勉強の毎日です。
皆様の意識していることで効果的なものがありましたら、コメント等いただけると嬉しいです!
また、弊社のアドベントカレンダーの他の記事もぜひご覧ください!