Do Not Be Misled by ‘Build an App in 5 Minutes’: In-Depth Practice with Cursor

  tr_cn        2024-12-17 21:30:22       15,426        0          English  简体中文  Tiếng Việt 

Vào tháng Tám năm nay, tôi đã thử nghiệm Cursor và thực sự ấn tượng, thúc đẩy tôi viết một bài viết giới thiệu về nó. Ngay sau đó, tôi đã chuyển hoàn toàn môi trường làm việc hàng ngày của mình từ GitHub Copilot + JetBrains sang phiên bản trả phí của Cursor. Sau vài tháng sử dụng, nó đã cảm thấy vô cùng mượt mà.

Trong khi tự mình sử dụng nó, tôi thường xuyên giới thiệu Cursor cho đồng nghiệp và bạn bè. Tuy nhiên, nhiều người trong số họ vẫn còn câu hỏi, chẳng hạn như:

  • Ưu điểm của nó so với ChatGPT hoặc Claude bản địa là gì? Sức mạnh của Cursor chủ yếu là do Claude Sonnet 3.5?
  • Nó khác với GitHub Copilot như thế nào? Tại sao nó lại đắt gấp đôi?
  • Cursor chỉ phù hợp để nhanh chóng tạo các bản demo nhỏ từ đầu?
  • Codeium gần đây đã ra mắt Windsurf, có vẻ mượt mà hơn dựa trên một số video của blogger. Tôi có nên chuyển sang đó không?
  • Coding Copilot chỉ hữu ích cho người mới bắt đầu?
  • Giữa làn sóng AI Copilot, làm thế nào chúng ta có thể tiếp tục cải thiện kỹ năng lập trình của mình? Hay cuối cùng chúng ta sẽ bị thay thế hoàn toàn bởi các agent?

Đây là những câu hỏi phổ biến. Tôi thấy rằng cách tốt nhất để giải quyết chúng là thông qua các bản trình diễn lập trình trực tiếp. Vào Ngày Lập trình viên (24 tháng 10), tôi đã trình bày nội bộ tại công ty mình, giới thiệu những ưu điểm và kỹ thuật sử dụng của Cursor thông qua các bản trình diễn thực hành. Tuy nhiên, vì tôi đã sử dụng mã nội bộ của công ty trong buổi thuyết trình đó, nên nó không phù hợp để chia sẻ trực tiếp.

Trong bài viết này, tôi đã điều chỉnh một chút nội dung để chia sẻ một số điểm hấp dẫn và những hiểu biết thực tế về Cursor và các AI coding copilots với nhiều người đọc hơn.

Giới thiệu và định vị Cursor

Cursor là một công ty được thành lập vào năm 2022 bởi một nhóm sinh viên MIT trẻ tuổi. Vào thời điểm đó, GitHub Copilot đã có một sự hiện diện đáng kể trên thị trường. Khi sản phẩm của Cursor được ra mắt ban đầu, tôi đã thử nghiệm ngắn gọn và thấy nó khá cơ bản — nó có vẻ giống như việc tích hợp quá trình trò chuyện với ChatGPT/Claude để tạo mã trực tiếp vào VSCode. Không có gì đột phá đặc biệt.

Tuy nhiên, sự phát triển tiếp theo của nó đã vượt quá mong đợi của hầu hết mọi người. Hãy cùng xem xét bối cảnh thị trường vào thời điểm đó:

  • Đối với các nhà phát triển chuyên nghiệp, GitHub Copilot có một lợi thế rõ ràng. Nó gần như đơn độc xác nhận sự phù hợp giữa sản phẩm và thị trường (PMF) cho các coding copilots và đạt được 100 triệu đô la doanh thu hàng năm (ARR). Với cả GitHub và VSCode đều thuộc quyền sở hữu của Microsoft, và GPT-3.5 và Codex của OpenAI — các mô hình mã hàng đầu vào thời điểm đó — hợp tác chặt chẽ với Microsoft, GitHub Copilot đã có một lợi thế vượt trội.
  • Đối với những người không phải lập trình viên, các sản phẩm như ChatGPT, Claude hoặc Replit chiếm ưu thế ở các điểm vào lưu lượng truy cập lớn nhất. Đối với các tác vụ một lần hoặc các dự án demo, các công cụ này là hơn đủ. Không có lợi thế rõ ràng nào khi di chuyển các khả năng này vào VSCode.

Vậy tại sao Cursor lại có sự táo bạo để tái thiết kế IDE của Microsoft và sử dụng các mô hình OpenAI, vốn đã được tích hợp chặt chẽ với Microsoft, để cạnh tranh với những người chơi lớn này?

