Clean Code なんてものは存在しない
(steveonstuff.com)- 人は「クリーン」なコードを目指して努力するが、「クリーン」は有用な尺度ではない
- コードは単純に「クリーン」であるとは言えない。なぜなら「クリーン」という言葉は、コードについて何も説明していないからだ
- 人がコードをクリーンだと言うとき、それはたいてい、そのコードが何らかの意味で優れているからだ
クリーンコードは本当に良いコードなのか?
-
コードはさまざまな理由で優れているあり得る
→ 読みやすい、理解しやすい、シンプル、高性能、安全、エレガント、テストしやすい、カプセル化されている、拡張可能、保守しやすい、再利用可能… -
しかし、こうした特性はある面では互いに衝突する
→ 最もシンプルなコードが、おそらく最もテストしやすいとは限らない
→ インターフェースや注入された依存関係はテストを容易にするが、シンプルさとは距離がある
→ シングルトンを多用すると理解しやすくはなるが、保守しやすいアプリケーションになるとは限らない -
これらの中には本質的に相反するものもあり、同時にすべてを満たすのは難しいこともある
→ エンジニアリングは Trade-off(トレードオフ)なので、ここでいう折衷案についてチームで議論してみることもできるだろう
コードが優れているなら、私たちは「なぜそうなのか」を語るべきだ
- 誰かがソリューションを「クリーン」だと言うとき、その人は理由をきちんと説明できず、ただより良い選択だと言っているだけである
- 技術的なソリューションについて建設的に議論するには、あるソリューションが別のソリューションより優れている理由を明確に説明できなければならない
→ 単に「クリーンだ」ではなく、「疎結合で、理解しやすく、テストしやすく…」のように
正確な用語を使うべきだ
- コーディングは一般にチームスポーツだ。ひとりでハックするときは好きにできるが、チームで働くときはアイデアを議論しなければならない
- 特定の言葉を使って技術的なソリューションについて議論し、チーム全体が共通の理解を持つことは、互いを理解するうえで非常に重要だ
- 「クリーンコード」という言葉が意味するものは人によって違う
→ ある人にとってはアーキテクチャがよく定義されていること、別の人にとってはコードが一貫した書式スタイルでシンプルに書かれていることかもしれない… - 「カプセル化されている」「テストしやすい」「再利用可能」のような言葉には、私たち全員が合意できる意味がある
- コードの特性を説明する、より具体的な言葉を使うとき、私たちは認識が一致していると確信できる
- 「クリーン」は「良い」と同じ程度の精度しか持たない
では、「クリーンコード」とは何なのか?
-
私はコードを「クリーン」だと表現するとき、「そのコードが良いのは分かるが、その理由を完全には確信できないことが多い」という結論に至った
→ あるいは、コードが良い理由は分かっていても、それを明確に表す言葉が見つからないとき -
そうした直感(Intuition)を育てるのも良いが、そこで立ち止まってはいけない。もう少し深く掘り下げて、「なぜこのコードが良いのか」を理解しようとすべきだ
→ このコードには他にはない別の特性があるのか? そしてその特性は私たちのプロジェクトに最も適しているのか? おそらくそれは正しいソリューションではないかもしれない -
必要なのはクリーンコードではなく、______なコードなのだと確信できるようになってほしい
6件のコメント
良い記事をありがとうございます〜〜
レガシーコードをむやみに蹴りつけるな
お前は誰かのために、一度でも最初の requirement を満たしたことがあるのか
共感します。
「あの本」で著者が語っていたクリーンコードは、このうち「理解しやすい」「テスト可能である」という点に焦点が当てられていたように思います。もちろん、どちらも非常に重要な尺度だと思います。しかし、まだ定式化されていない仕様や完成していないライブラリのために、いわゆる「hack」を使うこともあり、このようにプログラムの品質のためにコードの品質を諦める部分は避けられないように思います。
共感します。「クリーン」を「高品質」と捉えるなら、(ワインバーグが言ったように)品質とは誰かにとって価値のある何かなので、品質に対する基準と定義がチーム内で必要だと思います。
曖昧に「クリーンコード」と言うのではなく、何が問題なのかを具体的に指摘して話そうと主張する文章です。
これについてはHacker Newsでも「クリーンコード」の解釈についてさまざまな意見があります。コメントもあわせてご覧ください。
There’s No Such Thing as Clean Code https://news.ycombinator.com/item?id=30111516
テーマは少し異なりますが、以前掲載された以下の記事も参考にしてください。