mongolyyのブログ

開発(Javascript, Typescript, React, Next.js)や開発手法(スクラム, アジャイル)、勉強したことについて色々書ければと。

「レガシーコードからの脱却」を読んだ

はじめに

こんにちは。メーカーのコーポレート部門でソフトウェアエンジニアとして働いているモンゴルです。
最近David Bernsteinさんの研修を受ける機会があり、これをきっかけに、積んでいた「レガシーコードからの脱却」を読みました。
本の感想を残しておこうと思います。

感想

守破離について

本書では「守破離」が紹介されており、とりあえず何も考えずに師匠に言われるがままにやって(=守)、その後、その背景にある理論を理解し、実践する(=破)というステップがアジャイルにはあると書かれていました。

確かに、実体験として、理論はわからずに上司や先輩から教えてもらって、数年がむしゃらにやって、その上で「クリーンアーキテクチャ」や「ドメイン駆動設計」を読んでしっくり来たという経験がありました。
人にもよるとは思いますが、腹落ちさせるためにも、とりあえず言われるがままにやってみるというのは重要かと思いました。

一方、私見ですが、自分自身含めて周りを見ていると、「守」に慣れて、同じプロセスを改善する方に行ってしまい、破の領域に行かなかったり、違う方に行ってしまうことがあるなーとも思っています。
面倒かもしれないですが、自分自身、周囲を鼓舞、刺激し、破(≒理論の理解)の領域に達せられるようにしたいなと感じました。

第一原理について

第一原理や原則について深く書かれているなとも感じました。
今まで読んだ本ではあまり言及されていなかったようにも思います。
私は本書を通して、「第一原理が存在し、その上に原則が存在し、その原理、原則を背景として、XPやスクラムのプラクティスが存在する」というように理解しました。
スクラムをやっていると、プラクティスに目が行ってしまう人を見かけることがありますが、スクラムマスターとして、そのプラクティスの背景を理解し、そういう人に説明していくべきだなーと、感じました。

全ては会話から

ラクティス1の「やり方より先に目的、理由、誰のためかを伝える」、プラクティス4の「協力しあう」を読んで、コミュニケーションの重要性を再認識しました。
スクラムやXPでも色々なプラクティスがありますが、共通して「コミュニケーションを取る」ということを背景に作られているものも多そうだと感じました。
更に、コミュニケーションにより、共通認識を育てたいというのが大きな目標としてあるようにも感じています。
共通認識があると、モチベーションが上がるだけでなく、業務とプロダクトの乖離が少なくなるので、より変更容易性の高い、高品質なプロダクトができるとも思うようになりました。

テスト駆動開発について

テスト駆動開発を行うことで、良いプロセス、設計をもたらし、結果として高い品質のプロダクトが作られるというように理解しました。
今までは、"良いプロセス、設計"の意識がまったくなかったのですが、ふるまいを考えて、テストしやすさを考えて作っていくことによって、良い設計になりそうだなと、本書を読んで感じました。
また、「小さく作る。リファクタリングをする。」という健全なプロセスが自然と入ることにもなるので、そういう観点でも高品質なプロダクトが生み出せそうだと感じました。

終わりに

レガシーコードをリファクタリングして良くするというお話かと思いきや、普通にチームビルディング、ソフトウェア開発に生きそうなプラクティスとその背景が丁寧に書かれており、非常に良かったです。
他にも、良いコードの特徴(「CLEAN」コード)なども紹介されており、エンジニアとして参考になる部分もありました。
各章が比較的独立しているので、興味のある章だけをチームで輪読するのも良さそうだと感じました。