Bạn đã bao giờ vật lộn với code phức tạp hay cảm thấy bị giới hạn bởi kỹ năng khi xây dựng ứng dụng trong mơ? Những ngày đó giờ đã lùi vào quá khứ. Loạt bài viết này sẽ chỉ cho bạn cách AI có thể cách mạng hóa quy trình phát triển phần mềm của bạn.

Từng là một lập trình viên cô độc, tôi thường xuyên gặp khó khăn với thuật toán hay kiến trúc hệ thống phức tạp. Sự xuất hiện của ChatGPT và Claude đã thay đổi hoàn toàn cục diện này, mở ra một kỷ nguyên mới cho năng suất.

Trong hướng dẫn này, tôi sẽ chia sẻ cách làm chủ quá trình phát triển phần mềm được tăng cường bởi AI. Từ thiết lập không gian làm việc đến thiết kế hệ thống, viết code, kiểm thử và tạo tài liệu, chúng ta sẽ khám phá cách AI trở thành cộng sự đắc lực của bạn.

Phát triển Phần mềm với sự hỗ trợ của AI
Phát triển Phần mềm với sự hỗ trợ của AI

Tổng quan về loạt bài viết

Loạt bài viết này gồm ba phần, mỗi phần đi sâu vào chi tiết về cách tích hợp AI một cách phù hợp vào quy trình làm việc của bạn khi xử lý các quy trình cụ thể vốn có trong quá trình phát triển phần mềm.

  • Phần 1: Xây dựng nền tảng – Lập kế hoạch dự án, Thiết kế và Kiến trúc (bạn đang đọc phần này)
  • Phần 2: Xây dựng với AI – Tạo Code, Thiết kế Cơ sở dữ liệu và Viết Tài liệu
  • Phần 3: Hoàn thiện và Bảo trì – Kiểm thử, Tối ưu hóa và Kiểm soát Phiên bản

Thiết lập stage: Chuẩn bị cho quy trình làm việc được tăng cường bởi AI của bạn

Tin tôi đi, một chút chuẩn bị sẽ giúp bạn đi được một chặng đường dài. Điều đầu tiên, hãy chọn người bạn đồng hành AI của bạn.

Cho mục đích của hướng dẫn này, chúng ta sẽ sử dụng Claude, theo ý kiến của tôi, nó giỏi code hơn ChatGPT một chút và có các tính năng phù hợp (chẳng hạn như cơ sở dữ liệu kiến thức dự án) mà chúng ta cần để thiết lập đúng các mục tiêu của dự án. Thông tin ở đây gần như tương tự nếu bạn sử dụng ChatGPT.

Thiết lập môi trường phát triển IDE

Dưới đây là danh sách kiểm tra nhanh để giúp bạn bắt đầu:

  1. Chọn IDE hoặc trình soạn thảo văn bản ưa thích của bạn: Cho dù bạn thích VS Code, Sublime Text hay vim, hãy gắn bó với những gì bạn cảm thấy thoải mái. Mục tiêu là nâng cao khả năng viết code của bạn, chứ không phải làm phức tạp nó.
  2. Tạo một không gian riêng cho các tương tác AI: Tôi thích giữ một cửa sổ hoặc tab riêng biệt mở cho trợ lý AI của mình. Điều này giúp tôi chuyển đổi ngữ cảnh giữa việc viết code và động não với AI.
  3. Sắp xếp các prompt của bạn: Hãy tin tôi về điều này – bạn sẽ tạo ra rất nhiều prompt. Tạo một tài liệu hoặc sử dụng một ứng dụng ghi chú để lưu các prompt hiệu quả nhất của bạn. Nó là một yếu tố thay đổi cuộc chơi cho năng suất.
  4. Kiểm soát phiên bản: Nếu bạn chưa sử dụng Git, thì bây giờ là thời điểm để bắt đầu. AI đôi khi có thể tạo ra rất nhiều code một cách nhanh chóng và đôi khi nó bị hỏng. Bạn sẽ muốn có thể theo dõi các thay đổi và hoàn nguyên nếu cần.

