入れ替わりのコスト
あらゆる技術選定は、未来への賭けです。良く歳を重ねる賭けもあります——セマンティックなHTML、プログレッシブエンハンスメント、明確な関心の分離。そうでないものもあります——ロックインを招くフレームワーク固有のパターン、放置されるビルドツール、実際には抱えてもいなかった問題を解決する抽象化。
選択を誤ったときのコストは、移行作業だけではありません。ツールと共に働くのではなく、ツールに逆らって働くことで積み上がる摩擦。動かしているバージョンと一致しないドキュメント。3年前には筋が通っていたのに今はもう通っていないパターンを維持し続けるための、頭の中のオーバーヘッド。これらすべてがコストです。
良く歳を重ねるもの
私の経験では、良く歳を重ねるものには共通の特徴があります。
- 退屈であること。 退屈な技術が退屈なのは、すでに試され尽くしているからです。バグは知られています。エッジケースは文書化されています。コミュニティには答えがあります。
- シンプルであること。 簡単ではなく、シンプルであること。表面積が小さい。ひとつのことをうまくやる。スタック全体になろうとするのではなく、ほかのツールと組み合わさる。
- 標準を尊重すること。 HTML、CSS、HTTP、URL——これらはウェブの耐力壁です。抽象化で覆い隠すのではなく、その上に直接組み立てたシステムは、長持ちする傾向があります。
- 明示的であること。 魔法は楽しいものですが、それはデバッグが必要になるまでの話です。明示的なコード、見通しの良いデータフロー、予測できる振る舞いには、キーストロークを数回節約してくれる巧妙な抽象化よりも高い価値があります。
シンプルさは複利で効く
完全に理解しているシンプルなシステムは、部分的にしか理解していない洗練されたシステムよりも価値があります。これは、ひとつの関数からアーキテクチャ全体まで、あらゆるスケールで成り立ちます。
シンプルさとは、コードを少なく書くことではありません。すべての行が、言葉にできる理由をもってそこにあるコードを書くことです。問題を解決できる範囲で、可動部分が最も少ないアプローチを選ぶことです。仮定の未来の要件に向けて最適化したくなる衝動に抗うことです。
この規律への報酬は、複利で返ってきます。シンプルなシステムは拡張しやすく、デバッグしやすく、引き継ぎやすく、切迫した状況でも筋道を追いやすい。壊れる要素が少ないぶん、歳の取り方も上手です。
実践として
長持ちするものをつくることは、チェックリストではなく実践です。依存関係を追加する前に立ち止まること。その抽象化は間接参照に見合う価値があるのかと問うこと。巧妙さより読みやすさを、目新しさより安定を選ぶこと。
いちばん刺激的なアプローチではありません。しかし、ツールと格闘する代わりに、本当に大事な仕事に時間を使わせてくれるアプローチです。