ソフトウェアの設計など不要では?

ソフトウェアの設計技法は数多く提唱されてきました。構造化設計から始まり、オブジェクト指向設計デザインパターンドメイン駆動設計、など。私も趣味でこれらについてかなり勉強してきたように思います。問題を綺麗に解くことが好きだからでしょう。

しかし、単に私が不幸なだけかもしれないのですが、現実世界では人類が発明してきた設計技法は無視されているように思えます。設計工程と呼ばれるものはありますが、単にそれは書類をつくる仕事であって、設計などされていないようです。そもそも、設計ができる人はほとんどいないし、設計の良し悪しを評価できる人も限られています。こう書くと、私はできるのに他の人の程度が低いように聞こえますが、私もちゃんとした設計はできない; というか思想もなく一貫もしていない雑なものしか触れず、設計ができるかどうかを確かめる機会に恵まれなかった。

現実は美しくもない雑な仕事ばかりなのではあるが、それらに価値がないかと全くそんなことはない。美しさなんてのは、仕事の価値とは全く関わりのないものです。社会という巨大なシステムに組み込まれて、日々動いていることが価値でしょう。なんとなく作りたいから作って、使われてもいないようなものは、無価値でしょう。

ただ動くものを作るだけであれば、はたして設計なんて必要だろうか。別になくてもいいじゃないかと思っている。だって世の中それで動いているじゃないですか。モジュールに分割されていなくたって、システムとしては動く。逆に、モジュール単体で動くようにつくるのは結構難しい。Java であれば頑張ればできるが、 C や COBOL だったらほぼ無理だ。単体で動かないようなものにシステムを分割する意味ってあるのだろうか? どうせ結合テストシステムテストしかやらないのだったら、それに合格するだけの仕事で十分だろう。そして、昔やっていなかったのに、Java だとかの登場でモジュール単体の試験ができるようになったからといって、細かく設計をしなければならない理由はない。「作れたからなんとなく作っちゃいました」という人は捻り殺したくなるが、それと同様にできるようになったからやりましたもありえない思う。

設計にはコストつまり時間がかかる。設計なんかせずに、フラットな一つのルーチンにコピペしながら、ダラダラと書いていくのが最も生産性は高い。動くだけだったらそれで十分だ。また、設計なんてしたら性能が下がる。モジュールに分割したら、モジュール間で通信のコストが必要になる。完全にモノリシックなシステムの方が性能は高い。設計をしなければ、安くて速いものが手に入るのだ。

できる人もいなくて、やる意味も大してないなら、もうやらなくていいんじゃないかな?