Sau trải nghiệm cá nhân của tôi với Cursor và xem xét các cuộc phỏng vấn với nhóm sáng lập của nó, điều rõ ràng là Cursor đã xác định một số điểm vào sắc nét và khác biệt:

  • Tập trung của Cursor là rõ ràng: các nhà phát triển chuyên nghiệp. Họ không nhằm mục đích cạnh tranh với các công cụ như ChatGPT, v0 hoặc Bolt. Trên thực tế, tầm nhìn đằng sau Cursor và các công cụ này có thể hoàn toàn khác nhau (ví dụ: cuộc tranh luận về việc các lập trình viên sẽ vẫn tồn tại trong tương lai hay không). Nếu người dùng không thể phân biệt sự khác biệt giữa các công cụ này, thì họ có thể không phải là đối tượng mục tiêu của Cursor.
  • Hiểu biết quan trọng của họ: lập trình không chỉ là “hoàn thành”, mà còn là “chỉnh sửa”. Điều này có nghĩa là bao gồm cả việc xóa và hoàn thành. Mặc dù điều này có vẻ hiển nhiên bây giờ, nhưng vào thời điểm đó, tất cả các coding copilots chỉ cung cấp khả năng tự động hoàn thành đơn giản. Ngay cả ngày nay, trải nghiệm “Tab” của Cursor vẫn nổi bật là độc đáo, mặc dù Windsurf đã bắt đầu bắt chước nó.
  • Mở rộng khái niệm chỉnh sửa: Cursor mở rộng ý tưởng này bằng cách tạo mã trong giao diện trò chuyện và sau đó áp dụng nó để tạo các chỉnh sửa trên toàn bộ tệp hoặc thậm chí nhiều tệp bằng cách sử dụng diff. Luồng công việc này cho thấy sự hiểu biết sâu sắc của họ về nhu cầu của các nhà phát triển.
  • Lặp lại nhanh chóng so với quán tính của các công ty lớn: Trong khi các mô hình lớn như GPT đã phát triển từ phiên bản 3 lên 3.5 lên 4, trải nghiệm người dùng của GitHub Copilot không thay đổi nhiều. Các công ty lớn thường phải đối mặt với chu kỳ lặp lại sản phẩm chậm hơn, và nhóm Cursor nhận ra rằng họ có thể di chuyển nhanh hơn để khám phá và khai thác hết tiềm năng của những tiến bộ về mô hình.

Những chiến lược này đáng để học hỏi. Bằng cách có một trọng tâm rõ ràng, hiểu sâu sắc về quy trình làm việc của nhà phát triển và lặp lại nhanh chóng, ngay cả một nhóm nhỏ như Cursor cũng đã có thể thách thức một gã khổng lồ như GitHub Copilot.

Luồng công việc của Cursor

Như đã đề cập trước đó, Cursor được định vị cho các nhà phát triển chuyên nghiệp. Hãy làm rõ hơn các trường hợp mà nó thêm nhiều giá trị nhất và cách nó khác với các công cụ khác:

  • Có lợi cho cả nhà phát triển mới bắt đầu và có kinh nghiệm. Cho dù bạn là người mới bắt đầu hay là một lập trình viên kỳ cựu, Cursor đều có thể nâng cao đáng kể quy trình làm việc của bạn. Các nhà phát triển giàu kinh nghiệm, đặc biệt, không nên bỏ qua tiềm năng của mô hình mới này do quá tự tin vào kỹ năng của họ.
  • Được tối ưu hóa để duy trì các dự án hiện có. Hầu hết các nhà phát triển chuyên nghiệp dành phần lớn thời gian của họ để duy trì và lặp lại các dự án trung bình đến lớn hiện có hơn là tạo các dự án mới từ đầu mỗi ngày. Nhiều hướng dẫn trực tuyến tập trung vào “xây dựng một ứng dụng từ đầu” không thể hiện các quy trình làm việc điển hình và không làm nổi bật sự khác biệt giữa Cursor và các công cụ như Claude Canvas.
  • Hạn chế của mô hình hiện tại. Các mô hình hiện nay vẫn chưa có khả năng hoàn thành toàn bộ một tính năng trong một dự án lớn chỉ với một vài hướng dẫn. Quá phụ thuộc vào phát triển dựa trên trò chuyện có thể dẫn đến tỷ lệ thành công thấp hơn. Một cách tiếp cận tốt hơn là coi Cursor như một “cộng sự lập trình” hơn là một “lập trình viên thực tập”

Cursor trong quy trình làm việc thực tế

Hãy cùng khám phá cách các tính năng của Cursor có thể nâng cao năng suất trong các tác vụ hàng ngày:

Cursor Tab

Cursor Tab hiện là tính năng nổi bật nhất của nó. Về bản chất, nó dự đoán phần mã tiếp theo mà bạn có thể sẽ chỉnh sửa và tự động hoàn thành nó cho bạn. Hãy xem xét một vài trường hợp:

Trường hợp 1: Thay đổi print thành logger

