Đơn vị 3 / 12

Mã hóa và lập trình ghép nối với AI

Lợi nhuận:

  • Khả năng viết các hàm, lớp và mô-đun cho AI với các định nghĩa ràng buộc đầu vào và đầu ra rõ ràng
  • Khả năng sử dụng AI làm đối tác lập trình cặp và tiến bộ từng bước, theo từng phần nhỏ, có thể kiểm chứng
  • Khả năng bắt lỗi logic và trường hợp biên bằng cách biên dịch mã do AI tạo ra và chạy mã đó với các ví dụ nhỏ

Lập trình cặp là khi hai nhà phát triển làm việc trên cùng một vấn đề, một người viết và người kia sửa đổi. Mã hóa bằng AI là phiên bản kỹ thuật số của chính mối quan hệ này: bạn đặt ra hướng đi, các ràng buộc và tiêu chí chấp nhận; AI tạo ra bản nháp nhanh chóng; Bạn xác minh từng bước bằng cách biên dịch và kiểm tra nó. Cái bẫy lớn nhất ở đây là bảo AI “viết cho tôi ứng dụng này từ đầu đến cuối” và mù quáng chấp nhận một khối 200 dòng. Lập trình cặp tốt tiến hành theo từng bước nhỏ: mỗi bước phải dễ hiểu, có thể kiểm tra được và có thể đảo ngược.

Trong phần này, bạn sẽ học cách in các hàm, lớp và mô-đun với hợp đồng đầu vào-đầu ra rõ ràng; Cách hướng dẫn AI từng bước; và chúng ta sẽ xem cách nắm bắt các lỗi logic và trường hợp biên bằng cách chạy mã mà nó tạo ra với các ví dụ nhỏ. Mục tiêu không phải là tốc độ mà là tốc độ đã được kiểm chứng.

Các khái niệm: Hợp đồng đầu vào-đầu ra: Một định nghĩa rõ ràng về đầu vào của một hàm và đầu ra cũng như hành vi lỗi mà nó hứa hẹn. Trường hợp cạnh: Đầu vào không bình thường nhưng thực sự có thể xảy ra (trống, 0, âm, rất lớn, rỗng). Phát triển tăng dần: Tiến hành với các phần nhỏ, hoạt động và xác nhận từng bước.

Mã in với hợp đồng ròng

Cơ sở của mã chất lượng là xác định chính xác “điều bạn muốn” trước khi bắt đầu công việc. Khi viết một hàm cho AI, hãy cung cấp cho nó năm điều: ngôn ngữ và phiên bản, loại và ý nghĩa đầu vào, đầu ra, điều kiện lỗi và các ràng buộc (hiệu suất, lệnh cấm thư viện bên ngoài, kiểu dáng). Điều này ngăn cản AI đoán.

  1. Viết hợp đồng. Đầu vào, đầu ra, lỗi, ràng buộc.
  2. Yêu cầu một đơn vị nhỏ. Một chức năng có một trách nhiệm duy nhất; Nó không phải là một mô-đun lớn.
  3. Yêu cầu một khối kiểm tra. Thêm một vài lần chạy/kiểm tra mẫu bên cạnh mã.
  4. Biên dịch và chạy. Hãy thử với các trường hợp Edge, xác minh đầu ra bằng mắt.
  5. Đi tới bước tiếp theo. Sau khi một phần được xác nhận, hãy xây dựng nó.

Lời nhắc hàm được ký hợp đồng: "Viết hàm cho TypeScript 5. Mục đích: tính tổng số lượng mặt hàng trong giỏ hàng. Đầu vào: { giá: số, số lượng: số [] mảng. Đầu ra: số (tổng). Quy tắc: ném lỗi nếu số lượng hoặc giá âm; trả về 0 cho mảng trống; làm tròn số đến 2 chữ số thập phân cho lỗi thập phân. Không sử dụng thư viện bên ngoài. Thêm 5 trường hợp kiểm tra bên dưới hàm (bình thường, trống, số lượng âm, giá thập phân, mục đơn).”

Dẫn dắt AI như một cặp

