Enlightenmentware - ซอฟต์แวร์ที่ปลุกฉันให้ตื่นรู้
(mmapped.blog)- UNIX, Git, Emacs, Boost.Graph, Bazel
- ในฐานะโปรแกรมเมอร์ เราต้องโต้ตอบกับเครื่องมือซอฟต์แวร์ทุกวัน แต่เครื่องมือส่วนใหญ่ก็มีไว้เพียงเพื่อให้ทำงานที่ต้องทำให้เสร็จเท่านั้น
- บางครั้งก็พบซอฟต์แวร์ที่ก้าวข้ามความมีประโยชน์แบบเรียบง่าย กระตุ้นจินตนาการ เปิดความเป็นไปได้ใหม่ ๆ และมีอิทธิพลต่อวิธีที่เราออกแบบระบบ
- เรียกซอฟต์แวร์แบบนี้ว่า ‘Enlightenmentware’
- สำหรับโปรแกรมเมอร์ แหล่งที่มาของการตื่นรู้ที่พบบ่อยที่สุดคือภาษาการเขียนโปรแกรมที่ใช้งานอยู่ รวมถึงภาษาที่เรียนเป็นงานอดิเรกด้วย
- ผู้เขียนได้รับความตื่นรู้มากมายจากการทำงานกับภาษาการเขียนโปรแกรมอย่าง MASM, C, Prolog และ Idris
- เนื่องจากอิทธิพลของการเรียนภาษาที่มีต่อการขยายกรอบความคิดเป็นสิ่งที่รู้กันมานานแล้ว บทความนี้จึงจะไม่เน้นที่ภาษา แต่จะโฟกัสเฉพาะซอฟต์แวร์ที่ให้ความตื่นรู้เท่านั้น
UNIX
unix เป็นมิตรกับผู้ใช้—มันแค่เลือกคบเพื่อนเท่านั้น
ไม่ระบุชื่อ, "Art of unix Programming" โดย Eric S. Raymond
- ในปี 2008 ระหว่างเรียนมหาวิทยาลัย ผู้เขียนเริ่มมองหางานแรกด้านโปรแกรมมิง
- ประกาศรับสมัครงานส่วนใหญ่ต้องการความรู้เกี่ยวกับ UNIX และ socket
- เนื่องจากในหลักสูตรมหาวิทยาลัยไม่มีวิชาเกี่ยวกับ unix หรือระบบปฏิบัติการ ผู้เขียนจึงตัดสินใจศึกษาด้วยตนเอง
- ผู้เขียนเข้าสู่โลกของ unix ผ่านหนังสือ "The unix Operating System" ของ Andrey Robachevsky และคณะ
- การติดตั้ง Mandriva Linux ทำให้ได้เริ่มสำรวจสภาพแวดล้อมแบบ unix
- หลังจากนั้น unix ก็อยู่ร่วมในทุกช่วงของชีวิต
- ซอฟต์แวร์ส่วนใหญ่ทำงานอยู่บนสภาพแวดล้อมแบบ unix และผู้เขียนก็ยังคงอ้างอิงหนังสือ "Advanced Programming in the unix Environment" อยู่เสมอ
Git
การยิงเท้าตัวเองด้วย git นั้นทำได้ง่าย แต่การย้อนกลับไปยังเท้าก่อนหน้าแล้วเย็บรวมกับขาปัจจุบัน (
merge) ก็ทำได้ง่ายเช่นกันJack William Bell
- ต้นปี 2009 ผู้เขียนได้รู้จักระบบควบคุมเวอร์ชันเป็นครั้งแรกผ่าน Rational ClearCase
- ClearCase สร้างความสับสนอย่างมาก และทำได้เพียงรองรับข้อกำหนดขั้นต่ำ
- หลังจากนั้นได้เริ่มใช้ Subversion และเรียนรู้ผ่านหนังสือ "Version Control with Subversion"
- Subversion เข้าใจง่ายและใช้งานง่าย แต่ไม่สะดวกสำหรับโปรเจกต์ส่วนตัว
- จากนั้นจึงได้ค้นพบ Git
- Git มีเส้นโค้งการเรียนรู้ที่ชันและทำให้งงได้มาก แต่เป็นความงงคนละแบบกับ ClearCase
- Git ลดแรงเสียดทานของการใช้ระบบควบคุมเวอร์ชันลง จนทำให้เราสามารถเก็บทุกสิ่งที่มีคุณค่าไว้ภายใต้การควบคุมเวอร์ชันได้
- การออกแบบของ Git น่าดึงดูดเพราะเป็นการผสมผสานอย่างงดงามระหว่างระบบกระจาย กราฟไม่วนซ้ำ และพื้นที่เก็บข้อมูลแบบอ้างอิงตามเนื้อหา
- การเรียนรู้โครงสร้างภายในของ Git สนุกมาก จนทำให้ผู้เขียนเริ่มสนใจระบบควบคุมเวอร์ชันอื่น ๆ ด้วย
- ข้อเสียหลักของ Git คือแนวทางแบบ snapshot-oriented ทำให้การทำความเข้าใจการ merge ยากขึ้น
Emacs
โปรแกรมแก้ไขข้อความใด ๆ ก็สามารถบันทึกไฟล์ได้ แต่มีเพียง Emacs เท่านั้นที่สามารถช่วยวิญญาณได้
Per Abrahamsen
- ผู้เขียนแก้ไขโปรแกรมแรกในหน้าต่างสีน้ำเงินที่คุ้นเคยของ Turbo Pascal 7.0
- ในมหาวิทยาลัยได้เรียนการเขียนโปรแกรมด้วย Pascal และหลังจากนั้นก็ใช้ C++ กับ Java
- ในงานแรกด้านโปรแกรมมิง ผู้เขียนใช้ NEdit แต่ก็เริ่มสนใจ Vim และ Emacs
- Vim ท้าทายแต่ก็สนุก คล้ายกับการเล่นเครื่องดนตรี
- Emacs เป็นเครื่องจักร Lisp ที่มอบความสามารถด้านการแก้ไขข้อความและการจัดการหน้าต่าง
- โครงสร้างภายในของ Emacs สะอาด เป็นระเบียบ และมีเอกสารกำกับอย่างดี
- การขยายความสามารถด้วย Emacs Lisp นั้นง่ายกว่าตัวแก้ไขอื่นมาก
Boost.Graph
ผมมีอคติอย่างมากต่อกระแสนิยมเรื่องโค้ดที่นำกลับมาใช้ซ้ำได้ ผมคิดว่า "โค้ดที่แก้ไขซ้ำได้" ดีกว่ากล่องดำหรือ toolkit มาก
Donald Knuth, สัมภาษณ์กับ Andrew Binstock
- ในคืนส่งท้ายปีเก่า 2013 ผู้เขียนได้อ่าน Boost Graph Library
- ไลบรารีอัลกอริทึมส่วนใหญ่อาศัยตัวแทนข้อมูลแบบเฉพาะ ทำให้ผสานเข้ากับโปรเจกต์เดิมได้ยาก
- ไลบรารี Boost.Graph แก้ปัญหานี้ด้วยการใช้ generic programming
- แม้ผู้เขียนจะไม่เคยใช้ไลบรารีนี้จริง ๆ แต่การออกแบบของมันช่วยให้เข้าใจการออกแบบ STL และ generic programming ลึกซึ้งยิ่งขึ้น
Bazel
ถ้า make ไม่ทำงานตามที่คุณคาดไว้ มีโอกาสสูงว่า makefile จะเป็นฝ่ายผิด
Adam de Boor, "PMake—A Tutorial"
- ในปี 2009 ผู้เขียนเขียน
Makefileแรกสำหรับโปรเจกต์วิจัย - ความซับซ้อนของ
makeทำให้ผู้เขียนโหยหาเครื่องมือที่ดีกว่า - ผู้เขียนลองระบบ build หลายแบบ แต่ก็ยังไม่พอใจทั้งหมด
- ในปี 2016 ผู้เขียนเข้าทำงานที่ Google และได้ใช้
blaze - Bazel คือชิ้นส่วนสุดท้ายของปริศนาระบบ build
- Bazel รวดเร็ว แม่นยำ ใช้งานง่าย และไม่ผูกติดกับภาษาใดภาษาหนึ่ง
บทสรุป
- ลักษณะร่วมของ enlightenmentware ที่ดี:
- แก้ปัญหาที่ลึกซึ้ง และเป็นปัญหาที่เราเผชิญในชีวิตประจำวัน
- มีปริมาตรความคิดมากอยู่ภายใต้พื้นผิวที่เล็ก
- เชื้อเชิญและกระตุ้นให้เราเข้าไปสำรวจภายใน
ความเห็นของ GN⁺
- ความสำคัญของ UNIX: UNIX เป็นระบบปฏิบัติการพื้นฐานในสภาพแวดล้อมการเขียนโปรแกรมจำนวนมาก และจำเป็นต่อการเข้าใจพื้นฐานของ system programming
- เส้นโค้งการเรียนรู้ของ Git: Git อาจยากในช่วงแรก แต่เป็นเครื่องมือสำคัญด้านการควบคุมเวอร์ชัน โดยเฉพาะในสภาพแวดล้อมแบบกระจายและการทำงานร่วมกัน
- ความยืดหยุ่นของ Emacs: Emacs ให้ความสามารถมากกว่าการเป็น text editor และเหมาะอย่างยิ่งสำหรับผู้ที่สนใจ Lisp programming
- generic programming ของ Boost.Graph: Boost.Graph เป็นตัวอย่างอันทรงพลังของ generic programming ที่ช่วยให้เรียนรู้วิธีนำอัลกอริทึมซับซ้อนไปใช้อย่างมีประสิทธิภาพ
- ประสิทธิภาพของ Bazel: Bazel เป็นเครื่องมือที่ช่วยเพิ่มประสิทธิภาพของระบบ build ในโปรเจกต์ขนาดใหญ่ได้อย่างมาก และมีประโยชน์อย่างยิ่งในองค์กรขนาดใหญ่อย่าง Google
5 ความคิดเห็น
บน Windows คงหนีไม่พ้น everything ล่ะมั้ง 555
Magit ดีขนาดไหนกันถึงได้มีชื่ออยู่ในกลุ่มซอฟต์แวร์ระดับมาสเตอร์พีซแบบนี้? ผมไม่ได้ใช้ Emacs เลยไม่รู้จริง ๆ
ใน Nvim เขาว่า Neogit ได้รับอิทธิพลมาจาก Magit งั้นคงต้องลองใช้อันนั้นดูสักหน่อย...
ขอแนะนำ lazygit ด้วยครับ 555
ขอบคุณครับ
สุดสัปดาห์นี้ผมคงต้องติดตั้ง superfile กับ lazygit แล้วลองเล่นดูสักหน่อย
ความเห็นบน Hacker News
สรุปรวมคอมเมนต์จาก Hacker News
Compiler Explorer:
ความคิดเห็นเกี่ยวกับการใช้ Windows:
Docker:
Spring Framework:
Nix:
Emacs:
แนวคิด 'Round':
Magit:
การเปรียบเทียบ SVN กับ Git:
ประสบการณ์การใช้ Linux, Emacs, Bazel, Magit: