はてなCTOのnaoyaさんの「僕やはてながPerlを選ぶ理由」と言うエントリーがきっかけでソフトウェア工学の話しが盛り上がっています。
しかし、経験を積んでいく中で、そのやり方が自分に向いていないこと、自分に向いてるのはプログラミング言語を使いながらプログラムを考えることだというのが分かってきました。また、プログラミングをしている最中により良いアイディアが思い浮かぶということが何度もあり、次第にそれはプログラミングをしているからこそ思いつくことなのだということもよく分かってきました。紙の上では決して思いつかないようなアイディアが、プログラミング作業を通じて驚くほど自然に生まれてくるのです。
この記述こそ、ソフトウェア工学の最も重要なエッセンスを表したものです。
話しがピンと来ないと思いますので、詳しく説明します。
ソフトウェア工学とは何か、元京都大学教授の松本吉弘氏が24年前に著した「ソフトウェアの考え方・作り方」(電気書院、1981)からの引用です。
一般に工学とは科学によって発見された普遍的法則を工業生産に応用し,生産を質的,量的に向上させるための体系化技術と考えられている.ソフトウェア工学が工学と称するからには,他の工学とある深さで目的を同じくするものを扱う必要がある.しかしソフトウェアにおける普遍的法則とは自然法則に関するものではなくて,人の思考なり,理念というような抽象世界における普遍的法則であることを考慮せねばならない.つまるところ,ソフトウェア工学とは,ソフトウェアの問題分析・設計・製作・運用・維持という過程における人の知的活動の中から,他の工学分野における自然法則(たとえば発電工学におけるファラディの電磁誘導方程式)に匹敵する普遍則を見出し,これをもとにした工学体系を作り上げ,工業生産に応用する活動形態であるという考えが妥当と考えられる.ソフトウェア工学によって体系化された知識が,ソフトウェアの問題分析・設計・製作・運用・維持といった各段階で,どのように使われるのであろうか,その方法を体系化したものが方法論(methodology)である.方法論もソフトウェア工学の重要な一分野である.(p.11)
つまりソフトウェア工学とは、抽象世界の問題解決の方法と言う知識を体系化したものであり、知識の適用と言う方法自体を方法論として体系化することもソフトウェア工学の重要なテーマだと言うことです。それを前提に考えれば、naoyaさん達がPerlを採用しているのは、このソフトウェア工学の方法論にきわめて的確に沿った行為であり、Perlと言う工学技術(体系化された知識)が、はてなの問題解決(設計)工程に(結果的には製作にも)立派に適用されているのです。
しかも、ソフトウェアの設計と言う行為で、一般的に外部から見て見落とされるのが、このnaoyaさんが書いている「より良いアイディアが思い浮かぶ」かどうかです。世の中では設計行為が、図面を引くだけの何か機械作業のように思われがちですが、筆者は極端に言えば「設計」と言う言葉と「アイデア」と言う言葉は同義であるとさえ考えています。
naoyaさんの言うようにPerlがこのアイデアをうむとすれば、Perlはソフトウェアの設計にとってきわめて有用な技術であると言えるのです。
筆者にとってはこのPerlが、つい先日も取り上げた1年前のエントリー「アプリケーションを設計すると言うこと」の中で書いているように、実はB4の白紙の紙と鉛筆だったりします。B4の白紙にフリーハンドで書いた絵が自在に踊り出して自分のイメージ通りの動きをした時が、アイデアの完成です。
これをキーボードやマウスを使っていてはとても実現できません。つまり筆者が行う「設計」行為のために、これを支援する工学的技術が未だ追いついていないと言うことです。
それはさておき、自分たちの方法論である「自己組織化アプリケーション開発のためのアーキテクチャ」も論を進めないといけません。 KAI