プログラマが知るべき97のこと/未来へのメッセージ
「取り組む問題が難しければ、そのソリューションも難しく、わかりにくいものになるのが当然」そう考えている人がどうも多いようです。問題が難しいのだから、それに対応するソリューションは理解しにくく、保守も難しいものになって当たり前と思っているようなのです。皆おそらく賢い人たちばかりだからだと思いますが、私が長年の間に、教えたり、共に仕事をしてきた大勢の人たちの大半がそう思っているようでした。何ヶ月か時間が経つと、書いた本人でさえ理解が難しくなる、そんなコードを書いても変だとは思わないようです。
思い出すのは、ジョーのことです。ジョーは、私が担当していたデータ構造のクラスの生徒でした心彼は自分の書いたコードを持ってきて私に見せ、「難しいのが書けました。先生にも何のコードなのかきっとわからないと思いますよ」と言いました。
「確かにそのとおりね」私はほんの少しコードを見ただけですぐに同意しました。どう話せばいいか少し迷いましたが、結局、こんなふうに切り出しました。「これ、きっとがんばって書いたんでしょうね。でも、あなたは大事なことを忘れている気がする。そうそう、ジョー、あなた、弟いる?」
「ええ、いますよ!フィルです。入門のクラスにいます。弟もプログラミングを勉強しているんです」ジョーは誇らしげにそう言いました。
「それはよかった」私はそう答えました。「ところで、弟さんにはこのコード、読めるかな」「絶対無理ですね」ジョーは言いました。「何しろ高度なプログラムですからね!」「ちょっと考えてみて。もし、あなたがこのコードをどこかの会社で仕事として書いたとする。何年後かにフィルも同じ会社に入ってきて、コードの保守を任されたとする。あなたがとても難しくてわかりにくいコードを書いていたとしたら、フィルはどういう目に遭うと思う?」ジョーはじっと私を見ていましたが、それを聞いてちょっと瞬きをしました。「フィルはきっと、とても賢い子よね?」
ジョーはうなずきました。「あんまり言いたくはないけど、僕も賢いですよ」ジョーはにやりと笑いました。「じゃあ、聞くけど、今見せてもらったこのコード、私にはよく意味がわからない。あなたの賢い弟さんにもきっとわからないでしょう。だとしたら、あなたの書いたコードに一体、何の意味があると思う?」ジョーは改めて自分のコードを見ました。「こう考えたらどうかな」私は穏やかに、できるだけ「良き助言者」らしい声で彼に言いました。「自分の書くコードは、全部、未来の誰かへのメッセージだと思うのよ。その誰かは、あなたの弟さんかもしれない。誰か、とても賢い人に、自分が難しい問題をどう解いたのか、丁寧に説明するつもりで書くの」
「想像してみて。いつか、誰か賢い人が、あなたの書いたコード見て言うのよ。『おおっ、これはすごい!何が書いてあるか完壁にわかる。なんて簡潔でわかりやすいんだ。美しい。本当に美しいコードだよ。傑作だ! 皆に見せなくちゃ』ってね」
「ジョー、難しいことはやっているんだけど、簡潔で美しいコード、あなたならそういうのが書けるはずよ。美しい、まるで歌うようなコード。一度聞いたら忘れないメロデイのようなコード。これだけ複雑なコードを書ける人なら、きっと美しいコードも書けるはず。私、これからは、コードの美しさを見て点をつけようかしらね。どう思う?」
ジョーは、コードを書いた紙を手に取って、私を見た。顔には微笑みが浮かんでいる。「先生、わかりましたよ。フィルのためにこのコード、書き直します。ありがとうございました」