システム仕様(モデル・設計・実装)の本質について思ったこと

渡辺幸三氏のブログ記事『「科学研究」としてのシステム開発』を読んだ。プログラマ寄りな思考の私には、記事の趣旨を汲み取って発展させるような意見を述べることはできないが、インスピレーションを受けた部分があるので書き残しておきたい。

watanabek.cocolog-nifty.com

 

システム仕様(モデル・設計・実装)の本質って何だろう

記事の後半で、システム仕様の本質が次のように述べられている。

ところが、システム開発の成果物は、人間が世界のあり方を理解するためだけでなく、その記述自身として機能するという不思議な性質がある。成果物を機械に渡せば、機械がその内容にもとづいて振舞い始める。世界のあり方に関するモデルとして構築されたものが、世界の一部に組み込まれて機能し始める、と言ってもいい。

 これこそが、システム仕様の本質であり、強みなのだと思う。ある角度から眺めれば、人間に対する「現実に関する仮説(モデル)」の説明に見える。これを別の角度から眺めると、機械にとっての「その現実を制御するための動作仕様」に見える。人間と機械の双方の世界で機能する独特な「検証された仮説に関する研究論文」――それがシステム仕様というものだ。

渡辺氏の前提とは異なるかもしれないが、私はここに書かれている「システム仕様」を、モデル・設計・実装を含めた広義の仕様だと解釈した。以下では、このことを前提とする。

私がインスピレーションを受けたのは、システム仕様が、ある一面では人間が理解するためのモデルであり、別の一面では機械のための動作仕様である、という点だ。普段プログラムコードを書いている人間にとって、これは当たり前のことだと読み流してしまいそうな文だ。

だが、立ち止まって考えてみよう。ソフトウェアエンジニアが相手にしている「システム仕様」とは、本質的に二面性を持っているというのだ。この見方は、システムづくりは人間の考えを機械が分かるように翻訳するというような、二者間での一方通行な活動だという見方とは大きく異なる。成果として出来上がったシステム仕様は、人間向けの部分と機械向けの部分とがバランスよく兼ね備えられ、かつ、それが上手く機能しているのだ。

これこそ、私にとってシステム開発の難しさと面白さとが交差して極大になるポイントだ。

読みやすさファーストに対する違和感

システム仕様が本質として二面性を持っているということと関連して、脇道にそれるが、以前から感じている、ある違和感を書いておく。

良いプログラムコードを書くためだと、「読みやすさ」がことさら強調される。『リーダブルコード』がずっとベストセラーだという状況がこれをよく表している。この状況に私は違和感を持ち続けている。ソフトウェアとして大事なのは、人間の読みやすさだけではない。上手く問題を解決できること、そして将来に渡って上手く問題を解決し続けられることが肝要だ。それには、解決手段としてのソフトウェアを人間がメンテナンスし続けられることだけでなく、適切な解決方法が選択されていることも重要だろう。どちらかが上・下ということではなく、両輪なのだ。

そしてこの両輪は、上手く回り始めれば互いに補完しあい、強力な駆動力となっていく。今回取り上げた渡辺氏の記事で、次の表現で書かれている世界観にもつながる。

世界のあり方に関するモデルとして構築されたものが、世界の一部に組み込まれて機能し始める、と言ってもいい。

読みやすさファースト、人間ファーストという価値観を強調しすぎることは、上のような両輪で駆動されるシステム開発への道を阻んでしまってはいないだろうか。

二面性はバランス感覚を育む

ソフトウェアエンジニアは、早い段階で、「システム仕様とは、本質的に二面性を持つものだ」ということを学んで心得ておくのが良い。二面性を意識することで、機能するシステム仕様が持つ「バランス感覚」を早く身につけられるに違いない。

 

おっと、渡辺氏のブログの1つ前の記事は『「他人にとってのわかりやすさ」が至上の価値である』だった。私にはまだまだバランス感覚が足らないようだ。