ソフトウェアや電子機器の開発において、開発者を悩ませる最後の問題に「バグ」があります。
経験したことのある人はわかると思うのですが、出荷後に不具合が発覚すると客先のシステムを止めてしまうなど、下手をすると自社の評価すら下げることになりかねません。
ただ、バグ(不具合)を出すことを恐れすぎると、今度は挑戦することに消極的になってしまいます。
不具合を出してしまうことのプレッシャーと上手く付き合い、挑戦できるエンジニアを目指しましょう。
バグ(不具合)を出すとどうなるのか?最悪はクビ?
バグというのは、ソフトウェアを開発しているときに、想定した動きと違う動きをして、システムの働きに障害をきたすような不具合やコード上のミスのことを言います。
「バグ」の検出というのはこれだけ時代が発達した現在においても完全になくすことはできていませんし、これからどれだけAIが発達したとしても完璧にゼロにすることは難しいと考えられています。
どんなに注意をしていても失敗は起こる時には起きます。これはどうしようもない事実です。Microsoft Officeであっても、iOSにインストールされたアプリだってダウンするときはダウンします。現実は完璧ではありませんし、かならずしも完璧を目指す必要はありません。使用(運用)に問題のないレベルに達していれば良いのです。
もちろん理想を言えばまったくバグの存在しないソフトウェアが良いというのは認めますが、その実現のために検証やデバッグに無尽蔵に工数、つまりお金を使うことができるかといえばそうではないのです。
話は「バグ」からはちょっとズレるのですが…
かつて筆者ははある基板(電子回路や部品のパターンをプリントした板)を設計したときに、いざ火入れをする(電源を投入する)段になってADコンバータというICが動作しないということがありました。回路や基板のパターンを見直したのですが、どこが悪いのか全く分かりませんでした。
放熱(動作中にのICが熱くなってしまうので、それを逃がしてやる施策)がちゃんとできていないんじゃないかとか、ICに供給するクロック信号の品質が悪いのではないかと疑い、基板上にフィルタを追加してみたりしたのですが、一向に改善しませんでした。
結局その基板は最後まで動作させることができずに日の目を見ることはありませんでした。自分の失敗を認めざるを得ないときのあの気持ちは忘れられません。
ただ、予算を割いて基板を設計したにも関わらず、失敗したことに関して「上からは全く怒られたりしなかった」というのが以外でした。それまでの私には「仕事というのは100%が求められ、失敗してはいけないもの」と思い込んでいました。この失敗で得た私の発見としては、「仕事で失敗しても大して問題ではない」ということです。(もちろん出荷してから問題が出てはダメですが…)
そこから私はクロックや高速信号、アナログやデジタル基板の電源プレーンの構成などについていろいろと勉強をしました。対策をいろいろしたうえで再度改良版の基板を設計・製造することが認められました。
新たに予算を使うことを認めてもらえたため、そのプロジェクト自体は2回目で成功することができました。ソフトウェアの設計開発だけならば、ソースコードを修正してソフトをコンパイルし直すだけで良いかもしれません。ですが、ハードウェアの設計・製造工程にはお金がかかるということもあって、ハードウェア開発の場合は予算の都合などからなかなか再挑戦が認められないこともあります。
上層部がどんなことを考えていたかはわかりませんが、彼らにも若かりし頃の失敗の経験がいろいろと活きているのだと話を聞いていると思うことがあります。たとえば、
- 工場のラインにおける機械設計でお客さんの商品を何度も壊した話
- 出荷前にICが火を噴(ふ)いて設計をやり直した話…。
ベテランで凄腕のエンジニアに見える人であっても若いころにたくさんの失敗を経験して今に至っています。
現在はプログラミングを開始するハードルは低くなっていますが、トータルでやらなければならない規模は大きくなっていて、設計全体の難易度は上がっています。
しかも失敗に対しての許容値というか、許される範囲というのはどんどん低くなっている気がします。それが企業がエンジニアに対して即戦力を求めたり、新人のエンジニアを1から教育する余裕のなさということにつながっているのかもしれません。
ですが、仕様通りに完成した製品でも、市場に出したときに売れるかどうかは分かりませんし、特注の案件であってもそれが顧客にとって長く使っていきたいと思えるようなシステムになっているとは限りません。
やはり失敗から学ぶことは非常に多く、その意味で失敗できるというのは豊かなことなのです。失敗にたいする許容値が低くなっているからこそ、それでも発生してしまう失敗というのは貴重な経験であり、今後の課題ともなります。
その豊かであるはずの失敗から何を学ぶかもその人次第です。
「あーやってしまった…」
「自分にはエンジニアとしての才能がない…」
と落ち込んで終わるのか、じゃあどやったらうまくいったのかを真剣に考えて答えを見つけ自分の肥やしとしていくのか。
エンジニアとして成功できるかどうかは、失敗を経験したときに案外決まってしまうのかもしれません。
バグ(不具合)を出すとどうなるのか?まとめ
結論をいうとすると、
不具合や失敗はどんなに準備をしてもゼロにならない。
ある意味では仕方ない。
失敗したその後が大事。
ということになるかと思います。
失敗を極度に恐れることなく、それがその後の成長につながると信じて失敗と向き合いましょう。