プロのエンジニアは何が違う?保守性です。
アメリカの大学を卒業して1年弱経ち、新卒でIT企業に入社しエンジニアとしてシステムの開発に約10ヶ月ほど従事しました。
そこで気づいたプロのエンジニアの書くコードと自分の大学時代に書いていたコードの書き方で明確な違いが何点か見つかったのでここで共有できればと思います。前提として複数人で実際にサービスとして提供されるシステムを作る際の実務での気づきになります。
実務未経験のエンジニアの方にはとても役にたつのではないかと思います。
保守性を高める
保守性とはバグや誤りの見つけやすさと仕様変更、機能追加の行いやすさです。
1、変数、定数、関数クラスの名前の付け方
これは実務経験がなくても大学などで教授に指摘されたり、自分でも気づいていたりするかもしれませんが、変数などの名前の付け方を適当にすると面倒なことが起こります。
個人の開発でも半年前のコードを読んだ時に解読できないという経験をしたことは多いのでは中と思います。
書いた本人でさえ時間が経てばわからなくなるものを、書いたことすらない他のチームメイトが解読することはとても骨の折れる行為で時間がとてもかかります。この時間は自分が少し名前を意識するのにかかる時間と比べ物になりません。(またチームメイトは自分ともう一人とも限りません。)
そのため見ただけで変数や関数などの意味がわかりやすい名前の付け方は意識することを要求されます。
例)
× num
○ totalUserNumber
バグがあった際も、仕様変更、機能追加の際も基本的に既存のコードを見るので、保守性の全てに通ずるところがあります。
名前の付け方のルールは具体的な単語を入れるだけでなく、単語の繋げ合わせ方でも以下のようなルールがあります。キャメルケース(camelCase)やパスカルケース(PascalCase)、スネークケース(snake_case)、ケバブケース(kebab-case)
この()内の英語の名前が表記の仕方になっています。
例えば、キャメルケース(camelCase)の場合は複数の単語のうち真ん中の先頭を大文字にして、スネークケース(snake_case)の場合は複数の単語を_で繋ぎます。
キャメルケース(camelCase)だとuserItemや、スネークケース(snake_case)の場合はcurrent_userのように。
ちなみに、自分のおすすめの方法は以下のように種類でケースを分けることです。
変数、定数、関数 ... キャメルケース(camelCase) 例)findAllUsers()
クラス ... パスカルケース(PascalCase) 例)LinkedList
DB関連の名前 ... スネークケース(snake_case) 例)user_password
HTMLのidなど ... ケバブケース(kebab-case) 例)title-container
普段HTMLは触らないのでこんな名前があるかはわからないのですが苦笑
2、Unitテストを入れる
Unitテストとは関数やクラスの一つ一つが正常にテストを動くかをチェックするものです。
機能でも複数の関数が連続として動くことで作用するものは多くあると思います。その際にそれぞれの関数自体は正常で動いていることが分かれば、接続さえ見れば良いことになるのでバグを解決しやすくなります。
また、ただそれぞれのユニット(関数、クラス)の正常さの保証だけでなく、仕様変更の際などでバグを残してしまっていた際にユニットテストが回っていれば気づ気安くなります。
3、設計
設計という言葉は粒度がありますが、今回はクラス設計や関数の切り分け方などです。
クラスなどでは単一責務という考え方があり、一つのクラスには一つの責任を持たせて、同時に異なり目的のことをさせないというものです。
これがなぜ保守性を高めるかですが、単一責務でない場合自分が想定していなかったエラーが起こりうる可能性が増えるからです。
これは自分もまだ勉強中で人に説明できるレベルではないので、また後日書き足させてください。