Thay đổi tư duy: AI là cộng tác viên, không phải sự thay thế

Bây giờ, hãy nói về một điều mà tôi mất một thời gian để hiểu đầy đủ – tư duy đúng đắn cho phát triển phần mềm được hỗ trợ bởi AI. Vấn đề là: AI không ở đây để thay thế kỹ năng của bạn hoặc chiếm lấy công việc của bạn. Hãy nghĩ về nó giống như có một thực tập sinh siêu thông minh, người luôn sẵn sàng giúp đỡ nhưng cần sự hướng dẫn và chuyên môn của bạn.

Khi mới bắt đầu, tôi đã mắc sai lầm khi coi AI như một trình tạo code ma thuật. Tôi đưa ra những prompt mơ hồ cho nó và mong đợi code hoàn hảo, sẵn sàng cho sản xuất. Cảnh báo: điều đó không hiệu quả lắm. Điều quan trọng là tiếp cận AI như một cộng tác viên trong quy trình phát triển của bạn.

Dưới đây là một số thay đổi về tư duy thực sự đã giúp tôi:

  1. AI là một công cụ – bạn là người thợ thủ công: Giống như bất kỳ công cụ nào khác trong bộ công cụ phát triển của bạn, AI ở đó để tăng cường kỹ năng của bạn, chứ không phải thay thế chúng. Bạn vẫn là người đưa ra quyết định.
  2. Nắm lấy quy trình lặp đi lặp lại: Đừng mong đợi sự hoàn hảo ngay lần thử đầu tiên. Sử dụng AI để tạo ra các ý tưởng hoặc cấu trúc code ban đầu, sau đó lặp lại và tinh chỉnh.
  3. Xác minh và hiểu: Luôn xem xét và hiểu code mà AI tạo ra. Đó là một cơ hội để học hỏi và đảm bảo code phù hợp với nhu cầu của dự án bạn.
  4. Hãy cụ thể trong các yêu cầu của bạn: Prompt của bạn càng chính xác, đầu ra càng tốt. Hãy coi nó như giải thích một nhiệm vụ cho một đồng nghiệp là con người.
  5. Học hỏi từ các đề xuất của AI: Khi AI cung cấp các giải pháp thay thế hoặc cải tiến, hãy dành thời gian để hiểu lý do. Đó là một cách tuyệt vời để mở rộng kiến thức viết code của bạn.

Hãy nhớ rằng, mục tiêu không phải là giao lại dây cương cho AI, mà là tạo ra sự hợp lực giữa sự sáng tạo và kỹ năng giải quyết vấn đề của bạn với kiến thức và sức mạnh xử lý rộng lớn của AI. Đó là về việc tăng cường khả năng của bạn, chứ không phải thay thế chúng.

Ý tưởng Prompt để giúp bạn bắt đầu

Để giúp bạn bắt đầu, đây là một vài ý tưởng prompt mà bạn có thể sử dụng ngay lập tức:

  • Để thiết lập một dự án mới:

    Tôi đang bắt đầu một [loại dự án] mới bằng cách sử dụng [ngôn ngữ/framework lập trình]. Bạn có thể đề xuất một cấu trúc tệp cơ bản và các dependency thiết yếu mà tôi nên xem xét không?

  • Để hiểu khả năng của AI:
 
Những điểm mạnh và hạn chế chính mà tôi nên biết khi sử dụng bạn cho các tác vụ phát triển phần mềm là gì? 
 
  •  
    Để tạo một kế hoạch viết code:
Tôi muốn xây dựng [mô tả ngắn gọn về dự án]. Bạn có thể giúp tôi chia nhỏ điều này thành các nhiệm vụ có thể quản lý được và đề xuất một thứ tự thực hiện không?
 

