年末の大掃除におけるYAGNI(You Ain't Gonna Need It)

2009/1/5-1

ソフトウェア開発の分野ではYAGNI(You Ain't Gonna Need It)という表現があります (人によっては「You Aren't Gonna Need It」と書いています)。 「こうなるかも知れない」をドンドン積み上げていって不要に時間を割くべきではないという考え方です。

wikipediaの項目によると不必要な冗長性には以下のような副作用があるそうです。

  • それによって、別の新しい機能を追加したりテストする時間が削られている
  • 新しい機能にはテスト/デバッグ/ドキュメント/サポートが必要になる
  • 「将来どのような機能が必要になるか」という予測の元に制作されるため、実際に必要な機能が発生したときに予測で作ったものが障害になる可能性がある
  • 実際に必要になるまでは新しい機能を定義したりテストする事は難しい。そして、そのようなものは本当に必要になったときに動作しないことが多い
  • コード量が爆発する。無駄に巨大で複雑な物が出来上がる
  • 仕様書と適切なバージョン管理がされていない状態では、将来の開発者がその機能を使えないかも知れない
  • 新しい機能追加をするために新しい機能が必要になるかもしれない。そして、ゆきだるま式に全体が膨れ上がり、追加機能が本来必要なコード量を圧倒する

なお、基本設計の中に入っているべきである将来のため拡張性と単なる余分な冗長性の差に対する明確な基準は無いので、結局はケースバイケースなんだろうとは思います。 そのため、YAGNIは何でも削れというよりは、無駄に「念のため」を積み上げて大きすぎるものを作り上げないようにとの戒めですね。

捨てた物

さて、YAGNIの説明はこれぐらいにしておいて、本題です。 あまりにも押入れが溢れてきたので、年末に色々と整理しました。

「もうイラネェ!」「もう使わネェ!」「持ってても無駄!」という物です。 心を鬼にし、「YAGNIの精神」で頑張りました。 以下がリストです。

  • Pentium MMX 133Mhz
  • Celeron 1Ghz
  • 2GB HDD(3.5インチ)
  • 1GB HDD(2.5インチ)
  • RJ11ケーブル
  • ビデオカメラに付属していたRCAケーブル
  • IEEE1394 PCIカード
  • Ethernet ISAカード
  • 10/100 PCI Ethernetカード(980円物)複数
  • The UNIX Super Text (本)
  • 過去に書いた論文で紙を買い取らされた物
  • 壊れたPCから抜き取ったフロッピーディスクドライブ
  • 各種ネジ
  • 4芯のイーサネットケーブル
  • Windows2000
  • Office98の箱
  • Radeon7000
  • VISIOの箱とCD
  • アルコパッド
  • Visual Studio 2003の箱
  • 128MBメモリ
  • SCSIケーブル
  • 内蔵型CD-ROMドライブ(CD読み込みのみ)
  • 野ざらしになっていた5年物のCD-R
  • Toshiba Portege 660の専用カバン
  • Carbus Ethernet 100Mbpsカード
  • USB携帯充電器(MOVA用)

いや、でも、まだまだ捨てられるものがある気がする今日この頃です。

プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!