新人の頃、“動くコード”が正義だと思っていた話
新人エンジニアの頃、私はこう思っていました。
コードは動けば正解
エラーが出ない
画面が表示される
DBに保存される
それだけで
できた
と思っていました。
しかし実務を経験する中で
この考え方は完全に崩れます。
動くコード = 正義ではない
むしろ
動くだけのコードは危険
です。
今回は
なぜ「動くコード」が正義ではなかったのか
を実体験ベースで書いていきます。
「動くコード」で満足していた頃
例えばユーザー登録処理を書いたとします。
@PostMapping("/users")
public void register(UserDto dto){
User user = new User();
user.setName(dto.getName());
user.setEmail(dto.getEmail());
userRepository.save(user);
}
ちゃんと登録できる。
OK、完成
新人の頃は本気でそう思っていました。
しかしこのコード、実務ではこう見られます。
バリデーションは?
重複チェックは?
トランザクションは?
例外処理は?
当時の私は
そんなの必要?
と思っていました。
実務で最初にぶつかった壁
あるとき、こんなバグを出しました。
同じメールアドレスが複数登録される
原因はシンプルです。
重複チェックを書いていなかった
でも当時の自分からすると
登録できるからOKじゃないの?
という感覚でした。
しかし実務では
正しく動くこと
が求められます。
動く ≠ 正しい
ということをここで初めて理解しました。
「動くけど危険なコード」の具体例
① Nullを考慮していない
sendMail(user.getEmail());
一見問題なさそうですが
user.getEmail() が null
だと落ちます。
新人の頃は
そんなデータ来ないでしょ
と思っていました。
でも実務では普通に来ます。
② トランザクションを意識していない
userRepository.save(user);
orderRepository.save(order);
途中でエラーになると
ユーザーだけ登録される
という状態になります。
データ不整合
です。
これも
動くけど危険
なコードです。
③ 例外を握りつぶす
try{
userRepository.save(user);
}catch(Exception e){
}
これも新人の頃やりがちです。
エラーが出ない = OK
という考え方です。
しかし実務では
原因不明の不具合
を生みます。
なぜ「動くコード」で満足してしまうのか
振り返ると理由は明確でした。
① 成功体験が「動いたこと」しかない
新人の頃は
エラーが消えた
これが成功です。
なので
動く = ゴール
になってしまいます。
② 本番環境を知らない
新人の頃は
ローカル環境
しか見ていません。
しかし本番では
不正なデータ
大量アクセス
想定外の操作
が発生します。
現実はもっとカオス
です。
③ 保守という概念がなかった
新人の頃は
コードを書く = 終わり
でした。
しかし実務では
コードを書く
↓
修正する
↓
改善する
↓
また修正する
が繰り返されます。
つまり
書いた後が本番
です。
「良いコード」とは何か
実務を経験して思うのは
良いコード = 長く安全に動くコード
です。
具体的には
読みやすい
変更しやすい
バグりにくい
です。
つまり
未来のためのコード
です。
個人的な気づき
一番大きな気づきはこれです。
コードは「今」ではなく「未来」のために書く
新人の頃は
今動けばOK
でした。
しかし実務では
半年後に誰かが触る
前提で書きます。
そのとき
読めないコード
変更しづらいコード
は確実に問題になります。
まとめ
新人の頃
動くコード = 正義
だと思っていました。
しかし実際は
動くだけのコード = 危険
でした。
重要なのは
正しく動くこと
壊れにくいこと
変更しやすいこと
です。
もし新人の頃の自分に一言言うなら
動いたらスタート
と言います。
そこからが本当の開発です。
最初こそは大変ですが、慣れとともに意識して完璧なコードを書けるようになります。
それまでは根気強くがんばりましょう!!!