Vào một buổi sáng đầy nắng, bạn đang làm việc với cộng sự lập trình của mình để sửa đổi một số mã. Bạn có thể nói với cộng sự của mình rằng trong quá trình phát triển nguyên mẫu, có rất nhiều câu lệnh print trong tệp này. Bây giờ dự án đã sẵn sàng cho sản xuất, chúng ta nên thay đổi tất cả chúng thành đầu ra logger. Bạn cũng có thể cần đảm bảo rằng các loại thông tin khác nhau được ghi nhật ký với mức độ ghi nhật ký phù hợp.

Bạn chắc chắn có thể gọi cửa sổ trò chuyện trong Cursor bằng cách nhấn CMD + L, nhập toàn bộ yêu cầu và chờ Cursor tạo diff cho toàn bộ tệp. Tuy nhiên, yêu cầu này cũng có thể được thể hiện một cách ngầm định bằng cách viết mã. Ví dụ: bạn có thể trực tiếp thêm những điều sau vào tệp:

import logging

logger = logging.getLogger(__name__)

# existing code omitted...

Sau đó, bạn chỉ cần sửa đổi câu lệnh print đầu tiên, và cộng sự lập trình của bạn, Cursor, sẽ hiểu ý định của bạn. Từ đó, chỉ cần nhấn tab, tab, tab, bạn sẽ ngạc nhiên khi thấy rằng Cursor “đoán” tất cả các vị trí bạn muốn sửa đổi và đặt mức độ ghi nhật ký chính xác một cách thông minh.

Hãy lưu ý cách tiếp cận này nhanh hơn bao nhiêu so với việc nhập toàn bộ yêu cầu trong cửa sổ trò chuyện. Có lẽ nó nhanh hơn và nó bỏ qua các bước áp dụng + xem xét + chấp nhận tiếp theo. Rất thường xuyên, điều đáng xem xét là liệu việc thể hiện một số ý định thông qua mã ví dụ hay các nhận xét đơn giản có thể nhanh hơn không.

Trường hợp 2: Thêm tham số hàm

Đây là một trường hợp phổ biến khác. Thay vì sử dụng ngôn ngữ tự nhiên để mô tả, “Tôi muốn thêm một tham số vào một hàm, giải thích mục đích của nó, sửa đổi các vị trí mà tham số được sử dụng và cập nhật tất cả các cuộc gọi đến hàm này”, bạn thường có thể đạt được kết quả tương tự bằng cách trực tiếp chỉnh sửa hàm. Bằng cách chỉ cần viết tham số vào hàm, Cursor có thể suy ra ý định của bạn.

Ví dụ, hãy xem xét một trường hợp sử dụng từ trang web chính thức của Cursor:

Ví dụ: Thêm tham số dropout

Bạn thêm tham số dropout vào phương thức __init__ của một lớp. Cursor sẽ tự động:

  • Cập nhật tất cả các vị trí trong tệp mà tham số cần được sử dụng.
  • Sửa đổi bất kỳ cuộc gọi nào khác đến LSTMModel trên toàn bộ cơ sở mã, thêm việc khởi tạo cần thiết cho dropout.

Khả năng này cho phép Cursor Tab xử lý nhiều tác vụ tái cấu trúc nhỏ mà riêng IDE không thể dễ dàng quản lý.

Sự khác biệt so với GitHub Copilot

Cách tiếp cận thể hiện ý định bằng cách chỉnh sửa mã có thể cảm thấy quen thuộc nếu bạn đã sử dụng các công cụ hoàn thành khác như GitHub Copilot. Thường thì, khi các đề xuất của Copilot không chính xác, bạn có thể thấy mình:

  • Nhập thêm một vài ký tự để hướng dẫn Copilot theo hướng đúng.
  • Xóa một số mã để làm cho Copilot “quên” ngữ cảnh và tạo lại các đề xuất.
  • Thay đổi vị trí con trỏ để thúc đẩy Copilot bắt đầu hoàn thành từ một điểm khác.

Cursor Tab tự động hóa các điều chỉnh thủ công này, chẳng hạn như “xóa một chút mã” hoặc “di chuyển con trỏ”. Kết quả là, Cursor cảm thấy “thông minh” hơn đáng kể về mặt tích hợp và khả năng sử dụng so với các công cụ như GitHub Copilot.

Trải nghiệm được sắp xếp hợp lý này chứng tỏ sự hiểu biết của Cursor về quy trình làm việc của nhà phát triển và khả năng đơn giản hóa ngay cả các tác vụ tinh tế, nâng cao năng suất cho các nhà phát triển chuyên nghiệp.

Trò chuyện nội tuyến

Sử dụng CMD + K trong Cursor cho phép bạn mở một cửa sổ trò chuyện nội tuyến tại vị trí con trỏ hoặc trên mã được chọn. So với trò chuyện thanh bên, trò chuyện nội tuyến cung cấp hai lợi thế chính:

  • Chỉnh sửa dựa trên ngữ cảnh. Trò chuyện nội tuyến vốn hiểu ngữ cảnh dựa trên vị trí con trỏ hoặc mã được chọn, tập trung cụ thể vào các tác vụ chỉnh sửa.
  • Xử lý song song. Nhiều cửa sổ trò chuyện nội tuyến có thể được mở cùng một lúc, cho phép bạn làm việc trên một số chỉnh sửa cùng một lúc mà không cần chờ một chỉnh sửa hoàn thành trước khi bắt đầu chỉnh sửa tiếp theo.

