愚者体験〜怪物と出会うとき〜

記載 2018/10/24〜2018/11/29

沖縄県の離島から就職お上りさんとして東京周辺でジャバニーズプログラマ(IT土方)として働き始めた僕である。

時間をあけて見返すと自虐の匂いか鼻につくので、この書き出しはどうにかしたいものだと思う。
それはともかく、プログラマとして働いていると必ず出会うもの、それがバグ(虫)である。

僕が働きはじめたときは、既にバグと呼ばれてたし、ToolやWebサイトのアイコンも虫だった。忌々しさや、見たときの悪寒など体験を通じて、今はより一層いい感じのビジュアルイメージだと感じるニクいやつだ。

大体は、グレイテストプログラマの恩恵(デバッガやらコンパイルオプションなどなど)で、「追跡、撲滅いずれもマッハ〜」とかできる。

が、たまに記憶に爪痕残してく凶悪な奴らがいる。真面目に乾いた喉から「Monster…」と呟きがもれてしまう、そんな奴らを思いだしてみたくなった。(なんでだろ?)

記憶をたどる前に、怪物の定義についてピッタリな条件があるので紹介する。

一つ、怪物は言葉を喋ってはならない。
二つ、怪物は正体不明でなければいけない。
三つ、怪物は不死身でなければ意味がない。
※ネタ元は、空の境界を参照。買うのだ。

バグは常に正体不明な状態から始まるので、二つめは常に満たしているので、基本的には怪物への進化の要素を含んでいるものだけど、実際に進化した奴らを思いだしていくことにする。

一つめは、働きはじめた最初の方に仕込んだメモリリークによる時限爆弾。
最近わざわざ自分でメモリを管理する言語自体がないし、生まれない。(もちろん見えないところでは確保と開放はしている)
僕はたまたまC言語で仕事を始めたので出会った。かなり有名どころのバグである。

有名であれば二つめの正体不明である事を満たしていない気もするが、こいつの場合は、まずビギナーを狙い撃ちする事で、その知名度の弱点をカバーする。特にコードレビューしてくれる仲間がいないソロプレイヤーは餌食になりやすい。

ビギナーはググるなり、誰かに聞いたり、最近流行りのスクールに行ったりする時に、ほぼ高確率で「上手く動かない時はエラーメッセージを見ろ」と言われることになると思う。この瞬間、脳に「エラーメッセージが出ていなければ正常」と刷り込まれる。

概ねこの認識は正しいが、メモリリークはこの思い込みの裏をかく。

一つ、メモリリークは喋らない。
まあ、しゃべるにはしゃべるが、大体はテスト終盤の長時間試験か、テスト終わったリリース後にポツリと「確保できるメモリもう無い」とメモリ確保の係かつぶやいてプログラムを停止する。

二つ、メモリリークそのものに実態はない。
使用するメモリを借りパクしたまま返さない(返却漏れ)がメモリリークと呼ばれるが、メモリを確保(ロック)も、メモリを開放(フリー)も、それ単体では正常な動作だ。

三つ、メモリリークは構文エラーと違い、プログラム構造に起因している事が多いので、実在の観測、対応、不在の観測が結構大変なので、粘り強く生き残る。
場合によっては、恐怖心として記憶に残り続ける。

思い起こせば、初歩的なバグだとは思うが、怪物とよぶにふさわしいと思うがいかがだろうか。

この怪物は、いかに倒すかではなく、いかに出会わないか。が大切だと思う。

コツは言い伝えを守ることだ。

一つ、世界の資源(メモリ)は有限である。
二つ、創世の双子(ロックとフリー)を引き離してはいけない。
三つ、創世の双子は、世界に一組であるべし。

ハロウィンに書こうと思ったのに、もうすぐクリスマスになるなんて。。。一旦切ろう。
加速時間の中でどうやって足掻こうかな。

この記事が気に入ったらサポートをしてみませんか?