更新日:
科学と技術
「コンピューターシステムは高度な科学技術の結晶」この文章は、特に違和感なく受け入れられると思います。システム開発はそんなコンピューターシステムを開発する取り組みです。ところが古来、特に西洋では「科学」と「技術」はまったく別の系統で発展してきたという話を最近耳にしました。
「科学」とは、仕組みや法則を理解し、再現性をもって説明できることです。同じ条件であれば、誰が試しても同じ結果になる。そして「なぜこうなるのか」を論理的に語れる状態にあること。それが科学的であると言えます。
一方、「技術」は必ずしもすべてが説明されている必要はありません。経験や試行錯誤の中から「うまくいくやり方」を見つけ出し、再現していく営みです。
どちらが先か
大阪で一般的に使われているうすくち醤油も、その一例です。この醤油をつくる行為は、発酵という非常に複雑なプロセスを経ます。そしてそれは、長年の蓄積によって確立された技術です。最適な素材、温度や水分などの条件を組みあわせコントロールする事で目的を達成します。この例えでは発酵に関わる酵素や分子を特定してそのはたらきを示すのが科学です。技術の発見が先にあり、後から科学によってその仕組みが説明される、という順になっています。
同じように、薬草によって病気やケガが治るという営みも、長らく技術として扱われてきました。後から有効成分が解明されることで科学的に説明されることはあっても、現場では「効く」という事実が先に存在していたわけです。
システム開発は科学的か?
では、大阪でシステム開発に携わる現場はどうでしょうか。計算機やプログラムは論理と数学に基づいた科学の結晶であり、本来はすべて説明可能であるべき世界です。しかし現実の開発現場、とりわけ不具合対応の場面においては、様子が変わってきます。
不具合対応はまず再現することから始まります。再現できれば、条件を整理し、原因を切り分け、論理的に対処することができます。しかし、直接的な原因がすぐに分からない場合、私たちはログを追い、仮説を立て、検証しながら手探りで修正方法を探っていきます。このプロセスは、科学というよりも技術に近いものです。経験や勘、過去の類似事例が重要な役割を果たします。
さらに厄介なのが、再現しない不具合です。特定のタイミングでシステムの挙動が遅くなる、あるいは断続的にしか発生しない問題は、まさにこの典型です。再現できなければ科学的な検証は難しく、かといって試行錯誤の起点も曖昧になります。ときには科学的アプローチを放棄して、メモリをクリアするために「プロセス再起動」のような応急的な対応をせざるを得ない事もあります。
科学は約に立つのか?
システム開発の段階では、科学的な思考の積み上げによってシステムはつくられます。
しかし、ビジネスの現場という複雑な環境では、想定外の挙動を示すことがあります。
そのとき、大雑把な技術でしか対処できない場面があるというのは、どこか皮肉にも感じられます。
それでも、科学的な視点は重要です。「仮説を立てて検証する」「本当は別の原因ではないかと疑う」「この疑念を晴らすためには何を証明すべきかを考える」。こうした思考は、不具合対応を前に進めるための重要な手がかりになります。完全に再現できなくとも、観測できる事実を積み重ねることで、解決に近づくことは可能です。
関連記事
※本コラム『技術と人のあいだ』では、日々の業務で、お客様への提案や若手エンジニアへの説明をする機会が多くあります。大阪でシステム開発の仕事に向き合う日々の中で、限られた時間では伝えきれないことや、「これも知っておいてほしいな」「前にも同じ話をしたな」と感じることを、ここに少しずつ書き留めていきます。

