とある文字列フィルターをかけたら、全体の約1%のデータに影響をおよぼし、そのうち数件が全ての文字列がフィルターにかかって文字がなくなってしまった。
これは実際の話である。
もしこのフィルターを通した後の文字列が空白だと不具合になるというシステムがあった場合、その発生率は0.0x %となる。
もし、そういう状況をテストの段階ではなく運用環境で起きたとしたら、果たして貴方のチームは、ほんのほんの一部のユーザーさんの問題に対して、適切な答えに辿り着くことができるだろうか?
僕は、それを突き止めることができる人こそが、真のエンジニアたるポイントだと思う。
もちろん、こういうケースの時、他に抱えている問題と見比べてプライオリティを選別する「トリアージ」をすることは現実的にある。
ただし、その基準は数が少ないから、ではない。明確に再現性の確保が難しかったり、経験上、偶然性に依存していると判断されるケースなどに限られる。そう判断できる明確な経験がないなら、ちゃんと調べるべきだ。「よくわからない」という結論を下すか、仮説なり明確な問題なりを突き詰められるか、という部分には、明確にスキルや経験の差が出る。
もし「よくわからない」という結論を出したとしたら、それは「あなたの負け」を意味しているのであって、どんな状況やどんな言い訳をしたとしても、その問題に対するスキルがないことを正当化できるようなものではない。
例えば、僕であればAndroidのカーネルのスキルがないから、よくわからない、ということは多々ある。それはGoogleが悪いのではなく、明確にここが悪いと指摘できない自分のスキル不足である。機種依存みたいなケースがあったとして、それが明確に機種依存なのかを正しく推論し、判別する力もまたスキルと言えるだろう。
まず、そこで負けていることを認識しているのか、していないのかは大きな差が出る。負けを認めた上で、負けを取り返そうと情報のアンテナを張ったり、解決法を模索するからこそ成長する。そういうことに対して、悔しくて眠れないほど考えるか否かという部分にこそ、成長するポイントがある。そう思えない人は、その分野に関しては絶対に成長しない。
昔、Windowsのせいにしておけば多くの問題をWindowsのせいにできた時代があった。ブラックボックスが大きくなってエンジニアがそういえば許されるという甘えが許されるようになったポイントと言えるだろう。本当はWindowsの問題ではなかったハズが、自分がよくわからないからWindowsのせいにすれば正当化されてもみ消された問題は多々あるハズだ。
最悪だ。
————————-
以前の記事で、技術的負債を返そう返そうとして遠回りしてしまった人の話について言及した。それに対して、問題があるのを直したり、いいものにするという行為の何が悪い、という意見を見かけた。
本当のことを言うと、その意見に賛成だ。とことん問題を突き詰めることに反対をしたくないし、改善したいという気持ちはできる限り尊重したい。
プログラムにとってエンジニアは神である。
それはエンジニアが偉いという意味ではない。
エンジニアが、そのプログラムを諦めてしまったら、そのプログラムは、それ以上発展しないし、問題の解決もしなくなるからだ。
だから神なのである。その自覚を持っているならば、トリアージするとしても、相応に明確な理由が必要だということはわかるだろう。そこまで考え抜いて決断をしているか否か、というのは大切なポイントだと思う。
【PR】ご意見、感想などは是非、mstdn.fmのローカルタイムラインでお聞かせください