それでも yak shaving は楽しい
(parksb.github.io)- ブログを自由にカスタマイズしようとして、HTML の記述、JSON ベースの執筆、Markdown 変換、コンパイル・デプロイツールまで作ることになり、最終的には 静的サイトジェネレーター を自作する経験につながった
- yak shaving とは、ある目標のための連鎖的な作業が本来の目的から離れていく状況を指し、MIT AI Lab の Carlin Vieri が作った表現である
- エンジニアや管理者は、既製ソリューションが気に入らなかったり要件に合わないと感じたりすると、ゼロから作る という落とし穴にはまりやすい
- 限られた予算と時間の中では、自作の楽しさよりも、コア要件を満たす 代替案の選択 と作業量の削減の方が重要な場合がある
- Donald Knuth の TeX のように大きな成果につながる場合もあるが、ほとんどの yak shaving は失敗しうるものであり、学んだことがあるならそれ自体に 価値がある
自作ブログが静的サイトジェネレーターにつながる
- Jekyll、Hugo、Gatsby のような静的サイトジェネレーターやフレームワークは使わなかった
- 最初はいくつかのツールを試したが、カスタマイズの自由度が足りないと感じて自分で作ることにした
- HTML で記事を書く方式は不便で、これを解決するために JSON ファイルベースの執筆システムを作ったが、長文にはやはり不自然だった
- その後、Markdown ファイルを HTML に変換するサービスや、生成結果をコンパイル・デプロイするツールまで作り、結局は 静的サイトジェネレーター をゼロから作ったのと同じことになった
yak shaving の意味と由来
- yak shaving とは、ひとつの目標のために関連作業を追いかけ続けるうちに、本来の目的を見失い、まったく別のことをするようになる状況を指す
- LangDev IRC の例では、斧で木を切ろうとして斧を研ぐ石を探し、良い石がある村へ行くために yak を手に入れ、その yak の毛が長いので結局毛を刈ることになる、という流れになる
- Seth Godin の例では、洗車から始まり、ホース、Home Depot、E-ZPass、隣人の E-ZPass、借りた枕の問題を経て、動物園で yak の毛を刈る話へと続いていく
- この表現は MIT AI Lab で Carlin Vieri が作った言葉である
- Vieri は火曜の夜遅くにホッケーをしたあと、真夜中に夕食をとりながら The Ren & Stimpy Show の Yak Shaving Day エピソードを見た
- 数日後、行政の許可、DHL アカウント設定、郵便局探しのような事務作業をしながら、同僚に自分は yak shaving をしていると言った
- その後数か月のあいだ研究室の人たちにこの表現を使い続け、広まっていった
ゼロから作ることの危険
- エンジニアやエンジニアリングチームを運営する管理者がよく犯すミスのひとつが、ゼロから作ること である
- エンジニアは既製ソリューションが気に入らなかったり、自分の実力を証明したくなったりすることがある
- 顧客や管理者は、既存ソリューションが何をするものかを誤解していたり、要件を正確には満たしていないと判断したりすることがある
- ほとんどのプロジェクトは、製品開発であれトイプロジェクトであれ、予算と時間 が限られている
- 自作を始めると yak shaving に発展しやすく、いったん入り込むとどこで終わるか分からず、本来の目標を放棄してしまうこともある
- こうした状況では、要件の核心を満たす代替案を探し、作業をできるだけ減らすほうが適切である
それでも yak shaving が楽しい理由
- yak shaving は、何かを自分で作る楽しさがあるため、簡単にはやめにくい
- これまで存在しなかったものを作り、問題を見つけて解決し、何かがどう動くのかを理解しようと 知識の連鎖 を掘り下げていく過程が、エンジニアを引きつける
- エンジニアでなくても、欲しいものを自分で作るという発想自体に魅力がある
- Frederick P. Brooks Jr. は『The Mythical Man-Month』で、プログラミングが楽しい理由を次のように整理している
- 何かを作る純粋な喜び
- 他人の役に立つものを作る喜び
- 互いにかみ合って動く複雑なパズルのような対象を作り、そのルールが微妙な循環の中で機能するのを見る面白さ
- 学び続ける喜び
- 柔軟で扱いやすい表現媒体で作業する喜び
TeX という成功した yak shaving
- TeX も yak shaving から生まれた事例である
- TeX は Stanford の教授 Donald Knuth が作った組版システムであり、組版言語とそれを処理するコンパイラを含め、プログラムが動作する全体のシステムを指す
- 数式を簡単に入力できるため、社会科学、科学、工学の分野で広く使われており、ほとんどの利用者は TeX をより簡単に使うためのマクロ集である LaTeX を使っている
- Donald Knuth は 1976 年、『The Art of Computer Programming』第2巻第2版の準備を進める中で、第1版で使われていた活字組版を望んでいたが、もはや利用できなかった
- 代替案に満足できなかった Knuth は、Patrick Winston のデジタル組版の本を見て、自分でデジタル組版システムを作ることを決意した
- Knuth は TeX の最初のバージョンを SAIL 言語で作り、その後、自身が作った WEB 言語で開発して完成させた
- WEB ソースは、文書とコードを一緒に混在させる方式である
- Weave と Tangle というプログラムにより、WEB ファイルからそれぞれ TeX ファイルと Pascal ファイルを抽出できる
- Knuth はこのプログラミングパラダイムを literate programming と呼んだ
- Knuth は Michael Plass とともに、段落内でどこで改行するかを決める Knuth-Plass line breaking algorithm も考案した
- TeX 用フォントである Computer Modern を設計し、ベクターグラフィックスを定義する言語 METAFONT を作り、特定のデバイスに依存せずに TeX の結果を出力するための DVI 形式も開発した
- 本を書くために、プログラミング言語、パラダイム、アルゴリズム、ツール、フォントを作ったことになり、TeX の制作にはほぼ 10 年がかかり、本もそれだけ遅れて出ることになったが、無駄な努力ではなかった
失敗と学習のあいだ
- TeX は極端に成功した事例であり、ほとんどの yak shaving は失敗する
- 適切な時点で止まるべきだが、すでに費やした時間が惜しかったり、yak shaving 自体が楽しかったりして、やめるのが難しい
- 最後までやる必要がある場合でも、「自分はいま何をしているんだろう?」と感じて興味が薄れたり、プロジェクトに割り当てられた資源が尽きて中断したりすることがある
- 学ぼうとする人にとって、yak shaving は非常に効果的でありうる
- 多くのコンピュータサイエンスの授業は、教授の意図とは無関係に、ある程度の yak shaving を要求しており、課題本文よりも周辺知識を掘り下げることで、かえって多くを得ることもある
- yak shaving 的なやり方でコンピューティングシステムを作ろうとすると、Boolean logic、論理回路、コンピュータアーキテクチャ、プログラミング言語、オペレーティングシステムまで学ばなければならない
- Noam Nisan と Shimon Schocken の The Elements of Computing Systems は、まさにこうした過程をたどる
- 最後まで到達できなかったとしても、yak を刈っているあいだに何かを学べたなら、それだけでも価値がある
2件のコメント
韓国語版の投稿が原文のようです
https://parksb.github.io/article/32.html
Lobste.rsの反応
ヤクの毛刈りは楽しいが、ある程度の再帰の深さや努力の限界を決めておいて、そこに達したらやめるべき
ほとんど誰も使わない表現を作っておいて、みんなが知っている用語であるかのように使うのは本当にいら立つ。Redditの利用者は特にこういうことをやりがちで、なんとかの法則を延々と引用する。
この用語のMITでの出典は見つけた: https://projects.csail.mit.edu/gsb/old-archive/…
自分の視野の外にあるものに触れなければ、どうやって視野を広げられるのかと思う