見出し画像

Good Code,Bad Codeを要約してみた(チャプター1編)

エンジニアリングの力を向上させたく"Good Code,Bad Code: 持続可能な開発のためのソフトウェアエンジニア的思考"を読んでいるので、要約してまとめていきます。
今回はチャプター1、主に良いコードの理論編です。パッとなんとなくわかるけど、改めてまとめると身に沁みます。ちゃんと考えてるか自分?となります。


書籍概要

この本は、プロの「ソフトウェアエンジニア」として、堅牢で信頼性が⾼く、保守しやすく、チームメンバーが理解や適応しやすいコードを作成するための概念と実用的な⼿法を、Googleでテックリードを務める著者が具体的な例や解説を踏まえて解説してくれています。

主に1-3年目の初学者がメインターゲットですが、チーム開発時のリファレンス時も使える様にも意識して作られています

要旨

  • パッと思いついたコードを書くのは短期的には楽でやりがちだがダメ。

    • 喜ぶのは自分だけ。

  • 思いついた後、コード品質について練ってから、コードを書く。

  • 良いコード品質は、短期的には失速するかもしれないが、中長期の開発を早く・楽にしてくれる。

高品質のコードを目指すためのゴールや戦略について

コードの品質は良いプロダクト作りや中長期の開発速度の向上に寄与する

言わずもがな、バグだらけのソフトウェアはユーザーに不快感を与える。良いプロダクトには高品質なコードが必須である。

高品質なコードというのは、長期間運用する中での要件の変更やメンテナンスなどもし易く、使用期間を通して高品質であり続けることを担保できる。

コード品質の4つのゴール:正しく動き続け、変更も保守もしやすい

コード品質のゴールは「適切に作られていて、今現在正常に動くこと」と言えるが、もっと具体的にかつ簡潔に表現すると以下の4つになる

  1. 正しく動くこと

    1. 重要なのは"バグがない"だけじゃない。

    2. パフォーマンスやセキュリティの観点が忘れられがちなので忘れず!

  2. 正しく動作し続けること

    1. そのコードが完全に独立しているわけではないので、周囲の変更によって"動作し続けること"が阻害されることが多い。

    2. 他のコードや環境の変更が入っても大丈夫な点を確保しておく。

  3. 要件の変更に対応しやすいこと

    1. 時の流れで起こる必然的に外部の変更は起こるもので、しかもいつ・どの様に変化するかは予測不可能。

    2. そのため、予想していないようなビジネス上・機能上の変化が合っても対応しやすい状態にしておくこと。

  4. 車輪の再発明をしないこと

    1. ライブラリなど含め、既存の解決策があることも多い

    2. 時間・労力やバグリスクの減量などからとても重要

高品質なコードへの6つの戦略:読性、シンプルさ、誤用しにくいなどの基本戦略

先ほどの4つのゴールを目指す上で、6つの基本原則が提示されています。

  1. 可読性を高める:読みやすい料理レシピの様に書く

    1. コードは他の人が読みやすく理解しやすいように書く。

      1. 記載内容を忘れた頃にメンテナンスしにくるであろう将来の自分を助けることにもなる。

    2. 変数や関数の命名には意味のある名前を使用し、複雑なロジックにはコメントを付けること。

  2. 想定外の事態をなくす:

    1. 例えば通話アプリでレストランに電話を掛けた際一定時間繋がらなかったら別のレストランにかけ直す作業を、自動でやってくれる機能を導入したとすると、ユーザーは想定外で困惑する。

    2. このような想定外の挙動はユーザーだけじゃなく、デバッグするサービス提供者側にも悪影響

    3. ユーザーのためにも自分たちのためにも、日常生活で起こりうる、想定内の挙動をさせる。

  3. 誤用しにくいコードを書く:テレビ背面のコードの差し口がそれぞれ違う形状であることのように

    1. 書いたコードは頻繁に他のコードから呼ばれるため、何も知らない人が誤用しにくい観点はとても大事。

    2. この要素は、コードが長期的に動作し続けるためにとても大事

  4. コードをモジュール化する

    1. この要素は、要件の変更への対応のし易さを担保する

  5. コードを再利用、汎用化し易くする:有能なドリルのように

    1. 様々なコードを書く必要があり、書けば書くほどバグのリスクは増えるため、長期的なバグや労力減少のために、この観点が大事。

    2. 再利用性とは、ドリルがいろんな場所に穴を開けられるように、複数のシナリオに使えること。

    3. 汎用性とは、ドリルがドリル穴もネジ穴も開けられるように、複数の問題を解決できること。

  6. テストしやすいコードを書き、適切にテストする

    1. 人は必ず過ちを犯し、バグが発生するため、適切にテストできる状態が重要

    2. そのためには、「テストしやすいこと」と「適切にテストする」の双方が必要

    3. 具体的な方法は10章、11章で教えてくれるらしい

      1. 楽しみ・・・

高品質なコードなコードは、短期的に見るとスピードを遅らせるが、中長期的に見るとスピードが速くなる

短期的に見ると、開発スピードが落ちるように感じます。
なぜなら、高品質なコードを角煮は、パッと思い浮かんだコードを書くのではなく、もう少し考える労力と時間を費やす必要があるためです。

しかし、小さな使い捨てのユーティリティよりも、本格的なものを書いている場合、高品質なコードは中長期的には開発スピードを上げる

パッと思い浮かんだコードは、後からのバグ発生や変更時の時間などを考えると結果高くつく

まとめ

短絡的にパッと思いついたコードを書いて嬉しいのは"今"の"自分"だけ!
きちんと考えて高品質なコードを書くことで、"今"も"今後"も、"自分"も"仲間"も"ユーザー"も幸せに出来る!
高品質なコード=正しく今も今後も動き続けて、車輪の再開発されてなくて、しかもメンテも変更もし易いコード!

この記事が参加している募集

仕事のコツ

with 日本経済新聞

この記事が気に入ったらサポートをしてみませんか?