Tiến bộ tốt trong lập trình cặp là một cuộc đối thoại chứ không phải là một yêu cầu lớn. Đầu tiên, yêu cầu bộ xương và chạy nó; sau đó thêm trạng thái cạnh; sau đó sửa lỗi. Cách tiếp cận này giúp mã dễ hiểu và giúp bạn kiểm soát được mọi bước.

Lời nhắc về tiến trình tăng dần: "Chúng tôi sẽ viết một trình đọc đọc tệp CSV và chuyển đổi các dòng thành một đối tượng. Hãy đi TỪNG BƯỚC, chuyển sang bước tiếp theo mà không cần tôi xác nhận từng bước. Bước 1: chỉ viết khung chia tệp thành các dòng và tách dòng tiêu đề. Chưa thêm chuyển đổi loại hoặc xử lý lỗi. Hãy viết ngắn gọn, giải thích."

Giải thích và biện minh cho lời nhắc mã: "Giải thích hàm bạn vừa viết, không phải từng dòng mà là từng quyết định: bạn đã đưa ra quyết định thiết kế nào và tại sao, bạn đã xử lý trường hợp khía cạnh nào và bằng cách nào, trường hợp nào bạn cố tình loại trừ? Hãy liệt kê 3 giả định trong mã mà tôi không nên bỏ qua."

Mẹo: Không chấp nhận mã do AI tạo mà không hiểu nó. “Giải thích điều này cho tôi, bạn đã đưa ra giả định gì?” Câu hỏi vừa tiết lộ những lỗi ẩn vừa cho phép bạn bảo vệ mã đó, vì mã đó vẫn là trách nhiệm của bạn. Đưa mã bạn không hiểu vào sản xuất cũng giống như gửi hợp đồng mà không ký.

Nhắc yếu / Nhắc mạnh

YẾU:"Viết hàm sắp xếp."(Kết quả: ngôn ngữ nào, nội dung đang được sắp xếp, nó có ổn định không, hạn chế về hiệu suất là gì, mã mơ hồ và có thể không phù hợp với yêu cầu.) MẠNH:"Đối với Java 17, hãy viết phương thức sắp xếp đối tượng Danh sách<Employee> trước theo bộ phận (theo bảng chữ cái), sau đó theo mức lương (giảm dần). KHÔNG THAY THẾ danh sách ban đầu, trả về danh sách mới. Để bộ phận rỗng ở cuối. Giải thích độ phức tạp của phương thức trong dòng nhận xét. chỉ định thêm một khối thử nghiệm chính với 4 mẫu."

Lời nhắc mạnh mẽ; Bao gồm tiêu chí sắp xếp (hai cấp độ), quy tắc tác dụng phụ (thay thế bản gốc), hành vi không có giá trị và kỳ vọng kiểm tra. Nếu không có những chi tiết này, AI sẽ tạo ra một giải pháp hợp lý nhưng không chính xác; ví dụ: nó có thể làm hỏng danh sách gốc và điều này sẽ dẫn đến lỗi im lặng ở nơi khác.

Xác thực với các trường hợp cạnh và mẫu nhỏ

Mã hoạt động trong tình huống vui vẻ không phải là mã chính xác. Có ý thức ép buộc từng chức năng được tạo ra:

Loại vỏ cạnh

đầu vào mẫu

hành vi dự kiến

đầu vào trống

Mảng/chuỗi trống

Không phải lỗi, kết quả trống hợp lý

Không/âm

0, -1

Hành vi được xác định và đúng đắn

giá trị lớn

Hàng triệu bản ghi

Kiểm soát tràn/hiệu suất

null/không xác định

chỗ trống

Lỗi được kiểm soát hoặc mặc định

Trùng lặp/bất thường

thứ tự lặp đi lặp lại, đảo ngược

kết quả đúng

Hộp đựng nhỏ

Trường hợp 1 - Lỗi làm tròn im lặng. AI viết hàm thu tiền kiểu thập phân (float); 0,1 + 0,2 cho 0,30000000000000004. Lỗi được giải quyết khi người kỹ sư thêm quy tắc "Làm tròn đến 2 chữ số và dùng toàn bộ đồng xu". Quy tắc 3 dòng ngăn chặn sự chênh lệch hàng ngàn xu trong việc đối chiếu hàng tháng.

