Tôi hạnh phúc hơn khi tự tay viết mã
(abhinavomprakash.com)- Sau khi nhiều lần sử dụng các công cụ sinh mã dựa trên LLM, tác giả đã rediscover trạng thái đắm chìm và niềm vui khi tự tay viết mã
- Viết mã không chỉ là một hành vi tạo ra sản phẩm mà còn là quá trình hiểu không gian vấn đề và gọt giũa tư duy, và việc sinh tự động cản trở điều đó
- Rất khó xác minh tính chính xác của đoạn mã không do chính mình viết, và chỉ khi tự viết thì mới có thể nội hóa được ngữ cảnh
- Bằng cách sử dụng LLM một cách có giới hạn để tự tay cung cấp ngữ cảnh và chỉ dùng cho việc sửa một phần mã hoặc tạo kiểm thử, tác giả vẫn giữ được quyền chủ động trong tư duy
- Tác giả nhấn mạnh rằng nên ưu tiên độ sâu của tư duy và cảm giác hạnh phúc hơn năng suất, và cần cảnh giác nếu công cụ cản trở việc suy nghĩ
Trải nghiệm dùng công cụ sinh mã LLM và sự hoài nghi
- Tác giả đã dùng claude-code nhiều lần, nhưng lần nào cũng cảm thấy buồn bã và mất động lực, rồi cuối cùng xóa nó đi
- Mã được sinh tự động “trông có vẻ hợp lý” nhưng lại khiến tác giả đánh mất ý nghĩa của công việc mình làm
- Mỗi lần ngừng dùng công cụ, tác giả lại tìm lại được niềm vui của việc lập trình
- Lập trình không chỉ là triển khai mà là quá trình khám phá không gian vấn đề và học hỏi qua thất bại
- Muốn thực sự hiểu một API thì phải tự mình dùng thử; chỉ đọc tài liệu là không đủ
- Bản thân hành vi viết mã chính là phương tiện để cụ thể hóa tư duy
Mối quan hệ giữa tư duy và độ chính xác
> "Nếu bạn không viết ra mà chỉ nghĩ, thì bạn chỉ đang lầm tưởng rằng mình đang suy nghĩ." - Leslie Lamport
- Việc xác minh tính chính xác của mã không do mình viết khó hơn rất nhiều
- Trong quá trình tự viết, con người nội hóa ngữ cảnh của vấn đề, và điều này là thiết yếu để hiểu chất lượng của mã
- Khi phụ thuộc vào LLM, ta sẽ bỏ qua quá trình này, khiến sự hiểu biết về miền vấn đề bị suy yếu
Tính gây nghiện và tác dụng phụ của ‘vibe coding’
- Việc sinh mã bằng LLM có đặc tính gây nghiện vì mang lại phần thưởng dopamine tức thì
- Nó tạo ra ảo giác rằng “chỉ cần chỉnh prompt thêm một chút nữa là sẽ đúng”
- Cách làm này làm tăng quán tính tư duy, khiến não bộ trở nên thụ động và phụ thuộc vào LLM ngay cả với tác vụ đơn giản
- Ví dụ, ngay cả việc find-and-replace đơn giản cũng được giao cho LLM và cuối cùng lại tốn nhiều thời gian hơn
- Dù mã được tạo ra nhiều đến đâu, trách nhiệm rà soát và hiểu nó vẫn thuộc về con người, và điều đó ngược lại còn tạo ra điểm nghẽn
Cách công cụ định hình tư duy
- Từ góc nhìn “công cụ không hề trung lập”, công cụ cản trở việc suy nghĩ là công cụ tệ
- Năng lực cốt lõi của lao động tri thức là khả năng suy nghĩ sâu, nên cần cảnh giác với công nghệ cản trở điều đó
- Tuy vậy, tác giả không loại bỏ hoàn toàn LLM mà sử dụng nó theo cách có chủ đích và có giới hạn
- Chỉ sao chép những tệp cần thiết để cung cấp ngữ cảnh, và chỉ dùng cho việc sửa một phần mã hoặc viết kiểm thử
- Làm vậy giúp phạm vi thay đổi được sinh ra nhỏ hơn, và bản thân tác giả vẫn có thể tự nắm được cấu trúc tổng thể của codebase
- Điều này chuyển từ sinh thụ động sang ‘sinh có suy xét’, giúp duy trì tính năng động của não bộ và trạng thái flow
Cân bằng giữa hạnh phúc và năng suất
- Cuộc đời ngắn ngủi, và hạnh phúc cần được ưu tiên
- Việc tự động sinh toàn bộ tính năng có thể làm tăng năng suất, nhưng nếu nó gây ra bất an hiện sinh và cảm giác trầm uất thì về lâu dài lại phản tác dụng
- Tác giả thừa nhận rằng người đọc có thể đồng cảm hoặc không với cảm xúc của mình, nhưng
"Đừng sợ lựa chọn khác đi"
13 bình luận
Nhưng dù có máy tính, vẫn có những người thích tự tính bằng tay hoặc nhẩm tính.
Tôi cẩn trọng nghĩ rằng việc tự tay viết ra những phần có độ phức tạp rất cao và mang tính cốt lõi của logic nghiệp vụ, suy nghĩ thật kỹ về chúng rồi truyền đạt lại cho các kỹ sư AI trong quá trình đó, có lẽ cũng có thể giúp ích cho năng suất. Các nhà toán học cũng dùng những công cụ như máy tính, nhưng khi suy nghĩ về ý tưởng cốt lõi thì họ cũng ghi chép rất nhiều mà.
Dù đang sống trong một thế giới mà chỉ cần một cú bấm trên điện thoại là có thể chụp ảnh, vẫn luôn có những người dành hàng tiếng đồng hồ để vẽ một bức tranh. Có lẽ đây chỉ là sự khác biệt về quá trình và định hướng, chứ không phải vấn đề đúng hay sai.
Nhưng nghe chẳng khác nào đang nói rằng sẽ đối đầu trực diện với định hướng mà các công ty đang theo đuổi..
Tôi tôn trọng lý tưởng về hạnh phúc và sự thỏa mãn của mỗi cá nhân, nhưng xét từ góc độ một nghề nghiệp là cung cấp sức lao động và nhận tiền công thì đây có vẻ là một tư duy không phù hợp.
Nếu ai đó phớt lờ các chỉ số dài hạn và chỉ chạy theo những chỉ số ngắn hạn, thì dù là người hoàn toàn không liên quan, khi đi ngang qua cũng có thể sẽ muốn buột miệng chỉ trỏ kiểu “không phải làm như thế đâu, chậc chậc”.
Thế thì với một lập trình viên tin rằng bản thân đang đồng cam cộng khổ cùng doanh nghiệp, có đóng góp lớn và đang đảm nhận vai trò quan trọng trong công ty, cảm giác đó sẽ còn mạnh đến mức nào nữa chứ.
Ý là, rốt cuộc thì những lập trình viên giỏi, có năng lực phát triển thật sự lại thích vibe coding...
Không phải tôi nói đâu (mà là những người như Linus Torvalds hay Robert Martin).
Trước giờ tôi chỉ dùng nó cho các script Python. Có lẽ cũng khó mà nói là tôi thực sự thích thú với việc đó.
Tôi tìm đọc bài viết về Linus Torvalds thì có vẻ như ông ấy dùng nó cho mục đích sở thích, và vẫn chưa dùng nó cho việc phát triển Linux.
Ý kiến trên Hacker News
So sánh việc lập trình với nghề mộc. Dù máy móc có thể làm đồ nội thất, vẫn sẽ có người thích làm bằng tay. Viết code thủ công cũng vậy: vẫn có thể làm vì niềm vui, nhưng về sau sẽ khó còn là một nghề chuyên nghiệp
Tôi chọn cách nào cho kết quả nhanh nhất và tốt nhất trong dài hạn. Hiện tại vai trò đó thuộc về neovim và viết code thủ công. Khi tự tay gõ và hiểu sâu dự án, về lâu dài tôi có thể ra tính năng nhanh hơn. Những việc không giúp ích cho học hỏi thì giao cho LLM, và vì những việc như vậy khá nhiều nên tỷ lệ dùng LLM cũng cao
Vấn đề của vibecoding là cảm giác “thấy sướng” có thể làm mờ đi hiệu quả thực tế
Ném ra câu hỏi mỉa mai: “Chỉ vì thấy hạnh phúc mà sản lượng code tăng gấp 200 lần sao?”
AI rõ ràng có giá trị. Ví dụ khi chuyển một bảng DB 300 cột thành Rust struct, chỉ với prompt 15 từ đã sinh ra 900 dòng code. Với kiểu việc lặp lại như thế này, AI là hoàn hảo. Nhưng tôi không muốn giao hết mọi thứ cho nó. Chỉ dùng ở mức độ khiến mình thấy thoải mái
Câu hỏi cốt lõi là: “Trong lúc LLM viết code thay tôi thì tôi làm gì?” Không thể giao phó hoàn toàn cho LLM, mà giống như phải đứng bên cạnh trông nom. Lập trình viên junior thì phát triển lên, còn LLM thì không học hỏi. Vì thế có cảm giác niềm vui mentoring đã biến mất
Tò mò không biết tuyển dụng lập trình viên dạo này đã thay đổi ra sao. Không rõ có cho phép dùng LLM hay vẫn yêu cầu viết code thủ công
Tôi đã phát triển với tốc độ ngang vibecoding bằng phát triển dựa trên mô hình (MDD) từ trước khi có LLM. Mô hình dữ liệu chính là ứng dụng, còn LLM chỉ giúp viết thủ tục nhanh hơn một chút trên đó. Định hướng của mô hình dữ liệu vẫn do tôi quyết định
AI coding có thể chia thành ba loại
Xã hội hiện đại đang biến thành một cấu trúc nơi chỉ cần bấm nút là nhận được dopamine. Vì thế mọi thứ đều có cảm giác hỗn loạn
Dạo này cứ liên tục có mấy bài kiểu tự an ủi tinh thần của các lập trình viên tụt hậu được đăng lên nhỉ. Dù sao thì cũng không thể ngăn được dòng chảy của thời đại.
Cái này thật sự vượt quá giới hạn rồi.
Tôi cũng đồng ý với ý kiến này: dù bản thân có khăng khăng tự tay code đi nữa thì trừ khi làm kinh doanh một mình,
cuối cùng cũng khó tránh khỏi bị thay thế, nhưng có vẻ họ không nhận ra điều đó.