23 คะแนน โดย GN⁺ 2024-10-30 | 6 ความคิดเห็น | แชร์ทาง WhatsApp

Cursor คืออะไร

  • Cursor เป็นฟอร์กของ Visual Studio Code (VS Code) ที่ผสานฟีเจอร์บนพื้นฐาน Large Language Model (LLM) เข้ากับ UI หลัก
  • เป็นผลิตภัณฑ์แบบปิดซอร์ส และมีทั้งแพ็กเกจฟรีกับตัวเลือกแบบสมัครสมาชิก
  • ฟีเจอร์หลัก:
    • การเติมโค้ดอัตโนมัติด้วย Tab: โมเดลปรับแต่งเฉพาะทางแบบปิดที่ใช้สำหรับเติมโค้ดอัตโนมัติ และย้ายไปยังการกระทำถัดไปที่แนะนำ ซึ่งมีให้เฉพาะผู้สมัครสมาชิก
    • การแก้ไขแบบอินไลน์: อินเทอร์เฟซแบบแชตสำหรับผู้ใช้ฟรีและผู้จ่ายเงิน ใช้แก้ไขโค้ดที่เลือกผ่านมุมมอง diff
    • แถบด้านข้างแชต: อินเทอร์เฟซแบบแชตสำหรับผู้ใช้ฟรีและผู้จ่ายเงิน ให้พื้นที่สำหรับการสนทนาที่ยาวขึ้น
    • Composer: อินเทอร์เฟซแบบแชตที่ออกแบบมาสำหรับการรีแฟกเตอร์ครั้งใหญ่ครอบคลุมหลายไฟล์ ใช้ได้ทั้งผู้ใช้ฟรีและผู้จ่ายเงิน

การเติมโค้ดอัตโนมัติด้วย Tab

  • เป็นฟีเจอร์ที่ใช้ได้อย่างเป็นธรรมชาติที่สุดระหว่างการเขียนโค้ด และช่วยประหยัดเวลาได้มากที่สุด
  • ไม่เพียงเสนอการเติมให้ครบสำหรับหนึ่งบรรทัด หลายบรรทัด หรือทั้งฟังก์ชัน แต่ยังเสนอบรรทัดถัดไปที่จะย้ายไปเพื่อการแก้ไขถัดไปด้วย
  • สามารถกดปุ่ม Tab ซ้ำๆ เพื่อเติมการเปลี่ยนแปลงที่เกี่ยวข้องให้ครบโดยอัตโนมัติทั้งไฟล์ได้
  • ใช้เป็นเครื่องมือรีแฟกเตอร์โค้ดได้
  • บางครั้งยังค้นหาบั๊กได้เองและเสนอวิธีแก้ด้วย
  • หากครอบสตริงด้วยเครื่องหมายคำพูด ระบบจะ escape เนื้อหาให้อย่างเหมาะสม
  • สามารถเขียนทั้งฟังก์ชันได้จากเพียงฟังก์ชันซิกเนเจอร์และ docstring ที่เป็นทางเลือก
  • ข้อเสนอการเติมทำงานเร็วมาก
  • ข้อเสีย:
    • หากพิมพ์ต่อไปโดยไม่เห็นข้อเสนอให้ทันเวลา ข้อเสนอการเติมจะหายไป
    • บางครั้งแม้จะตั้งใจปฏิเสธการเติมที่ผิด แต่ถ้าภายหลังยอมรับการเติมอื่น ข้อเสนอที่เคยปฏิเสธอาจถูกนำมาใช้แบบเงียบๆ

การแก้ไขแบบอินไลน์, แถบด้านข้างแชต, Composer

  • การโต้ตอบกับโมเดลพื้นฐาน (ส่วนใหญ่ใช้ Claude 3.5 Sonnet) มีความคล้ายกันมาก โดยต่างกันที่ส่วนติดต่อผู้ใช้
  • การแก้ไขแบบอินไลน์เรียกใช้ได้ด้วย Ctrl-K/Cmd-K จากนั้นพิมพ์สิ่งที่ต้องการเปลี่ยน แล้วจะได้ diff ที่สามารถยอมรับหรือปฏิเสธได้
  • แถบด้านข้างแชตเปิดได้ด้วย Ctrl+L/Cmd+L และให้พื้นที่มากขึ้นสำหรับสนทนาหลายรอบ
  • Composer ออกแบบมาสำหรับการรีแฟกเตอร์ข้ามหลายไฟล์ และมอบประสบการณ์ใช้งานที่ดีกว่าสำหรับการตรวจ diff ของหลายไฟล์ทีละไฟล์

ไฟล์ .cursorrules

  • เนื้อหาในไฟล์ .cursorrules ที่อยู่ที่รากของเวิร์กสเปซจะถูกรวมเข้าไปในรูปแบบแชตต่างๆ เสมอ เพื่อให้บริบทเพิ่มเติม
  • ใช้เพื่อบอก LLM เกี่ยวกับมาตรฐานการเขียนโค้ดของรีโพซิทอรี แพ็กเกจที่ใช้ร่วมกัน และเอกสารอื่นๆ
  • อาจช่วยแก้หนึ่งในอุปสรรคใหญ่ของ Cursor คือปัญหาที่ไม่ทำตามสไตล์และแพตเทิร์นการเขียนโค้ด เว้นแต่สิ่งนั้นจะมีอยู่แล้วในไฟล์ที่กำลังแก้ไข
  • ปัจจุบันมีได้เพียงหนึ่งไฟล์ต่อหนึ่งเวิร์กสเปซ ดังนั้น monorepo ที่มีโค้ดหลายภาษาจึงตั้งค่ายากกว่าระบบเก็บโค้ดขนาดเล็กที่มีชุดโค้ดเล็กและมีสไตล์สม่ำเสมอ
  • ไฟล์ .cursorrules ใช้กับรูปแบบแชตเท่านั้น ไม่ได้ใช้กับการเติมโค้ดอัตโนมัติด้วย Tab

การเปลี่ยนแปลงของเวิร์กโฟลว์

  • สิ่งที่น่าสนใจที่สุดไม่ใช่แค่เขียนโค้ดได้เร็วขึ้น
  • ในความเป็นจริง การเขียนโค้ดเองไม่ใช่คอขวด
  • คุณค่าที่แท้จริงอยู่ที่การเปลี่ยนวิธีเขียนโค้ด
  • สิ่งที่เปลี่ยนไป:
    1. มีแนวโน้มน้อยลงมากที่จะไปค้นหาไลบรารีหรือเฟรมเวิร์กใหม่
      • สำหรับยูทิลิตีขนาดเล็ก การให้ LLM เขียนตามความต้องการเฉพาะมักง่ายกว่าการดึงไลบรารีทั่วไปเข้ามาใช้
      • ไลบรารีจำนวนมากมีอยู่เพียงเพื่อลด boilerplate แต่เมื่อ LLM ทำแทนได้ ต้นทุนของมันก็ดูไม่คุ้มค่าเท่าเดิม
    2. กังวลน้อยลงกับการยึดหลัก DRY (Don't Repeat Yourself) ในโค้ดของตัวเอง
      • การกำหนด abstraction เร็วเกินไปอาจก่อหนี้ทางเทคนิคจำนวนมากในภายหลัง
      • ทำโค้ดจำนวนมากได้โดยอ้างอิงจากโค้ดอื่น โดยไม่ต้องรีบทำเป็นฟังก์ชันหรือคลาส จึงมีความยืดหยุ่นมากขึ้น
    3. มีความเต็มใจมากขึ้นอย่างชัดเจนที่จะใช้ภาษาหรือเฟรมเวิร์กที่ไม่คุ้นเคย
      • ตัวอย่างเช่น เดิมเคยลำบากกับการใช้ R แต่ตอนนี้เพียงอธิบายภาพข้อมูลที่ต้องการ ก็ได้ทั้งการจัดการข้อมูลที่ถูกต้องและภาพข้อมูลด้วย ggplot
    4. กำลังทำซ้ำกับคอมโพเนนต์เล็กๆ อย่างรวดเร็วก่อนรวมเข้าไปในโค้ดเบสที่ใหญ่กว่า
      • นี่เป็นทั้งวิธีรับมือกับข้อจำกัดของ LLM และยังเปิดวิธีทำงานที่น่าสนใจซึ่งก่อนหน้านี้ไม่เคยนึกถึง

สรุป

  • ณ ตอนนี้ Cursor เป็นตัวอย่างที่ดีที่สุดในการแสดงศักยภาพของผู้ช่วยเขียนโค้ดด้วย LLM
  • หากอยากสำรวจว่าเครื่องมือประเภทนี้จะมีคุณค่าอย่างไร การลองใช้ Cursor ก็น่าจะเป็นความคิดที่ดี

ความเห็นของ GN⁺

  • Cursor ดูเป็นกรณีตัวอย่างที่ดีที่แสดงศักยภาพของเครื่องมือเขียนโค้ดบนพื้นฐาน LLM
    • โดยเฉพาะฟีเจอร์เติมโค้ดอัตโนมัติด้วย Tab ที่ใช้งานได้อย่างเป็นธรรมชาติระหว่างเขียนโค้ดและช่วยประหยัดเวลาได้มาก จึงน่าสนใจมาก
    • ฟีเจอร์แบบแชตก็ดูจะมีประโยชน์กับงานอย่างการรีแฟกเตอร์หรือการแปลงโค้ด
  • อย่างไรก็ตาม เนื่องจากยังอยู่ในระยะเริ่มต้น จึงดูเหมือนยังมีข้อจำกัดอยู่
    • การทำให้สไตล์การเขียนโค้ดสม่ำเสมอทำได้ยาก
    • ปัญหาด้านการใช้งานกับโครงสร้างโปรเจ็กต์ที่ซับซ้อน เช่น monorepo
    • ความแตกต่างของฟีเจอร์ระหว่างผู้ใช้ฟรีกับผู้จ่ายเงินยังไม่ชัดเจน เป็นต้น
  • เครื่องมืออื่นที่มีฟีเจอร์คล้ายกัน ได้แก่ GitHub Copilot, Tabnine และ Kite
    • แต่ละเครื่องมือมีข้อดีข้อเสียต่างกัน จึงควรเลือกตามลักษณะของโปรเจ็กต์หรือความชอบส่วนบุคคล
  • เมื่อนำเครื่องมือเขียนโค้ดบนพื้นฐาน LLM มาใช้ ก็ควรพิจารณาประเด็นต่อไปนี้
    • การยอมรับของทีมพัฒนา: มีแรงต้านต่อการนำเครื่องมือใหม่มาใช้หรือไม่
    • ต้นทุนการเรียนรู้: ต้องใช้เวลามากแค่ไหนในการทำความคุ้นเคยกับวิธีใช้เครื่องมือ
    • ความสามารถในการบำรุงรักษา: เข้าใจและบำรุงรักษาโค้ดที่เครื่องมือสร้างได้ง่ายหรือไม่
    • คุณภาพโค้ด: ช่วยยกระดับคุณภาพโค้ดจริงหรือไม่
    • ความคุ้มค่าต่อค่าใช้จ่าย: ผลด้านผลิตภาพที่เพิ่มขึ้นคุ้มกับต้นทุนในการนำมาใช้และดูแลรักษาหรือไม่

6 ความคิดเห็น

 
yangeok 2024-11-08

คีย์สำคัญคือ Cursor chat ครับ/ค่ะ มันสะดวกมากตรงที่ช่วยสร้าง docstring ให้ได้

 
roxie 2024-11-04

พอลองใช้ cursor แล้วก็รู้สึกว่าการเติมโค้ดอัตโนมัติของ copilot ช้าไปเลย ฮือฮือ

 
yangeok 2024-10-30

การเติมข้อความอัตโนมัติด้วยแท็บใช้ได้เฉพาะคนที่จ่ายเงินเท่านั้นเหรอ?

 
angelkum 2024-10-31

จริงอยู่ว่าใช้ได้เฉพาะผู้สมัครสมาชิก แต่มีแพ็กเกจสมัครสมาชิกฟรี และให้การเติมโค้ดอัตโนมัติ 2,000 ครั้งต่อเดือน ผมใช้แบบนั้นมา 3 เดือนแล้ว
https://www.cursor.com/pricing

 
savvykang 2024-10-31

การเติมข้อความอัตโนมัติด้วย Tab: การเติมโค้ดอัตโนมัติที่มีให้เฉพาะผู้สมัครสมาชิก

ครับ

 
rlahfl 2024-10-31

เขียนไว้ในบทความแล้ว 555