本書の冒頭に悪いコードの例として「連番命名」という、メソッド名を単なる連番で命名する手法が出てくる。メソッドの目的や振る舞いと関係なく、単に「method001
、method002
、method003
...」と連番で名前を付ける手法のことを指す。
環境上の制約でこのような命名をしている場所でも、意外と中に居る人たちは環境に最適化され会話は案外成立しているものだったりする。
それに「命名の妥当性」で設計内容がレビュアーや、発注者からリジェクトされるリスクを負うより、単なる連番にしてしまう方が合理的な場合もあるのだろう。
ミノ駆動さん(仙場大也さん)著の『良いコード/悪いコードで学ぶ設計入門』が早くも改訂され『改訂新版 良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方』として出版されたので早速注文し、お正月のまとまった時間の間に読み終わった。
設計に関する本なので、わずか数年のうちに設計パラダイムの大きな変化や、特定言語機能やライブラリの大きな変化が有った訳ではなく、説明の仕方や、特に注力して説明する内容が変わった点が改版の中心となっている。この辺りは筆者自らの解説記事に詳しい。
一通り読んだ感想として、個人的にこの本で一番気に入ってるのは、第11章「名前設計 ー あるべき構造を見破る名前」で、「どうすれば良い名前になるのか」「こんな名前の付け方になっていると危ない」という事例が数多く収録されている。
正しいコードであるために適切な名前をつけよう...これは非常に大事な考え方の一方で、既存のコードベースがそれなりの規模で存在すると必ずしも「正しいからとってできるわけではない」状況に遭遇することもある。
冒頭に出てきた「連番命名」が適用されているプロジェクトだって、中の人はずっとその状況を変えたいのかもしれない...だけど、変えるよりも現状のまま維持した方が、(その場における)生産性はそれなりにキープできる、ということが判断されているのかもしれない。
だからこそ「何が良いコードなのか」ということを理解しておいて、それとの差異を把握することが大事なんだと思う。人は、「現状を正しい」と思いたい正常性バイアスに囚われているものだけど、それを打ち破るには違う価値観を学習するしかない。
いきなり全部は変えられないし、命名規則を変えたからといって突然明日からの生産性が上がる訳でもない。
でも知っておくことで、それを選択すべきときに「選べる」というのは大きな違いだったりする。
そういう知見がたくさん詰まっているので、全部一気に読み込む必要はないし、全部を頭から信じる必要もないし、全部を教条的に明日から適用する必要もないけど、自分のデッキの中のカードを増やすつもりで読むといいな、と思います。
聴いた話が100%役に立つなんてことはまず無いんだけど、逆に何が未来で役に立つか予想ができないからこそ、色んな場所へ行って、色んな人の話を聞くんだよ
— magnoliak🍧 (@magnolia_k_) January 3, 2025
読書は宝探しだという話を聞いたことがある。読んだ本の内、どれが宝になるかは分からない。でもある日突然宝として光りだす日が来る。だからたゆまず読書し続けていくことが大事。
— ミノ駆動 (@MinoDriven) January 3, 2025
イベントでいろんな話を聴くのも同様。 https://t.co/XnZJGopMm9
で、という話は、この本の中にも出てくる...第16章の「理想系を知ってはじめて課題を知覚できる」を参照のこと
あと、一方で「悪いコード」ちょっと言葉が強いので誤解を生みやすいかな、とも思った。
実際には分かりやすく「悪い人」が居て、意図的に生産性の低いコードを入れていくわけではなく(そりゃ業務妨害だ...)、さまざまな制約の積み重ねを途中で補正しないまま放置されることで結果的に「後世の人にとって都合の悪いコード」ができあがってしまうわけで、「罪を憎んで人を憎まず」という言葉がありますが、「悪いコードを憎んで人を憎まず」という姿勢が大事だよな、とも思いました。
(なので、皆さん、あまり職場や、OSSコミュニティなど、他者との対話において「これは悪いコードだ!」という言い方はやらないようにしましょうね...無用な軋轢を生んでしまう時があります)
というわけで、改訂版も代わらずお勧めの1冊なので、皆さん買いましょう、読みましょう
そしてレビューのときに「この本に書かれている、こんなやり方もあるよー考えてみてねー」とさらっと言ってあげましょう!
命名は大事だよなー、と思いながらポストしたら、思いの外反響が有ったので、リンクを張っておきます。引用とか、リプライでの意見も興味深いですね。
プログラミングで命名が大事、という話、人に説明する上では「後の人が困るでしょ?」という説明になるんだけど、「名前が適切に付けられない時点で設計できていない」とか、「名前がちゃんと付けられた瞬間、どんなコードを書くべきか整理される」みたいな感覚が身に付いているかどうかだけど、でも説…
— magnoliak🍧 (@magnolia_k_) January 4, 2025
一方で、命名で衝突が起きてなかなか決まらない、みたいな事態が発生したら、「それはいくらなんでも自転車小屋議論じゃね?」と言って、さっさと先に進めようとしてしまうかもしれない
— magnoliak🍧 (@magnolia_k_) January 4, 2025
シチュエーションや、立場によって何を優先させるかは替わってくるわけで
優先度ってやつはあるよね https://t.co/01E2DZTKkL