ソフトウェア工学におけるヤクシェービングの理解
ヤクシェービングの定義:無関係なタスクの連鎖
ヤクシェービングとは、開発者が元の目的に到達するために一連の前提条件をクリアしなければならず、最終的には出発点とは全く関係のないタスクにたどり着くという、依存関係のあるタスクの連続を指します。この用語は、MIT AIラボの博士課程学生であるカリン・ヴィエリが、The Ren & Stimpy Show の奇妙なエピソード(剃られたヤク)に触発されて作り出しました。
この現象を示す代表的な例が二つあります:
- ツールチェーン: 木を切り倒すには斧が必要です。斧が鈍っていれば研石が必要です。研石を手に入れるには特定の村へ行く必要があります。旅をするにはヤクが必要です。そしてヤクを使うにはまずヤクを剃らなければなりません。
- 家庭チェーン: 車を洗うためにホースが壊れていることに気づき、ホームデポへ行く必要が出ます。そこへ行くには橋の通行料のE‑ZPassが必要で、隣人からパスを借りなければなりません。そのために借りた枕を返す必要があり、枕からヤクの毛を取り除く必要があり、最終的にヤクを剃ることになります。
エンジニアリングリスク:ゼロからの構築
ゼロから構築することは、プロフェッショナルなエンジニアリングにおけるヤクシェービングの主要な動機です。これは、開発者やマネージャーがカスタマイズ性の欠如、技術力を証明したいという欲求、あるいは既存ツールが特定の要件を満たさないという誤った認識から、市販のソリューションを拒否する場合に起こります。
予算とスケジュールが限られた本番環境では、このアプローチは危険です。エンジニアが既存ツールの代わりにカスタムインフラを構築し「ヤクを剃り始める」ことで、元の目的を見失い、プロジェクト自体を完了できなくなるリスクがあります。
クリエイティブな価値:ヤクシェービングがやりがいになる理由
生産性リスクがあるにもかかわらず、ヤクシェービングはエンジニアにとって本質的にやりがいがあります。この動機は、フレデリック・P・ブルックス・ジュニアが The Mythical Man‑Month で指摘したプログラミングの核心的な喜びに根ざしています:
- ものを作ることそのものの喜び。
- 他者にとって有用なものを創造する満足感。
- 複雑で相互に組み合わさった部品を構築する魅力。
- 絶え間ない学習の喜び。
- 表現手段としての柔軟性。
ケーススタディ:ドナルド・クヌースと TeX
ドナルド・クヌースが TeX を作り上げたことは、極端かつ成功したヤクシェービングの例です。1976 年、The Art of Computer Programming の第2版を執筆中に、既存のデジタル組版手段が不満足であることに気づきました。本の組版という問題を解決するために、クヌースは 10 年にわたるゼロからの包括的システム構築に着手しました。
本来の目的である本の組版を達成するために、クヌースは以下を作り出しました:
- 新しいプログラミング言語(WEB)。
- 新しいプログラミングパラダイム(リテラルプログラミング)。
- 新しい改行アルゴリズム(Knuth‑Plass アルゴリズム)。
- カスタム書体(Computer Modern)とベクターグラフィック定義言語(METAFONT)。
- デバイス非依存の出力フォーマット(DVI)。
本の出版は 10 年遅れましたが、結果として生まれたシステムは科学・数学組版の世界標準となりました。
ヤクシェービングの教育的利益
学習段階にある人にとって、ヤクシェービングは驚くほど効果的です。システムをゼロから構築するために必要な前提知識(ブール論理、論理回路、コンピュータアーキテクチャ、OS など)を掘り下げることは、主課題そのもの以上の価値を提供することが多いです。たとえ最終プロジェクトが完成しなくても、システムの基礎メカニズムを学ぶ過程自体が努力に見合うものとなります。