2004年度版への序文

「Forth思考」の最初の出版から20年後、私自身が再び序文を書けるのを名誉に思います。多くの新技術の波が寄せてきた後でも、ここで取り上げた概念がいまだ有効であることを嬉しく思っています。それらは、長年に渡って無数の開発者に発見・再発見されてきた、良いプログラミングのシンプルな概念です。そしてそれはチャック・ムーア(Chuck Moore)という天才によって新たなひねりを加えられました。

私は比較言語学の専門家であると主張したことはありません。私の最近の職歴は開発技術よりも要件定義と機能設計に集中しています。しかし、この序文で、私の意見を述べる新たな機会が訪れました。

インターネットアプリケーションを設計する過程で、私はJavaとC#をつまみ食いしました。それはチャックがずっと支持してきた優雅さを垣間見るのに十分でした。私は、現実世界の現象に対して繰り返し発生するプログラムコードの設計のために、デザインパターンを説明した最近の本を幾つか読みました。いくつかのパターンは、コントローラパターンのようにしますが、ファクトリパターンのようなのはプログラミング言語自体によって引き起こされる問題に対処します。

1994年度版への序文の中で、私は1984年度版でのオブジェクト指向プログラミングの否定が勇み足だったことを謝罪しました。その謝罪がDigalog社のGary Friedlanderが開発したオブジェクト指向風Forthを使う契機になりました。私は、カプセル化の原則が、それぞれ独自の共通メソッドを実装したクラスから派生したForthの「オブジェクト」にエレガントに適用できることを発見しました。オブジェクトは自分自身についての情報を「知っている」ので、それらを呼び出すコードをよりシンプルにしました。しかし、これらはまだForthによる組み立てであり、まだForth構文です。JavaはForthで書かれていませんでした。ガベージコレクションなどは必要ありませんでした。当時の私の謝罪を今は謝罪しませんが、私が本格的なオブジェクト指向言語を支持して売り込むつもりはないことを知っておいてください。

幾人かは「Forth思考」とエクストリーム・プログラミングとの類似点に着目しました。例えば反復的な開発、「動く」コードを段階的に強化すること、問題を解決しすぎないことを重視します。

しかし、私の考えでは、エクストリーム・プログラミングはソフトウェア開発ライフサイクルにおける重要なステップ、すなわち概念モデルの設計を見逃しているようです。エクストリーム・プログラミングでは1人か2人の開発者しかプロジェクトに取り組んでいないため、この段階は正式なものにする必要はありません。優れた開発者が直感的に行うからです。 しかし、私が取り組んできた5人以上の開発者が関わるプロジェクトでは、概念モデルの設計が非常に重要です。

概念モデルは、ソフトウェアがどのように動作するように見えるかを表すものとして定義します。 概念モデルは、単に要件を修正したものではありません。 これは、トップレベルの要件を慎重に分析し、ユーザーにとって意味のある設計でそれらを創造的に対処した結果です。 例として、コマースアプリケーションの「買い物かご」構造があります。 第1段階である概念設計は、第2段階である要件の基礎を形成し、ユーザー/システムの対話を記述するユースケースを推進します。 次に、この第2段階の要件によって、第3段階以降の技術設計と実装、またはソフトウェアの実際の動作が決定されます。 概念モデルは、プログラムマネージャ、開発者、および事業主によって共同で設計されています。

私がエクストリーム・プログラミングについて読んだかぎりでは、概念設計の代わりに要件定義が実装を直接駆動すると仮定しているようです。私の経験では、概念モデルの理解者であるプログラムマネージャの立ち位置に惹かれます。一緒に仕事したほとんどのソフトウェア開発者は、論理的および技術的な設計を行う前に概念モデルを設計することに注意を払う私に感謝しています。しかし「Forth思考」とエクストリーム・プログラミングを比較すると、皮肉なことにXPストライプの開発者の中には(もちろんこの本を聞いたことがない人も)仕様の価値さえわからないという人がいます。

