Topic 18 Editing ที่ทรงพลัง

เราเคยพูดถึงเรื่องที่เครื่องมือเป็นเหมือนส่วนต่อขยายของมือคุณมาก่อนแล้ว และเรื่องนี้ก็เป็นจริงกับ Editor มากกว่า Software Tool ตัวอื่นใด คุณจำเป็นต้อง Manipulate Text ได้อย่างง่ายดายที่สุดเท่าที่จะทำได้ เพราะ Text คือวัตถุดิบพื้นฐานของการเขียนโปรแกรม

ในฉบับพิมพ์ครั้งแรกของหนังสือเล่มนี้ เราแนะนำให้ใช้ Editor ตัวเดียวสำหรับทุกอย่าง ไม่ว่าจะเป็นโค้ด เอกสาร บันทึกช่วยจำ หรืองาน System Administration ต่าง ๆ แต่ตอนนี้เราผ่อนปรนจุดยืนนั้นลงมาบ้าง เราไม่ว่าอะไรถ้าคุณจะใช้ Editor กี่ตัวก็ได้ตามใจชอบ ขอแค่คุณฝึกฝนจนคล่องแคล่วกับ Editor แต่ละตัวที่ใช้ก็พอ

Tip 27 ฝึกฝนจนใช้ Editor ได้อย่างคล่องแคล่ว

ทำไมเรื่องนี้ถึงสำคัญนัก? เรากำลังจะบอกว่าคุณจะประหยัดเวลาได้เยอะเลยเหรอ? จริง ๆ แล้วใช่ครับ: ตลอดทั้งปี คุณอาจได้เวลาเพิ่มขึ้นถึงหนึ่งสัปดาห์เต็ม ๆ ถ้าคุณทำให้การ Editing ของคุณมีประสิทธิภาพขึ้นแค่ 4% และคุณ Edit อยู่ประมาณ 20 ชั่วโมงต่อสัปดาห์

แต่นั่นไม่ใช่ประโยชน์ที่แท้จริงหรอกครับ ประโยชน์หลัก ๆ จริง ๆ คือเมื่อคุณคล่องแคล่วแล้ว คุณจะไม่ต้องมานั่งคิดเรื่องกลไกของการ Edit อีกต่อไป ระยะห่างระหว่างการคิดอะไรบางอย่างกับการที่มันปรากฏขึ้นใน Buffer ของ Editor จะลดลงอย่างมาก ความคิดของคุณจะไหลลื่น และการเขียนโปรแกรมของคุณก็จะได้ประโยชน์ตามไปด้วย (ถ้าคุณเคยสอนใครขับรถมาก่อน คุณจะเข้าใจความแตกต่างระหว่างคนที่ต้องคิดทุกการกระทำที่ทำ กับคนขับที่มีประสบการณ์ซึ่งควบคุมรถได้แบบสัญชาตญาณ)

What Does “Fluent” Mean? (“คล่องแคล่ว” หมายความว่าอย่างไร?)

อะไรที่นับว่าเป็น “ความคล่องแคล่ว”? นี่คือรายการท้าทายที่จะบอกคุณ:

  • เมื่อแก้ไข Text เคลื่อนตำแหน่งเคอร์เซอร์และเลือกข้อความได้ทีละตัวอักษร คำ บรรทัด และย่อหน้า

  • เมื่อแก้ไขโค้ด เคลื่อนตำแหน่งไปตาม Syntactic Unit ต่าง ๆ (เช่น Delimiter ที่จับคู่กัน, Function, Module, …)

  • จัดเยื้อง (Reindent) โค้ดใหม่หลังจากมีการแก้ไข

  • Comment และ Uncomment บล็อกโค้ดได้ด้วยคำสั่งเดียว

  • Undo และ Redo การเปลี่ยนแปลงได้

  • แบ่งหน้าต่าง Editor ออกเป็นหลาย Panel และสลับไปมาระหว่าง Panel เหล่านั้นได้

  • ไปยังเลขบรรทัดที่ต้องการได้โดยตรง

  • เรียงลำดับบรรทัดที่เลือกไว้

  • ค้นหาได้ทั้งแบบ String ทั่วไปและ Regular Expression พร้อมทั้งค้นหาซ้ำครั้งก่อนหน้าได้

  • สร้าง Cursor หลายตัวชั่วคราวจากการเลือกข้อความหรือจากการจับคู่ Pattern แล้วแก้ไข Text ที่ตำแหน่งเหล่านั้นไปพร้อม ๆ กันได้

  • แสดง Error จากการ Compile โปรเจกต์ปัจจุบัน

  • รัน Test ของโปรเจกต์ปัจจุบัน

