若手エンジニアが技術力を上げるために気をつけている小さな取り組みの話
エンジニアになって1年弱、さてさて今の案件どうすればもっと技術力向上できるだろうか?そもそもぜんぜん技術力上がってなくね?開発スピードも遅いしやばくない?と感じていました。
確かにオブジェクト指向の本読んでみたり、デザインパターンの本を読んでみたりということはしているんですが、やはり実践してコーディングしないとなかなか身につかないよなぁという実感がありました。
そして、機能追加案件がメインのため、既存のコードを読んで理解することも非常に遅い。
これはちょっとよくないなぁと感じたので、試行錯誤して以下の2点を解決するために取り組んだちょっとした取り組みを紹介します。
・開発スキルを向上させる
・既存のコードの理解度を上げる
ちなみに1点目はあいまいな言葉ですが、一応「自由にいろいろな機能を作ることができるようになる」というのをまずは技術力・開発スキルと定義しています。
そのためにやったのはズバリ、リファクタリングです。
特に2つ目については10年以上前のソースもあるため、読み込むのが非常に大変でした。
2万行あるクラス、300行くらいのメソッド、何ができるのかわからないUtilsクラス、詳細を見てみると深いインデントのif文、その条件が良く分からない変数tmpが10以下だったり、そのif文の中身が100行くらいある、などなど不満を言えば正直キリはありませんでした。
ただ、これは自分の技術力を上げるためのいい題材だと考え、このあまりいいとは言えないソースコードを案件のたびにリファクタリングをしてから行うと自分に課しました。
具体的なやり方はこんな感じ
・良く分からない変数名を、適切な名前に変更する。(例:tmp、strなど)
・ちょっと長いif文の判定文をis○○などに変更する。(例:if(a<10 || b=null){~}など)
・何かしらひとまとまりの部分をメソッドに抽出する。
一つ目は最初からいろいろ変更すると怖いので、まずなにをしているのかわからない変数を、少しでも分かるようなものに変更してあげます。
tmp見たいな、一時保存のものでも、何を保存しているのか(たとえばチャットのメッセージを一時的に保存して、なにかしら処理を加えてあげるためのものだな、など)が分かってきたら、たとえばtempMessageみたいにしてあげます。
変数の役割をつけていってあげると、処理の流れがだんだん分かってきます。
上の例で言うとチャットのメッセージが入るのかが分かるために、その周辺の処理や呼び出し元を読んだりもします。
そしてだんだん流れが分かってきたら2点目の条件式をメソッドに抽出します。
こちらも、この条件はどういう意味かな?ということを考えると結構頭を使うし、その処理が何してるんだっけということの整理にもなります。
そして最後にするのは、ひとまとまりであろう処理をメソッドに抽出する作業です。
だんだん処理の意味が分かってきたら、その処理にはいくつかブロックのようなものがあるように見えてきます。
この15行は○○をするためにやっていることだな、というように見えてきたら、その○○をするというメソッド名を作って、そこにごそっと処理を移動してあげます。
(本来はこれをする前にテストコードを書いておくのが正しいのでしょうが、まだ導入できていないので本当はあまりよくないんだろうなと思いつつ・・・
あと、本来はこのメソッドどこにあるべき?というところもやってあげないといけないんでしょうけど、ちょっとそこまでいくと結構な時間かかるので、そういうのは相談してからしています。)
こうしていくことで、処理の流れを追うことができて、そのうえできることが増えていくというそんな小さな取り組みでした。