連載
» 2019年01月28日 10時00分 公開

山浦恒央の“くみこみ”な話(114):バグ検出ドリル(14)タイポグリセミア現象もびっくり、恐るべきは思い込み (1/3)

バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第14回の問題は、前回に続いて「煮詰まったバグ」です。煮詰まっているがゆえに、バグの原因が分からなくなる事態に対処してください!

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

1.はじめに

 本連載では、エンジニアのバグ検出力の向上を目指し、バグを埋め込んだプログラムを出題して読者のみなさんに見つけていただきます。本コラムでバグを嗅ぎ出す能力を鍛え、より高いレベルのエンジニアを目指してください。

2.煮詰まった状態を乗り越えよう

 プログラミングの楽しさを知り、ソフトウェアにハマった人はたくさんいます。仕様をじっくり読んでソースコードを書き、コンパイルエラーをつぶし、バグを乗り越え、思い通りに動かせた時の喜びは格別です。

 プログラミングは、非常にクリエイティブな仕事です※1)。それ故、全てが順調に進むことはあまりありません。正しくプログラムを記述しているつもりでも、実行結果が仕様と一致せず、何時間も悩んだりします。場合によっては、数日分からないこともあるでしょう。大半は、単純ミスですが、作業している本人にはなかなか見つけにくいものです※2)。すなわち、「煮詰まった」状態ですね。この時は、視野が狭くなり、本来の実力を発揮できません。皆さんも、そんな経験をお持ちのはずです。

 筆者にも、そのような経験がたくさんあります。例えば、数時間悩んでいるプログラムを同僚に相談すると、数分で修正箇所が見つかることや、説明している最中に、自己解決する場合もあるでしょう。後々、後輩から、「そんなことで悩んでたんですか」と言われ、悔しい思いをすることも少なくありません。

 現象が複雑に見えても、冷静に問題点を整理すれば解決できるのですが、煮詰まると「真っ暗闇を懐中電灯なしで歩く苦しい状態」となり、解決の糸口が見えません。バグが見つかってしまえば、「何でそんなことで悩んでいたのだろう」と悔しくなりますが、逆に他人から見ると、当人の悩みが理解できなかったりします。

 トッププロのエンジニアになるためには、煮詰まった状態でも冷静に問題点を整理し、解決する必要があります。今回は、小規模なプログラムですが、煮詰まった状態のA君を救ってください。

※1)プログラミングは技術系ですが、同時に芸術系でもあります。例えば、芸術家に、「切ない気持ちになる作品を作ってください」とお願いすると、画家、作家、作曲家、映画監督、舞踏家、写真家、彫刻家など、芸術家はいろいろな手段で作品を作るでしょう。「切ない気持ちになる物を作成する」は「仕様」であり、完成した絵、小説、写真、映画、音楽が「ソースコード」に相当します。「考え方が正しければ、どんな作り方をしても正しいものができる」は、芸術でもプログラミングでも(囲碁や将棋でも)同じで、これが、「プログラミングはクリエイティブ」といわれるゆえんですね。

 「クリエイティブであること」が困るのは、他人の「作品(ソースコード)」を理解して、バグ修正するのが簡単ではないことです。「切なさを感じない楽曲」という「仕様通りではない作品」の譜面を見て、彫刻家が「ここのコード進行は、C7→Dm7→G7→C△7となっているが、終止感が強すぎるので、C△7の前にA♭△7→B♭7を入れると良い」と「バグを指摘」するのは簡単ではありません。同じことがプログラミングでも起きます。自分にはごく自然なコーディングであっても、他人には理解不能なロジックだったりします。

 これが、「クリエイティブ」であることの代償です。「自由すぎることはかなり不自由」ですね。「みんなが同じ土俵で、同じ考え方でプログラミングする」ため、少し自由度を制限するのが、開発方法論やプログラミング言語のトレンドです。例えば、「C++を使ったオブジェクト指向による設計」は、「自由度の縮小」だと思っています。

※2)「脳内で修正してしまうため、自分でなかなか気が付かない」バグは誰しも経験します。代表例が「タイポグリセミア現象」で、単語の最初と最後の文字が正しく、字数も同じであれば、脳が勝手に修正してしまう現象です。この現象を使って大きな話題になったのが、富山県に本拠を置く中尾清月堂が2018年3月に出した以下のドラ焼きの広告です。

中尾清月堂のドラ焼きの広告 中尾清月堂のドラ焼きの広告 出典:中尾清月堂のFacebook
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.