คุณทำทั้งหมดนี้ได้โดยไม่ต้องใช้ Mouse หรือ Trackpad เลยไหม?

คุณอาจจะบอกว่า Editor ที่ใช้อยู่ตอนนี้ทำบางอย่างในนี้ไม่ได้ ถ้าอย่างนั้นบางทีอาจถึงเวลาเปลี่ยนแล้วก็ได้นะครับ?

Moving Toward Fluency (ก้าวสู่ความคล่องแคล่ว)

เราค่อนข้างมั่นใจว่าคงมีคนไม่กี่คนเท่านั้นที่รู้จักคำสั่ง ทุก ตัวใน Editor ทรงพลังสักตัวหนึ่ง และเราก็ไม่ได้คาดหวังให้คุณเป็นแบบนั้นเช่นกัน แทนที่จะทำแบบนั้น เราขอแนะนำวิธีที่ Pragmatic กว่า: เรียนรู้แค่คำสั่งที่ช่วยให้ชีวิตคุณง่ายขึ้นก็พอ

สูตรสำหรับเรื่องนี้ค่อนข้างง่ายครับ

ก่อนอื่น ให้สังเกตตัวเองขณะที่กำลัง Edit ทุกครั้งที่คุณพบว่าตัวเองกำลังทำอะไรซ้ำ ๆ ให้ฝึกนิสัยคิดว่า “ต้องมีวิธีที่ดีกว่านี้แน่ ๆ” แล้วก็ไปหามันมาให้เจอ

เมื่อคุณค้นพบ Feature ใหม่ที่มีประโยชน์แล้ว สิ่งที่ต้องทำต่อไปคือฝัง Feature นั้นเข้าไปใน Muscle Memory ของคุณ เพื่อให้คุณใช้มันได้โดยไม่ต้องคิด วิธีเดียวที่เรารู้ว่าทำได้คือการทำซ้ำ ๆ ตั้งใจมองหาโอกาสที่จะใช้ Superpower ใหม่นี้ ยิ่งบ่อยต่อวันยิ่งดี หลังจากผ่านไปสักสัปดาห์หนึ่ง คุณจะพบว่าคุณใช้มันได้โดยอัตโนมัติโดยไม่ต้องคิดเลย

Growing Your Editor (ต่อยอด Editor ของคุณ)

Code Editor ทรงพลังส่วนใหญ่ถูกสร้างขึ้นจาก Core พื้นฐาน แล้วค่อยเสริมความสามารถด้วย Extension ต่าง ๆ บาง Extension มาพร้อมกับ Editor อยู่แล้ว ส่วนบางตัวก็สามารถติดตั้งเพิ่มทีหลังได้

เมื่อคุณเจอข้อจำกัดบางอย่างของ Editor ที่ใช้อยู่ ลองค้นหา Extension ที่ทำงานนั้นให้คุณได้ดู เพราะมีโอกาสสูงที่คุณจะไม่ใช่คนเดียวที่ต้องการความสามารถนั้น และถ้าโชคดี อาจมีคนอื่นเผยแพร่วิธีแก้ปัญหาของเขาไว้ให้แล้วก็ได้