Cá nhân tôi thích sử dụng trò chuyện nội tuyến cho các tác vụ sau:

  • Tạo mã giống như mẫu: Ví dụ, tham khảo các phần khác của tệp để viết một API mới, hoạt động DB, mô hình dữ liệu, v.v. Loại tạo mã entropy thấp này là điều mà Cursor xử lý rất tốt, tiết kiệm rất nhiều thời gian.
  • Thêm nhận xét vào mã được chọn: Sau khi chọn một khối mã, tôi có thể yêu cầu Cursor thêm nhận xét và kiểm tra xem có phần nào không rõ ràng không.
  • Đổi tên các hàm/biến: Sau khi chọn tên hàm hoặc biến, tôi yêu cầu Cursor đề xuất một tên tốt hơn.
  • Viết các hướng dẫn dòng lệnh phức tạp trong thiết bị đầu cuối: Tôi cũng có thể gọi Cursor để giúp tôi viết các lệnh phức tạp, chẳng hạn như Docker, git, v.v. Vì vậy, có thể tôi không còn cần Warp nữa?

Ví dụ: Tạo lệnh trong thiết bị đầu cuối

Trò chuyện

Trò chuyện thanh bên tiêu chuẩn là định dạng quen thuộc nhất, thường được so sánh với các sản phẩm như ChatGPT hoặc Claude. Tuy nhiên, với tư cách là một IDE chuyên nghiệp, Cursor chứng minh những lợi thế đáng kể khi làm việc trên các dự án hiện có, đặc biệt là khả năng hiểu ngữ cảnh. Hãy cùng khám phá một vài trường hợp điển hình:

Trường hợp 1: Tái cấu trúc/Sửa đổi tính năng

Hãy tưởng tượng cộng tác với cộng sự lập trình của bạn về một việc tái cấu trúc, trong đó những thay đổi ở lớp mô hình yêu cầu các sửa đổi tương ứng trong các tệp gọi mô hình này, bao gồm cả việc điều chỉnh logic luồng điều khiển phức tạp. Nếu sử dụng ChatGPT, quy trình làm việc có thể như thế này:

  1. Thu thập ngữ cảnh thủ công, bao gồm các thay đổi mô hình, tệp hiện tại và chính hướng dẫn.
  2. Dán tất cả điều này vào ChatGPT.
  3. Chờ ChatGPT tạo mã mới, sao chép nó trở lại IDE.
  4. Sử dụng công cụ diff để kiểm tra xem có thiếu, không chính xác hoặc thay đổi quá mức không.
  5. Nếu có sự cố xảy ra, hãy lặp lại quy trình bằng cách sao chép thông báo lỗi trở lại ChatGPT.

Quy trình này tốn nhiều công sức và dễ xảy ra lỗi. Trong Cursor, những điểm đau này được giải quyết liền mạch:

  • Sử dụng @ để dễ dàng chỉ định các tệp, thư mục hoặc định nghĩa mã để Cursor tham khảo.
  • Sau khi tạo mã, hãy áp dụng nó bằng một cú nhấp chuột. Cursor trực tiếp cập nhật tệp hiện tại và trình bày một diff kiểu “pull request” để xem xét.
  • Nếu phát hiện sự cố, hãy đặt câu hỏi tiếp theo để lặp lại thêm. Để tránh “ô nhiễm phiên”, bạn có thể bắt đầu một phiên mới và giới thiệu lại thông tin cần thiết.
  • Sau khi thay đổi được chấp nhận, lỗi linting hoặc lỗi kiểm thử có thể xảy ra. Thay vì sao chép thông báo lỗi thủ công, bạn có thể sử dụng AI Fix in Chat (đối với lỗi lint) hoặc Debug with AI (trong thiết bị đầu cuối) để giải quyết chúng trực tiếp.

Ví dụ: Tự động sửa lỗi

Trong ví dụ dưới đây, việc chạy mypy để kiểm tra mã trong thiết bị đầu cuối cho thấy hai lỗi. Chỉ cần nhấp vào nút Debug with AI, và các lỗi sẽ tự động được gửi đến Cursor Chat. Cursor tạo một diff mã, và sau khi áp dụng bản sửa lỗi, mọi thứ hoạt động chính xác. Điều này cải thiện hiệu quả đáng kể.

Trường hợp 2: Tạo kiểm thử đơn vị

Cho dù bạn tuân theo phương pháp TDD hay viết chức năng trước và thêm kiểm thử sau, bạn đều có thể cộng tác với Cursor để nhanh chóng xây dựng các mẫu kiểm thử (bao gồm các phụ thuộc, mô phỏng, v.v.) và lặp lại để bao quát nhiều trường hợp hơn.

