石橋秀仁(zerobase)書き散らす

まじめなブログは別にあります→ja.ishibashihideto.net

もはや若くないし、頭も悪くなったから、いまテスト駆動開発(TDD)、ドメイン駆動設計(DDD)、DCIを学んでる

今年はプログラミングに再入門してます。

もはや若くないので、自分の「頭の悪さ」を受け入れて、それでも読み書きできるコードを模索してます。

ここでいう「頭の悪さ」とは、「大きなクラスや長いメソッドを理解できない」という脳のスペック的な意味です。

ぼくは二十代の頃と比べて頭が悪くなってしまったので、DDD(ドメイン駆動設計)、TDD(テスト駆動開発)、DCI(データ・コンテキスト・インタラクション)といったソフトウェア工学の成果に興味を持ってます。

抽象度の高いドメインモデリングとかプログラミングって、一見頭がよさそうに見えるかもしれませんが、むしろ(上記の意味で)「頭が悪い」人にこそ必要なんです。

頭が良かったら、もっとCPUに寄り添った高速なコードをすらすら書けるわけです。

頭が悪かったら、人間のメンタルモデルに寄り添った読みやすいコードを書くしかないわけです。

だから、一見高度で抽象的で難解なオブジェクト指向のトピックも、ぼくにとっては「頭が悪くてもプログラミングできるようにするための方法論」です。それはソフトウェア工学の進化を推進してきた力(driving force)だと思いますし。

ついでに言うと、脳のスペック的な意味とは別の「頭の良さ」もありますよね。それは「見識」とか「教養」とか「年の功」とかいうやつです。そういう「頭の良さ」は逆に年をとるにつれてのびていくものです。

実際、ぼくがハタチの頃には理解できなかったであろう『エリック・エヴァンスのドメイン駆動設計』や『実践テスト駆動開発』といった本、あるいはDCIアーキテクチャについての論文は、いまのぼくにはスラスラ入ってきます。現役プログラマを退いて8年ほど立っているのにも関わらず。

一方、現役のころには「大きなクラスや長いメソッド」を理解してプログラミングできたというか、「必要以上の抽象化はオーバーヘッド」だと思っていました。それに、たぶん抽象的な議論を理解できてなかったと思います。当時読んだ『実践UML』という本のGRASP原則についても、当時はほとんど理解できてませんでした。

ここには顕著に二種類の「頭の良さ」の違いが現れています。

なので、若い頃には若さゆえの「頭の良さ」を活かしてプログラミングしてればよかったのですが、もはや若くないので、年をとったがゆえの「頭の良さ」を活かさなければプログラミングがうまくできない。

そのためのDDDやDCIだったりするわけです。社会経験を積んだ人は、ドメインの豊かな知識をコードで表現するということにおいて長けているはずなんです。極端に対置すれば、「プログラミングは得意だけどプログラミングしかできない若者」に対して、その特徴が際立ちますよね。

年をとったら、若い頃とは異なる「頭の良さ」を使わないとプログラミングが難しくなる。

そんなことを考えながら「ゼロベースの管理会計システムを開発するよ」ということで、実践しながら勉強していこうと思ってます。

関連情報

実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる (Object Oriented SELECTION)

実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる (Object Oriented SELECTION)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)