ลองก้าวไปอีกขั้นหนึ่ง เจาะลึกเข้าไปใน Extension Language ของ Editor คุณ หาวิธีใช้มัน Automate งานซ้ำ ๆ ที่คุณทำอยู่ บ่อยครั้งคุณอาจต้องใช้โค้ดแค่หนึ่งหรือสองบรรทัดเท่านั้น

บางครั้งคุณอาจไปไกลกว่านั้นอีก จนพบว่าตัวเองกำลังเขียน Extension เต็มรูปแบบขึ้นมาเอง ถ้าเป็นแบบนั้น ก็เผยแพร่มันออกไปเลยครับ: ถ้าคุณเคยต้องการมัน คนอื่นก็ต้องการเหมือนกัน

Related Sections Include (หัวข้อที่เกี่ยวข้อง)

  • Topic 7, ​ Communicate! ​

Challenges (ความท้าทาย)

  • เลิกใช้ Autorepeat กันเถอะ

    ทุกคนทำแบบนี้กันหมด: เวลาคุณต้องการลบคำสุดท้ายที่เพิ่งพิมพ์ไป คุณก็กดปุ่ม Backspace ค้างไว้แล้วรอให้ Autorepeat เริ่มทำงาน อันที่จริงเราค่อนข้างมั่นใจว่าสมองของคุณทำแบบนี้มาบ่อยจนคุณสามารถกะเวลาปล่อยปุ่มได้เป๊ะ ๆ เลยแหละ

    ดังนั้นปิด Autorepeat ซะ แล้วหันมาเรียนรู้ชุดปุ่มลัดสำหรับเคลื่อนตำแหน่ง เลือก และลบทีละตัวอักษร คำ บรรทัด และบล็อกแทน

  • อันนี้อาจจะเจ็บหน่อยนะครับ

    ลองเลิกใช้ Mouse หรือ Trackpad ดู เป็นเวลาหนึ่งสัปดาห์เต็ม ๆ ให้ Edit โดยใช้แค่ Keyboard เท่านั้น คุณจะค้นพบว่ามีหลายอย่างที่ทำไม่ได้ถ้าไม่ชี้แล้วคลิก นี่แหละคือเวลาที่ต้องเรียนรู้มัน จดบันทึก (เราแนะนำให้ใช้วิธีเก่า ๆ อย่างดินสอกับกระดาษ) ชุดปุ่มลัดที่คุณเรียนรู้ไว้ด้วย

    Productivity ของคุณอาจจะตกลงไปสักสองสามวัน แต่พอคุณเรียนรู้ที่จะทำสิ่งต่าง ๆ โดยไม่ต้องขยับมือออกจากตำแหน่ง Home Row คุณจะพบว่าการ Edit ของคุณเร็วขึ้นและคล่องแคล่วกว่าที่เคยเป็นมาในอดีตครับ

  • มองหา Integration ต่าง ๆ ตอนที่กำลังเขียน Chapter นี้ Dave สงสัยว่าเขาจะสามารถ Preview Layout สุดท้าย (ไฟล์ PDF) ใน Buffer ของ Editor ได้ไหม แค่ดาวน์โหลดครั้งเดียว Layout ก็มาอยู่เคียงข้าง Text ต้นฉบับ ทั้งหมดอยู่ใน Editor เดียวกันเลย ลองจดรายการสิ่งที่คุณอยากดึงเข้ามาใน Editor ของคุณไว้ แล้วค่อยไปหามาใช้

  • หรือถ้าอยากทำอะไรที่ท้าทายขึ้นอีกหน่อย ถ้าคุณหา Plugin หรือ Extension ที่ทำในสิ่งที่คุณต้องการไม่เจอ ก็ลองเขียนขึ้นมาเองเลย Andy เองก็ชอบทำ Plugin สำหรับ Wiki แบบ Local File ขึ้นมาเองให้กับ Editor คนโปรดของเขา ถ้าหาไม่เจอ ก็สร้างมันขึ้นมาเองสิครับ!