แต่การโกนขน yak นั้นสนุก
(parksb.github.io)- จากความพยายามปรับแต่งบล็อกได้อย่างอิสระ ผู้เขียนเลยต้องลงมือทำตั้งแต่การเขียน HTML ระบบเขียนบทความด้วย JSON ไปจนถึงเครื่องมือแปลง Markdown และเครื่องมือคอมไพล์·ดีพลอย สุดท้ายจึงกลายเป็นประสบการณ์การสร้าง ตัวสร้างเว็บไซต์แบบสแตติก ขึ้นมาเอง
- yak shaving หมายถึงสถานการณ์ที่งานย่อยต่อเนื่องเพื่อไปให้ถึงเป้าหมายหนึ่ง ค่อย ๆ ห่างออกจากจุดประสงค์เดิม และเป็นคำที่ Carlin Vieri จาก MIT AI Lab เป็นผู้บัญญัติขึ้น
- วิศวกรและผู้จัดการมักตกหลุมพรางของการ สร้างขึ้นใหม่ตั้งแต่ต้น ได้ง่าย เมื่อรู้สึกว่าโซลูชันสำเร็จรูปไม่ถูกใจหรือไม่ตรงกับความต้องการ
- ภายใต้งบประมาณและเวลาที่จำกัด การเลือก ทางเลือกอื่น ที่ตอบโจทย์ความต้องการหลักและลดปริมาณงาน อาจสำคัญกว่าความสนุกจากการลงมือทำเอง
- แม้บางกรณีจะนำไปสู่ความสำเร็จใหญ่แบบ TeX ของ Donald Knuth แต่ yak shaving ส่วนใหญ่ก็อาจล้มเหลวได้ และหากได้เรียนรู้อะไรจากมัน นั่นเองก็มี คุณค่า
บล็อกที่ทำเองต่อยอดกลายเป็นตัวสร้างเว็บไซต์แบบสแตติก
- ไม่ได้ใช้ตัวสร้างเว็บไซต์แบบสแตติกหรือเฟรมเวิร์กอย่าง Jekyll, Hugo, Gatsby
- ตอนแรกลองใช้เครื่องมืออยู่บ้าง แต่รู้สึกว่าให้อิสระในการปรับแต่งไม่เพียงพอ จึงตัดสินใจทำเอง
- การเขียนบทความด้วย HTML นั้นไม่สะดวก จึงทำระบบเขียนบทความบนไฟล์ JSON ขึ้นมาเพื่อแก้ปัญหา แต่พอเป็นบทความยาวก็ยังรู้สึกไม่เข้ามือ
- หลังจากนั้นยังทำบริการแปลงไฟล์ Markdown เป็น HTML และเครื่องมือสำหรับคอมไพล์·ดีพลอยไฟล์ผลลัพธ์เพิ่มเข้าไป จนสุดท้ายก็เท่ากับสร้าง ตัวสร้างเว็บไซต์แบบสแตติก ขึ้นมาตั้งแต่ต้น
ความหมายและที่มาของ yak shaving
- yak shaving หมายถึงสถานการณ์ที่ระหว่างทำงานที่เกี่ยวเนื่องกันต่อไปเรื่อย ๆ เพื่อเป้าหมายหนึ่ง กลับหลงลืมจุดประสงค์เดิมและไปทำอย่างอื่นที่ต่างออกไปโดยสิ้นเชิง
- ตัวอย่างจาก LangDev IRC คือ เริ่มจากจะตัดต้นไม้ด้วยขวาน แต่ต้องไปหาหินมาลับขวาน แล้วเพื่อจะไปหมู่บ้านที่มีหินดี ๆ ก็ต้องหาจามรีมาก่อน แต่ขนของจามรีดันยาวเกินไป สุดท้ายเลยต้องโกนขนมัน
- ตัวอย่างของ Seth Godin เริ่มจากการล้างรถ แล้วลามไปถึงสายยาง, Home Depot, E-ZPass, E-ZPass ของเพื่อนบ้าน, ปัญหาเรื่องหมอนที่ยืมมา และลงเอยด้วยการโกนขน yak ในสวนสัตว์
- คำนี้เป็นคำที่ Carlin Vieri ตั้งขึ้นที่ MIT AI Lab
- Vieri เล่นฮอกกี้จนดึกในคืนวันอังคาร แล้วมากินมื้อเย็นตอนเที่ยงคืนพร้อมดูตอน Yak Shaving Day ของ The Ren & Stimpy Show
- ไม่กี่วันต่อมา ระหว่างจัดการงานเอกสารอย่างการขออนุญาตทางธุรการ การตั้งค่าบัญชี DHL และการหาที่ทำการไปรษณีย์ เขาจึงบอกเพื่อนร่วมงานว่าตัวเองกำลังทำ yak shaving อยู่
- หลังจากนั้นไม่กี่เดือน คำนี้ก็แพร่ไปในห้องแล็บ เพราะคนในแล็บใช้กันต่อเนื่อง
ความเสี่ยงของการสร้างทุกอย่างตั้งแต่ต้น
- หนึ่งในความผิดพลาดที่ทั้งวิศวกรและผู้จัดการที่ดูแลทีมวิศวกรรมทำกันบ่อย คือการ สร้างขึ้นใหม่ตั้งแต่ต้น
- วิศวกรอาจไม่ชอบโซลูชันสำเร็จรูป หรืออยากพิสูจน์ฝีมือของตัวเอง
- ลูกค้าหรือผู้จัดการอาจเข้าใจผิดว่าโซลูชันเดิมทำอะไรได้บ้าง หรือมองว่ามันไม่ตอบโจทย์ความต้องการได้ตรงเป๊ะ
- โปรเจกต์ส่วนใหญ่ ไม่ว่าจะเป็นการพัฒนาผลิตภัณฑ์หรือโปรเจกต์เล่น ๆ ล้วนมีข้อจำกัดด้าน งบประมาณและเวลา
- พอเริ่มลงมือทำเอง ก็มีโอกาสสูงที่จะลุกลามเป็น yak shaving และเมื่อเข้าไปแล้วก็มักไม่รู้ว่าจะจบตรงไหน บางครั้งอาจถึงขั้นต้องละทิ้งเป้าหมายเดิม
- ในสถานการณ์แบบนี้ การหาทางเลือกที่ตอบโจทย์ความต้องการหลัก และลดงานให้มากที่สุด มักเหมาะสมกว่า
แล้วทำไม yak shaving ถึงยังสนุกอยู่ดี
- yak shaving หยุดได้ยาก เพราะการสร้างอะไรบางอย่างด้วยมือตัวเองนั้นสนุก
- กระบวนการสร้างสิ่งที่ไม่เคยมีมาก่อน ค้นพบปัญหาแล้วแก้ไข และขุดลึกลงไปใน สายโซ่แห่งความรู้ เพื่อทำความเข้าใจว่าสิ่งต่าง ๆ ทำงานอย่างไร เป็นสิ่งที่ดึงดูดวิศวกร
- ต่อให้ไม่ใช่วิศวกร แนวคิดของการสร้างสิ่งที่ตัวเองต้องการขึ้นมาด้วยมือก็มีเสน่ห์ในตัวเอง
- Frederick P. Brooks Jr. สรุปเหตุผลที่การเขียนโปรแกรมสนุกไว้ใน 『The Mythical Man-Month』 ดังนี้
- ความสุขล้วน ๆ จากการได้สร้างบางสิ่ง
- ความสุขจากการสร้างสิ่งที่เป็นประโยชน์ต่อผู้อื่น
- เสน่ห์ของการสร้างสิ่งที่เหมือนปริศนาซับซ้อนซึ่งชิ้นส่วนต่าง ๆ ขบกันและเคลื่อนไหวร่วมกัน โดยกฎของมันทำงานอยู่ในวงจรอันละเอียดอ่อน
- ความสุขจากการได้เรียนรู้อย่างต่อเนื่อง
- ความสุขจากการทำงานกับสื่อแสดงออกที่ยืดหยุ่นและจัดการได้ง่าย
TeX ในฐานะ yak shaving ที่ประสบความสำเร็จ
- TeX ก็เป็นตัวอย่างที่เกิดจาก yak shaving
- TeX คือระบบเรียงพิมพ์ที่ศาสตราจารย์ Donald Knuth แห่ง Stanford สร้างขึ้น และหมายถึงทั้งระบบทั้งหมดที่ทำให้โปรแกรมทำงาน รวมถึงภาษาเรียงพิมพ์และคอมไพเลอร์ที่ประมวลผลมัน
- เนื่องจากสามารถป้อนสมการได้ง่าย จึงถูกใช้อย่างแพร่หลายในสาขาสังคมศาสตร์ วิทยาศาสตร์ และวิศวกรรม โดยผู้ใช้ส่วนใหญ่มักใช้ LaTeX ซึ่งเป็นชุดแมโครที่ช่วยให้ใช้งาน TeX ได้สะดวกขึ้น
- ในปี 1976 ระหว่างเตรียม 『The Art of Computer Programming』 เล่ม 2 ฉบับพิมพ์ครั้งที่ 2 Donald Knuth ต้องการงานเรียงพิมพ์แบบตัวพิมพ์โลหะที่เคยใช้ในฉบับพิมพ์ครั้งแรก แต่ไม่สามารถใช้งานได้อีกแล้ว
- เมื่อไม่พอใจกับทางเลือกที่มีอยู่ Knuth จึงเห็นหนังสือเรื่องการเรียงพิมพ์ดิจิทัลของ Patrick Winston และตัดสินใจสร้างระบบเรียงพิมพ์ดิจิทัลขึ้นมาเอง
- Knuth สร้าง TeX เวอร์ชันแรกด้วยภาษา SAIL และต่อมาพัฒนาให้เสร็จสมบูรณ์ด้วยภาษา WEB ที่เขาสร้างขึ้นเอง
- ซอร์สของ WEB เป็นรูปแบบที่ผสมเอกสารและโค้ดไว้ด้วยกัน
- สามารถใช้โปรแกรม Weave และ Tangle แยกไฟล์ WEB ออกมาเป็นไฟล์ TeX และไฟล์ Pascal ได้ตามลำดับ
- Knuth เรียกกระบวนทัศน์การเขียนโปรแกรมนี้ว่า literate programming
- Knuth ยังร่วมกับ Michael Plass คิดค้น อัลกอริทึมตัดบรรทัด Knuth-Plass สำหรับตัดสินใจว่าควรขึ้นบรรทัดใหม่ตรงไหนในย่อหน้า
- เขายังออกแบบฟอนต์ Computer Modern สำหรับ TeX สร้าง METAFONT ซึ่งเป็นภาษาสำหรับนิยามกราฟิกแบบเวกเตอร์ และพัฒนาฟอร์แมต DVI สำหรับแสดงผลลัพธ์ของ TeX โดยไม่ผูกติดกับอุปกรณ์เฉพาะ
- พูดได้ว่าเพื่อจะเขียนหนังสือหนึ่งเล่ม เขาได้สร้างทั้งภาษาโปรแกรม กระบวนทัศน์ อัลกอริทึม เครื่องมือ และฟอนต์ขึ้นมา โดยการทำ TeX ใช้เวลาเกือบ 10 ปี และหนังสือก็ออกช้าตามไปด้วย แต่ความพยายามนั้นไม่ได้สูญเปล่า
ระหว่างความล้มเหลวกับการเรียนรู้
- TeX เป็นกรณีความสำเร็จระดับสุดโต่ง ส่วน yak shaving ส่วนใหญ่มักจบลงด้วยความล้มเหลว
- แม้ควรหยุดให้ทันในจุดที่เหมาะสม แต่ก็มักเลิกได้ยาก เพราะเสียดายเวลาที่ลงทุนไปแล้ว หรือเพราะตัว yak shaving เองก็สนุก
- ต่อให้จำเป็นต้องทำต่อจนสุด บางครั้งก็อาจเริ่มสงสัยว่า “ตอนนี้ฉันกำลังทำอะไรอยู่กันแน่?” จนความสนใจลดลง หรือทรัพยากรที่จัดสรรให้โปรเจกต์หมดลงจนต้องหยุดกลางทาง
- สำหรับคนที่ต้องการเรียนรู้ yak shaving อาจมีประสิทธิภาพมากทีเดียว
- หลายวิชาในสาขาวิทยาการคอมพิวเตอร์มักบังคับให้ทำ yak shaving อยู่ระดับหนึ่งโดยไม่ตั้งใจ และบางครั้งการขุดลึกลงไปในความรู้รายรอบมากกว่าตัวโจทย์ ก็ทำให้ได้อะไรมากกว่าเดิม
- หากจะสร้างระบบคอมพิวเตอร์ด้วยแนวทาง yak shaving ก็ต้องเรียนตั้งแต่ Boolean logic, วงจรลอจิก, สถาปัตยกรรมคอมพิวเตอร์, ภาษาโปรแกรม ไปจนถึงระบบปฏิบัติการ
- The Elements of Computing Systems ของ Noam Nisan และ Shimon Schocken ก็เดินตามกระบวนการแบบนี้โดยตรง
- ต่อให้ไปไม่ถึงปลายทาง หากระหว่างโกนขน yak ได้เรียนรู้อะไรบางอย่าง นั่นก็มีคุณค่าในตัวมันเอง
2 ความคิดเห็น
ดูเหมือนว่าโพสต์ฉบับภาษาเกาหลีจะเป็นต้นฉบับ
https://parksb.github.io/article/32.html
ความคิดเห็นจาก Lobste.rs
การโกนขนจามรี นั้นสนุกก็จริง แต่ควรกำหนดขีดจำกัดของความลึกในการแตกประเด็นแบบวนซ้อนหรือปริมาณความพยายามไว้ระดับหนึ่ง และเมื่อถึงจุดนั้นก็ควรหยุด
รู้สึกรำคาญมากที่มีคนสร้างสำนวนที่แทบไม่มีใครใช้ขึ้นมา แล้วใช้ราวกับเป็นคำที่ทุกคนรู้จักกันดี โดยเฉพาะผู้ใช้ Reddit ชอบทำแบบนี้มาก และยังชอบอ้างกฎโน้นกฎนี้อยู่เรื่อย
ผมหาต้นทางจาก MIT ของคำนี้เจอแล้ว: https://projects.csail.mit.edu/gsb/old-archive/…
ถ้าไม่เจอสิ่งที่อยู่นอกขอบเขตความรู้ของตัวเอง แล้วจะขยายขอบเขตนั้นได้อย่างไร