Cách viết mã với Cursor
(arguingwithalgorithms.com)Cursor là gì
- Cursor là một nhánh fork của Visual Studio Code (VS Code), với các tính năng dựa trên Large Language Model (LLM) được tích hợp vào giao diện lõi
- Đây là một sản phẩm độc quyền, có gói miễn phí và các tùy chọn đăng ký trả phí
- Các tính năng chính:
- Tự động hoàn thành bằng Tab: mô hình tinh chỉnh độc quyền cho phép tự động hoàn thành mã và chuyển sang hành động được gợi ý tiếp theo, chỉ dành cho người đăng ký
- Chỉnh sửa nội tuyến: giao diện dựa trên trò chuyện cho cả người dùng miễn phí và trả phí, cho phép chỉnh sửa đoạn mã đã chọn bằng chế độ xem diff
- Thanh bên trò chuyện: giao diện dựa trên trò chuyện cho cả người dùng miễn phí và trả phí, cung cấp không gian cho các thảo luận dài hơn
- Composer: giao diện dựa trên trò chuyện được thiết kế cho các đợt tái cấu trúc lớn trên nhiều tệp, khả dụng cho cả người dùng miễn phí và trả phí
Tự động hoàn thành bằng Tab
- Đây là tính năng tự nhiên nhất khi dùng trong lúc viết mã và cũng giúp tiết kiệm thời gian nhiều nhất
- Không chỉ gợi ý hoàn thành cho một dòng, nhiều dòng hoặc cả một hàm mà còn gợi ý dòng tiếp theo cần chuyển đến để thực hiện lần chỉnh sửa kế tiếp
- Có thể nhấn phím Tab lặp lại để tự động hoàn thành các thay đổi liên quan trên toàn bộ tệp
- Có thể dùng như một công cụ tái cấu trúc mã
- Đôi khi nó còn tự tìm ra lỗi và đề xuất bản sửa
- Khi đặt chuỗi trong dấu ngoặc kép, nó sẽ escape nội dung phù hợp
- Chỉ với chữ ký hàm và docstring tùy chọn, nó có thể viết ra cả một hàm hoàn chỉnh
- Các gợi ý hoàn thành xuất hiện rất nhanh
- Nhược điểm:
- Nếu không kịp nhìn thấy gợi ý mà tiếp tục gõ, đề xuất hoàn thành sẽ biến mất
- Có những lúc đã cố ý từ chối một phần hoàn thành sai, nhưng sau đó khi chấp nhận một phần hoàn thành khác thì gợi ý trước đó đã bị từ chối lại âm thầm được áp dụng
Chỉnh sửa nội tuyến, thanh bên trò chuyện và Composer
- Cách tương tác với mô hình nền tảng (chủ yếu dùng Claude 3.5 Sonnet) rất giống nhau, điểm khác biệt nằm ở giao diện người dùng
- Chỉnh sửa nội tuyến được gọi bằng Ctrl-K/Cmd-K, sau khi nhập thay đổi mong muốn thì sẽ nhận được diff để chấp nhận hoặc từ chối
- Thanh bên trò chuyện mở bằng Ctrl+L/Cmd+L và cung cấp nhiều không gian hơn để trao đổi nhiều lượt
- Composer được thiết kế cho việc tái cấu trúc trên nhiều tệp và mang lại trải nghiệm tốt hơn khi xem xét diff của nhiều tệp, từng tệp một
Tệp .cursorrules
- Nội dung của tệp .cursorrules nằm ở thư mục gốc của workspace luôn được đưa vào nhiều dạng trò chuyện khác nhau để cung cấp thêm ngữ cảnh
- Nó được dùng để thông báo cho LLM về tiêu chuẩn mã hóa của kho lưu trữ, các gói phổ biến và các tài liệu khác
- Nó có thể giúp giải quyết một trong những trở ngại lớn của Cursor: không tuân theo phong cách và mẫu mã hóa trừ khi chúng đã tồn tại sẵn trong tệp đang được chỉnh sửa
- Hiện tại chỉ có một tệp cho mỗi workspace, vì vậy các monorepo chứa mã bằng nhiều ngôn ngữ sẽ khó thiết lập hơn so với các kho nhỏ có tập mã nhỏ gọn và phong cách nhất quán
- Tệp .cursorrules chỉ được dùng cho các biểu mẫu trò chuyện, không dùng cho tự động hoàn thành bằng Tab
Thay đổi trong quy trình làm việc
- Điều thú vị nhất không phải là có thể viết mã nhanh hơn
- Trên thực tế, bản thân việc viết mã không phải là nút thắt cổ chai
- Giá trị thực sự nằm ở việc nó thay đổi cách viết mã
- Những thay đổi gồm:
- Khả năng đi tìm thư viện hoặc framework mới giảm đi rất nhiều
- Với các utility nhỏ, để LLM viết theo đúng nhu cầu tùy biến còn dễ hơn là mang vào một thư viện dùng chung
- Nhiều thư viện tồn tại chỉ để giảm boilerplate, nhưng giờ LLM có thể làm thay nên cái giá phải trả không còn đáng như trước
- Ít lo lắng hơn về việc bám chặt nguyên tắc DRY (Don't Repeat Yourself) trong mã của chính mình
- Việc định nghĩa abstraction quá sớm có thể tạo ra rất nhiều technical debt về sau
- Có thể tạo ra nhiều mã bằng cách tham chiếu mã khác mà không cần cố gắng biến nó thành hàm hay lớp, nên độ linh hoạt cao hơn
- Sẵn sàng hơn rất nhiều trong việc dùng các ngôn ngữ hoặc framework ít quen thuộc
- Ví dụ trước đây gặp khó khi dùng R, nhưng giờ chỉ cần mô tả loại trực quan hóa mong muốn là có thể nhận được phần xử lý dữ liệu đúng cùng trực quan hóa ggplot
- Đang lặp thử các thành phần nhỏ nhanh hơn trước khi tích hợp vào codebase lớn hơn
- Đây vừa là cách để xử lý các giới hạn của LLM, vừa mở ra những cách làm việc thú vị mà trước đây chưa từng cân nhắc
- Khả năng đi tìm thư viện hoặc framework mới giảm đi rất nhiều
Tóm tắt
- Ở thời điểm hiện tại, Cursor là ví dụ tốt nhất cho thấy tiềm năng của các coding assistant dùng LLM
- Nếu muốn khám phá xem loại công cụ này có thể mang lại giá trị như thế nào thì nên thử dùng Cursor
Ý kiến của GN⁺
- Cursor có vẻ là một ví dụ tốt cho thấy tiềm năng của công cụ viết mã dựa trên LLM
- Đặc biệt, tính năng tự động hoàn thành bằng Tab rất hấp dẫn vì có thể dùng tự nhiên khi viết mã và giúp tiết kiệm nhiều thời gian
- Các tính năng dựa trên trò chuyện cũng có vẻ hữu ích cho tái cấu trúc hoặc chuyển đổi mã
- Tuy vậy, vì vẫn còn ở giai đoạn đầu nên dường như vẫn có những giới hạn
- Khó áp dụng phong cách mã hóa nhất quán
- Vấn đề về khả năng sử dụng trong các cấu trúc dự án phức tạp như monorepo
- Sự khác biệt về tính năng giữa người dùng miễn phí và người dùng trả phí chưa thật sự rõ ràng
- Các công cụ khác cung cấp tính năng tương tự gồm có GitHub Copilot, Tabnine, Kite, v.v.
- Mỗi công cụ đều có ưu và nhược điểm riêng, nên sẽ tốt hơn nếu lựa chọn theo đặc thù dự án hoặc sở thích cá nhân
- Khi triển khai công cụ viết mã dựa trên LLM, có thể cân nhắc các điểm sau
- Mức độ chấp nhận của đội ngũ phát triển: liệu có sự e ngại với việc đưa công cụ mới vào hay không
- Chi phí học tập: sẽ mất bao lâu để làm quen với cách dùng công cụ
- Khả năng bảo trì: mã do công cụ tạo ra có dễ hiểu và dễ bảo trì hay không
- Chất lượng mã: liệu nó có thực sự giúp cải thiện chất lượng mã hay không
- Hiệu quả so với chi phí: mức tăng năng suất có đủ bù cho chi phí triển khai và duy trì hay không
6 bình luận
Chat của Cursor là chìa khóa. Mình thấy tính năng tạo docstring khá tiện.
Dùng thử Cursor rồi mới thấy tính năng tự động hoàn thành của Copilot có vẻ chậm quá. hu hu
Tự động hoàn thành bằng phím Tab chỉ dành cho người dùng trả phí thôi à?
Đúng là chỉ dành cho người đăng ký, nhưng có gói đăng ký miễn phí và cung cấp 2000 lượt tự động hoàn thành mỗi tháng. Tôi đã dùng như vậy suốt 3 tháng nay.
https://www.cursor.com/pricing
Vâng
Bài viết có ghi đó rồi mà haha