ブラック企業の夢を見た(一)
その日、俺は大広間に座していた。
旅館……だろうか?
いや、角ばった和服を着たちょんまげのおじさんたちが、壁際にずらっと並んでいた。
江戸時代だろうか?
「ふむ。集まったようだな。わしは織田信長である。これより、お前たちにはプログラミングによる御前試合をしてもらう」
なぜ織田信長が?
しかもプログラミングの御前試合とは?
主の野郎、きっと風邪でも引いているに違いない。病気のときに見る夢は、たいていロクでもない。
俺たちは織田信長の前に並んでいた。
A子もいた。
ほかにも和服ではないプログラマーたち。
出っ張の男が、くいとメガネを押し上げた。
「くくく。どいつもこいつも弱そうでヤンスねぇ。この勝負、もらったでヤンス!」
これは間違いなく役者だろう。語尾にヤンスをつける人間は実在しない。少なくとも俺はそう信じている。
太った半裸の男がハンカチで汗を拭きながら言った。
「これはこれは、ずいぶんナメられたものでゴワス。ゴッドフィンガー下山田の名を聞いたことがないとお見受けするでゴワス」
こいつも役者。
なにも発言していないスーツを着たサラリーマンふうの男も参加者か。
おそらくこいつが主だろう。
信長公は「ふん」と鼻を鳴らした。
「いずれも腕自慢を集めておる。簡単に勝てるとは思わぬことだ」
すると小間使いの男たちが、両手にパソコンを持って現れた。
ディスプレイとキーボードが一体化したタイプのものだ。ノートパソコンではない。画像でしか見たことのない、古いタイプのパソコンだ。まあキーボードの配置はいまと一緒のはずだが……。マウスなどという便利なものは付属していない。
A子は泣きそうになっている。
「え、あたし、プログラミングとかやったことないんだけど……」
「……」
ダメだ。
誰も取り合ってくれない。
織田信長がやると言ったからには、もうやるしかないのだ。
「現在、我が領地に、今川の軍勢が迫っておる。お前たちには、その撃退プログラムを組んでもらう。もっとも優秀だったものには褒美を使わす。では、始めよ」
ピコンとスイッチが入った。
中でモーターが回転を始め、ガタガタとフロッピーディスクを読む音が響いた。フロッピーはどこかの現場で見たことがあったが、またこうしてお目にかかることになるとは。
「え、なんかすごい音出てる。怖いんだけど」
「大丈夫だ。古いパソコンはたいていこうだ。待ってれば起動する」
A子にとっては未知のテクノロジーだろう。
スマホはHDDでさえない。
ファイルアクセスのたびに音も出ない。
しかし「では、始めよ」と言われても、なにを始めればよいのやら。
仕様書はない。なにをインプットして、なにをアウトプットするかの定義もない。どんな言語で組むのかも不明。マニュアルもない。なのに依頼主には質問もできない。絵に描いたようなクソ現場だ。
二分ほど待つとようやくPCが起動した。
黒い背景に、白いプロンプト。
カレントドライブがAであることしか分からない。
HELPコマンドを打ってみるが、無情にもそんなコマンドはないとの反応。しかもコマンドを打つたびにプーとビープ音が鳴る。
マジでなんの説明もない。
ところが、ヤンスもゴワスもカタカタとキーボードを打ちまくっていた。なにをすべきか理解しているのだ。
サラリーマンふうの男は動いていない。となると、こいつが主か。
信長公が片眉をあげた。
「どうした? すでにテンプレートは用意してあるぞ。EDITコマンドを打ってみよ」
織田信長はそんなこと言わない!
EDITと打ち込むと、ソースが表示された。
大半がifとthenで構成されている。
これは……BASICか?
フォートランかもしれない。
コードの上部で定義されている構造体が互いの戦力だろうか。今川の手勢が2万5千なのに対し、織田の軍勢は2千と定義されている。
これ、定義さえ書き換えたら圧勝できるのでは?
そこは変えてはダメなのか?
定義がたくさんある。
なんだか分からない変数の定義。
なんだか分からない関数の定義。
この長い関数は経路探索プログラムだろうか。おそらくダイクストラ法だろう。関数名がもろにダイクストラだからな。これを使って両軍が兵を進めて、互いに衝突する仕組みだ。
どの経路に、どの程度の兵を進ませるのか。そういう戦術の処理は別の関数で定義されている。戦術はループのたびに変化してゆく……。
ダメだ! 複雑すぎる!
そもそもまともなプログラムなのかこれは……。
ふと、キーを叩くターンという音が鳴り響いた。
「チェックメイトでヤンス!」
やや遅れて、ゴワスもキーボードを叩いた。
「ゴワぁス!」
日本語で頼む。
しかしマズい展開だ。
プログラムに時間を取られている場合ではない。俺は主に護符を貼りつけて、悪意を駆除しなくてはならないのだ。
ところが、侍どもに囲まれているから、うかつな行動はとれない。へたに立ち上がったりしたら、その時点で取り押さえられてしまうだろう。
時間だけが過ぎてゆく。
A子は完全に試合放棄して頭を抱えている。
男は……露骨にイライラしていた。畳にあぐらをかいたまま、とめどなく足を動かしている。ストレスを表に出すタイプ。職場でもこうなのだろうか。とはいえ、プログラマーの職場では珍しくない光景だ。物騒な独り言が飛び交っていないだけまだマシとも言える。
俺たちは機械を支配的に扱っているつもりだから、その機械が言うことを聞かないとすぐに怒り出す。だからプログラマーは毎日怒っている。大袈裟ではない。
「ムリですよこんなの! せめて仕様書! 仕様書くらいくださいよ! できるわけないでしょこんなの!」
しまいには喚き始めてしまった。
だが、周囲の侍たちは動じない。
置物みたいに無反応。
なんだか……この男が普段どんな職場で働いているのか、垣間見えてしまう。
信長公は不快そうに目を細めた。
「仕様書は、ない。当然であろう」
「ぐっ……ぐうっ……」
男は崩れ落ちたまま、泣き出してしまった。
仕様書というのは、客のオーダーをエンジニア用に定義したものだ。
どんな入力があり、どんな処理をし、どんな出力があるかが定義されている。
客のオーダーは、たいてい人の言葉で語られる。なのでいくらかふわふわしている。輪郭がぼやけている。「だいたいこんな感じで、うまいことやっといて」というオーダーになる。
一方、機械は曖昧な情報を受け付けない。事前に備わった機能しかない。その機能を逸脱する命令を与えると、即座にエラーを返して止まる。エラーを返さない場合、黙って壊れる。いずれの場合も客から苦情が来る。もちろん客には苦情を言う権利がある。金を払っているのだから。
間に挟まったプログラマーは……その両者をつないで、望まれた結果を出力する。
ともあれ、仕様書が存在しない場合、あとはプログラマーが想像で補うしかなくなってしまう。
あるいは、既存のコードがある場合、それが仕様書の代わりとなる。決して望ましい状況ではないが。たとえば今回の一件がそう。信長公は、既存の仕様を変更して、自軍を勝利させろと言っている。
天才の作ったコードは、天才過ぎて読めない。省略が行き過ぎてキレそうになる。
逆にあまり得意でないヤツのコードは、クソ過ぎて読めたものじゃない。これもキレそうになる。殺意さえ湧く。
普通のエンジニアの組んだコードが一番だ。平凡で、なんの取り柄もなく、ありきたりで、パターン化されていて、分かりやすい。欲を言えば、天才が凡夫のフリをしてこれをやってくれたときが一番嬉しい。優しいママとなぞなぞ遊びをしている気分になれる。最高だ。
まあいまならAIを使うという手もなくはない、か……。だが少なくとも俺の感覚では、現行のAIはまだそのレベルに達していない。よほど単純なプログラムならともかく。
個人的には、サイコロでも振って結果を出した方がまだマシだ。
信長公が立ち上がった。
「では、ヤンスよ。プログラムを実行して見せい」
「ははーっ!」
今回の一番槍といったところだな。
クソ。
このまま勝負がついてしまうのか……。
プログラムが実行されると、ピーとビープ音がなって、画面にマップが表示された。マップといっても絵ではなく、文字で再現されたものだ。
いちいちピッと鳴ってから画面が変化してゆく。
今川の大軍勢が、織田の領地に入り込んでくる。
ちゃんと動いているように見える。
たぶんプログラムをいじったのではなく、戦術の定義を変えたのだろう。
信長公は真面目な顔で画面を見つめている。
ヤンスは得意顔だ。
だが、ピーと音がして、急に処理が止まった。
画面に表示された文字は「Out Of Memoly」。
メモリを使い過ぎたのだ……。
「止まってしまったぞ」
信長公の言葉に、ヤンスは顔面蒼白。
「あ……いえ、これは……。く、組み直します! おねげぇでヤンス! もう一度チャンスを!」
「残念だが、戦にやり直しはない。誰か、この男を引っ立てい!」
すると屈強な男たちが立ちあがり、ヤンスを取り囲んだ。
「ま、待つでヤンス! あっしをどうするつもりでヤンス!?」
「打ち首といたす」
「ひぃっ」
ヤンスは縄で縛られて、どこかへ連れ去られてしまった。
メモリエラーを出しただけで、打ち首だと……!?
信長公は冷徹な微笑を浮かべた。
「ほかに完成したものは?」
「……」
ゴワスは目を反らした。
確かにゴワスはゴワスと喚いただけであって、完成したとは一言も言っていない。
「よかろう。では続けよ。言い忘れておったが、最初に完成させたもの以外は、全員打ち首といたすゆえそのつもりで」
理不尽!
俺も泣きたい!
A子と男は泣いている。
ゴワスは脂汗をかきながらコードを見直している。
あせるな。
冷静になれ。
このマシンは、あまりにメモリがショボい。
そのくせコードだけが異様に長い。
きっと実行プログラムにメモリを取られているせいで、変数で使える領域がタイトになっているのだ。削らなくては。
これはコンパイルせずに実行する「インタプリタ」という形式。
変数名の長さがそのままメモリ消費につながる。だから変数名を短くするのはひとつの手かもしれない。
織田と今川の兵力を定義する構造体も、別々に領域を確保するのではなく、配列にしたほうがいい。構造が完全に一致しているのだから。となると関連したコードはすべて書き直し。浮動小数点もやめて整数型に置き換える。兵の人数に小数点は要らない。
完成を宣言する前に、テスト実行するのも大事だ。
バグがないか事前にチェックする。
自分を疑え。人間は完璧ではない。必ずミスをする。そのミスを機械に見つけてもらうのだ。
「ゴワぁス!」
またゴワスが奇声を上げた。
こいつ、迅い。
「ほう。出来上がったか。ではお前のプログラムを見せてみよ」
「ゴワス……」
もはやキーボードが脂まみれだ。
ビープ音とともに、プログラムが起動する。
画面にマップが表示され、兵が動いてゆく。
攻め上がる今川の軍勢。
迎え撃つ織田。
かくして――。
プログラムは、エラーで止まることなく、最後まで実行されてしまった。
信長公はにこりと笑みを浮かべた。
「こやつを打ち首にいたせ」
もちろんそうだ。
確かにこいつのプログラムは、エラーを起こすことなく実行を終えた。
その代わり、織田の軍勢が敗北するという結果を見せつけてしまったのだ。
プログラムの整合性ばかりに気を取られて、依頼主のオーダーを無視してしまった。これではまったく意味がない。
「ゴワぁス!」
そいつはぐるぐるに縛られて、部屋から引きずり出されていった。
気の毒ではあるが……。こいつらは役者だから別にいい。
問題は、このあと。
プログラムを完成させるのは絶対条件ではない。主に護符を貼り、悪意を排除できれば俺の目的は果たせる。だが、そのためにはプログラムを完成させないといけない……。
頭がどうにかなりそうだ。
(続く)