Ví dụ: Tạo kiểm thử đơn vị

Sau khi tạo kiểm thử đơn vị, hãy chạy chúng trực tiếp. Nếu có lỗi xảy ra, hãy kết hợp điều này với tính năng Debug with AI để nhanh chóng khắc phục sự cố.

Trường hợp 3: Tối ưu hóa hiệu suất

Đây là một ví dụ từ trang web chính thức, nơi một số mã Rust đang được tối ưu hóa. Trong công việc hàng ngày, bạn có thể sử dụng trò chuyện để yêu cầu Cursor nhanh chóng xem xét toàn bộ tệp và yêu cầu kiểm tra và tối ưu hóa ở các lĩnh vực như hiệu suất, độ ổn định và bảo mật.

Trường hợp 4: Tích hợp tìm kiếm trên Web

Khi gỡ lỗi sự cố hoặc tìm hiểu các khung công tác mới, các công cụ như devv, phind, hoặc Perplexity thường được sử dụng trong lĩnh vực lập trình. Tương tự, bạn có thể sử dụng lệnh @Web trong Cursor để thực hiện tìm kiếm trên web, truy xuất kiến thức toàn diện và cập nhật và kết hợp nó với cơ sở mã của bạn để cung cấp các giải pháp cụ thể hơn. Ví dụ, bạn có thể yêu cầu Cursor giúp di chuyển dự án của bạn từ Poetry sang UV:

Tích hợp tìm kiếm web

Điều này cho thấy cách các trường hợp truyền thống yêu cầu tìm kiếm web thường xuyên có thể được xử lý bằng Cursor, bao gồm cấu hình môi trường, cài đặt phụ thuộc và khắc phục sự cố phức tạp.

Ngoài ra, còn có một tính năng tương tự được gọi là @Docs, đặc biệt hữu ích cho các thư viện phổ biến đang trải qua những thay đổi phiên bản chính không tương thích. Ví dụ, Pydantic 1.x đã được sử dụng rộng rãi trong một thời gian dài và các mô hình ngôn ngữ có thể rất quen thuộc với nó. Tuy nhiên, nếu dự án của bạn đang sử dụng Pydantic 2.x, việc nhập URL của tài liệu được cập nhật vào Cursor trở nên rất quan trọng để nâng cao đáng kể độ chính xác của mã được tạo.

Hỗ trợ tài liệu tích hợp sẵn và được nhập

Trường hợp 5: Xem xét mã

Trong các phiên bản trước, đây là một tab độc lập, nhưng trong phiên bản mới, dường như nó đã được nâng cấp lên Bug Finder, hiện được tính phí dựa trên việc sử dụng. Tuy nhiên, bạn vẫn có thể sử dụng lệnh @Git trong trò chuyện để yêu cầu Cursor giúp xem xét mã của bạn và xác định các lỗi tiềm ẩn. Để đạt được kết quả tốt hơn, bạn có thể cần tinh chỉnh lời nhắc của mình.

Xem xét mã AI

Tạo ngữ cảnh khác

Trong trò chuyện, toán tử @ cho phép kiểm soát rất linh hoạt ngữ cảnh trò chuyện hiện tại, khá giống với việc giao tiếp với một lập trình viên thực sự. Ngoài các tính năng đã đề cập trước đó, bạn cũng có thể:

  • @Recommended: Tự động đề xuất ngữ cảnh có liên quan để đưa vào.
  • @Codebase: Nhập toàn bộ cơ sở mã, hữu ích để hiểu mã của dự án hoặc tìm các triển khai cụ thể của các tính năng.
  • @Notepad: Tính năng này ít được sử dụng hơn nhưng có thể hữu ích để tạo kế hoạch phát triển hoặc thông số kỹ thuật chức năng có thể được tham khảo sau này trong các tệp mã cụ thể.
  • @Lint errors: Tự động sửa các sự cố mã do LSP (Language Server Protocol) phát hiện.

Khả năng kiểm soát ngữ cảnh một cách linh hoạt như vậy phản ánh sự hiểu biết sâu sắc của nhóm Cursor về quy trình làm việc hàng ngày của một lập trình viên và làm cho nó khác biệt so với các chatbot chung.

Ngoài ra, có thể tải lên các sơ đồ thiết kế vào trò chuyện để Cursor xử lý. Tuy nhiên, vì khả năng lập luận bằng hình ảnh của các mô hình lớn vẫn còn hạn chế, nên tính năng này vẫn chưa thực tế lắm.

Composer

Nhiều blogger đã giới thiệu tính năng này và tôi hiểu rằng nó chủ yếu mở rộng việc chỉnh sửa một tệp duy nhất trong trò chuyện sang việc chỉnh sửa và tạo nhiều tệp. Trên thực tế, trước phiên bản 0.43, tôi sử dụng tính năng này khá ít vì khả năng của mô hình hiện tại khiến việc tạo chính xác các chỉnh sửa trên nhiều tệp trong các dự án phức tạp trở nên khó khăn (hãy thoải mái đưa ra ví dụ nếu bạn không đồng ý).