Tôi sẽ chia sẻ các prompt cụ thể và nâng cao hơn khi chúng ta tiến triển trong hướng dẫn, nhưng những điều này sẽ cung cấp cho bạn một điểm khởi đầu tốt.

Khởi tạo và lập kế hoạch dự án

Bây giờ chúng ta đã có trợ lý AI sẵn sàng, hãy xem xét một trong những phần quan trọng nhất (và thường bị đánh giá thấp) của bất kỳ dự án nào: khởi tạo và lập kế hoạch. Hãy tin tôi, làm đúng phần này có thể giúp bạn tiết kiệm hàng giờ đau đầu sau này.

Tạo cơ sở kiến thức cho trợ lý AI của bạn

Bạn có nhớ tôi đã đề cập đến việc coi AI của bạn như một thực tập sinh siêu thông minh không? Giống như bất kỳ thành viên mới nào trong nhóm, AI của bạn cần một số ngữ cảnh về dự án của bạn. Đây là nơi tạo ra một cơ sở kiến thức thực sự.

Khi tôi mới bắt đầu với phát triển phần mềm được hỗ trợ bởi AI, tôi đã nhảy thẳng vào việc yêu cầu code. Sai lầm lớn. Tôi nhanh chóng học được rằng việc dành vài phút để "thông báo" cho trợ lý AI của mình sẽ mang lại lợi ích trong suốt dự án.

Đây là cách tôi thực hiện nó:

  1. Tổng quan về dự án: Bắt đầu với một mô tả ngắn gọn về dự án của bạn. Bạn đang xây dựng cái gì? Nó đang giải quyết vấn đề gì?
  2. Tech Stack: Liệt kê các ngôn ngữ, framework và công cụ bạn đang sử dụng. Ví dụ:
    • Frontend: React, Vue.js, Angular
    • Backend: Node.js (Express), Python (Django/Flask), .NET
    • Database: PostgreSQL, MySQL, MongoDB
    • Cloud: AWS, Google Cloud, Azure
  3. Các yêu cầu chính: Phác thảo các tính năng hoặc chức năng chính mà bạn muốn triển khai.
  4. Các ràng buộc: Bất kỳ hạn chế hoặc yêu cầu cụ thể nào? Có thể bạn cần hỗ trợ các trình duyệt cũ hơn hoặc có các tiêu chí hiệu suất nghiêm ngặt.
  5. Phong cách viết code: Nếu bạn có các quy ước viết code hoặc sở thích kiến trúc cụ thể, hãy đề cập đến chúng. Ví dụ: "Chúng tôi tuân theo quy ước đặt tên BEM cho CSS" hoặc "Chúng tôi sử dụng kiến trúc microservices."

Dưới đây là một prompt để giúp bạn bắt đầu:

Tôi đang bắt đầu một dự án mới và tôi muốn tạo một cơ sở kiến thức để bạn tham khảo trong suốt quá trình phát triển của chúng ta. Dự án là [mô tả ngắn gọn]. Chúng ta sẽ sử dụng [tech stack]. Các tính năng chính mà chúng ta cần triển khai là [liệt kê các tính năng]. Một số ràng buộc quan trọng cần ghi nhớ là [liệt kê các ràng buộc]. Về phong cách viết code, chúng tôi thích [đề cập đến các sở thích]. Bạn có thể tóm tắt thông tin này và đề xuất bất kỳ chi tiết bổ sung nào mà chúng ta nên đưa vào cơ sở kiến thức của mình không?

Chia nhỏ các dự án thành các thành phần có thể quản lý được

Khi bạn đã có tổng quan về dự án của mình, đã đến lúc chia nó thành các phần nhỏ hơn. Tôi đã từng vật lộn với điều này, hoặc là làm cho các thành phần của mình quá lớn và khó điều khiển, hoặc là bị lạc trong các chi tiết nhỏ nhặt. AI đã là một yếu tố thay đổi cuộc chơi để tìm ra điểm phù hợp đó.

Hãy thử prompt này:

