Tôi tìm thấy khá nhiều danh sách đọc rộng rãi về tất cả các chủ đề học máy liên quan đến mã hóa .
Như bạn có thể thấy, mọi người đã cố gắng áp dụng học máy vào mã hóa, nhưng luôn trong các lĩnh vực rất hẹp, không chỉ là một máy có thể xử lý tất cả các cách mã hóa hoặc gỡ lỗi.
Phần còn lại của câu trả lời này tập trung vào máy "gỡ lỗi" phạm vi tương đối rộng của bạn và tại sao điều này chưa thực sự được thử (theo như nghiên cứu của tôi về chủ đề này cho thấy).
Tôi đã làm lại một phần dài của câu trả lời. Tóm lại (điều quan trọng đối với phần tiếp theo): theo phương pháp học máy hiện tại, bất cứ điều gì con người có thể học, máy cũng có thể. Chúng tôi chỉ bị giới hạn bởi lĩnh vực vật lý (tốc độ CPU, kích thước của máy, ...), không phải là khả năng áp dụng giới hạn được cho là của chính thuật toán học tập.
Những nghiên cứu nào đã được thực hiện cho đến nay trong việc áp dụng học máy vào phát triển mã? Làm thế nào về gỡ lỗi?
Vấn đề ở đây không phải là không thể, mà là nó là một chủ đề cực kỳ phức tạp.
Con người thậm chí không tiến gần đến việc xác định một tiêu chuẩn mã hóa phổ quát mà mọi người đều đồng ý. Ngay cả những nguyên tắc được thống nhất rộng rãi nhất như RẮN vẫn là một nguồn để thảo luận về việc nó phải được thực hiện sâu đến mức nào . Đối với tất cả các mục đích thực tế, nó hoàn toàn có thể tuân thủ RẮN trừ khi bạn không có ràng buộc tài chính (hoặc thời gian) nào; điều đơn giản là không thể trong khu vực tư nhân nơi phát triển nhất. RẮN là một hướng dẫn, không phải là một giới hạn cứng.
Trong trường hợp không có thước đo khách quan về đúng và sai, làm thế nào chúng ta có thể đưa ra một phản hồi tích cực / tiêu cực để làm cho nó học hỏi?
Tốt nhất, chúng ta có thể có nhiều người đưa ra ý kiến của riêng họ cho máy ("đây là mã tốt / xấu") và kết quả của máy sau đó sẽ là "ý kiến trung bình". Nhưng điều đó không nhất thiết giống như một giải pháp chính xác . Nó có thể, nhưng nó không được đảm bảo.
Thứ hai, để gỡ lỗi nói riêng, điều quan trọng là phải thừa nhận rằng các nhà phát triển cụ thể có xu hướng đưa ra một loại lỗi / lỗi cụ thể. Bản chất của lỗi có thể trong một số trường hợp bị ảnh hưởng bởi nhà phát triển đã giới thiệu nó.
Ví dụ, vì tôi thường liên quan đến việc sửa lỗi mã của người khác tại nơi làm việc, tôi có một loại kỳ vọng về loại lỗi mà mỗi nhà phát triển dễ mắc phải. Đưa ra một vấn đề nhất định, tôi biết rằng dev A có khả năng quên cập nhật tệp cấu hình, trong khi dev B thường ghi các truy vấn LINQ xấu. Dựa trên nhà phát triển, tôi có thể hướng tới tệp cấu hình hoặc LINQ trước.
Tương tự, bây giờ tôi đã làm việc tại một số công ty với tư cách là một nhà tư vấn và tôi có thể thấy rõ rằng các loại lỗi có thể bị thiên vị đối với một số loại công ty. Đó không phải là một quy tắc khó và nhanh mà tôi có thể chỉ ra, nhưng có một xu hướng nhất định.
Máy có thể học cái này không? Nó có thể nhận ra rằng dev A có nhiều khả năng làm rối cấu hình và dev B có nhiều khả năng làm rối một truy vấn LINQ không? Tất nhiên là có thể. Như tôi đã nói trước đây, bất cứ điều gì con người có thể học, một chiếc máy cũng có thể.
Tuy nhiên, làm thế nào để bạn biết rằng bạn đã dạy cho máy đầy đủ các khả năng? Làm thế nào bạn có thể cung cấp cho nó một bộ dữ liệu nhỏ (không phải toàn cầu) và biết thực tế là nó đại diện cho toàn bộ lỗi? Hoặc, thay vào đó, bạn sẽ tạo các trình gỡ lỗi cụ thể để giúp các nhà phát triển / công ty cụ thể, thay vì tạo một trình gỡ lỗi có thể sử dụng chung?
Yêu cầu một trình gỡ lỗi học máy cũng giống như yêu cầu một Sherlock Holmes học máy. Không thể tạo ra một thứ, nhưng thường là lý do cốt lõi để trở thành một trình gỡ lỗi / Sherlock dựa trên các đánh giá chủ quan khác nhau tùy theo từng đối tượng và chạm vào nhiều kiến thức / lỗ hổng có thể có.
Việc thiếu các kết quả chính xác / không chính xác có thể chứng minh nhanh chóng khiến bạn khó có thể dễ dàng dạy máy và xác minh rằng nó đang tiến triển tốt.