2013.08.20
yna

ソフトウェアの生産性

コンピュータの歴史のなかでは、かなりに古い話になるのですが、パソコンの黎明期くらいに、リレーショナルデータベースという概念が生まれます(1980年代)。パソコンは非力であったために、なかなかRDBは普及しなかったのですが、Windows-95と同時期に生まれたMS-Accessが普及するようになってパソコンでも使われるようになります。
それまで、コンピュータの世界では、データというのは、レコード単位で指定されたファイル(ISAM)を、一件づつ読み出して、処理するのが一般的でした。
例えば、ある月の売り上げを集計するには、販売日時、商品コード、販売個数の入った伝票のデータを一件一件読み出して、まず、販売日時が集計期間内かどうか調べて、次に商品マスターを検索して、単価を調べ、その単価に売り上げ個数を合計するようなプログラムを毎回書いていたのです。
いまでは、1命令(とはいえ数行になることは多々ありますが)で記述できるようになりました。

SELECT SUM([売上伝票].[販売個数] * [商品マスタ].[単価]) AS [当月売上]
FROM [売上伝票] JOIN [商品マスタ] ON [売上伝票].[商品コード] = [商品マスタ].[商品コード]
WHERE [売上伝票].[販売日時] BETWEEN '2013-08-01' AND '2013-08-31 23:59:59'

それまで一般的だった手法が、概念が変わることによって、一気に廃れるという革新は、コンピュータ世界では何度か起きます。
jQueryもそんな技術の一つといえるでしょう。
ご存知のようにjQueryは、ブラウザのエレメントを操作するライブラリです。例えば、<div class=”text”>という要素を探してきて、その要素の最後にパラグラフ<p class=”quote”>を追加して、そのパラグラフに、blueというクラスを追加するなどというコードは、十数ステップとか数十ステップを書いてやっと出来上がるものでした。
しかしjQueryですとたった1ステップで記述できます。

$("div.test").add("p.quote").addClass("blue");

jQueryはライブラリと言われていますが、これは、特定の用途に絞った別の言語とみなす事ができます。(このような言語をDSL=Domain Specific Languageといいます)

さて、一般的なプログラマの生産性は、一ヶ月3000ステップくらいと言われています。たしかに優秀なプログラマなら6000ステップくらい書くでしょう。
しかし普通のレベルのプログラマが6000ステップとか書けば、重複の多いバグの多いプログラムを書くことになります。実際バグ修正に手間取って、一ヶ月で書いた6000行を、翌月一月かけて修正することになり、結局月間3000ステップくらいになるのです。

この業界に30年近くいますが、スーパープログラマーを育成することは出来ません。本当の意味でスーパープログラマーと呼ばれる人は、最初から向いた一握りの天才だけです。
普通のプログラマーでもjQueryのような高度な言語を覚えることで、高い生産性を上げることができます。(特定の用途とはいえ、数倍の生産性の向上があるのは、SQL以来じゃないかな)

以前同じツールを、perl、ruby、C++の3つの言語で記述したことがあります。最初perlで、1日程度で書いたものを、半日くらいでrubyに移植、さらに、c++で書き直しましたが、すでにロジックは、perlで書いたバージョンで確立しているにも関わらず、これには3日くらい掛かりました。

良いシステム・エンジニアに求められる条件は、新しい技術や色々な技法、言語、システムに精通し、生産性やシステムとしての堅牢性、拡張性などを勘案して、もっとも良いシステム構成を顧客に提案できることです。よく分からない分野については良く知っている技術者と打ち合わせるなどして何が最善か理解する必要があります。
また新しい技術は、影響範囲の狭い箇所で使用するなどの工夫をして、出来るだけ信頼性や生産性を把握すべきです。

(1) 生産性はSEが一番気にする必要性のあるファクターです。
(2) 常に色々な技術を試し、生産性や堅牢性に対する把握をしておく。
(3) 将来性を勘案して、安定性の高い技法・プロトコルを採用すべき。

yna

一覧に戻る