เครื่องมือนักพัฒนาที่คุณชอบคืออะไร?
(lobste.rs)- ในหมวด เอดิเตอร์ มีการพูดถึง Helix, Emacs, Neovim, Sublime Text, Zed และ JetBrains IDE ซ้ำๆ โดยแต่ละตัวก็มี trade-off ที่ชัดเจน
- ในด้าน การจัดการเวอร์ชัน กระแสการใช้
jujutsu(jj)แทน git CLI โดดเด่นมาก และยังมีเครื่องมือ GUI เสริมอย่าง Magit, lazygit, Sublime Merge ถูกกล่าวถึงจำนวนมาก - ในหมวด เชลล์·เทอร์มินัล·การจัดการสภาพแวดล้อม มี Fish, WezTerm, Ghostty, kitty, tmux, Nix, mise, atuin, fzf ฯลฯ เป็นสแต็กหลัก
- ข้อความสำคัญที่ถูกพูดซ้ำคือ "เลือกเครื่องมือที่มีค่าเริ่มต้นที่ดีเพื่อหลีกเลี่ยงการตั้งค่าไม่รู้จบ" และ "ยิ่งอายุมากขึ้นก็ยิ่งปรับตัวเข้ากับค่าเริ่มต้นที่ดี แทนที่จะพยายามดัดเครื่องมือให้เข้ากับตัวเอง" ซึ่งเป็นฉันทามติหลัก (แม้จะมีความเห็นคัดค้านด้วย)
พื้นหลังของการสนทนา
- เธรดคำถามบน Lobsters ว่า "เครื่องมือที่นักพัฒนาชอบที่สุดคืออะไร?" พร้อมความเห็นว่า "นักพัฒนามักมีความเห็นแรงกล้า จึงยากที่จะเลือกเครื่องมือเพียงตัวเดียว"
- มีคอมเมนต์มากกว่า 130 รายการภายใน 19 ชั่วโมง
- ปรัชญาที่โผล่ซ้ำๆ คือ "ยิ่งอายุมากขึ้นก็ยิ่งปรับความชอบของตัวเองให้เข้ากับเครื่องมือที่มีค่าเริ่มต้นดี แทนที่จะดัดเครื่องมือให้เข้ากับตัวเอง", "ทำให้ได้อยู่บนเส้นทางที่ผ่านการทดสอบมาดีที่สุด จึงเจอบั๊กน้อยลง"
- ความเห็นฝั่งตรงข้าม: "ยิ่งอายุมากขึ้นก็ยิ่งทนกับค่าเริ่มต้นที่แย่ได้น้อยลง ถ้าทำให้พร้อมใช้งานไม่ได้ภายในไม่กี่นาที ก็เปลี่ยนเครื่องมือทันที"
เอดิเตอร์ข้อความ / IDE
-
Helix
- "จุดสมดุลที่เหมาะระหว่างความสามารถในการปรับแต่งกับประสบการณ์ใช้งานเริ่มต้นที่ยอดเยี่ยม"
- เมื่อใช้ร่วมกับ jujutsu หลังสลับ commit แล้ว ไฟล์ที่เปิดอยู่ต้อง reload เอง — วิธีชั่วคราวคือผูกปุ่ม
:reload-all - ฟีเจอร์เฝ้าดูไฟล์อยู่ระหว่างทำ PR(#14544) โดย maintainer
- หลายคนปรับตัวกับ โมเดลแบบ selection-first ไม่ได้ จึงกลับไปใช้ vim
- มีฟอร์กที่รองรับ vim keybinding บางส่วน: evil-helix
-
Emacs
- มีผู้ใช้จำนวนมากที่ตอบสั้นๆ แค่ว่า "Emacs"
- Magit ได้รับคำชมมากจนถูกพูดถึงแยกต่างหาก
- กระแสการย้ายงานตามหมวดก่อนหน้า: Git → Magit, Email → mu4e, RSS → elfeed, Notes/TODO/Calendar → org-mode, Finder → dired
-
Neovim
- "เลิกใช้
.vimrcที่ใช้มานานกว่า 10 ปี แล้วเปลี่ยนมาใช้ Neovim เต็มตัว" - กระแสของปลั๊กอินดิสทริบิวชัน:
- LazyVim: สมบูรณ์ที่สุด แนะนำให้ปิด flash.nvim keybinding
- AstroNvim: ทางเลือกที่เพรียวกว่า
- Kickstart.nvim: จุดเริ่มต้นแบบเรียบง่ายสำหรับคนที่อยากปรับแต่งเอง
- MiniMax: config เริ่มต้นที่ทีม mini.nvim ทำขึ้น
- "เลิกใช้
-
JetBrains IDE
- แนะนำ debugger ของ PyCharm อย่างมาก — ใช้ได้แม้ใน Django REPL, รองรับ template HTML/CSS/JS และ cherry-pick hunk ได้
- ถ้าใช้ผลิตภัณฑ์ JetBrains ตั้งแต่ 2 ตัวขึ้นไป ไลเซนส์ All Products จะคุ้มกว่า
-
Sublime Text / Zed
- มีความเห็นว่า "Sublime Text ถูกประเมินค่าต่ำเกินไป" และมีคนบอกว่าใช้ทุกวันมานานกว่า 20 ปี
- แม้จะไปเขียนโค้ดที่อื่น แต่ยังใช้ทุกวันเพราะ ความเร็วสูงและ unsaved buffer ที่คงอยู่ถาวร
- ยังมีแนวโน้มที่คนพยายาม ย้ายไปใช้ Zed เพราะ VSCode ใหญ่เทอะทะเกินไป
-
Kate / Notepad++
- มีการพูดถึง Kate ฝั่ง Linux และ Notepad++ ฝั่ง Windows แบบตอบสั้นๆ เช่นกัน
การจัดการเวอร์ชัน
-
jujutsu (jj) — เครื่องมือที่ถูกเรียกชื่อบ่อยที่สุดในปีนี้
- "ไม่คิดว่าจะเลิกใช้ git CLI ได้ แต่สุดท้ายก็เป็นแบบนั้น"
- "หาเครื่องมือที่ทั้งง่ายกว่าและทรงพลังกว่าไปพร้อมกันได้ยาก แต่ jujutsu ทำได้ทั้งคู่"
- มีคนบอกว่า rebase และ commit amend กลายเป็นเรื่องสนุก
- ข้อเสีย: ค่าเริ่มต้นยังขัดเกลาไม่พอ ต้องปรับ color/template เอง — ค่าเริ่มต้นถูกเปรียบว่าเป็น "ตัวอักษรอ้วกยูนิคอร์นสีรุ้งคอนทราสต์จัด"
-
เครื่องมือเสริมสำหรับ Git
- tig: "git log เวอร์ชันปรับปรุง" ใช้สำหรับ interactive staging
- Magit: แกนหลักของผู้ใช้ Emacs
- Sublime Merge: "เป็น GUI layer ของ git ที่ทำออกมาได้ดีมาก" และยังผสานกับ
jjได้ผ่านmerge-editor = "smerge" - lazygit: ทำให้คนกล้าลองงานซับซ้อนอย่าง rebase, revert, stash และหลาย remote มากขึ้น
- delta: เมื่อใช้เป็น git pager จะได้ diff แบบ syntax-highlighted และเมื่อใช้กับ lazygit ยังสลับ side-by-side / inline ได้
- difftastic: diff ตาม syntax แทนที่จะเป็นรายบรรทัด
- git revise: "ควรเป็นส่วนหนึ่งของ git มาตั้งแต่แรก"
- Beyond Compare: เครื่องมือ diff/merge/sync โฟลเดอร์ที่มีคนใช้มายาวนาน 20 ปี
เชลล์ / เทอร์มินัล
-
Fish
- "ทำทุกอย่างที่ bash·zsh ทำได้ พร้อมมอบประสบการณ์ที่ยอดเยี่ยมโดยแทบไม่ต้องตั้งค่า"
- หากจำเป็นก็ยังรัน bash script เดิมได้ตรงๆ
- ถูกมองว่าเป็นเครื่องมือที่ทำให้ค้นพบคีย์ลัดใหม่ได้เรื่อยๆ (เช่น
alt+<left|right>สำหรับประวัติไดเรกทอรี)
-
เทอร์มินัลอีมูเลเตอร์
- WezTerm: คัดลอก/วางด้วยคีย์บอร์ดล้วน (
ctrl+shift+space), โคลนแท็บในระบบเดียวกันด้วยctrl+shift+t, มี SSH client และ multiplexer ในตัว - Ghostty: ผสานกับ macOS แบบเนทีฟ — มีป๊อปโอเวอร์พจนานุกรมด้วย
Cmd+Ctrl+D, drag-and-drop, native tabs และคุณภาพการเรนเดอร์ฟอนต์ดี - kitty: "เป็นตัวอย่างของเครื่องมือที่ค่าเริ่มต้นใช้งานได้ดีทันที แต่ก็ยังเปิดพื้นที่ให้ปรับแต่งได้มาก"
- WezTerm: คัดลอก/วางด้วยคีย์บอร์ดล้วน (
-
tmux
- เป็นคำสั่งแรกที่รันทันทีเมื่อเปิดเทอร์มินัลเซสชัน
- ช่วยรับมือกรณี SSH หลุดหรือปิดเทอร์มินัลพลาด — และยังคงรูปแบบการทำงานเดิมได้แม้สลับระหว่าง Mac กับ NixOS
-
Starship
- ใช้เป็นปลั๊กอินได้กับทุกเชลล์ แต่ข้อเสียคือคำสั่ง git status·branch ช้าบน repo ขนาดใหญ่
การจัดการสภาพแวดล้อม / dependency
-
Nix / NixOS
- "อาจเป็น Stockholm syndrome ก็ได้ แต่ทำให้กลับไปใช้ Linux distro และระบบ build อื่นแทบไม่ได้"
- ใช้ nix shell แยกตามโปรเจกต์ เพื่อลดแพ็กเกจระดับระบบ และ ล็อกเวอร์ชันได้อย่างแม่นยำ โดยไม่ทำให้ global PATH สกปรก
- "มั่นใจได้สูงว่าผ่านไป 1 ปีหรือ 5 ปีก็ยังทำงานเหมือนเดิม"
- "ถ้าผ่านเส้นโค้งการเรียนรู้ไปได้ มันเหมือนเวทมนตร์ นี่แหละคือวิธีที่การตั้งค่า OS ควรเป็นตั้งแต่แรก"
-
mise
- ตัวจัดการเวอร์ชันเครื่องมือที่มา แทน direnv และยังผสานเข้ากับ CI แบบเบาๆ ได้
- "เป็นตัวแทนของ asdf ที่ดีกว่าแบบชัดเจน"
- เมื่อค้นพบฟีเจอร์
mise activateก็สามารถลบ direnv ออกได้หมด - ใช้
mise watchและระบบ task เพื่อกำหนด action ต่อโปรเจกต์และรันงานเมื่อไฟล์เปลี่ยน
-
Dev Containers
- ข้อดีคือสามารถ แชร์ สภาพแวดล้อม docker/container ระหว่าง deployment กับ development ได้
- ข้อเสีย: tooling ยังไม่สุกพอ (reference CLI ยังไม่มีแม้แต่คำสั่ง stop)
-
chezmoi
- ใช้คง สภาพแวดล้อมพัฒนาให้สม่ำเสมอ ทั้งเครื่องที่ทำงานและเครื่องส่วนตัว พร้อมจัดการ git alias, config ของ Neovim, access token และการติดตั้งเครื่องมืออื่นๆ
การดีบัก / โปรไฟลิง
-
rr — record/replay debugger
- "เป็นเครื่องมือหลักสำหรับดีบัก C/C++ บันทึกครั้งเดียวแล้วเล่นซ้ำแบบกำหนดแน่นอนได้ไม่จำกัด"
- สามารถ watch ที่อยู่หน่วยความจำ แล้ว ย้อนกลับไปยังจุดที่มีการเขียนครั้งล่าสุด ได้
- "temporal debugging bisection" — ใช้ watchpoint เพื่อไล่หาจุดที่ memory corruption เริ่มเกิดขึ้นแบบเดินหน้าและถอยหลัง
-
Pernosco
- debugger แบบ time-travel + วิเคราะห์ data flow
- ช่วยอย่างมากกับงาน focus handling ของ multi-content process ใน Firefox และงานทำให้ about:blank เข้ากันได้กับ Chrome
-
RenderDoc / Tracy / RemedyBG
- RenderDoc: เครื่องมือสารพัดประโยชน์สำหรับดีบักกราฟิก โดยฟีเจอร์พื้นฐานดีกว่า XCode Metal debugger
- Tracy: "ถ้าจะสร้าง profiler แบบมีทรัพยากรไม่จำกัด สุดท้ายมันก็จะออกมาเหมือน Tracy"
- RemedyBG: debugger ที่ใช้งานลื่นไหลสะดวกมาก
-
XCode Instruments
- ให้ คำอธิบายต้นทุน runtime ระดับต่อบรรทัด ในงานโปรไฟลิง 3D/GPU shader
- ช่วย วิเคราะห์สาเหตุของ stall — แยกได้ว่าเกิดจากรอ memory fetch, รอ synchronization หรือ control flow divergence
- "เป็นข้อดีของ ecosystem ที่ควบคุมทุกอย่างได้ตั้งแต่ฮาร์ดแวร์ ไดรเวอร์ ภาษา Metal shading ไปจนถึง tooling"
-
อื่นๆ
- strace, extrace, perf — ชุดเครื่องมือจำเป็นสำหรับการดีบัก
- gdb — ยังถูกพูดถึงแบบสั้นๆ จากหลายคน
การค้นหา / ประมวลผลข้อความ
- fzf: ใช้รวมกับการค้นหาย้อนประวัติใน shell และมีความเห็นว่า "ระดับความ fuzzy พอดีมาก"
- ใช้แพตเทิร์น
rg '' | fzfเพื่อค้นหาข้อความทั้ง repo และเมื่อเลือกแมตช์แล้วจะส่งกลับไปที่ shell prompt ในรูปแบบvim foo.rs +123ทันที
- ใช้แพตเทิร์น
- ripgrep: "ทำงานได้ถูกต้องตั้งแต่แกะกล่อง และไม่เคยคิดจะตั้งค่าอะไรเพิ่มเลย"
- septum: การค้นหาโค้ดแบบโต้ตอบได้ — เช่นค้นหาเงื่อนไขว่า "ภายใน 7 บรรทัดต้องมีทั้ง triangle·vertex·mesh แต่ต้องไม่มี physics"
- fastmod / spacemod: ใช้แทนที่จำนวนมาก
- autojump: ใช้
j whatevsเพื่อย้ายไปยังไดเรกทอรีที่เคยทำงานผ่าน fuzzy matching จากประวัติ - zoxide: คล้าย autojump แต่การนำทางลื่นกว่า
- awk: ยังทรงพลังมากกับงานประเภท "ดึงออกมานิดหน่อยแล้วแต่งต่ออีกนิด"
- entr: "คอยดูไฟล์พวกนี้แล้วรันสิ่งนี้" — เหมาะกับการรันทดสอบโค้ดเบสอัตโนมัติ
JSON / ข้อมูล / เครื่องมือแปลง
- jq: มาตรฐานโดยพฤตินัยสำหรับการจัดการ JSON และมีคำแนะนำให้ อ่าน manual ให้จบ รวมถึงแนะนำ
jq trackของ Exercism- gojq: มีข้อความ error ดีกว่า native jq อย่างมาก และ รองรับ input แบบ yaml ทำให้ใช้ muscle memory เดิมได้
- fx: ใช้ drill down กับผลลัพธ์ JSON ขนาดใหญ่
- hexdump: โดยเฉพาะ
hexdump -Cมีประโยชน์มากกับการดีบัก embedded — แพตเทิร์นอย่างpicocom --baud 115200 /dev/ttyUSB | hexdump -C - hexyl: ตัวดู hex แบบมีสี
- bat: ตัวแทน
catที่มี syntax highlighting - choose, fd: ใช้แทน cut และ find ตามลำดับ
ประวัติเชลล์ / คลิปบอร์ด / โน้ต
- Atuin: ซิงก์ประวัติ shell และค้นหาประวัติจากบริบทไดเรกทอรี·git repo
- CopyQ: ตัวจัดการคลิปบอร์ดราว 2000 รายการ ช่วยกู้คืนงานเก่าเมื่อพลาดจดอะไรบางอย่าง
- histprune: การปรับแต่ง
Ctrl+Rของ fzf — กดalt+Dเพื่อลบรายการประวัติได้ทันที - Obsidian: ย้ายมาจาก Logseq โดยมองว่า Markdown ล้วน เหมาะกับการทำงานร่วมกับ LLM/agent มากกว่า
- Joplin: AGPLv3 รองรับแอปเดสก์ท็อป·มือถือ·เว็บ ใช้ backend ได้ทั้ง WebDAV/OneDrive/S3 และเก็บเป็นไฟล์
.mdตรงๆ
การ build / งานอัตโนมัติ
- just: ตัวแทนของ make — โฟกัสที่งาน task มากกว่างาน build และให้ interface ที่สม่ำเสมอแบบไม่ผูกกับภาษา เช่น
just lint- "สามารถสลับระหว่างโหมดแบบ make ที่ทำงานทีละบรรทัด กับโหมด shell/python/node แบบเต็มสคริปต์ได้ราย target"
- ข้อเสีย: เขียน embedded script ลง
$TMPDIRก่อนแล้วค่อยรัน และใช้ภาษา template ของตัวเอง (ให้ความรู้สึก uncanny valley)
- Task (go-task): ทางเลือกแบบ yaml ที่มีแนว batteries-included
- universal-test-runner: ตรวจจับวิธีรันทดสอบของ repo อัตโนมัติแล้วสั่งรัน พร้อมส่ง args เพิ่มผ่านต่อได้
- chezmoi: จัดการ dotfile และการติดตั้งเครื่องมือให้สม่ำเสมอข้ามหลายเครื่อง
HTTP / เครือข่าย / ความลับ
- Hurl: "ลืมแอป GUI HTTP ที่พยายามเก็บข้อมูลของคุณไปได้เลย" — ใช้ฟอร์แมตข้อความเรียบง่ายสำหรับคำขอแบบ curl และเหมาะกับ integration test
- curl: มีคนพูดถึงแบบสั้นๆ จำนวนมาก
- SOPS: เข้ารหัส secrets ด้วย age/SSH key และใช้แพตเทิร์น
sops exec-env secrets.yaml -- some command - Mutagen: ซิงก์ไฟล์แบบสองทางเรียลไทม์ ผ่าน SSH — มีประโยชน์มากกับงานบนเครื่องระยะไกล
- forge: ตัวแทน GitHub CLI ที่รองรับ Codeberg และทำงานได้เร็วกว่าเป็นระเบียบกว่า
อื่นๆ / เวิร์กโฟลว์
- Quarto: ทำพรีเซนเทชันได้เร็วด้วย markdown
- Nushell: เชลล์ที่ได้รับอิทธิพลจาก PowerShell ใช้เขียนสคริปต์แปลงข้อมูลขนาดใหญ่ เช่น GeoPackage → PostGIS, PostGIS view → PMTiles ได้อย่างเชื่อถือได้ ข้อเสียคือยังไม่ถึง 1.0 จึงพังได้ทุกครั้งที่อัปเดต
- Typst: ถูกพูดถึงในฐานะตัวแทนของ LaTeX โดยชอบไวยากรณ์แบบ call-by-value
- Topiary: formatter สำหรับหลายภาษา
- Hunk: ตัวดู terminal diff แบบ review-first สำหรับ agentic coder โดยมีแพตเทิร์นเปิดโหมด
--watchไว้ข้างๆ coding agent - Raycast / Alfred: launcher บน macOS รองรับ snippet·clipboard·การค้นหาเว็บแบบใส่พารามิเตอร์
- Ergodox EZ: คีย์บอร์ดที่ใช้มานาน 10 ปี และพอใจทั้งด้านการปรับแต่งและพลังงาน
- Joplin / Fossil: ใช้ self-hosting สำหรับโน้ตและวิกิ
- AeroSpace / Sway: tiling window manager
ข้อความเมตาที่วนซ้ำ
- "เลือกเครื่องมือที่มีค่าเริ่มต้นที่ดีเพื่อหลีกเลี่ยงการตั้งค่าไม่รู้จบ" — Helix, Fish, ripgrep, mise มักถูกยกเป็นตัวอย่างของปรัชญานี้
- มุมมองตรงข้าม: บางคนก็สร้างชุดเครื่องมือของตัวเองจากการ tweak ไม่รู้จบได้สำเร็จ — "ตอนนี้แตะปีละไม่กี่ครั้งเท่านั้น"
- ผลพลอยได้จากยุค AI agent: มีการรับรู้เพิ่มขึ้นว่าเครื่องมืออย่าง jq·Markdown·structured text เอื้อต่อการทำงานร่วมกับ LLM — เช่น Markdown ล้วนของ Obsidian, โหมด watch ของ hunk และคำแนะนำให้เรียนรู้ manual ของ jq ก็อยู่ในกระแสเดียวกัน
- ความได้เปรียบด้านกราฟิกดีบักของ macOS: มีความเห็นว่า GPU profiling ใน XCode Instruments เหนือกว่า Linux/Windows อย่างชัดเจน
- ยุคฟื้นคืนของ CLI vs ตัวอักษรที่อ่านง่าย: แม้เครื่องมือบนเทอร์มินัลจะอุดมสมบูรณ์ขึ้น แต่ผลลัพธ์ยาวๆ จาก LLM/agent ก็ยังอ่านสบายกว่าบนเบราว์เซอร์หรือแอปเฉพาะทางในแง่ typography
8 ความคิดเห็น
ลองใช้มาหลายตัวแล้ว แต่ยังไม่มีตัวไหนที่ถูกใจแบบเป๊ะ ๆ เลย เลยกำลังทำขึ้นมาใช้เองอยู่ อ้างอิงจาก notepad++, VS Code, Zed, Obsidian แล้วดึงมาเฉพาะฟีเจอร์ที่จำเป็นครับ
ช่วงนี้ผมใช้ cmux, tmux และ mux ควบคู่กันอยู่บ่อย ๆ ครับ
พอ ssh เข้าไปยังเซิร์ฟเวอร์ที่เชื่อมไว้ด้วย tailscale ก็จะใช้ fzf แสดงรายการเซสชัน tmux ที่ล็อกอินค้างไว้รวมกัน แล้วเลือกเข้าไปจากตรงนั้นครับ
cmux - เทอร์มินัลสำหรับ macOS บนพื้นฐาน Ghostty สำหรับ AI coding agent
Show GN: mux – ตัวจัดการเซสชัน tmux ที่เปลี่ยน AI coding session ให้เป็น live preview
บน Mac ถ้าจะพิมพ์ภาษาเกาหลีในเทอร์มินัล ปกติต้องกด Enter สองครั้งไม่ใช่เหรอครับ? (หลังประกอบอักษรเกาหลีเสร็จ ต้องกดอีก 2 ครั้งกว่าจะป้อนเข้าไปได้)
มีแค่ wezterm เท่านั้นที่ไม่มีปัญหานี้ เลยย้ายมาใช้ครับ
ชอบ zed
ตอนนี้ฉันกลายเป็นคนที่อยู่ไม่ได้ถ้าไม่มี Claude Code ไปแล้ว + tmux..
ถ้าจะเพิ่มอีกก็คือ vscode เป็นตัวแก้ไขข้อความ..
ไม่งั้นก็ประมาณ IDE จำเป็นอย่าง Visual Studio สำหรับใช้ build..
fzf, jq, rg, awk ❤️
neovim, alacritty, tmux, fzf, rg, obsidian, bat, jq, hurl, lazygit, hammerspoon, chrome, codex, claude,
ความคิดเห็นจาก Lobste.rs
ผมใช้ Helix เป็น text editor สำหรับผมมันสมดุลพอดีระหว่างความสามารถในการปรับแต่งกับประสบการณ์ใช้งานเริ่มต้นที่ยอดเยี่ยม
ด้วยเหตุผลเดียวกัน ผมใช้ Fish เป็น terminal shell ค่าเริ่มต้นมันดีมากอยู่แล้ว และแทบไม่ต้องปรับอะไรเพื่อให้ใช้งานได้อย่างที่ต้องการ
ยิ่งอายุมากขึ้น ผมยิ่งชอบปรับรสนิยมของตัวเองให้เข้ากับเครื่องมือที่มีค่าเริ่มต้นดีแบบตั้งใจ มากกว่าจะไปนั่งจูนไม่รู้จบ
Atuin เหมาะมากสำหรับการซิงก์ประวัติ shell ระหว่างเครื่องรีโมตและการค้นหาประวัติแบบมีบริบทตามไดเรกทอรีปัจจุบันหรือ git repository ฟีเจอร์อื่นก็มี แต่ผมใช้แค่นี้
ผมก็ชอบ Mise ในหลายด้าน แต่ชอบมันที่สุดในฐานะตัวจัดการเวอร์ชันของเครื่องมือ มันมาแทน direnv ที่เคยใช้ และในโปรเจ็กต์ส่วนตัวก็เริ่มเอาไปผสานกับ flow แบบ CI เบา ๆ บ้างแล้ว
ปีหนึ่งมีไม่กี่ครั้ง Emacs ของผมตอนนี้เหมือน กล่องเครื่องมือ Studley ฉบับส่วนตัว
แต่เมื่อไม่กี่เดือนก่อนผมยอมรับ Neovim เต็มตัวแล้ว และปลดระวาง
.vimrcที่ค่อย ๆ เติบโตมาแบบอินทรีย์กว่าสิบปี มันก็แอบเสียดายนิดหน่อย แต่ก็ทำให้ผมอิจฉา Helix น้อยลงMise ก็ดีมาก และแทบไม่ต้องตั้งค่าอะไรเลยจริง ๆ Fish เองผมก็เพิ่งเริ่มใช้เมื่อไม่กี่เดือนก่อน และนอกจาก user function ไม่กี่ตัวก็ใช้ค่าเดิมแทบทั้งหมด
Ripgrep ก็เป็นอีกตัวที่ทำ “สิ่งที่ถูกต้อง” ได้เลยตั้งแต่แรก จนผมไม่แน่ใจด้วยซ้ำว่าเคยลองปรับแต่งมันไหม
Emacs
อาจจะเป็น Stockholm syndrome แต่ของผมคือ Nix มันไม่สมบูรณ์แบบหรอก แต่พอทำงานได้อย่างแสดงออกได้มากขึ้นและมีประสิทธิภาพขึ้นด้วย Nix แล้ว มันก็ทำให้ Linux distro อื่นกับ meta build system อื่น ๆ เสียรสชาติไปเลย
ขอเสริมว่า
pwntoolsก็เป็นเครื่องมือที่สนุกมากแม้นอกโลก CTF เช่น ใช้เล่นกับ socket ระดับบิตจาก Python REPL ก็ยังได้ปกติผมจะเปิด libvirt Ubuntu VM ใหม่ทุกครั้งแล้วติดตั้งเครื่องมือทำงานในนั้น ไม่ทราบว่ามีแนวทางแบบใช้ Nix ที่แนะนำไหม?
แน่นอนว่าต้อง Emacs โดยเฉพาะ Magit
Nix มี learning curve อยู่บ้าง ผมอยู่ใกล้ผู้ใช้ Nix หรือพวกนักเผยแพร่มันมาหลายปี กว่าจะลองจริงจังก็ใช้เวลา แต่สุดท้ายมันดีมาก
พอทำหลายโปรเจ็กต์ ผมเริ่มเบื่อที่เครื่องมือจัดการ dependency ระดับระบบมีหลายตัวกระจัดกระจาย ตัวหนึ่งไว้จัดการเวอร์ชัน Node อีกตัวไว้จัดการเวอร์ชัน Python อะไรทำนองนั้น
และก็เบื่อกับ build failure ที่ debug ยากเพราะความไม่เข้ากันระหว่างโปรเจ็กต์ เช่น
$fooพังใน Project A เลยอัปเดตผ่าน Homebrew แล้วสุดท้าย$fooก็ไปพังใน Project B แทนยังมีความน่าปวดหัวจากกระบวนการ build ที่พึ่ง dependency หลายตัวที่ติดตั้งอยู่ในระบบ ซึ่งมักซ่อนอยู่ ทำให้ build fail แบบ “ไม่รู้ทำไม” อีกด้วย
ผมย้ายทุกอย่างที่ทำได้ไปอยู่ใน nix shell รายโปรเจ็กต์ แพ็กเกจระดับระบบทำให้บางที่สุดเท่าที่จะทำได้ ส่วนในโปรเจ็กต์ก็ pin เครื่องมือที่ต้องใช้ทั้งหมดไว้ ทั้ง dependency, runtime, compiler และอื่น ๆ ให้ตรงเวอร์ชัน
มันไม่ไปทำให้ global PATH หรือโปรเจ็กต์อื่นปนเปื้อน ถ้าตอนนี้มันใช้ได้บนเครื่องผม ผมก็มั่นใจพอสมควรว่ามันจะยังใช้ได้อีกในอีก 1 ปีหรือ 5 ปีข้างหน้า
เวลาจะอัปเกรดเครื่องมือก็ทำได้โดยไม่ต้องกังวลว่าจะกระทบโปรเจ็กต์อื่น และถ้ามี regression ก็ย้อนกลับได้ง่าย หรือจะ pin แค่ dependency ตัวเดียวให้เป็นเวอร์ชันเก่าก็ได้
สำหรับโปรเจ็กต์ที่เพื่อนร่วมทีมใช้ Nix ด้วยก็ยิ่งดี เวลาเพิ่มขึ้นในการตั้งค่าและดูแล nix shell ถูกแชร์กัน และทุกคนก็มั่นใจได้มากขึ้นว่าสภาพแวดล้อมพัฒนาเหมือนกัน
ตัวอย่างเช่น แม้แต่ CLI มาตรฐานยังไม่มีการ implement คำสั่ง
stopเลย ถึงอย่างนั้นถ้าคุณใช้ Docker/containers สำหรับ deployment อยู่แล้ว ข้อดีคือสามารถแชร์การตั้งค่าระหว่างสภาพแวดล้อมพัฒนากับสภาพแวดล้อม deploy ได้เยอะhttps://containers.dev/
https://github.com/devcontainers/cli
rr(https://rr-project.org/) เป็นซอฟต์แวร์ที่ดีราวกับเวทมนตร์จนขาดไม่ได้
rrคืออะไร? ผมเข้าใจคำอธิบายภาพรวมในหน้าแรกของโปรเจ็กต์อยู่แล้วแนวคิดที่ว่าบันทึกความล้มเหลวไว้ครั้งหนึ่ง แล้วกลับมาดีบักบันทึกนั้นแบบกำหนดผลได้ซ้ำ ๆ ก็ดูมีประโยชน์ชัดเจน
แต่ที่ถามถึงประสบการณ์จริงก็เพราะผมยังนึกภาพไม่ออกในระดับว่า “ว้าว บั๊ก/เวิร์กโฟลว์เฉพาะแบบนี้ คงแก้ไม่ได้แน่ถ้าไม่มี rr”
ผมมาจากสายผู้ดูแลระบบ เลยใกล้กับแนว “ใช้ค่าเริ่มต้นที่ดีด้วยการตั้งค่าน้อยที่สุด” มากกว่า แต่ช่วงหลังมีสองอย่างที่ทำให้ผมเปลี่ยนนิสัย
jujutsu(
jj) มีคนพูดถึงบนเว็บนี้เยอะแล้ว แต่พูดตรง ๆ ว่ามันใช้งานสนุกมาก ผมไม่คิดเลยว่าจะเลิกใช้ git CLI ได้ แต่ก็เป็นไปแล้วตลอดหลายปีที่ผ่านมา ผมเลี่ยงการเรียนรู้และตั้งค่า nvim มาโดยตลอด แต่ nvchad ทำให้ผมเริ่มได้ แม้ชื่อจะชวนสยอง แต่สำหรับผมมันเป็นชุดตั้งต้นที่ดีมาก มีความเห็นชัดกำลังพอดีบนฐานของความมินิมอล
แน่นอนว่าตอนนี้ผมก็เขียน minimal config ของตัวเองใหม่ตั้งแต่ต้นแล้ว
นอกนั้นเพราะผมใช้ Python ค่อนข้างเยอะ ก็ต้องบอกว่าเครื่องมือจาก astral ก็ใช้อย่างสม่ำเสมอแล้วรู้สึกดี หวังว่า Anthropic จะดูแลมันดี ๆ
ถ้าคุณไม่ได้ใช้พื้นหลังมืดพร้อมตัวอักษรสไตล์อาเจียนยูนิคอร์นสีรุ้งคอนทราสต์จัดแบบโบราณ ก็ต้องปรับสีและ template กันเยอะหน่อย
ที่จริงคือ Emacs ผมค่อย ๆ ย้ายงานคอมพิวติ้งของตัวเองเข้าไปอยู่ใน Emacs และเริ่มยอมรับค่าเริ่มต้นของมัน
Emacs ปรับแต่งได้ง่ายมากจริง ๆ และ key binding หลายอย่างก็ทำสิ่งที่เหมาะสมในทุกโหมด
รายการที่กำลังค่อย ๆ ย้ายมี Git → Magit, Email → mu4e, RSS → elfeed, Notes/TODO/Calendar → org mode, Finder → dired
Quarto ก็ใช้ทำสไลด์พรีเซนต์จาก Markdown ได้เร็วดีมาก ผมใช้ Nix และ nix-darwin กับ dotfiles ทั้งหมด
Emacs ถึงจะไม่ได้ใช้บ่อย แต่การเขียน parser ด้วย ragel เป็นเรื่องที่เพลิดเพลิน
Sublime Text นี่ชัดเจนเลยว่าถูกประเมินต่ำเกินไปโดยคนจำนวนมาก
น่าจะชื่อประมาณ “vintage” อะไรสักอย่าง ทุกวันนี้ในสถานการณ์ที่เมื่อก่อนผมน่าจะอยากชอบ Sublime Text ผมใช้ Zed แทน