Dựa trên tổng quan về dự án mà chúng ta vừa tạo, bạn có thể giúp tôi chia nhỏ dự án này thành các thành phần hoặc mô-đun có thể quản lý được không? Đối với mỗi thành phần, vui lòng đề xuất:
1. Tên cho thành phần
2. Chức năng chính của nó
3. Các thách thức tiềm ẩn trong việc triển khai nó
4. Cách nó có thể tương tác với các thành phần khác 
Vui lòng cũng đề xuất một thứ tự logic để phát triển các thành phần này.

 

Tôi thấy rằng AI thường đưa ra các phân tích thành phần mà tôi sẽ không nghĩ đến, đôi khi dẫn đến các cấu trúc code mô-đun và dễ bảo trì hơn.

Lý do tại sao tôi thích sử dụng Claude là vì nó cho phép người dùng tạo "Dự án" cho phép bạn tạo các trường hợp sử dụng chuyên biệt cho Claude – mỗi trường hợp có code và cơ sở kiến thức riêng.

Sử dụng AI để lập lộ trình dự án

Khi bạn đã xác định các thành phần của mình, đã đến lúc tạo một lộ trình. Đây là nơi tôi thực sự đánh giá cao việc có một trợ lý AI. Nó giống như có một người quản lý dự án dày dặn kinh nghiệm trong tầm tay của bạn, giúp bạn thấy trước những cạm bẫy tiềm ẩn và tối ưu hóa trình tự phát triển của bạn.

Dưới đây là một prompt mà tôi thường sử dụng:

Sử dụng phân tích thành phần mà chúng ta đã tạo, bạn có thể giúp tôi phát triển một lộ trình dự án không? Vui lòng bao gồm:
1. Một thứ tự được đề xuất để phát triển các thành phần
2. Khung thời gian ước tính cho mỗi thành phần (giả sử tôi đang làm việc này bán thời gian)
3. Các mốc hoặc điểm kiểm tra tiềm năng
4. Bất kỳ dependency nào giữa các thành phần có thể ảnh hưởng đến thứ tự phát triển
5. Đề xuất cho bất kỳ giai đoạn chứng minh khái niệm hoặc nguyên mẫu nào có thể có lợi


Lộ trình mà AI tạo ra thường cung cấp cho tôi một điểm khởi đầu vững chắc, sau đó tôi điều chỉnh dựa trên kiến thức cá nhân của mình về phong cách làm việc của tôi và bất kỳ thời hạn bên ngoài nào.

Ý tưởng Prompt để lập kế hoạch dự án

Để giúp bạn tận dụng tối đa AI trong giai đoạn lập kế hoạch dự án của mình, đây là một vài ý tưởng prompt khác:

  • Để đánh giá rủi ro:

    Dựa trên kế hoạch dự án của chúng ta, bạn có thể xác định các rủi ro hoặc thách thức tiềm ẩn mà chúng ta có thể phải đối mặt trong quá trình phát triển không? Đối với mỗi rủi ro, hãy đề xuất các chiến lược giảm thiểu rủi ro có thể xảy ra.

  • Để lựa chọn công nghệ:

    Chúng ta đang xem xét sử dụng [Công nghệ A] hoặc [Công nghệ B] cho [chức năng cụ thể]. Bạn có thể so sánh các tùy chọn này trong bối cảnh dự án của chúng ta, xem xét các yếu tố như hiệu suất, dễ triển khai và khả năng mở rộng trong tương lai không?

  • Để ước tính phạm vi dự án:

    Với các yêu cầu của dự án và phân tích thành phần của chúng ta, bạn có thể giúp tôi ước tính phạm vi tổng thể của dự án này không? Vui lòng cung cấp ước tính sơ bộ về tổng thời gian phát triển và đề xuất bất kỳ lĩnh vực nào mà chúng ta có thể cần điều chỉnh kỳ vọng hoặc tìm kiếm các nguồn lực bổ sung.

Thiết kế và kiến trúc với AI

