Programmer's Note

コード読み書きの備忘録。

The UNX Programming Environment 5章、6章

The UNIX Programming Environmentも、第5章を過ぎて、第6章の「PROGRAMMING WITH STANDARD IO」の終わりに差しかかってきた。

UNIX精神というはつまり、過去の資産を最大限に活用すること、多様性を賞賛すること、なのだなと改めて読んでいて思った。この精神と文化は、だからオープンソースとはよく合い、プロプライエタリとは相容れないんだな。とも。

Ken Thompson、Denis Richieが全ての始りで、ひとつのアイディアの実現が、時代を経るごとに多くの人のアイディアを取り込んで、カンブリア期のごとく爆発し、一つの時代を終えた今も、次の世代として継承されている。生き残ったエンッセンスは古典として受け継がれ、古典は濃縮された真理を含んでいる。

この本の第5章「SHELL PROGRAMMING」の最後は、簡易的なバージョン管理ツールをshell scriptで作る例を紹介している。基本的なアイディアはSCCS(Source Code Control System)から来ていて、発想はdiffと同じである。 ファイルの差分をedの編集コマンドとして記述するのだ。

例えば、

2c
another line

この2cは2行目を'another line'にchangeすることを意味する。edのコマンド。

驚いた。なんとKen Thompsonさんの作ったedてやつは、バージョン管理ツールにまで応用されていた。 edは、viの親のみならず、grep, sed, awkの祖として知られている。そして正規表現の祖でもある。

どんだけ凝縮されてんだ、edに!と思った。

というより、一つの優れたアイディアから、どれだけのアイディアが生まれたのか、と言った方が正しいか。

今あるソフトウェア技術というのは、先人達の仕事の一歩一歩の積み重ねである。ということを実感できる例である。

さて、ここまでで、いくつかUNIX哲学に触れられる文章に合ったので、メモしとかんと。


The question of whether to write a new program or add features to an old one araises repeatedly as people have new ideas. We don't have ad definitive answer, but there are some principles that help to decide. The main principle is that a program should only do one basic job - if it does too many things, it gets bigger, slower, harder to maintain, and harder to use. Indeed, the features often lie unused because people can't remember the options anyway. (p185)

新しいプログラムを書くべきか既存のものを拡張すべきかというのは、新しいアイディアが出たときに繰り返し出てくる問題だ。私たちは決定的な答えをもっていない。が、決めるのに役立ついくつかの原則がある。 主な原則としてはプログラムはただ一つの基本的な仕事をすべきだということだ。多くのことをやり過ぎると、大きくなり、遅くなり、メンテが難しくなり、使いにくくなる。事実、ともかくオプションが覚えられないがために使われないまま横たわっている機能がしばしば存在する。


There's no good solution to writing bug-free code except to take care to produce a clean, simple design, to implement it carefully, and to keep it clean as you modify it.(p187)

クリーンでシンプルな設計を行うこと、注意深く実装し、修正するときにもクリーンに保つよう気をつけること以外に、バグのないコードを書く良い方法はない。


It's worth watching for oppotunities to build on someone else's labor instead of doing it yourself - it's a cheap way to be more productive.(p198)

自分でいちから作るのではなく、他の人の労力の上に(新しいものを)作る機会を窺うのは価値のあることだーそれはより生産的になるための安上がりな方法である。