ロブ・パイクが学んだプラグラミング・アドバイスとは? デバッグするより先にまず頭で考える
これまで一番ためになったプログラミングのアドバイスは何ですか?
過去を振り返ると、誰にだって教訓的なエピソードがあるのではないでしょうか。
著名なソフトウェアエンジニアであっても、それは例外ではないようです。Google に勤めるロブ・パイクは、UTF-8 や Go 言語の共同開発者として知られていますが、彼も駆け出しのころに先達から教訓を学んでいました。
ベル研究所に入所して間もないころ、ロブはデバッグするより先にまず頭で考える、という教訓をケン・トンプソンから学びました。これは、まさにプログラミングの極意の一つと言えるものではないでしょうか。
頭で考えることの重要性
ベル研究所で働き始めてからまだ1、2年しか経たないころ、ロブ・パイクはケン・トンプソンとペアプログラミングをしていました。タイピングの速いロブがキーボードを担当。ケン・トンプソンはロブの背後に立っていました。コーディングは早いペースで進みましたが、うまく行かないこともありました。
ロブは問題が生じると無意識に、まず原因を探りました。スタックトレースを確かめたり、print 文に注目したり、デバッガーを起動したり、といった具合に。
しかし、ケンは立ったまま、ただ考えにふけり、ロブのことも、書いたばかりのコードの中身も目に入っていない様子でした。 それからケンは事あるごとにロブに先んじて原因を突き止めます。不意に口を開き、「どこがまずいのかわかった」と言うなり的確な指摘をするのでした。
ロブ・パイクの気づき
ケンとのペアプログラミングの体験から、ロブは悟りました。ケンの頭のなかにはコードのメンタルモデルが構築されいる、と。
何かがうまく行かない場合、エラーはモデルのなかに存在する。どうしたらその問題が起こり得るかという思考を通じて、ケンはモデルそのものの矛盾点や、モデルの条件を満たさないコードが書かれた箇所を直感的にとらえていたのだ。
このエピソードでは、ケンは直接的に助言を与えたわけではありません。エンジニアとして模範となる行動を示し、ロールモデルとなることによってロブに洞察を与えたのです。
ロブは、この気づきを次のように考察しています。
バグの出どころを探し出すことに躍起になると、えてしてコードの修正は局所的なものに限られてしまう。けれども、それよりも先に頭を働かせ、バグがどうして起こり得るのかを考えれば、場合によっては問題のある箇所をより高レベルな視点から特定し、それを修正することが可能になる。それがソフトウェアデザインの改善にも、未然にバグを防ぐことにもつながることは疑う余地もない。
ロブは今では、コードを見続けるのをやめて頭で考えることは、いかなるものにも勝るデバッグツールだと確信しています。そして、考えることこそ、ソフトウェアをより良い方向へと導くと信じています。デバッグという一つの側面から、より良いソフトウェアを追求するロブ・パイクの姿勢が伺えます。
デバッグの必要が生じるようなシチュエーションでは、どうしても目先のバグに目を奪われてしまいがちになります。上級者の域に達しているエンジニアの皆さんも、未熟だったころを振り返ると思いあたる節があるのでは?
Discussion