ソフトウェア工学について思うこと

hiyama (檜山正幸)
Mon Nov 01 2004

目次

檜山による技術記事サイト「Chimaira.org」 (http://www.chimaira.org/)が開設されています。本サイトとあわせて 是非ご覧ください。

1. 松本先生の『ソフトウェア工学』

「ソフトウェア工学」という言葉がありますが、これはどういう意味で しょうね。ひとつの学問分野なんでしょうが、その守備範囲や効能については、 人により随分と違った理解/印象を持っているようです。

僕自身は、ソフトウェア工学を、「どうでもいい(したがって、あまり役に 立たない)ソフトウェア工学」と「まっとうな(役に立つと期待できる)ソフ トウェア工学」の2種類に分けて考えています。アジャイル派の人々から目の カタキにされているソフトウェア工学は、どうでもいいほうのソフトウェア工 学ですね。実際、「ソフトウェア工学」と冠した書籍や記事のなかには、しょ うもないことを述べているものもあります。

こういう「どうでもいいソフトウェア工学」が「ソフトウェア工学」なんだ と理解(誤解)している方は、松本吉弘著『ソフトウェア工学』(丸善)とい う本を是非とも手に取ってみてください。手に取るだけでいいです、買わなく てもいいです。序文を立ち読みするだけでいいのです。(とか言うと、売り上 げに貢献しないからマズイなー、気に入ったらヤッパリ買ってね。)

その序文の一部を(強調も原文どおり)引用すると:

最近、ソフトウェア工学、ソフトウェア生産技術関連の分野では、“わかり やすさ”や“実務性”を標榜した図書が、内外に数多く出版されている。これ らのなかには例外もあるが、全般的に、“こうしなさい、ああしなさい”とい う経験的躾や方法を奨励するマニュアル的なものが多い。さらにいうならば、 なぜそのような方法に従わねばならないのかについて、数学や工学的背景に基 づいた納得できる説明をしていないものが多い。これが原因かどうかわからな いが、この種の本は、一般に、面白くないのである。なんとか、面白くなさを 隠ぺいし、面白そうにみせるための苦心をしているが、結局は面白くないので ある。最近の学生がソフトウェア職種を敬遠するようになった原因に、この “面白くなさ”という独特の雰囲気があるとみている。

学生が卒業してやりがいがあると感じる職種は、四六時中、躾や規則に束縛 されて仕事をする世界ではない。難しいということは彼らが敬遠する原因に はならない。難しくても面白ければなんでもやろうとする。どのような講義 が学生や企業内教育受講生の興味を引くかは、その出席率や授業態度から顕著 に判断できる。数学(情報数学)的体系に基づいて構成的に話しが進められる 部分に関しては、たいへん評判がよい。本書は、そのような部分を中心にして 構成されている。ソフトウェア工学に真の興味や愛情をもつ人を世の中に増や したいということが最終目標である。

僕が松本版『ソフトウェア工学』を買って持っているのは、この序文を何度 でも繰り返し読むためです。(中身は難しいですし、説明が荒っぽい所があり ます。もっとも、扱っている内容をていねいに説明すると、何千ページかの本に なってしまうでしょう。)

松本先生のご指摘のとおり、躾(しつけ)みたいな徳目主義、教条主義は、 もうホントにどうでもいいんです。特に若い世代に対しては、根拠のハッキリ しない説教をしても相手にされないって。相手にするような若者がいるとした ら、その若者のほうがヤバイ(将来は暗い)。

2. コンピューティング・サイエンスとソフトウェア工学

最近、「コンピュータ・サイエンス」の代わりに「コンピューティング・サ イエンス」という言い方をする人がいます。僕もこれに倣って、「コンピュー ティング・サイエンス」を使うことにしてます。そのココロは、計算機という 機械を科学するのではなくて、計算(computing)という行為/現象について 科学する学問だからです。こう規定すると、(必ずしもハードウェア実装を持 たない)量子計算や、生物計算、脳内の計算現象なども、当然ながらコンピュー ティング・サイエンスの対象になるわけです。

コンピューティング・サイエンスは計算現象の科学なのですが、一方で、 (多くは職業として遂行される)ソフトウェア開発という実務行為があります。 この実務行為に関わっている人(まー、現場の人ですな)は、コンピューティ ング・サイエンスを、机上の空論とか知的遊びとみなす傾向があるようですが、 科学とアカデミズムをあなどってはいけません(*注1)。コンピューティング・サイエ ンチスト達は、実務に役立ちそうな(役立ちそうにないものもあるが)膨大な 成果を蓄積しています。

注1

こういうことを大学の先生なんかが言うと、自己正当化のように受け取られ てしまうかもしれない。僕のような教育を受けてないオッサンが訴えたほうが 説得力があるかもね。

そうはいっても、コンピューティング・サイエンスと現場のあいだにギャッ プがあるのも事実です。ソフトウェア工学には、このギャップを埋める役割が 期待されているのではないでしょうか。現場の人々は、ソフトウェア工学を通 じて、コンピューティング・サイエンスの成果を日々の実務に活かせるといい ですよね。

しかし、そのソフトウェア工学の評判が、「どうでもいいソフトウェア工学」 のせいでかんばしくない。ソフトウェア工学を無視したり、小馬鹿にする現場 の人もいる。そんな人は当然に「コンピューティング・サイエンスなんて知っ たことじゃない、なにしろ忙しいんだ」と言うでしょう。でもそれじゃ悪循環 だわさ。その“忙しさ”は、あなたが(まっとうな)ソフトウェア工学もコン ピューティング・サイエンスも知らないから引き起こされているかもしれませ んよ。

例えばね、お医者さんは医療という実務行為のプロフェッショナルですね。 そのお医者さんが、「薬学も生理学も知ったことじゃない」人だったら、受診 したくないでしょ、ヤッパリ。信用ならないもんね。

3. アジャイルとソフトウェア工学

アジャイルの人々は、ウォーターフォールに代表されるような、今となって はどうでもいいような(というか弊害が多い)方法を批判するために、(おそ らくは戦略的に)「ソフトウェア工学」をスケープゴートに選んだのでしょう (*注2)。現場の人々から好まれてないソフトウェア工学を叩けば、アピーリン グだし、現場の人からウケそうですから。

注2

念のため付け加えておくけど、ウォーターフォールが全部悪いとか、いつで もダメってわけでもないですよ。ウォーターフォールの手法にだって、参考に なる点も、今でも部分的には使える考えも含まれています。

実際のところ、ソフトウェア工学をクソミソに言っているのは、アジャ イルの提唱者や当事者というより、アジャイル・ブームの尻馬に乗っている “どうでもいい”人々でしょう。いずれにしても、批判の対象になっているの は「どうでもいいソフトウェア工学」です(*注3)。でも世の中には「まっとう なソフトウェア工学」があることを忘れちゃいけないし、コンピューティング・ サイエンスとソフトウェア開発現場を架橋しようとする試みを否定しちゃいけ ません。

注3

どうでもいい人々がどうでもいいものを批判しているとしたら、それはもう、 まったく安全に無視可能な事象ですね。

ところでさ、日本語で「科学者」というと、大学/研究所で、職業としての 学問を行っている人という意味だけど、もう少し広い意味で「サイエンチスト」 を使ってもいいのじゃないだろうか。科学する心、あるいは分析的知性といっ てもいいのだけど、まっとうに“ものを考える態度”を持って現象と対峙し、 行動できる人はサイエンチストですよ。そういう意味でなら、すべてのプログ ラマ/情報技術者は、コンピューティング・サイエンチストであるべきです。