- Lập trình là một hành vi sáng tạo nhằm dần tinh chỉnh những đặc tả mơ hồ thành chính xác, và AI tăng tốc quá trình này bằng cách chuyển đặc tả tiếng Anh thành code
- 'Vibe coding' cho phép một phong cách phát triển dựa trên cảm giác, nhưng không thể tránh được vấn đề về độ phức tạp và lỗi do rò rỉ trừu tượng
- Con người sử dụng trừu tượng hóa và nén thông tin để xử lý độ phức tạp, và đó chính là giá trị cốt lõi của lập trình
- Trong kỷ nguyên AGI, AI được kỳ vọng sẽ hỗ trợ những mức trừu tượng tốt hơn, giúp tạo ra code tinh xảo và giàu tính nghệ thuật
- Trái với nhận định “code đã chết”, AI được xem là công cụ mở ra một khởi đầu mới cho việc lập trình chứ không phải sự kết thúc của nó
Cái chết của code là một tuyên bố bị phóng đại
- Chỉ ra sự mơ hồ của đặc tả bằng tiếng Anh và giới hạn của độ chính xác, bài viết cho rằng lập trình là hành vi giống như viết lách, liên tục lặp lại để nâng cao độ chính xác
- Qua trích dẫn của Bertrand Russell, bài viết nhấn mạnh rằng “mọi thứ đều mơ hồ cho đến khi ta cố gắng làm cho nó chính xác”
- AI nhanh chóng chuyển những đặc tả viết bằng tiếng Anh thành code có thể chạy được, giúp người dùng dần cụ thể hóa kết quả mong muốn
- 'Vibe coding' là cách phát triển mang tính cảm giác khi phản hồi với những gì AI tạo ra, nhưng điều này có thể tạo ra ảo tưởng về một mức trừu tượng chính xác
- Khi trừu tượng bị rò rỉ, các lỗi không lường trước sẽ xuất hiện, và vấn đề này càng nghiêm trọng khi quy mô tăng lên
- Bài viết giới thiệu trường hợp của Dan Shipper: sau khi trình soạn thảo văn bản cộng tác được làm bằng 'vibe coding' trở nên phổ biến, nó đã sập vì vấn đề độ phức tạp
- “Cộng tác trực tiếp” thoạt nhìn có vẻ đơn giản theo trực giác, nhưng trên thực tế lại là một bài toán rất khó, cho thấy bản chất của độ phức tạp
Trừu tượng hóa và kiểm soát độ phức tạp
- Con người chỉ có thể nhận thức khoảng 7±2 mục cùng lúc, nên cách duy nhất để xử lý độ phức tạp là ‘nén’, tức trừu tượng hóa
- Qua trích dẫn của Edsger Dijkstra, bài viết nhấn mạnh rằng “mục đích của trừu tượng hóa không phải là sự mơ hồ mà là độ chính xác ở một tầng ý nghĩa mới”
- Trường hợp Sophie Alpert đơn giản hóa sơ đồ luồng thông báo phức tạp của Slack được đưa ra làm ví dụ
- Cốt lõi của lập trình là tạo ra những mức trừu tượng tốt hơn để xử lý độ phức tạp, và vẻ đẹp đó có thể được tìm thấy trong functional reactive programming cùng nhiều hướng tiếp cận khác
- Ngay cả những bài toán vốn dĩ phức tạp như trình soạn thảo văn bản cộng tác cũng có thể dần được chinh phục thông qua các công cụ trừu tượng như ReactJS hay TailwindCSS
Kỷ nguyên AGI và vai trò của code
- Khi AI ngày càng phát triển nhanh hơn và rẻ hơn, cuối cùng nó sẽ đạt tới trí tuệ không thể phân biệt với con người (AGI)
- Trong kỷ nguyên AGI, ai cũng có thể sử dụng năng lực trí tuệ mạnh đến mức tương đương “100 thiên tài cấp Karpathy” với chi phí thấp
- Tuy nhiên, điều này không nhằm sản sinh ra ‘nhiều code tệ hơn’, mà sẽ được dùng như công cụ để tạo ra các mức trừu tượng tốt hơn và hiểu rõ hơn về độ phức tạp
- Code không chỉ là phương tiện để tạo ra phần mềm mà còn là một sản phẩm nghệ thuật quan trọng tự thân, và code viết tốt được ví như thơ
- Cũng như không tồn tại ‘vibe writing’ trong viết lách, coding cũng không thể bị thay thế bằng một hành vi thuần cảm tính
- Khi AGI xuất hiện, máy móc sẽ có thể viết ra code ‘không phải đồ tạp nham (non-slop)’, và đó sẽ là một bước tiến huy hoàng cho nhân loại
AI và sự cải thiện chất lượng code
- Hiện tại AI vẫn tạo ra code chưa hoàn hảo, nhưng các lập trình viên đang sử dụng nó với sự cân nhắc đó
- Giống như quan điểm của Simon Willison, AI nên được sử dụng như một công cụ để tạo ra code tốt hơn
- Khi AGI xuất hiện, nó trước tiên sẽ được đưa vào giải quyết những bài toán trừu tượng khó nhất, để cải thiện các hệ thống phức tạp như thư viện trình soạn thảo cộng tác
- Bài viết giới thiệu trường hợp phát triển framework React full-stack (vtrr) cho Val Town bằng Opus 4.6
- Nó đã giải quyết ngay lập tức các vấn đề còn tồn đọng liên quan đến React Router 7, đồng thời xử lý độ phức tạp một cách thanh nhã bằng bản demo một file duy nhất dài 50 dòng
- Điều này cho thấy việc tạo ra code tinh xảo thông qua sự hợp tác giữa AI và con người là hoàn toàn khả thi
Tương lai của code và giá trị của chủ nghĩa hình thức
- Nhiều người trong xã hội tin rằng “code đã chết”, nhưng đó là sai lầm tương tự như tuyên bố sự kết thúc của những câu chuyện chỉ vì máy in được phát minh
- AI không phải là sự kết thúc của coding mà là một khởi đầu mới của coding
- Qua các trích dẫn của Edsger Dijkstra, Tony Hoare và Charles Babbage, bài viết nhấn mạnh rằng tư duy hình thức và sức mạnh nén của ký hiệu đã mở rộng năng lực tư duy của con người
- Dijkstra nói rằng việc sử dụng ngôn ngữ hình thức nên được xem là một đặc quyền chứ không phải gánh nặng
- Hoare đối chiếu hai cách tiếp cận: “thiết kế đơn giản với lỗi rõ ràng là không có” và “thiết kế phức tạp mà lỗi không rõ ràng”
- Babbage chỉ ra rằng sức nén của ký hiệu là một lực thúc đẩy tư duy
- Kết luận, code không hề chết mà ngược lại đang nổi lên như một công cụ sáng tạo còn mạnh mẽ hơn trong kỷ nguyên AI
1 bình luận
Ý kiến trên Hacker News
Chris Lattner đã xem xét một trình biên dịch được viết bằng Claude AI, và cho rằng không có gì mang tính đột phá
AI có xu hướng tái tổ hợp kiến thức sẵn có theo kiểu trung bình, nên không thể tự tạo ra tư duy phản biện hay các mô hình mới
Con người có thể suy nghĩ vượt ra ngoài đồng thuận hiện có, nhưng AI lại có lực kéo quay về phía đồng thuận đó
Cuối cùng, AI là một kẻ tuân thủ chuẩn mực (conformist), và đó vừa là điểm mạnh vừa là điểm yếu của nó
Bài viết liên quan
Thay vì phải mất hàng giờ tự lần mò tài liệu để hiểu các cấu hình xác thực phức tạp như OAuth hay SAML, LLM có thể nhanh chóng tạo ra mã tích hợp có thể chạy được
Tôi cũng dùng AI như một kiểu rubber duck debugging để sắp xếp lại suy nghĩ của mình khi trò chuyện với nó
Những cuộc trao đổi như vậy có mức độ phức tạp mà người không có kinh nghiệm phát triển thực tế khó theo kịp
Điều đáng lo thực sự là liệu AI có làm giảm nhu cầu đến mức ngành rơi vào tình trạng cung vượt cầu hay không
Nếu các bài toán kinh doanh mới vẫn tiếp tục xuất hiện thì AI sẽ là công cụ hữu ích, còn nếu không thì việc làm vẫn sẽ giảm dù có AI hay không
Về bản chất, mạng nơ-ron thực hiện nội suy (interpolation) chứ không phải ngoại suy (extrapolation)
Tức là trong vùng đã học thì rất tinh vi, nhưng ra ngoài vùng đó thì không thể dự đoán được
Bài trên Wikipedia và ví dụ SolidGoldMagikarp cho thấy điều này rất rõ
Mục tiêu của Claude không phải là đổi mới, mà là chứng minh rằng “AI có thể tạo ra một trình biên dịch hay không”
Nhìn vào các trường hợp như AlphaDev hay AlphaEvolve, hoàn toàn có thể AI sẽ thực sự tạo ra đổi mới thông qua học khám phá và kết hợp tri thức
Trong đa số trường hợp, chúng ta muốn một công cụ có thể dự đoán được, chứ không muốn một thực thể bất ổn tự học lấy
AI có khả năng sắp xếp các yêu cầu mâu thuẫn để tạo ra một triển khai nhất quán
Ví dụ, nó có thể phản hồi logic trước những yêu cầu bất khả thi như “hãy vẽ 7 đường màu đỏ bằng mực xanh”
Việc Claude thực sự nói rằng “điều đó là bất khả thi nên câu trả lời trung thực là vẽ 0 đường” là một ví dụ của tư duy phản biện
Về câu hỏi “AI có thể tạo ra công nghệ mới không?”, tôi khá hoài nghi
AI phụ thuộc vào dữ liệu có sẵn, nên khi xuất hiện ngôn ngữ hay framework mới, việc thiếu dữ liệu huấn luyện có thể gây ra nguy cơ làm chậm tốc độ tiến hóa
Lập trình bằng AI thậm chí có thể làm giảm việc “phát minh lại bánh xe”, và giúp thoát khỏi hội chứng NIH
Dù gần như không có dữ liệu huấn luyện, nó vẫn có thể đọc tài liệu, viết mã và thực hiện các thử nghiệm mới
Chúng ta nên để ngỏ khả năng rằng một ngày nào đó AI cũng có thể thực hiện sự tổng hợp công nghệ mang tính sáng tạo
Cuối cùng có thể sẽ đến thời kỳ các nhà phát triển phải trả tiền để được đưa vào dữ liệu huấn luyện AI
Ví dụ, các nền tảng như skills.sh cung cấp hệ thống kỹ năng để dạy AI về framework mới
Chỉ với tài liệu và mã ví dụ, AI đã có thể sử dụng ngay framework đó
Tôi có cảm xúc mâu thuẫn về code
Trong công việc, code là nợ, nhưng đồng thời cũng là niềm vui như một thú vui cá nhân
Tôi có cảm giác rằng thế giới kiểu máy tính trong Star Trek, nơi “chỉ cần nói yêu cầu là hệ thống tự xử lý”, đang đến gần
Rất nhiều nguồn lực trí tuệ của xã hội đang bị đổ vào công nghệ quảng cáo hay ngành công nghiệp giám sát
Nếu AI thay thế việc viết code, đó có thể trở thành cơ hội để tái phân bổ nhân tài
Tôi đang tạo ra một CRDT có thể di chuyển, xóa và sắp xếp trong cấu trúc cây mà không cần tombstone
Claude Code viết mã khá tốt, nhưng cứ liên tục cố thêm tombstone, nên tôi phải thuyết phục nó bằng chứng minh logic
Có vẻ AI vẫn chưa hoàn toàn có được kiểu hiểu biết cấu trúc tinh vi như thế này
Mỗi khi công nghệ mới xuất hiện, con người luôn trải qua một giai đoạn kỳ vọng quá mức và thử nghiệm
Qua quá trình đó, chúng ta học được giới hạn của công nghệ, đó là cách của con người
Lời hứa của lập trình tác tử nghe quá hấp dẫn, nhưng cuối cùng ai rồi cũng sẽ học được thực tế qua thử và sai
Thay vì nói rằng “code đã chết”, tôi cho rằng con người đang nâng mức trừu tượng lên thêm một tầng
Giờ đây chỉ cần viết đặc tả bằng tiếng Anh là AI có thể viết mã
Nhưng khi cần độ đặc tả chính xác (specificity) tuyệt đối, code vẫn hữu ích hơn
Giống như chỉnh sửa ảnh, khi cần kiểm soát chính xác thì tự làm vẫn tốt hơn, nhưng trong đa số trường hợp giao cho AI là đủ
Tôi nghĩ theo thời gian AI sẽ viết mã ổn định và an toàn hơn con người
Như Simon Willison đã nói, giá trị thực sự của vibe coding không phải là “nhanh hơn”, mà là tạo ra “mã tốt hơn”
Có thể tạo nguyên mẫu bằng nhiều mô hình thiết kế khác nhau, rồi lặp lại cải tiến theo các tiêu chí khả năng đọc, độ tin cậy và khả năng chịu lỗi
Giờ đây trong code review, nếu nói “hãy sửa phần này như thế này”, AI sẽ chỉnh ngay
Nhưng nhiều đồng nghiệp chỉ đang mong chờ một “thế giới nơi code biến mất”
Cách đây không lâu có bài báo nói Donald Knuth yêu cầu AI đưa ra một chứng minh, và AI đã tìm được một chứng minh trước đó chưa từng được biết đến
Nhưng nhiều khả năng đó không phải là khám phá mới, mà là việc tìm lại tài liệu đã bị lãng quên
Chính điểm này vừa khiến LLM trở thành công cụ nghiên cứu mạnh mẽ, vừa làm nó trông như thể có tính sáng tạo
Nếu đọc Dragon Book, bạn có thể làm ra một cái chạy được trong vài tháng, và trong quá trình đó sẽ hiểu toàn bộ nguyên lý
Tôi nghĩ ngôn ngữ lập trình là phương tiện để con người biểu đạt ý định một cách cô đọng
Nhưng đôi khi ngôn ngữ tự nhiên lại truyền đạt ý định chính xác và đậm đặc hơn
Một phép trừu tượng tốt là thứ giúp thu hẹp khoảng cách này, và DSL hay các ngôn ngữ thuộc họ ML/Lisp là ví dụ như vậy
Chẳng hạn như hướng dẫn Electric Clojure, nơi code có thể chứa đựng ý định tốt nhất
Cuối cùng, như Wittgenstein từng nói, “một bức tranh mơ hồ đôi khi lại chính là thứ chúng ta cần”