史上最強の魔術師の俺、異世界に転生してプログラマーになっても無双する
俺の名はウィザード=O=グーゴルプレックス。元の世界ではあらゆる生物と不死者の羨望と畏怖を集める史上最強の魔術師だった。そんな俺がこんな初歩的なミスをやらかすなど、今でも信じられない。
ある日、いつものように王宮へ転移しようとしたところ、間が悪いことに丁度魔族に攻め込まれているところで、転移先で放たれていた時空魔法と転移魔法が共変して想定外の異世界へ転移してしまったのだ。本来は転移先の状況を確認してから実際に転移するわけだが、つい手順を省いてしまった。
この世界では偶然置いてあった本から名を取って松本ノイマンと名乗り、プログラマーとして食い扶持を稼いでいる。仕事の要領としては魔術の開発と近いものがあり、慣れるまでにそれほど時間はかからなかった。
「本日からドメインエキスパートとして登山家のK氏に参加してもらいます。」
おっと、そんなことを思い返している内に、つい先日開発がスタートした登山シミュレーターの仕様決めMTGが始まるようだ。ドメインに明るいK氏にこの段階から加わってもらえば、きっと良い設計ができるだろう。
「登山というのは何を目的としているのでしょうか。」
「やはり頂上の地を踏むことですね。特に難しい山やルートでアタックして成功した際に見る景色は何物にも代えがたいです。」
K氏は目を閉じ、そう答えた。瞼の裏にはこれまで幾度も見た頂上の素晴らしい景色が浮かんでいるに違いない。
「でも登頂できないないときもありますよね?」
「はい。もちろん気候や体調のために失敗することもあります。」
「失敗したらどうするんですか?」
「成功するまで挑戦します。」
「なるほど、失敗したら成功するまで繰り返すんですね。」
話を聞くに、おそらくこのような実装になるだろう。
```
def is_success():
!is_ summited()
def is_failure():
!is_success()
do
attack()
while (is_failure())
```
史上最強の魔術師と呼ばれた俺レベルにでもなればこの時点で脳内ではほぼ出来上がっているのだが、魔術なら無詠唱で済ませられるところ、プログラムは実際に書かなくては動かない。面倒なことだ。
--------------------------------
そんなやり取りを何度かして無事リリースにこぎつけてからしばらく経ったある日、
「失敗した数をダッシュボードの評価グラフに反映したいんだけどできる?」
確かに可視化はユーザビリティを高めるだろう。その程度の改修は児戯に等しいので一瞬で実装してデプロイした。
```
failure_count = count(is_failure())
```
「何かユーザーから失敗数が多く出てるって声が出てる」
おっと、ユーザーの声は大事にしなければ。K氏に意見を仰いでみる。
「よく登頂できないと失敗って言われるんですけど、成功の反対は失敗ではなく、本当の失敗は何もしないことなんですよ」
成功の反対は失敗ではないのか。だとすると現状のコードは間違っているようだ。言われたように失敗条件を修正してデプロイする。
```
def is_failure():
is_do_nothing()
```
その直後から何もしてないアカウントが無限にアタックを始めてサービスが落ちた。目の前が真っ暗になった。どうすれば良いんだ?
「"失敗"という言葉が登山と評価の異なるコンテキストで使われているぞい」
どこからか声が聞こえる。
「コンテキストが分離できていない巨大な泥団子になりかけているのじゃ!今の内に分離するのじゃ!」
「うるせえ!システム止まってんだぞ!そんな悠長なこと言ってられるか!」
俺は虚空に叫び次の関数を追加した。
```
def is_failure_when_retry():
```
--------------------------------
その後も似たようなことが何度か起きたが、その度に俺の全知に等しいトラブルシューティング能力と迅速な修正が被害を最小限に抑えている。
「失敗したときはスポンサーに連絡したい」
おやおや、新たな要望が来たな。
「それってis_failure_when_pro_flag_is_on()の話ですか?」
「なにそれ?良い感じにしといて」
やれやれ、この分では元の世界に戻るのは当分先になりそうだ。