阿部圭一『ソフトウェア入門』
2冊続けて同じタイトルの本。同書の出版は1983年6月1日。1990年6月3日生まれの自分より7年早く誕生した本。先日読んだ同タイトルの本は2004年初版。現在、前書と同書の出版年には約20年の間隔が存在する。計40年。ソフトウェアは劇的に変わったようであまり変わっていない。
ソフトウェアの基礎は1880年初頭には既に確立されていた。それから40年のソフトウェアの軌跡は、単純にまとめると、メモリ・ストレージ・CPUクロック数を始めとしたハードウェアの進歩に支えられたプログラムの肥大化だけだ。64KBだったものが、8GBに増えただけ。1MBだったものが、1TBに増えただけ。
時代が変わっても、ソフトウェアは変わらない。ハードウェアが変わっても、ソフトウェアは変わらない。変わるのはソフトウェアという名のアプリケーションだけである。
(ソフトウェアのソフトが、変更しやすい意味を持っていることも、そう考えると皮肉だ。)
先に読んだ同タイトルの本は哲学的な「ソフトウェア入門」であった。入門というよりは、どちらかと言えば「ソフトウェア概論」に近い。同書は、まさに「入門」。ただ、プログラミング経験が皆無な人がソフトウェア入門書を読んでも、充分に理解するのは難しい。そういった意味では、ホビーとしてソフトウェアを作ってきた人が、学問としてソフトウェアを修めるための入門書である。決して、ソフトウェアもプログラミングも全く無知な人間がまず最初に手にする本ではない。
最終章『良いプログラムとは何か』で良いプログラムの因子が掲載されていないので、紹介したい。
(1) 正しい
(2) 使いやすい
(3) 機能が一般化されている
(4) 入力データの誤り検査が厳しい
(5) わかりやすい (読みやすい)
(6) 原プログラムが短い
(7) 修正しやすい
(8) 見通しがよい
(9) 適切なモジュール化がされている
(10) 構造化されている
(11) 標準的な手法や書法を用いている
(12) 一貫した手法や書法を用いている
(13) 移植性(portability)がよい
(14) 文書化がよくなされている
(15) テストしやすい
(16) 実行速度が速い
(17) 無駄がない
(18) 実行時の記憶容量が小さくて済む
G. M. ワインバーグはこれらを次の4項目にまとめた。
A. 仕様 (specification)
B. 日程 (schedule)
C. 適応性 (adaptability)
D. 効率 (efficiency)
当たり前のことだが、この当たり前を達成するのが現実的には不可能に近く、一苦労も二苦労もする。