Vì vậy, nói một cách đơn giản, các tác vụ có độ phức tạp ngày càng tăng thường có thể được ánh xạ thành tab -> trò chuyện nội tuyến -> trò chuyện -> composer, tạo thành một sự tiến triển dần dần.

Thú vị là, với sự ra mắt của Windurf, người ta nhận ra rằng quy trình làm việc của tác giả có lẽ quá đơn giản, dẫn đến kết quả không tối ưu. Cascade của Windurf, mặc dù cần nhiều thời gian hơn để “suy nghĩ”, thường đạt được kết quả tốt hơn với cùng một mô hình. Kết quả là, Cursor nhanh chóng giới thiệu chế độ tác giả trong phiên bản 0.43.

Sử dụng composer để đọc mã nguồn mở

Hiện nay, Cursor tích hợp việc truy xuất, đọc, thực thi lệnh (terminal), thu thập phản hồi và xác định các bước tiếp theo đa bước, giống như quy trình làm việc của tác nhân ReAct. Như chúng ta đã thấy, Cursor nhúng khả năng AI ở nhiều giai đoạn khác nhau, và việc kết nối những khả năng này thông qua một tác nhân là một bước tiến hóa tự nhiên.

Các bản demo trước đây cũng sử dụng composer trong các lĩnh vực không phải mã, chẳng hạn như lưu trữ kiến thức cá nhân trong các tệp markdown cục bộ như Obsidian và sử dụng composer để “tìm kiếm và hỏi đáp do AI điều khiển”. Tuy nhiên, trong phiên bản mới, composer dường như tập trung nhiều hơn vào các kịch bản lập trình, vì tôi không thể kích hoạt việc truy xuất tài liệu sau nhiều lần thử. Mặt khác, tính năng @Codebase trong trò chuyện có thể đạt được hiệu ứng này.

Mẹo khác

Cũng đáng để đề cập đến tệp cursorrules, có thể được coi là một tài liệu kiến thức chung cho dự án hiện tại. Nó có thể bao gồm:

  • Hướng dẫn về bộ công nghệ của dự án, chẳng hạn như các phiên bản framework cụ thể.
  • Các quy ước lập trình cụ thể của dự án, chẳng hạn như đặt tên, chú thích, xử lý lỗi, tiêu chuẩn ghi nhật ký và các cân nhắc về hiệu suất/bảo mật.

Bạn có thể tìm thấy một số mẫu dự án trong cursor.directory, sửa đổi chúng và sử dụng chúng cho dự án của riêng bạn.

Suy nghĩ lập trình hỗ trợ AI

Từ phần giới thiệu ở trên, chúng ta có thể thấy rằng Cursor đã giúp chúng ta thực hiện nhiều tác vụ thấp entropy trong công việc hàng ngày, chẳng hạn như:

  • Viết các mẫu quen thuộc trong nhiều ngôn ngữ và framework lập trình; ngay cả đối với các framework bạn không quen thuộc, Cursor có thể giúp bạn bắt đầu nhanh chóng.
  • Các kiểu mã và biểu thức phổ biến trong kho lưu trữ dự án của bạn; cấu trúc dự án của bạn càng rõ ràng và mã càng dễ đọc, khía cạnh này càng phát triển.
  • Các tác vụ như chạy mã, xử lý lỗi, tìm kiếm và thử sửa lỗi—Cursor có thể giúp tăng hiệu quả trong các tác vụ lặp đi lặp lại này.

Từ quan điểm của Lý thuyết Dòng chảy, một mặt, Cursor giúp chúng ta hoàn thành các tác vụ gõ “nhàm chán” có độ khó thấp thông qua tự động hoàn thành và trò chuyện. Mặt khác, kiến thức phong phú từ các mô hình lớn kết hợp với sự hiểu biết sâu sắc về ngữ cảnh của codebase (thông qua RAG) giúp cải thiện cơ sở kiến thức của lập trình viên, giảm bớt những thách thức và lo lắng do các công nghệ hoặc mã không quen thuộc gây ra. Sử dụng Cursor giống như việc kết hợp với một đối tác lập trình ảo, cho phép chúng ta duy trì sự tập trung và sáng tạo.

