AI, code và trải nghiệm refactor file JS dung lượng lớn thông qua hợp tác giữa con người
(stdy.blog)(Sáng dậy xem lại thì thấy bài cũ bị lỗi định dạng, lại còn viết quá dài nên mình đăng lại bản tóm tắt)
Mình thấy người mới dùng ChatGPT khi muốn giải một "vấn đề phức tạp" cùng ChatGPT thường mắc 3 sai lầm
- Kỳ vọng ChatGPT sẽ đưa ra "đáp án" ngay lập tức
- Kỳ vọng ChatGPT sẽ đưa ra đáp án "ngay một lần"
- Vì kỳ vọng này không dễ được đáp ứng nên họ thất vọng, rồi chỉ dùng ChatGPT cho các vấn đề đơn giản, chỉ dùng một cách bị động, hoặc ngừng dùng hẳn
Kết quả là họ bỏ lỡ rất nhiều cơ hội nâng cao năng suất nhờ AI
Đó cũng là hình ảnh của mình cho đến vài tháng trước
- Vì tốc độ tải ban đầu của ứng dụng chậm nên mình phân tích kích thước bundle và phát hiện một file JS cực lớn. Mình nhận ra có thể xóa phần lớn trong file dài 18.500 dòng này
- Lúc đầu mình vừa nhìn vừa xóa thủ công, nhưng quá nhàm chán và liên tục mắc lỗi
- Bắt đầu làm việc với ChatGPT. Làm một lúc mới nhận ra mình cũng đang kỳ vọng như người mới rằng nó sẽ cho đáp án ngay một lần
- Sau khi nhận ra điều đó, mình dùng chiến lược hợp tác ba bên và nhanh chóng đạt được tiến triển rất lớn
Tiến trình công việc
Hãy refactor giúp tôi
- Mình đưa một hàm, mô tả cách mình muốn, rồi nhờ refactor → thất bại. Thậm chí còn không compile được
- Nó không hiểu cấu trúc code để thay đổi mà chỉ xóa dần từng dòng từ trên xuống
Hãy viết code để refactor
- Mình bảo đừng trực tiếp làm mà hãy viết code JS để refactor → thất bại. Cách này cũng vẫn là xóa từng dòng từ trên xuống
- Nghĩ lại thì có lẽ ChatGPT chưa được học đủ về các ca refactor quy mô lớn kiểu này
Hãy viết code refactor bằng AST
- Mình không muốn xóa từng dòng mà muốn xóa theo block. Nói cách khác, cần hiểu cú pháp của code, nên mình nghĩ dùng AST sẽ phù hợp
- Mình gán cho ChatGPT vai trò một kỹ sư có kinh nghiệm phát triển ESLint và yêu cầu viết bằng AST, thì nó tạo ra một boilerplate dựa trên babel rất tốt. Tiến triển lớn
- Vì mình không có kinh nghiệm với babel nên vừa học cùng ChatGPT vừa bổ sung logic, nhưng cuối cùng vẫn gặp khó khăn. Xử lý logic phức tạp không hề dễ
Tôi đã thử thế này với AST. Phần này không ổn lắm, nếu là bạn thì bạn sẽ làm thế nào?
- Mình lại nhận ra mình đang cố lấy đáp án đúng ngay trong một lần, nên đổi chiến lược. Khi nghĩ rằng không nhất thiết chỉ traverse 1 lần thì mọi thứ bắt đầu trôi chảy
- Tiến hành rất nhanh bằng cách chạy thử đơn giản trước, xem kết quả rồi tích lũy logic dần dần
- Những chỗ cụ thể chưa ổn thì mình hỏi ChatGPT cách triển khai đúng mục tiêu đó
- Cuối cùng, những phần khó biến thành quy tắc thì mình hoàn thiện bằng mắt và tay. Lúc này lượng code đã giảm đi rất nhiều nên có thể làm được
Kết quả
- Đoạn code 18.500 dòng giảm còn 1.335 dòng, và kích thước bundle của main chunk giảm khoảng 7,8%
- Kích thước file JS và logic cần cho lần tải ban đầu giảm xuống, nên tốc độ tải ban đầu được cải thiện nhẹ
- Có được kinh nghiệm và sự tự tin khi refactor code legacy dài và phức tạp bằng AST
- Có thêm sự tự tin rằng phần lớn các vấn đề phức tạp có thể được giải quyết hiệu quả thông qua hợp tác ba bên giữa AI + code + con người
Mô hình tư duy để giải quyết hiệu quả các vấn đề phức tạp cùng AI
- Hiểu AI giỏi việc gì, code giỏi việc gì, và con người giỏi việc gì.
- Phân tích vấn đề cần giải để tách riêng những phần phù hợp với AI/code/con người.
- Giúp AI tạo ra đoạn code đầu tiên tốt hơn, chạy thử code đó ở quy mô nhỏ rồi cùng AI cải thiện dần, và ở giữa chừng + giai đoạn cuối thì những gì con người làm dễ hơn sẽ do mình trực tiếp xử lý.
2 bình luận
Đọc rất hay.
Đã xóa bài viết trùng lặp.