構造化したソースコードは読みにくい?

仕事中、コードレビューをしていて実際にあった話です。プログラマー経験数年の人から、「もう少しこの部分を共通化したいんですけど」という形で質問が来ました。「この部分」は単純に全く同じコードを何回もコピペしているだけだったので、わたしは「まずはこういう関数(横に実際のコードを書く)を作っていろんなところから呼べばいいんじゃないかな」とアドバイスしました。

再度質問が来ましたが、単純なエラーについてのものでした。ただ、テキストだけのやり取りでは説明しづらいと思ってビデオ通話に切り替えて説明。そのついでに、もう少し広い範囲でリファクタリングを実際に目の前でやってみることにしました。ペアプロというのか、モブプロというのか。わたしも最近業務ではあまりコードを書けていなかったので、半分お遊びのつもりでがりがり書いて渡しました。

ところが次の日、結局その人が私の書いたコードを変更する必要があったのですが、その際にエラーが出てしまいました。結局、エラーの原因はわたしが修正した内容とは直接関係なかったんですけど、本人から「修正する前のコードでも読みやすいのでそっちでいきます、すみません」と申し出があって、わたしはそれに「いいと思います!」と返事して、レビューは終了しました。

自分が書いたコードが使われないことは全くなんとも思っていません。10分ほどで書いただけのものだったので。ただ、自分が書いたコードに関して、その人に不要な先入観を与えなかったかな、という点で心配になったというか、役に立てず申し訳ないな、と思ったわけでした。

たしかに、100行に満たないファイルだったので、関数を数行で区切ってぶつ切りにするよりは、元の方が逐次的に読みやすいと思います。個人的には、要件も知っている案件なので、今後仕様が変化しそうな部分に絞って、変更が少なくなるように工夫したつもりでした。ただ、元のコードを修正する場合でもコストはそこまで変わらないでしょう。100行ぐらいでは。なので「元のコードでいきます」と言われたときに、「確かにそうだよな」と感じてOKを出したわけです。

でも、この出来事をもって「構造化すると読みにくい」という一方的な見方にならないでほしいな、という思いが残っている、言ってみればそれだけの話です。実際のソースコードを結果的にどう書くかとは別の次元で、設計の時にはプログラムの内容を頭の中では構造化できるべきなのは間違いないし、もっと大きな設計を行う際には、最初に払う設計コストがペイするんです。でもまあ、その話はここで書かずに本人に説明するべきですね(ド正論)。いい事例なので、勉強会のテーマに使おうかな。

現実的な観点から少し外れると、そもそも、構造化と可読性がトレードオフなのは、現状のプログラミング環境がたまたまそうであるだけだと思っています。かなりの部分はIDEなどのツールでカバーできますが、一方で、プレーンテキストそのものが逐次的に内容を追っていくものだという伝統が長すぎて(もしくはプログラミングをしない人にはこちらが当たり前すぎて)、順番に読めるものが一番読みやすい、という大多数の方には当然の結論になるわけで、なんだかプログラミングをやりすぎている自分の方がおかしくなってるんじゃないかと不思議な気持ちになります。

せめて、コーディング時でも編集と閲覧は違うビューで見るべきでは、と思っています、本音では。スクリーンは任意の場所に任意の大きさで表示できて、操作は手元とか、体感的に「近い」部分で行う。これはコーディングに限らず、UIのあるソフトウェアではそうであってほしい。WYSIWYGってやつをあまり信じていないのかも。ビジュアルプログラミングには、その問題も解決してほしい。