【0073】ぼくはぷろぐらまー

私の職業はプログラマーです。
車載ユニットと呼ばれる、くるまのコンピュータを作っています。

俗に組込み(エンベデッド)システムと呼ばれる業界で
回路設計を行い、プログラムを書く。
半田ごてからプログラミングまで、一人の担当する業務が幅広いところが特徴でしょうか。
そして、今はまさにひたすらプログラミングを行っている段階です。

このように、普段は業務でプログラミングを行い、CPUに対して命令を下す側なのですが
自分自身はプログラミングされる側であったということに気づきました。

それは本能であったり、無意識のうちに膨らんだ様々な欲、エゴであったり。
自分が自覚していないだけで、様々なプログラムが脳内を走っており
そのプログラム通りに行動し、習慣を作り、人格を形成してきたのでしょう。

何か嫌なことをされれば刹那に感情的な反応が返ってきて、
例えば叩かれれば叩き返す、など、
ある入力に対して、対応する出力を返す。

まさにプログラム。

---

さて、業務ではプログラムを作成すると、その動作検証のためにテストを行います。
ある程度以上の規模のプログラムになると

「テスト実施により
 バグがあることは証明できるが
 バグがないということは証明できない」

と言われることがあります。

テストを行い期待と異なる答えが返ってくればそれはバグであり、「バグがある」ということを証明することになります。
一方、テストをクリアしたからといって、今回たまたまバグを発見できなかっただけかもしれません。
「バグがない」ということの証明にはなりえません。

その理由としては「テストケースが不十分である」ということ、
「十分な数のテストケースを挙げることが現実的でない」ということが挙げられます。

一見うまくいっているように見えるプログラムでも
割り込み制御などにより数ナノ秒遅れることで
バグが表面化することがあります。

そして、数ナノ秒刻みで、あらゆるテストパターンを作成するということは
技術的にも、工数的にも厳しいです
(近年、テスト技術もものすごい速さで進歩しており、テスト自動化手法などを用いて
 従前に比べ段違いの網羅率を持たせることが可能となってきています、が)。

だから私たちプログラマは
「このプログラムは完璧!」
と盲信してはならず

「必ずどこかにバグが潜んでいる。バグがあって当たり前。」
という意識を持ち
「結果に重大な影響を及ぼすバグは流出させない」
ことをモットーに、開発を行っています(少なくとも私はこのような考えです)。

また、少し話が変わりますが、何か故障が発生したときに
その影響度がもっとも小さくなるよう制御する「機能安全(フェールセーフ)」という概念もあります。

例えば、信号機が故障した場合「すべてを赤信号の状態にして動作を停止する」などです。
青信号のままより、とりあえず安全サイドに物事が転ぶように配慮しています。
そもそも故障しないように冗長化するという考えもありますが。

---

話を戻すと

私たちは内にそれぞれのプログラムを持っています。
それはそれぞれの育った環境等によって修正されてきた、それぞれ異なったプログラムです。

そして、それぞれのプログラムに「バグがない」ということを証明することは、
職業プログラムと同じく、不可能でしょう。

日本という国の中で正常稼働していたプログラムも、
海外に行けばバグが表面化するかもしれません。

だからこそ、せめて「私のプログラムはバグがあり、それをデバッグしていかなければならない」という意識だけでも持ち合わせておきたいと思います。

そして、様々な外界からの入力を得て、テストケースを自身のプログラムに通すことで
バグをあぶりだすという作業は一生続くのだと考えます。

まずは、結果(=人生)に大きな過失を生みかねない、大きなバグから
潰していくことを、潰す意識を持ち
「自分のプログラムを自分で書き換える」
イメージで生きていこうと感じたのでした。

=====

今日の学び

「動物は思考パターン・行動パターンをプログラムされて生まれてきた。
 それぞれの育った環境に応じて、それぞれのプログラムを作る。
 
 人間は、自身で自身のプログラムを把握することができ、書き換えることができる。」

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存