転職した

調べた事、学んだ事、思った事、考えた事を個人的にまとめているだけなので内容は保証しないYO!

アジャイルソフトウェア開発の奥義を読んだ

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

OOPを勉強するのに良いと勧められて買った本。かなり内容が濃い本で600ページにも及ぶため、読み進めるのに苦労した。完全に消化不良なので機会を見つけて読み返すようにしたい。 ただ消化不良なりにもいくつも発見があって、

といった事について気づきがあった*1

アジャイルソフトウェア開発とはなにか

この本を読んだ事でアジャイルソフトウェア開発とはなんぞやということに対してようやく答えが見えた気がする。今まで感覚でしか理解できていなかったことだけど、アジャイルソフトウェア開発というのは変更に強いようにコードを構築し続けていくから変化に対応できるのであって、顧客からの要求をすぐに取り込んですぐに修正をしたからといってアジャイルソフトウェア開発ではないしカーゴカルトにしかならないという事が明確になった(書いてみれば当たり前のことだ)。そして、変更に強いコードを書くためにSOLID原則やデザインパターンを理解したスキルの高いプログラマが必要で、そういうプログラマを集められないならアジャイルソフトウェア開発なんて実践不能だと理解した。

テストコードをうまくかけない根本原因

白状すると手動テストがメインの開発しかやった事がない。言い訳させてもらえれば、テストコードを書こうとしたりTDDを実践しようとテスト駆動開発入門を読んだりしてはいたのだが、なぜか面倒な事になってしまいうまく実践できなかった。なにかテストコードを書く方法についてわかっていないことがあるのではないかと思っていたが、それはまったくの間違いで、設計が腐っていたことが根本的な原因だと理解した。試しに個人的に作ったツールリファクタリングしてみたが、ごちゃごちゃと処理が放り込まれたクラス(単一責任の原則に明確に違反している!)ではテストコードを書くことなど不可能であったが、単一責任の原則を意識しつつクラスを分解してみればテストファーストを実践する事ができた。

デザインパターンはやはり重要ということ

また白状するとデザインパターンをまともに勉強した事がない。やはり言い訳させてもらえれば、前職が色々アレで優先順位が低かったせいである。Template Methodパターンとかいっても通じない人しかいないので勉強するメリットが薄かったし、Template MethodパターンやFacadeパターンなどは勉強せずとも実践していてその時々でうまい設計をひねり出せるだろと考えていた。しかし、改めてデザインパターンを学ぶとTemplate Methodパターン脳をこじらせていることに気づき、「このクラスとこのクラスで必要なメソッドがあるな、Abstractクラスつくるか」という思考にはまっていて、こういったこじらせたものを改善するためにもデザインパターンは学ぶ必要があるなと思った。

まとめ

OO歴数年目の中級者が上級者に上がるのには最適な本だと思う。我流で間に合ってるしなぁと考えている人には確実にステップアップに繋がるし、アジャイルな開発に近づくことができるはず。もし、初級者がGoFが必読と言われているからという理由で買おうと思っているならこっちを買った方がまだ身になるだろう*2

*1:他にも、Fat ControllerやModel==ActiveRecordな人はMVCではなくOOを理解できてないのではないか等思ったけど、省略。

*2:この本はJavaC++のサンプルコードだがGoFSmalltalkなはず。どちらにせよ初級者には向かないと思うが