「シンプル」は「小さい」とは違う:Unixパイプラインが実は複雑である理由

Simple Is Not Small

「シンプル」は「小さい」とは違う:Unixパイプラインが実は複雑である理由

開発者jyn氏は、自身の講演後の質疑応答で「シンプルさを優先すべき」と答えたことに満足できず、この記事を執筆。Unix哲学が称賛する「小さなツール」は、実は結合度が高く複雑であると指摘します。単語頻度を計算するUnixパイプラインとClojureのコードを比較し、順序変更という小さな変更がUnixでは困難であることを示します。Rich Hickeyの「Simple Made Easy」を引用し、「シンプル」は「1つの編み目」であるのに対し、「複雑」は「複数の編み目」が絡み合うことだと定義。Google Driveのような大規模ソフトウェアはユーザーにとってシンプルであり、RustのstructとClojureのmapの例から、データ表現と型チェックの結合を解くことの重要性を説きます。小さいことはリソースが限られた状況では有用ですが、シンプルさは常に追求すべきだと結論づけます。

Unixツールは「小さい」が、「シンプル」ではない。
  1. hankbond

    素晴らしい記事で、例も非常にわかりやすい。ただ、クロージャの部分を理解するのにはかなり時間がかかった。

    現在、非常にモジュール化されたソフトウェアを構築しているが、これまでのキャリアで最も設計が難しいプロジェクトだ。これほど堅牢で明確に定義されたものを作るために、これまでの仕事でこれだけの時間と労力を割り当てられることはなかっただろう。このプロジェクトの多くの側面で、複雑でない抽象化を得るために、試しては捨てることを3〜5回繰り返してきた。

    まさにこれこそが、vibe codingが小さな独立したスクリプトを書くのには非常に成功している一方で、それ以外のものにとっては壊滅的である理由だ。大きくてシンプルなものを構築するのは、本当に非常に難しい。

  2. embedding-shape

    重要なのは、「シンプル」が「劣っている」とか「愚か」という意味ではないということだ。「より多く」「より広い」でありながら、それでも「よりシンプル」であることがあり得る。

    意外かもしれないが、Rich Hickeyがこれを最もよく説明している。まだ見たことがなければ「Simple Made Easy」というトークを見てほしい。私がおそらく年に2回は見る数少ないトークの一つだ: https://www.youtube.com/watch?v=SxdOUGdseq4

    Hickeyのトークと、最終的にはClojureが、長年にわたって私のプログラミングに対する考え方を変えたものは、ほとんど他にない。

    新しい素晴らしいHickeyのトークがリンクできると良いのだが、おそらく彼はそろそろハンモックを吊るのをやめる頃かもしれない?

  3. andai

    ここでの「シンプル」という言葉の使い方が、私にはなかなか理解しづらい。

    この特定の用法は、リンクされているトーク「Simple Made Easy」から来ているようだ:

    https://www.youtube.com/watch?v=SxdOUGdseq4

    Unixパイプラインに対する私の反応は、複雑さが爆発した理由は、部品がシンプルすぎたからだ、ということだ。それらは表現力が不十分だった。

    しかし、ここではこの言葉が異なる意味で使われており、正確に何を意味するのかを理解するには、そのトークを見る必要があるだろう。(直交性のようなもの?)

この日のほかの記事

2026-09-07