- ผู้เขียนซึ่งพัฒนาโค้ดเอดิเตอร์ส่วนตัว Boo อธิบายเหตุผลที่หยุดโปรเจ็กต์นี้ไว้ชั่วคราวเพื่อไปสร้างภาษาโปรแกรมใหม่
- Boo เป็นเอดิเตอร์ที่พัฒนาด้วย Rust ซึ่งมี การนำทางด้วยคีย์บอร์ดแบบยึดมนุษย์เป็นศูนย์กลาง และ ระบบทดแทน LSP โดยตั้งใจทำไว้ใช้ส่วนตัวมากกว่าจะทำเชิงพาณิชย์
- เขามองว่ากระบวนการพัฒนาที่ซ้ำๆ ทำให้ความคิดสร้างสรรค์ลดลง และให้ความสำคัญกับความสุขจากการสร้าง ซอฟต์แวร์ที่สร้างแรงบันดาลใจ
- ยกตัวอย่าง การต่อเลโก้ และ The Legend of Zelda: Breath of the Wild เพื่อเน้นย้ำความสำคัญของงานสร้างสรรค์ที่น่าจดจำ
- แทนที่จะเดินตามสูตรสำเร็จของความสำเร็จ เขายังคงยึด ปรัชญาการพัฒนาที่ขับเคลื่อนด้วยความสนใจและการเรียนรู้ของตนเอง และมีแผนจะเขียน Boo ใหม่อีกครั้งด้วยภาษาที่เขาสร้างขึ้นเอง
โปรเจ็กต์ Boo และแรงจูงใจในการพัฒนา
- Boo เป็นโปรเจ็กต์ที่ผู้เขียนสร้างขึ้นเป็น โค้ดเอดิเตอร์สำหรับตัวเอง โดยให้ความสำคัญกับประโยชน์ใช้สอยส่วนบุคคลมากกว่าความสำเร็จในวงกว้าง
- Boo มีความสามารถด้าน การนำทางคีย์บอร์ดสำหรับมนุษย์ และใช้ระบบที่เร็วกว่าและสร้างภาระต่อ OS น้อยกว่า LSP(Language Server Protocol)
- ตอนนี้มันทำงานได้ดีพอจะใช้กับงานประจำวันแล้ว แต่ไม่มีแผนจะเผยแพร่เป็นโอเพนซอร์ส
- ทั้ง Boo และ Rio Terminal ถูกเขียนด้วย Rust และมีโครงสร้างกับกระบวนการเผยแพร่ที่คล้ายกัน
- ความคล้ายกันเหล่านี้ทำให้เขารู้สึกว่าเป็นงานซ้ำๆ และลดความสนุกในการพัฒนา
ความสัมพันธ์ระหว่างการสร้างสรรค์กับแรงบันดาลใจ
- ยกตัวอย่าง การเล่นเลโก้ เพื่ออธิบายว่าอิสระในการสร้างรูปร่างที่แตกต่างกันได้ทุกครั้งคือความสนุกของการสร้างสรรค์
- แทนที่จะใช้ชิ้นส่วนแบบเดิมซ้ำไปมา กระบวนการเติมองค์ประกอบจากภายนอกเพื่อให้เกิดผลลัพธ์ใหม่คือแก่นของความน่าสนใจ
- ยิ่งการเขียนโปรแกรมมีความซ้ำมากเท่าไร โอกาสที่จะสร้างงานที่ให้เอฟเฟกต์แบบ “ว้าว” ก็ยิ่งลดลง
- เขาเน้นว่าเราต้องได้รับแรงบันดาลใจก่อน จึงจะสร้าง ซอฟต์แวร์ที่สร้างแรงบันดาลใจ ได้
ตัวอย่างซอฟต์แวร์ที่น่าจดจำ
- ยก The Legend of Zelda: Breath of the Wild เป็นตัวอย่าง โดยกล่าวถึงความสมบูรณ์แบบที่ทำให้แม้แต่คนที่ไม่ได้เล่นเกมก็ยังอยากซื้อคอนโซล
- เขาเน้นพลังของผลงานที่มอบประสบการณ์ซึ่งยังคงอยู่ในความทรงจำไปอีกนานแม้หลังจากเล่นจบแล้ว
- เขาอธิบายว่าซอฟต์แวร์ที่สร้างขึ้นด้วยความใส่ใจในระดับนี้สามารถทิ้ง ความประทับใจทางอารมณ์ ไว้ให้ผู้คนได้
การหยุด Boo และการพัฒนาภาษาใหม่
- Boo เป็น โปรเจ็กต์งานอดิเรก ไม่ใช่เพื่อธุรกิจ จึงไม่มีแรงกดดันเรื่องรายได้หรือเดดไลน์
- เขาไม่ได้ตั้งใจจะสร้างโปรเจ็กต์ขนาดใหญ่อย่าง VS Code และจะไม่ฝืนทำต่อ
- เพื่อจะกลับมาทำต่อเมื่อแรงบันดาลใจกลับมา เขาจึง พักการพัฒนา Boo ชั่วคราว และตอนนี้กำลังพัฒนา ภาษาโปรแกรมของตัวเอง
- ในระยะยาวเขาวางแผนจะเขียน Boo ใหม่ด้วยภาษานี้
ปรัชญาและทัศนคติในการพัฒนา
- การพัฒนาภาษาใหม่นั้นมีงานมากมาย แต่ผู้เขียนมองว่านี่เป็น กระบวนการเรียนรู้ที่สนุกสนาน
- เขากำลังขยายความเข้าใจเกี่ยวกับ ไบนารีและคอมไพเลอร์ และเดินหน้าด้วยจังหวะของตัวเอง
- แทนที่จะทำตาม สูตรความสำเร็จหรือคำแนะนำ จากภายนอก เขาเลือกพัฒนาต่อโดยยึดวิธีคิดและความสนใจของตัวเองเป็นศูนย์กลาง
- บทความนี้เองก็เขียนขึ้นโดยใช้ Boo
1 ความคิดเห็น
ความเห็นจาก Hacker News
พออ่านว่าเขาตื่นขึ้นมาดื่มกาแฟ แล้วครอบครัวหลับกันหมดจนมีเวลาว่างช่วงบ่าย ก็อดสงสัยไม่ได้ว่าทำไม ตารางเวลาในบ้านถึงไม่ตรงกัน บางทีอาจเป็นครอบครัวที่นอนตอนบ่าย หรือเป็นคนที่เพิ่งตื่นมาเริ่มวันตอนเย็นก็ได้
ประโยคที่ว่า “editor นี้มีไว้เพื่อทำให้ฉันมีความสุข” ฟังดูสดใหม่ดี ทุกวันนี้มีแรงกดดันให้ทุก side project ต้องพัฒนาไปเป็น โอเพนซอร์สหรือ SaaS ซึ่งหลายครั้งกลับฆ่าความคิดสร้างสรรค์เสียเอง โปรเจกต์ทดลองอย่าง Boo หรือ Rio ดูเหมือนจะเกิดจากอิสระแบบนี้
คำว่า “ฉันทำมันเพื่อตัวเอง” เป็นวิธีแบบ ศิลปินจำนวนมาก Tolkien ก็เป็นแบบนั้น ส่วนใหญ่เริ่มจากทำเพื่อตัวเองก่อนแล้วค่อยเอาออกมาให้โลกเห็น แต่โดยมากก็ไม่มีใครสนใจ หรือกว่าจะได้รับความสนใจก็ตอนเสียชีวิตไปแล้ว ถึงอย่างนั้นก็ไม่เป็นไร สิ่งสำคัญคือ สัญชาตญาณความเป็นมนุษย์ที่จะถ่ายทอดจินตนาการออกมาสู่ภายนอก
ถ้าการเขียนโปรแกรมกลายเป็นงานซ้ำ ๆ องค์ประกอบแบบ ‘ว้าว’ จะลดลง แต่โปรเจกต์อย่าง yt-dlp ที่รองรับเว็บไซต์หลากหลายนั้นเป็นข้อยกเว้น การทำ data parser จำนวนมากนั้นน่าเบื่อก็จริง แต่ผลลัพธ์คือความรู้สึกว่า “ใช้ได้ทุกที่”
ผมสร้าง ซอฟต์แวร์ที่ทำให้คนรู้สึกบางอย่าง — ส่วนใหญ่คือความโกรธ ท้ายที่สุดแล้วซอฟต์แวร์มีอยู่แค่สองแบบ: แบบที่ไม่มีใครสนใจ กับแบบที่มีคนใช้มากพอจะบ่นถึงมัน
Emacs กับ Emacspeak ทำให้ผมมี อารมณ์ร่วมอย่างมาก มันเหมือนทั้งระบบคือคู่มือเล่มหนึ่ง กดแค่ C-h m ก็เห็นคำสั่งทั้งหมดได้ทันที ไม่มีอะไรซ่อนอยู่ และไม่ต้องไปคุ้ยเอกสาร HTML ถ้ามันทำไม่ได้ ผมก็แก้ด้วย Codex จนมันทำอย่างที่ต้องการได้
ในอุดมคติแล้ว การพัฒนาซอฟต์แวร์ควรถูกมองเป็นงานช่างฝีมือ (craft) เหมือนงานไม้ที่ทั้งมีประโยชน์และเป็นศิลปะได้ แต่หลายโปรเจกต์กลับปฏิบัติต่อนักพัฒนาเหมือนแรงงานโรงงาน ปัญหาคือวัฒนธรรมที่ให้ความสำคัญกับ ปริมาณมากกว่าคุณภาพ
ในขณะเดียวกัน การมองซอฟต์แวร์เป็นแค่งานศิลปะก็ไม่ค่อยสอดคล้องกับความจริง เพราะจุดประสงค์ของโค้ดไม่ใช่เพื่อการชื่นชม แต่เพื่อให้มันทำงาน ถึงอย่างนั้นก็น่าเสียดายที่คำว่า “ซอฟต์แวร์ที่มีงานช่างฝีมืออยู่ในนั้น” ฟังดูแปลกหู
FAANG อย่าง Meta, Google เองก็สร้าง ซอฟต์แวร์ที่ทำให้คนรู้สึกบางอย่าง มาแล้ว — ทั้งความโกรธ ความหดหู่ และบางครั้งก็ความสุขด้วย แต่มันก็แสดงให้เห็นว่าเทคโนโลยีที่เริ่มต้นด้วยเจตนาดีสามารถ บิดเบือนไปได้อย่างไร อย่างที่ว่า “ถนนสู่นรกปูไว้ด้วยความตั้งใจดี” การไล่ตามความดีมักลงเอยด้วยการก่อผลร้าย
ถ้าจะอ้างคำพูดของ Knuth ก็ต้องว่า “ปล่อยให้นักวิทยาการคอมพิวเตอร์หลายพันคนทำในสิ่งที่พวกเขาอยากทำอย่างอิสระ” นั่นคือแรงขับของความก้าวหน้า Bell Labs ก็เป็นแบบนั้น เสรีภาพในการสำรวจค้นหา จึงสำคัญ
ทุกวันนี้เราหมกมุ่นกับการ optimize แต่กลับไม่แม่นคณิตศาสตร์นัก สุดท้ายก็กลายเป็น สังคมที่หยุดสำรวจ ไปแล้ว ผมเลยคิดว่านี่คือเหตุผลที่ความก้าวหน้าช้าลง
ผมได้อุปนิสัยนี้มาจาก Casey Muratori กับ Jonathan Blow คือผมชอบสร้าง โลกใบเล็กของตัวเอง เป็นโปรเจกต์ที่มีผมเป็นทั้งผู้ใช้และกลุ่มเป้าหมายเพียงคนเดียว ไม่มีเดดไลน์ ไม่มีคำขอ ไม่มี runtime เป็นพื้นที่แห่งความสุขล้วน ๆ
ทุกวันนี้ซอฟต์แวร์ส่วนใหญ่ทำให้ผมเกิด อารมณ์รุนแรง