Để tận dụng tốt hơn các công cụ này để tăng năng suất trong kỷ nguyên AI, trọng tâm của chúng ta sẽ chuyển sang giai đoạn thiết kếxác thực hơn.

  • Là một đối tác lập trình ảo, Cursor, giống như con người, cần hiểu mã mà chúng ta viết để đưa ra các đề xuất tốt hơn. Vì vậy, trong kỷ nguyên AI, tầm quan trọng của việc viết mã rõ ràng và dễ đọc đã tăng lên.
  • Mã được tổ chức tốt sẽ giúp dễ dàng tìm thấy ngữ cảnh phù hợp khi sử dụng lệnh @, và điều này trở nên rõ ràng hơn khi bạn sử dụng Cursor sâu hơn. Các nguyên tắc như đặt tên tốt và trách nhiệm duy nhất rất hữu ích.
  • AI và lập trình viên con người có sự khác biệt đáng kể về mô hình nhận thức. Nếu bạn tham gia vào các ứng dụng liên quan đến LLM, bạn có thể nhận thức rõ hơn về cách AI diễn giải mã. Ví dụ: viết thêm các trường hợp và quá trình suy nghĩ trong các chú thích, tránh logic “truy xuất đa bước” phức tạp và thỉnh thoảng hỏi AI về cách nó hiểu một đoạn mã hoặc yêu cầu nó thực hiện các tác vụ với mã của bạn có thể tối ưu hóa khả năng lập luận của nó (tương tự như các kỹ thuật tối ưu hóa lời nhắc).
  • Khi khả năng tạo mã của AI ngày càng mạnh mẽ và nhanh hơn, việc xem xét và xác thực hiệu quả các đầu ra này sẽ sớm trở thành một nút thắt. Một mặt, việc kiểm thử tự động sẽ ngày càng trở nên quan trọng. Mặt khác, các sản phẩm như Cursor có thể bắt đầu hỗ trợ trong việc xem xét mã.

Tất nhiên, đây chỉ là những suy nghĩ ban đầu của tôi, và tôi hoan nghênh mọi người chia sẻ ý tưởng và tham gia thảo luận.

So sánh các sản phẩm lập trình hỗ trợ AI khác

Dưới đây là một so sánh ngắn gọn về một số sản phẩm lập trình hỗ trợ AI khác:

  • OpenAI Canvas, Claude Artifacts: Những sản phẩm này nhắm đến đối tượng rộng hơn và chủ yếu nhắm mục tiêu vào việc tạo mã “một lần” hoặc phát triển MVP. Không giống như Cursor, chúng không cung cấp tích hợp sâu với ngữ cảnh codebase hiện có hoặc thích ứng với quy trình làm việc IDE phức tạp.
  • GitHub Copilot, Codeium, Supermaven: Các sản phẩm plugin IDE này vẫn còn một khoảng cách đáng kể trong trải nghiệm hoàn thành. Cursor Tab dường như là một mô hình chuyên biệt, mặc dù các rào cản kỹ thuật có thể không cao, và không rõ tại sao GitHub Copilot lại chưa làm theo. Về khả năng trò chuyện, GitHub Copilot thiếu khả năng kiểm soát ngữ cảnh linh hoạt như trong Cursor.
  • Sản phẩm “Tác nhân” (ví dụ: devin, replit, bolt, v0): Nếu sản phẩm quá chung chung, hiện tại rất khó đạt được kết quả tốt. Các sản phẩm tập trung vào các lĩnh vực cụ thể, chẳng hạn như tạo mã giao diện người dùng, có thể hoạt động tốt hơn một chút nhưng chủ yếu bị giới hạn ở việc tạo ra các bản demo nhỏ. Điều này liên quan đến những suy đoán rộng hơn về tương lai của AI trong lập trình—liệu công việc của các lập trình viên cuối cùng sẽ biến mất?
  • Windsurf: Vấn đề lớn nhất với Windsurf là khả năng tự động hoàn thành vẫn còn khá hạn chế, và vì nó còn khá mới, nên nhiều tính năng (chẳng hạn như Python LSP) và độ ổn định của nó không mạnh bằng Cursor. Tuy nhiên, nó có giá cả phải chăng hơn và đáng để theo dõi.
  • Các lựa chọn thay thế mã nguồn mở cho Cursor (ví dụ: aider, cline): Các lựa chọn thay thế này cho phép mô hình “trả tiền khi sử dụng” nhưng nhìn chung thiếu sự trau chuốt và tinh tế mà Cursor cung cấp.
  • JetBrains AI: So với VSCode, JetBrains vẫn có nhiều người dùng trung thành trong hệ sinh thái Java, điều này đã ngăn cản nhiều người chuyển sang Cursor. Tuy nhiên, phản hồi thị trường đối với JetBrains AI dường như kém, và ngay cả plugin GitHub Copilot trong JetBrains cũng kém hiệu quả hơn trong các môi trường khác.

Tóm tắt

