オブジェクト指向は簡単か

書籍案内|技術評論社総集編[Vol.1〜36]を購入してパラパラ目を通しています。「総集編」たる本体は付属のCD-ROMであって、紙に印刷された記事は「おまけ」なのかと思っていたら、読み応えのある記事があって得した気分でした。その中に、興味深いコラムがありました。

Webエンジニアのための基礎、徹底理解
1章 オブジェクト指向の概念と実践 Java編 1
豆蔵 長谷川裕一,中原慶
Column 4 オブジェクト指向は簡単か(P38)

 最初に結論から記述しますが、オブジェクト指向は、オブジェクト指向がたどり着くまでにたどってきたアセンブリ言語や構造化プログラミングで行ってきたシステム開発よりも、エンジニアにとって複雑なものです。
【中略】
 エンジニアである限りは、今もそしてこれからも進歩にともなう技術の複雑化とかかわり、理解する必要が常につきまとっています。
 最近では、Javaの世界にEoD(Ease of Development)という考えが現れ、新しい技術を誰でも簡単に扱えるようにしようという方向性を打ち出しています。EoDはエンジニアを難しい技術から解放するような錯覚を受けますが、EoDが意図するところは、エンジニアを難しい技術から開放することではなく、賃金の高いエンジニアを開発現場から減らし、より安価な賃金で使える部品の組立工を増やすことです。その点を理解し、技術を理解していないエンジニアは、安い賃金で使われるようになってしまうという危機感を持ってください。

厳しい内容ですが、エンジニアはそういう覚悟をしないといけないんでしょうね。
私は、ソフトウェア開発の歴史は、複雑・難解から、単純・平易という方向に向かうものだという「楽観論」のようなものを持っていました。それがソフトウェアの向かう正しい方向性なのだと。しかし、これはある意味では正しく、ある意味では間違っており、楽観論でしかなかったのかもしれません。

たとえば、Pascalコンパイラを記述したいと思ったとして、昔と同じものを作る「難解さ」は解消されてきていると思います。方法論やツール類がこなれてきたこと、解説やオープンソースの「実例」が豊富に流通するようになったことが大きいと思います。
私がPascalコンパイラを書き始めたのは20年くらい前ですが、そのころはコンパイラの教科書こそ豊富にあったものの、実物のソースを見る機会がなくて苦労しました。C言語でいうbreak文のコード生成はどうしたらよいかなんて、教科書には書いてないものですから、現実のコンパイラが生成するコードを見ながら、文字通り「車輪の再発明」を繰り返したものです。Pascalコンパイラの実装上の華の一つは、「ネストされた手続きから一気に抜けるgoto文」だと思いますが、これなどTurboPascalも実装していなくて、原理から起こして考えるしかなかったのです。それがまぁ、楽しみでもあったわけですが。しかし、ツール類がこなれてきたことで、より複雑でパワフルなコンパイラへの要求があるものですから、コンパイラ作成そのものは楽になっておらず、むしろ理論的にも実装的にも複雑になっていると確かに思います。

話を戻すと、現実のアプリケーション開発では、ボリュームとしては「安い組立工」の需要が圧倒的に大きいわけです。彼らはプログラマーとさえも呼んでもらえなくて、PG人月いくらなどと、量り売りされる世界があります。つまり、引用したコラムは、あなたは量り売りのPGになりますか、誇り高いプログラマー(エンジニア)になりますかという問いかけなのでしょう。

EoDは必要なものであり、それによって開発現場が多くの就労人口を吸収できるという意味では、社会的にも意義深いものであると思います。しかし、私は、そして私の周囲のエンジニアには、量り売りでない真のエンジニアを目指したい・目指してもらいたいと思っています。