嗚呼、

知恵、楽しさ、そしてより良い善があなたのすべての仕事に輝くように願っています。

レオ・ブロディー

謝辞

通常ここは、本を作るのを手伝ってくれた人々に著者が感謝を述べるところですが、今回は逆に、この2004年度版出版プロジェクトは私からの助言も重要な支援も受けず、発奮した人々によって構想、実施、完成しました。

そのため私は、彼らの貢献を彼ら自身の言葉でつづってもらうよう依頼しました。

John R. Hogerhuis:

私はレオ・ブロディーに、オープンコンテンツライセンスの下で電子フォーマットで「Forth思考」の再公開を許可する条件について話し合うために連絡しました。 私は1984年版のコピーを入手し、本の背を切り落としてスキャンしました。それから概念の検証を行い、その本の最初の章をLyXで組版しました。

一人でできる量では無いことが判明したので、(妻が言うように、私は時折見せる野心を燃やし)、 comp.lang.forth ニュースグループのForthコミュニティに助けを求めました。この本への愛ゆえの支援の多さは途方もないもので、作業を分割して基本的な規則(1984年度版に準拠し、組版言語にLaTeXを使用し、著作権はレオ・ブロディーに譲渡する必要がありました)を決めた後は、私が邪魔しないようにして、ボトルネックにならないようにすればするほど作業が早くなることがわかりました。

私はまた、同時期にTransym OCRツールを使ってすべてのページをOCRし(他の人は同じツールを転記のために使っていました)、そして第3章のために画像のクリーンアップとベクトル化を行いました。

Bernd Paysan:

私はインフラを整えました。私はSourceforgeによって承認されたプロジェクトを手に入れ、CVSと開発者を追加したメーリングリストを用意しました。非営利ライセンスにもかかわらず承認されたのは、Jacob Moormanがこの本に関して「使用上の制限に抵触しますが、承認をおすすめします。これはForthに関する優れたリソースです」としたおかげです。実際の承認処理はDavid Burleyが行いました。

LaTeX導師として、私はほとんどのスタイルファイルを作成し、ほとんどの提出物がそのスタイルファイルで機能するようにクリーンアップしました。

必要に応じて絵図をクリーンアップし、ハーフトーンを復元してラスタを削除。手書きではない図をLaTeXに変換。 [1]

Andrew Nicholson:
  • 第1章、第2章、第7章、第8章からスキャンした画像を抽出、回転、PNGに変換して正しい場所に挿入。
  • 第2章をOCRからLaTeXに書き写し。
  • 1984年度版の索引を再作成。
  • 第1章と第5章の改訂とクリーンアップ
  • 第6章、第7章、第8章をクリーンアップ。
Nils Holm:
第4章、第7章、第8章の書き写しと初期タイプセット。
Anton Ertl:
第3章で、幾つかLaTeX化(タイプセット)とクリーンアップ。
Joseph Knapka:
第3章の書き写し。
Josef Gabriel:
私は第6章を書き写しました。私の貢献はForthを他の人々に引き継ぐのに役立つと考えています。みなさんが「Forth思考」を読んで、そのコードが変化することを願っています。
Ed Beroset:
エピローグと付録のタイプセットと、幾つかのLaTeXコーディング。
Albert van der Horst:
第5章の書き写しと初期タイプセット。
Steve Fisher:
第7章と第8章をOCRスキャン。

上記の全ての方々に、私は深くお世話になり、そして尊敬しています。

2004年11月 ワシントン州シアトル レオ・ブロディー

脚注

[1]John R. Hogerhuisより:印象的な効果の為に「フリーソフトウェア」開発モデルを採用しましたが、Bernd Paysanがボールを奪い、ボールとともに走り抜けたことを付け加えておきます。つまり、フリーソフトウェアプロジェクトのほとんどの重要な部分は、道を切り拓き大部分の仕事をした、この一人の献身的なスーパー開発者によってなされました。 Bernd Paysanはほんとに凄い奴です。