Một trong những giai đoạn quan trọng nhất (và thường đầy thách thức) của phát triển phần mềm là thiết kế và kiến trúc. Đây là nơi chúng ta đặt nền móng cho toàn bộ dự án của mình, và hãy để tôi nói với bạn, việc có một trợ lý AI bên cạnh bạn trong giai đoạn này giống như có một vũ khí bí mật.

Sức mạnh tinh tế của các prompt "Hãy suy nghĩ từng bước một"

Bạn có nhớ tôi đã đề cập đến tầm quan trọng của các prompt rõ ràng, cụ thể không? Chà, khi nói đến thiết kế và kiến trúc, tôi thấy rằng các prompt "Hãy suy nghĩ từng bước một" là vàng ròng tuyệt đối. Chúng khuyến khích AI chia nhỏ các vấn đề phức tạp và cung cấp các phản hồi chi tiết, có cấu trúc.

Dưới đây là một mẫu prompt mà tôi thường sử dụng:

Hãy suy nghĩ từng bước một về kiến trúc cho [thành phần hoặc hệ thống cụ thể]. Vui lòng xem xét:
1. Các chức năng chính mà thành phần này cần hỗ trợ
2. Các cấu trúc hoặc mô hình dữ liệu tiềm năng
3. Các lớp hoặc mô-đun chính và trách nhiệm của chúng
4. Cách thành phần này sẽ tương tác với các phần khác của hệ thống
5. Các mẫu thiết kế tiềm năng có thể áp dụng
6. Các cân nhắc về khả năng mở rộng và bảo trì 
Đối với mỗi bước, hãy cung cấp một lời giải thích ngắn gọn về lý do của bạn.

Tôi thấy rằng cách tiếp cận này không chỉ mang lại các phản hồi toàn diện và chu đáo hơn từ AI mà còn giúp tôi sắp xếp các suy nghĩ của riêng mình về thiết kế.

Lặp lại các đề xuất của AI

Bây giờ, đây là nơi điều kỳ diệu thực sự xảy ra. Khi bạn nhận được phản hồi ban đầu đó, đừng chỉ lấy nó và chạy. Đây là cơ hội để bạn tham gia vào một cuộc trao đổi qua lại với trợ lý AI của mình, tinh chỉnh và cải thiện thiết kế.

Tôi thích sử dụng các prompt như thế này để đi sâu hơn:

Cảm ơn bạn về thiết kế ban đầu đó. Tôi có một vài câu hỏi tiếp theo: 1. Những hạn chế hoặc nhược điểm tiềm ẩn của cách tiếp cận này là gì? 2. Bạn có thể đề xuất một thiết kế thay thế ưu tiên [mối quan tâm cụ thể, ví dụ: hiệu suất, tính linh hoạt] không? 3. Thiết kế này cần thay đổi như thế nào nếu chúng ta cần [yêu cầu tiềm năng trong tương lai]?

Quá trình lặp đi lặp lại này thường dẫn đến những hiểu biết sâu sắc và cải tiến mà tôi có thể không tự mình xem xét. Nó giống như có một buổi động não với một đồng nghiệp không mệt mỏi, am hiểu.

Ghi lại các quyết định kiến trúc

Một trong những lời khuyên tốt nhất mà tôi từng nhận được là ghi lại các quyết định kiến trúc của mình. Nó đã giúp tôi tiết kiệm vô số giờ đau đầu khi xem lại các dự án nhiều tháng sau đó.

Hãy thử prompt này:

Dựa trên cuộc thảo luận của chúng ta về kiến trúc [thành phần/hệ thống], bạn có thể giúp tôi tạo Bản ghi Quyết định Kiến trúc (ADR) không? Vui lòng bao gồm: 1. Bối cảnh và vấn đề chúng ta đang giải quyết 2. Các tùy chọn chúng ta đã xem xét 3. Quyết định chúng ta đã đưa ra 4. Hậu quả (cả tích cực và tiêu cực) của quyết định này 5. Bất kỳ quyết định hoặc đánh đổi liên quan nào

