「シンプル」と「小さい」は別物だ

원제: Simple Is Not Small

왜 중요한가

結合度を複雑性の本質と捉えるこの視点は、ソフトウェアアーキテクチャ設計の指針として、開発者コミュニティに広く影響を与え得る。

ソフトウェアエンジニアのjyn氏が2026年8月27日に公開した技術記事で、Unixパイプラインを例に「小さいプログラム」と「シンプルなプログラム」は異なる概念であると主張した。単語頻度集計のBashとClojureの実装比較を通じ、結合度(coupling)こそが複雑性の本質であると論じている。

jyn氏は、自社で9ヶ月を要したデバッグ事例の講演をきっかけに「シンプルさの優先」を提唱したが、その後その回答に疑問を持ち本記事を執筆した。

記事では、ファイルの単語頻度を集計する2種類の実装を比較する。BashのUnixパイプライン版は`cat`、`tr`、`sort`、`uniq`などを組み合わせた小さなプログラムの連鎖であり、一般的に「シンプル」と見なされる。一方、Clojure版はより多くの名前と高階関数を使用している。

しかし「単語を元のファイル順で表示する」という小さな仕様変更を加えると、Clojure版は数行の追加で対応できるのに対し、Bash版は一時ファイルや難解な正規表現・`join`・`nl`コマンドを多用した複雑なスクリプトに膨れ上がる。

ここからjyn氏は、Rich Hickeyの講演「Simple Made Easy」の定義を援用し、「シンプル(simple)」の語源は「一本の組みひも(sim-plex)」であり、「コンプレックス(complex)」は複数のものが絡み合った状態だと説明する。Unixパイプラインの各コマンドは「小さい」が、テキストストリームという共通インターフェースに強く結合(coupled)しているため、真の意味でシンプルではないと結論付けた。

記事はさらに、「大きい」ことと「結合している」ことも別概念であるとして、デカップリング設計の重要性を論じ、シンプルなプログラムを構築する具体的アプローチへと議論を展開している。

출처

jyn.dev — 원문 읽기 →