Trường hợp 2 - Bẫy tác dụng phụ. AI viết một phương thức “sắp xếp” một danh sách nhưng sửa đổi danh sách gốc tại chỗ. Hành vi không mong muốn xảy ra do mô-đun khác sử dụng cùng một danh sách. Nếu ràng buộc "thay đổi bản gốc" có trong lời nhắc, lỗi sẽ không bao giờ xảy ra; bị vướng vào việc xem xét mã và ngăn cản việc gỡ lỗi trong 2 giờ.

Trường hợp 3 - Thu nhập từng bước. Nhà phát triển in mô-đun nhập 150 dòng cùng một lúc; Khi anh ta tìm thấy một sai lầm, anh ta không thể tìm ra nó đến từ đâu. Một nhà phát triển khác chia công việc tương tự thành 5 bước nhỏ, kiểm tra mỗi bước trong 2 phút và bắt lỗi ngay ở bước thứ 3.

Những lỗi thường gặp

  • In khối lớn trong một yêu cầu. Mã rủi ro khó hiểu và khó gỡ lỗi được sinh ra.
  • Yêu cầu mã mà không đưa ra hợp đồng. Nếu lỗi đầu vào-đầu ra không rõ ràng, AI sẽ đoán và sai.
  • Chỉ cần thử nghiệm kịch bản hạnh phúc. Nếu đầu vào trống, rỗng, âm và lớn không được thử, lỗi sẽ được để lại cho quá trình sản xuất.
  • Chấp nhận mà không hiểu. Mã bạn không tiết lộ là một khoản nợ mà bạn không thể bảo vệ được.
  • Bỏ qua các loại nhạy cảm như tác dụng phụ và tiền/ngày. Tiền thả nổi với lịch sử vượt thời gian là một nguồn sai sót kinh điển.

Tóm lại

Viết mã bằng AI là lập trình cặp có kỷ luật: hợp đồng rõ ràng, các bước nhỏ, xây dựng và kiểm thử ở từng bước. Việc đưa ra bộ tứ ràng buộc đầu vào-đầu ra-lỗi-lỗi ngay từ đầu sẽ quyết định chất lượng của mã. Việc giải thích mã mà nó tạo ra và buộc nó sử dụng các trường hợp đặc biệt sẽ làm lộ rõ ​​các lỗi tiềm ẩn trong một kịch bản vui vẻ. Nguồn gốc của tốc độ không phải là sự chấp nhận mù quáng; là dự thảo nhanh chóng cộng với xác minh nhanh chóng.

Nhiệm vụ ứng dụng

Chọn một hàm nhỏ nhưng thực tế (ví dụ: tổng giỏ hàng, chênh lệch ngày, phân tích văn bản). In bằng cách sử dụng lời nhắc chức năng được ký hợp đồng; Thêm ít nhất 5 kịch bản thử nghiệm bên cạnh nó. Chạy mã và thử 5 trường hợp đặc biệt một cách có ý thức, sử dụng bảng làm hướng dẫn. Tìm lỗi trong ít nhất một trường hợp biên (nếu không, hãy thiết kế đầu vào mới để thực hiện chức năng), sửa lỗi bằng AI và xác minh bằng cách kiểm tra lại xem bản sửa lỗi có hiệu quả hay không.

danh sách kiểm tra

  • [ ] Tôi đã viết một hợp đồng bao gồm đầu vào, đầu ra, lỗi và các ràng buộc.
  • [ ] Tôi đã tạo mã theo từng bước nhỏ thay vì một khối lớn.
  • [ ] Tôi đã thêm khối chạy thử nghiệm/mẫu bên cạnh mã.
  • [ ] Tôi đã thử nghiệm có chủ ý ít nhất 5 trường hợp đặc biệt.
  • [ ] Tôi đã giải thích mã cho AI và xem xét các giả định của nó.
  • [ ] Tôi đã sửa lỗi được tìm thấy và xác nhận việc sửa lỗi bằng cách kiểm tra lại.