バグのないプログラムの世界観です。デバッグ(gdb)も参照のこと。
僕は、パソコンのプログラムを開発するという仕事は、たくさんの部品を組み合わせて作る自動車などとよく似ていると思います。
自動車の製造過程では、それぞれの部品が上手く働くかを入念にテストし、きちんと動く部品だけを組み合わせて全体の自動車を組み立てます。
プログラムもこれと同じで、入念にそれぞれのモジュールやコンポーネントをテストして、バグのないプログラムを作ることができます。
ですが、プログラムという特性上、きちんとプログラムが動くかどうかをテストするのは難しいものです。たとえば、入出力だけをテストしても、内部のデータ変数全てが適切に働いているかどうかをチェックすることは、デバッガを使わないとできず、またデバッガを使っても難しいです。
それから、プログラムはアナログな部品と違って、とても多くの実行パターンを考えなければなりません。画像処理であればあらゆるグラフィック処理の全ての場合を考えなければなりませんし、コンパイラやインタープリタであれば、あらゆる言語的記述の全ての場合を考えなければなりません。
ここで、一番簡単にできるのは、もし金儲けを考えない場合であれば、オープンソースにして、みんなでプログラムにバグがないかをチェックする、という方法です。
よって、僕はオープンソースは、自動車などの製造で巧みな技術を持っている日本の製造業に親和性が高いと思います。同時に、日本がきちんとしたテスト用のフレームワークを作れば、オープンソースにしなくても、同程度の高品質のプログラム開発を行うことは可能ではないかと思います。
デバッガを使うことで、ある程度のプログラムのコード分析を行うことができます。値をその時のブレークポイントでチェックしたり、変数にさまざまな値を代入してテストすることができます。printf()チェックなども併用しながら、プログラムにバグが混入しないように注意して開発しましょう。
最近は、Windowsなどの開発も高度になってきており、.NETなどの新技術も使いながら、たくさんの資金を投入して安定したOSをMSも作っています。以前のように「Windowsは不安定だがUNIXは安定している」とは必ずしも言えなくなっています。特に最近はLinuxでもGUIの巨大デスクトップ環境を開発しており、Windowsと同じぐらいバグがあります。特にオープンソースでは、きちんとテストされているかどうかは不透明で、保証もなく、また一部ではアマチュア・プログラマがコードを書いていたりして、必ずしもオープンソースは高品質ではなくなっています。
後日注記:実際には、オープンソースにするだけでバグがなくなるということはなく、プログラマによる設計と実装が重要になる。たとえば、コアの関数を正しく書き、どの処理でもその関数を使うようにすれば、バグの入る余地を減らすことができる。また、たくさんの処理が増えすぎた時は、全てのコードを書き直す必要もある。これは仕事でプログラミングを書く時にも言えて、バグが解決できない時はもう一度全て書き直すしかない。これがそのまま「デスマーチ」へと繋がるのである。
僕は、リーナス・トーバルズの言う、「目玉の数がたくさんあればどんなバグも深刻ではない」という言葉が、バグをなくす上で重要だと思います。
すなわち、たくさんの人がコードを書けば、それだけバグが混入する可能性が増え、たくさんの人がコードを読めば、それだけバグが修正される可能性が増えます。
そう、たくさんの手で書けばバグは増え、たくさんの目で読めばバグは減るのです。
なので、大企業で作られたソフトウェアはバグが増えます。たくさんの人がコードを書いている分、その中に未熟なプログラマが存在する可能性が増え、そのような未熟すぎるプログラマがバグを混入させるからです。
そして、オープンソースで作られたソフトウェアはバグが減ります。たくさんの人がコードを読んでいる分、さまざまな人によるレビューが行われているために、みんなでバグを見つけ、報告し、修正しているからです。
本質的に、大企業のソフトウェア開発はバグを増やし、オープンソースのソフトウェア開発はバグを減らすのです。
本当に企業のセキュリティを守るなら、大企業で作られたクローズドなソフトウェアを使うのではなく、できるだけオープンソースで作られた有名なソフトウェアを使うことです。それだけで、セキュリティホールを減らすことができます。
特に、「自分で読まずに書く」は最悪であり、「自分で書かずに読む」は最高です。そして、優秀な開発者がひとりで書いたソフトウェアを、みんなでレビューして進歩させていったようなソフトウェアが一番信頼できます。逆に、オープンソースだからといって、元が企業による商用ソフトウェアからオープンソース化され、今でも企業の従業員の開発者が主体となって開発されているようなソフトウェアは信頼できません。みんなで書くという行為は最悪であり、みんなで読むという行為は最高なのです。
2023.05.12