Tính đến tháng 12 năm 2024, nếu bạn không muốn thử nghiệm, Cursor là một lựa chọn tuyệt vời. Việc chuyển từ JetBrains không nên quá khó khăn:

  • Tìm kiếm và cài đặt các plugin được đề xuất cho các ngôn ngữ cụ thể; VSCode hoạt động tốt cho hỗ trợ giao diện người dùng, Python, Rust và Go.
  • Tốt nhất là nên học lại các phím tắt bàn phím, mặc dù bạn cũng có thể cài đặt plugin IntelliJ IDEA Keybindings.
  • Tìm kiếm toàn cầu Double Shift không còn khả dụng, vì vậy hãy sử dụng CMD + P, CMD + T, SHIFT + CMD + F thay thế.
  • Các thao tác Git đồ họa hơi yếu hơn, nhưng vẫn đủ cho việc sử dụng cơ bản.
  • Khả năng cấu hình cao cung cấp sự linh hoạt tuyệt vời, mặc dù có một số điểm nhỏ cần khắc phục.

Để biết hướng dẫn chi tiết hơn về việc chuyển đổi, bạn có thể kiểm tra các tài nguyên trực tuyến cụ thể dành cho quá trình chuyển đổi này.

Nhìn về tương lai

Từ quan điểm của Cursor, những cải tiến trong tương lai có thể được xem xét từ hai góc độ chính: khung tác nhân và quy trình làm việc của lập trình viên. Mặc dù bài viết này đã khá dài, nhưng một vài điểm đáng tóm tắt bao gồm:

  • Tích hợp giọng nói: Nếu chúng ta coi Cursor là một đối tác lập trình ảo, việc tích hợp đầu vào giọng nói thời gian thực có thể rất thú vị. Điều này có thể cho phép mô tả mã khi nó đang được tạo ra, làm cho trải nghiệm trở nên tự nhiên và liền mạch hơn.
  • Xem xét mã hiệu quả: Một hướng cải tiến quan trọng là làm thế nào để xem xét mã do AI tạo ra một cách hiệu quả. Các sản phẩm xem xét mã hiện tại vẫn còn chỗ để cải thiện đáng kể, đặc biệt là về cách nội dung xem xét được tổ chức, điều này thường cảm thấy cứng nhắc và không linh hoạt.
  • Hỗ trợ thiết kế kiến trúc: Cursor có thể giúp ở cấp độ thiết kế kiến trúc không? Bước đầu tiên có thể là cho phép Cursor hiểu mã theo cách “có thứ bậc” hơn, thay vì chỉ cung cấp ngữ cảnh phẳng.

Tương lai của nghề lập trình viên: Một câu hỏi đáng để tìm hiểu là liệu vai trò của các lập trình viên sẽ thay đổi như thế nào khi AI trở nên mạnh mẽ hơn.

  • Cursor rõ ràng hướng đến việc trở thành một “công cụ cao cấp” cho các lập trình viên chuyên nghiệp, tin rằng nghề lập trình sẽ tiếp tục tồn tại lâu dài và không bị AI thay thế hoàn toàn. Rào cản để sử dụng Cursor tương đối cao, vì nó được thiết kế nhiều hơn cho cách làm việc hiện tại của các lập trình viên.
  • Ngược lại, các sản phẩm như Devin, Magic.dev và các sản phẩm khác dường như hướng đến việc trở thành một “tác nhân lập trình phổ quát” có khả năng thay thế các lập trình viên. Liệu tương lai có phải là một nơi mà “mọi người đều có thể phát triển ứng dụng của riêng mình”, hoặc nơi mà “chỉ cần các nhà quản lý sản phẩm”?

Khi tôi lần đầu tiên thử MidJourney và Suno, tôi tự hỏi liệu mọi người sẽ trở thành những nghệ sĩ kỹ thuật số trong tương lai hay không. Nhưng nhanh chóng, tôi nhận ra rằng tôi không có “động lực sáng tạo” cho loại công việc này. Ngay cả sau khi xem rất nhiều tác phẩm của người khác, tôi thường không thể diễn đạt những gì mình muốn tạo ra. Cuối cùng, tôi thấy rằng nhu cầu của tôi về nghệ thuật do AI tạo ra bị giới hạn ở việc tạo hình ảnh bìa khi viết bài, và tính năng này có thể sẽ được tích hợp vào nhiều nền tảng dành cho người tạo nội dung trong tương lai.

Tương tự như vậy, suy nghĩ của tôi về tương lai của các lập trình viên cũng tương tự: việc tạo mã có thể là một kỹ năng chuyên biệt hơn so với nghệ thuật, viết lách, âm nhạc hoặc video, và ít người hơn có thể nghĩ đến việc phát triển ứng dụng của riêng mình. Tuy nhiên, việc tạo mã cho các ứng dụng dọc cá nhân hóa có thể trở thành một tính năng được bao gồm trong các sản phẩm cụ thể về lĩnh vực khác.

Lưu ý: Bài đăng này được tác giả gốc RandomGenerator ủy quyền dịch và xuất bản trên trang web của chúng tôi. Bài đăng gốc bằng tiếng Trung Quốc và nằm tại https://mp.weixin.qq.com/s/JVb7-4a2XOFhfeJusaxvFg

ARTIFICIAL INTELLIGENCE  GUIDE  CURSOR  CODE EDITING  WINDSURF  DISCUSSION 

       

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

Competitor of space and tab