以前、「自動化のワナ」というタイトルで記事を書いたが、その趣旨は、システムを何でも自動化することは危険性があって、人間の判断や操作を入れて作った方がいということを述べている。
今回の自動化の意味は、「自動プログラミング」のことである。実は、最近このプログラミングを自動化する技術について、接する機会があって、またその有効性の検討を行っている。そうした技術をみているうちにふと疑問がわいてきたのである。
以前から自動プログラミングというのは皆さんの悲願みたいなところがあって、いろいろなチャレンジがされてきています。究極の生産性向上のめざすところというわけです。確かに、仕様を定義しさえすれば、自動的に製造してくれるとうれしくなります。しかし、本当にそうなのかということを考えてみたい。
まず浮かんだことは、いつもいつもプログラムを自動生成するということはどういうことなのかである。毎回、違うプログラムを書くから、それを自動化することが生産性の向上につながるのである。しかしながら、そのように自動化するにしても、同じことを繰り返す非生産性を前提にすることになるわけだから自家撞着ではないのだろうか。
やはり、その前提となる非生産性のところを改善することの方が重要な気がする。すなわち、類似のプログラムを繰り返し書かないように、モジュール化したり、部品化、コンポーネント化して再利用するというのが先決ではないでしょうか。
そうだとすると、そのモジュールや部品のプログラムはどうするのかということになる。それを自動プログラミングにすればいいという話はおかしいのは皆さんもおわかりだと思います。一回しか作らないプログラムを自動化する必要はありません。むしろ、そんなことをするよりも、スーパープログラマーが質の高いコードを書いて終わりです。
ですから、部品化、コンポーネント化による再利用という方向と自動プログラミングの方向は全く逆方向なのです。おそらく、自動プログラミングを進めていくと同じパターンが頻出するとそれは部品化していくと思います。ということは、自動化がめざすのは、自動化をやめることになるとも言えます。
まあ、そうは言っても現実的には、新規プログラミングの領域は残ると思うので、そういうところでは自動化し、繰り返しのところは部品化して再利用するということでしょう。要は、自動化できるからといって、何でもコードを書くのはやめた方がいいということである。なぜかというと、おそらく自動化でつくられたプロググラムの質がそう高くないと思うからである。