Điều này không chỉ giúp bạn theo dõi suy nghĩ của mình mà còn tạo ra tài liệu có giá trị cho bản thân bạn trong tương lai hoặc bất kỳ thành viên nhóm nào có thể tham gia dự án sau này.

Ý tưởng Prompt để thiết kế và kiến trúc

Để giúp bạn tận dụng tối đa AI trong giai đoạn thiết kế và kiến trúc của mình, đây là một vài ý tưởng prompt khác:

  • Để khám phá các mẫu thiết kế:

    Với yêu cầu của chúng ta là [chức năng cụ thể], những mẫu thiết kế nào có thể áp dụng? Đối với mỗi mẫu được đề xuất, vui lòng giải thích cách nó có thể được triển khai trong hệ thống của chúng ta và những lợi ích mà nó sẽ cung cấp.

  • Để thiết kế lược đồ cơ sở dữ liệu:

    Chúng ta cần thiết kế một lược đồ cơ sở dữ liệu cho [phần cụ thể của hệ thống]. Dựa trên các yêu cầu của chúng ta, bạn có thể đề xuất một thiết kế lược đồ ban đầu không? Vui lòng bao gồm các bảng, trường khóa và mối quan hệ. Ngoài ra, hãy xem xét các chiến lược lập chỉ mục tiềm năng để có hiệu suất.

  • Để thiết kế API:

    Chúng ta đang планируем tạo một API RESTful cho [chức năng cụ thể]. Bạn có thể giúp thiết kế các *endpoint* mà chúng ta sẽ cần không? Đối với mỗi *endpoint*, hãy đề xuất phương thức HTTP, cấu trúc URL, định dạng yêu cầu/phản hồi và bất kỳ yêu cầu xác thực nào.

  • Để xem xét khả năng mở rộng:

    Khi chúng ta thiết kế hệ thống của mình, chúng ta cần đảm bảo rằng nó có thể mở rộng để xử lý [tải dự kiến]. Bạn có thể xem xét kiến trúc hiện tại của chúng ta và đề xuất các sửa đổi hoặc các thành phần bổ sung mà chúng ta có thể cần để đảm bảo khả năng mở rộng không? Vui lòng xem xét cả chiến lược mở rộng theo chiều dọc và chiều ngang.

Hãy nhớ rằng, bạn vẫn là kiến trúc sư chính của dự án của bạn. AI cung cấp các đề xuất, hiểu biết sâu sắc và phân tích, nhưng các quyết định cuối cùng là của bạn. Sự hiểu biết của bạn về các yêu cầu kinh doanh, kinh nghiệm của bạn với các hệ thống tương tự và trực giác của bạn về những gì sẽ hoạt động tốt nhất cho bối cảnh cụ thể của bạn đều rất quan trọng. Sử dụng AI để tăng cường và thách thức suy nghĩ của bạn, chứ không phải thay thế nó.

Kết luận

Trong phần đầu tiên của loạt bài viết này, chúng ta đã khám phá cách AI có thể hỗ trợ bạn trong giai đoạn lập kế hoạch, thiết kế và kiến trúc của một dự án phần mềm. Chúng ta đã thảo luận về tầm quan trọng của việc thiết lập môi trường phát triển phù hợp, thay đổi tư duy để coi AI như một cộng tác viên và tạo một cơ sở kiến thức cho trợ lý AI của bạn.

Chúng ta cũng đã xem xét các prompt cụ thể mà bạn có thể sử dụng để chia nhỏ các dự án thành các thành phần có thể quản lý được, lập lộ trình dự án và thiết kế kiến trúc hệ thống.

Hy vọng bài viết này hữu ích cho bạn!

Nguồn tham khảo: https://aalapdavjekar.medium.com/ai-assisted-software-development-a-comprehensive-guide-with-practical-prompts-part-1-3-989a529908e0