読みやすいコードからあふれ出た意味にしゃぶりつきたい

安易に流行に乗って『リーダブルコード』を拝読した。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

「高レベルの目標」と「無関係の下位問題」という対比で問題を分けていく第10章がエキサイティングだった。ややこしい処理やありがちな処理を外に出すことはよくある。だいたいそういうのはプログラミングそのものに固有の問題であって、ライブラリ、ヘルパー、ユーティリティとよばれる箱にうまく入る。逆にいえば外に出せない部分がある。それはプロジェクトに固有の、目的や意味によって理解できる「やりたいこと」だ。再利用性といういかにもプログラミングらしい問題と、高レベルな「やりたいこと」の考察が、じつは表裏一体であると気づく。
「あらゆる協調システムは成長する。それらを結び付ける複雑さはもっと速い速度で成長する」(p.171)という言葉が印象深い。秩序を守ったまま成長できるソフトウェアは生き物のような神秘かもしれない。優れたライブラリは、複雑さに立ち向かって「ダーウィンの進化を生き延びてきたコード」(p.173)だ。その解決の背景には適切な問題の分割を含んでいる。だから優れたライブラリの再利用は(単なるコードを書く手間の節約以上に)「やりたいこと」に集中する道を示してくれるものだと思う。
「やりたいこと」を理解するために、たとえば第5章で「全体像」のコメントを勧めている。このようにコードという世界の内側でコードの読みやすさを語るのが『リーダブルコード』のすてきところだ。しかしコードに込められる「意味」には限界があると思う。このへんに『リーダブルコード』の外に踏み出す道を探したくなる。コードよりいくらか高いところにある意味の理解、それはたぶんコミュニケーションの問題を含むし、あるいはインセプションデッキとかドメインモデリングみたいな何かを連想する。
『リーダブルコード』は読みやすいコードの書き方をとおして問題理解のやり方を教えてくれているように感じた。わかりやすい表現と適切な問題理解が手をつないでいる姿を想像する。