- Dù hoàn thành dự án bằng AI tạo sinh, nếu người yêu cầu và chủ thể thực sự tạo ra sản phẩm là khác nhau thì rất khó có được cảm giác thành tựu “chính tay tôi đã làm ra nó”
- Prompt cần có tầm nhìn, phán đoán, giao tiếp và kỹ thuật, nhưng gần với kỹ năng giao việc chế tác cho một thực thể khác hơn là kỹ năng tự tay làm ra
- Hệ thống flashcard tiếng Tây Ban Nha dài 177 dòng do tác giả tự viết mất thời gian lâu hơn Claude khoảng 50 lần, nhưng mang lại niềm tự hào lớn hơn bất kỳ đoạn mã nào do AI tạo ra
- Trong khi compiler, assembler và búa được cảm nhận như công cụ của người làm, thì AI phản hồi bằng ngôn ngữ con người lại trông giống một người được giao việc, làm mờ ranh giới giữa công cụ và tác nhân làm thay
- Tạo sinh qua AI cũng có thể là một hành vi sáng tạo, nhưng hoàn thành một kết quả và trực tiếp tự tay làm ra nó không mang lại cùng mức độ thỏa mãn cá nhân, và ranh giới đó cũng khó được định nghĩa rõ ràng
Cảm giác thành tựu bị AI trong phát triển phần mềm thay đổi như thế nào
- Các lập trình viên dùng AI tạo sinh và LLM đang đồng thời trải nghiệm những thay đổi trái ngược
- Có thể đánh mất tinh thần thủ công, việc giải quyết vấn đề ở mức thấp và niềm vui của việc tự tay viết code
- Nhưng cũng có thể tăng khả năng giải quyết vấn đề ở mức cao, hoàn thành những dự án bị trì hoãn và tìm thấy niềm vui mới
- Vượt lên trên những được-mất đó, câu hỏi cốt lõi là: liệu có thể cảm thấy mình là người đã làm ra thành phẩm do AI hoàn tất thay hay không
- Bài viết bắt đầu từ trải nghiệm của một lập trình viên đã code từ thời máy vi tính cá nhân thập niên 1980, làm trong ngành 20 năm và hiện giảng dạy khoa học máy tính
- Trên thang đo giữa chủ nghĩa không tưởng AI và tận thế AI, tác giả tự đánh giá mình nghiêng 65% về phía tận thế
- Tác giả dùng Claude Code nhưng vẫn song song tự viết code
Vẻ ngoài ‘đa tài’ được dựng nên bằng kết quả từ AI
- Phần mở đầu đưa ra nhiều thành phẩm trông như thể do chính tác giả làm ra
- Tiểu thuyết khoa học viễn tưởng The Vorrkai Interval với cảnh chiến đấu
- Tranh khắc gỗ tông pastel Mirrors of the Machine
- Hiên gỗ tuyết tùng mới xây trước nhà
- Mã roguelike phiêu lưu TUI viết bằng Rust
- Thực tế, tiểu thuyết, tranh và mã đều do AI tạo ra, còn hiên gỗ do các thợ lành nghề được trả công thi công
- Vai trò của tác giả chỉ là khởi đầu việc tạo ra và truyền đạt yêu cầu, nên thấy không thoải mái khi nói rằng những kết quả này là do mình làm ra
Vì sao khó nói “tôi đã làm ra nó”
- Với hiên gỗ do người khác thi công, tác giả cho rằng nói “tôi cho người lắp đặt” chính xác hơn là “tôi đã lắp nó”
- Tương tự, với mã do Claude tạo ra, tác giả diễn đạt không phải là “tôi đã làm ra” mà là “tôi đã khiến nó làm ra cho tôi”
- Vì không phải quan hệ tuyển dụng, tác giả cũng thấy không thoải mái khi gắn giấy phép MIT dưới tên mình cho sản phẩm do AI tạo, nên dùng Unlicense
- Ngay cả khi làm quản lý, tác giả cũng nói “đội của chúng tôi đã làm ra sản phẩm” chứ không nói “tôi đã làm ra sản phẩm”; nếu quản lý LLM thì sẽ nói “các agent của tôi đã làm ra nó”
- Việc tự thân hoàn thành một dự án vốn đã tốt, nhưng nếu dự án do mình khởi xướng lại được người khác hoàn tất thì mức độ thỏa mãn thấp hơn rất nhiều so với khi tự làm
- Thứ mất đi không chỉ là kỹ năng lập trình hay niềm vui giải quyết vấn đề, mà còn là trải nghiệm tự tay tạo ra một thứ gì đó
Bộ flashcard 177 dòng tự viết bằng tay
- Vợ của tác giả muốn một hệ thống học tiếng Tây Ban Nha đơn giản, trong đó có thể nhập các từ cần học vào bảng tính và xem chúng dưới dạng flashcard
- Tác giả tự mình triển khai và yêu cầu Claude không được sinh mã, chỉ hỏi những thông tin cơ bản như cách dễ nhất để lấy dữ liệu từ Google Sheets
- Tác giả dùng điểm cuối CSV của Google Sheets
- Viết tổng cộng 4 tệp và 177 dòng gồm 112 dòng JavaScript, 33 dòng CSS và 32 dòng HTML
- Dù mất thời gian lâu hơn lúc để Claude làm khoảng 50 lần, tác giả có thể gắn tên mình lên đó và nói rằng chính mình đã làm ra nó
- Dù không phải đoạn mã lớn hay đột phá, tác giả cảm thấy tự hào hơn rất nhiều so với bất kỳ mã nào Claude từng viết
- Cũng như người vợ là người khởi đầu yêu cầu nhưng không nói rằng mình đã viết hệ thống flashcard, người đưa ra yêu cầu không đồng nghĩa với người tạo ra sản phẩm
Viết prompt là một kỹ năng riêng biệt
- Một prompt hiệu quả rõ ràng cần có đóng góp của con người
- Phải áp dụng tầm nhìn
- Phải đánh giá kết quả
- Phải có kỹ năng giao tiếp và viết prompt
- Không phải mọi prompt hay mọi người dùng AI đều có hiệu quả như nhau, nên prompt cũng là một kỹ năng quan trọng
- Tuy vậy, nó gần với khả năng yêu cầu người khác tạo ra thứ mình muốn một cách hiệu quả hơn là năng lực trực tiếp chế tác
- Ngay cả prompt cho phần mềm cũng giống việc giao một thực thể khác làm phần mềm hơn là trực tiếp tự làm ra phần mềm
Vùng xám giữa compiler và AI
- Khi viết chương trình C hay Rust, tác giả không trực tiếp viết ra mã máy thực sự được thực thi, nhưng vẫn cảm thấy mình là người viết chương trình
- Việc chuyển từ mã C sang mã máy gần với một quá trình chính xác về mặt toán học, nhưng vẫn còn vài câu hỏi
- Clang và GCC tạo ra các lệnh khác nhau, nên kết quả không được quyết định nghiêm ngặt chỉ theo một cách duy nhất
- Dù mã máy khác nhau theo từng nền tảng, mã C vẫn có tính di động
- Ngay cả khi chỉ build trên Linux, vẫn có thể xem chương trình chạy trên Windows là do mình viết
- Khi yêu cầu Claude chuyển một chương trình Fibonacci đệ quy bằng C sang assembly x86_64 Linux, AI tạo ra mã có thể build và chạy được
- Đầu ra hiển thị đúng dãy Fibonacci từ
0: 0đến9: 34 - Nó cũng dùng XOR để đặt trạng thái thoát là 0
- Đầu ra hiển thị đúng dãy Fibonacci từ
- Vì mã C gốc do chính tác giả viết, nên dù assembly do Claude sinh ra, tác giả vẫn cảm thấy chương trình đó là do mình viết
- Việc chuyển từ assembly sang mã máy là một quá trình nghiêm ngặt và không mang tính thông minh, nên được cảm nhận như dùng công cụ mà không bị tước mất hành vi chế tác, giống như dùng búa để đóng đinh
Tiêu chí phân biệt công cụ với tác nhân làm thay
- Những việc tác giả trực tiếp làm gồm viết mã C rồi chạy nó, đóng đinh bằng búa và dùng assembler để biến assembly thành mã máy
- Những việc tác giả ra chỉ thị rồi giao cho người khác gồm viết phần mềm, thi công hiên gỗ và tạo tranh
- Tác giả không cảm thấy bức tranh do ChatGPT tạo ra là do mình vẽ, nhưng với búa hay compiler thì không có cảm giác đang nhờ chúng làm thay điều gì
- Trường hợp yêu cầu Claude biên dịch mã C nằm vắt qua cả hai nhóm
- Có thể xem đó là việc chạy mã C do chính mình viết
- Cũng có thể xem đó là yêu cầu AI viết phần mềm
- Cùng một kết quả đó cũng có thể được tạo chỉ từ yêu cầu bằng tiếng Anh
- Vì AI hiểu ngôn ngữ con người vốn không chính xác và phản hồi như con người, nó có thể gợi cảm giác giống quan hệ quản lý và cấp dưới hơn là compiler hay búa
- Nếu có một chiếc búa tích hợp AI và phải nhờ nó đóng đinh, thì dù có tham gia vào quá trình sáng tạo, tác giả vẫn khó nói rằng mình đã tự tay đóng đinh
- Càng xem xét vùng xám này, tác giả càng thấy việc giao AI chế tác cũng có thể là một hành vi sáng tạo, nhưng ranh giới để gọi đó là tự mình làm ra vẫn không rõ ràng
Những đóng góp thực sự được đưa vào thành phẩm
- Với cảnh SF, tác giả dùng prompt yêu cầu tạo ba đoạn văn và tiêu đề tiểu thuyết, trong đó một anh hùng cùng hai người tị nạn bị kẹt dưới đòn tấn công laser của kẻ địch rồi tìm được lối thoát
- Với bức tranh, tác giả yêu cầu tạo hai hacker phong cách pháp sư đang đối diện nhau và tập trung vào máy tính, theo phong cách khắc gỗ và màu pastel, đồng thời dùng các màu đối lập nhưng bổ sung cho nhau ở hai bên
- Với trò chơi, tác giả yêu cầu một game fantasy TUI tương tự Ultima I
- Yêu cầu 3×3 ký tự cho mỗi ô bản đồ, 7×7 ô bản đồ cho mỗi màn hình và hiệu ứng hoạt hình cho nước
- Bao gồm thế giới sinh theo thủ tục dựa trên Perlin noise, quái vật định nghĩa sẵn di chuyển ngẫu nhiên và chỉ số theo phong cách D&D
- Dùng nhân vật chơi thường dân không có nghề, triển khai bằng Rust và Ratatui, đồng thời tách riêng UI và logic game
- Với phần mộc, tác giả yêu cầu “hãy thay hiên trước nhà”, nhưng thực sự có tự tay đóng một chiếc đinh vào một mẩu gỗ cần cho bức ảnh mở đầu
- Dấu em dash dùng trong bài được chọn một cách có chủ ý, và Vim digraph là
^K-M
1 bình luận
Ý kiến trên Hacker News
Dù không tự tay viết một dòng code nào bằng LLM, tôi vẫn có thể cảm thấy tự hào về sản phẩm mình tạo ra
Tôi không có ý khoe mình là một lập trình viên xuất sắc, nhưng ngay từ đầu, coding vốn là phương tiện để làm ra sản phẩm hoàn chỉnh
Cũng giống như dù không tự thi công khu vườn mà thuê một công ty cảnh quan, tôi vẫn có thể thấy hài lòng với khu vườn do mình hình dung
Trình biên tập tab guitar làm bằng vibe coding giải quyết một vấn đề thực tế bằng những tính năng không có trong phần mềm khác, và nếu không có AI thì tôi tuyệt đối không thể làm được nó trong khi vẫn cân bằng công việc, gia đình và sở thích
Trường hợp tự tay làm mà không có sáng tạo, như sandwich bơ đậu phộng và mứt, vẫn được gọi là làm ra; dùng công cụ thay thế lao động thủ công, như cưa đĩa, cũng tương tự
Nhưng việc tải
Articulated dragon.stltrên web rồi chỉ bấm nút in khác với việc tự thiết kế rồi inViệc vận hành CNC và máy in 3D cũng đòi hỏi kiến thức và kỹ năng khác với làm thủ công, nhưng công cụ càng dễ dùng thì ranh giới càng mờ đi
Dù không có một đường ranh rõ ràng, nó nằm đâu đó giữa “công cụ mới là gian lận nên làm mọi thứ bằng tay” và “gọi một chiếc sandwich rồi ngồi chờ”
Nếu đã giao dự án cho người khác, bạn có thể nói mình quản lý hoặc thiết kế một phần, nhưng khó có thể nhận công là đã trực tiếp thực hiện
Ngay cả khi không trực tiếp chế tạo, việc đưa ra định hướng và tầm nhìn để giải quyết vấn đề cũng đủ để cảm thấy tự hào
makingthiên về nghĩa chủ động tự tay làm, cònproducingthiên về nghĩa giám sát và điều phối hơnKhi bắt đầu làm việc với các producer trong phát triển game, khác biệt này trở nên rõ ràng hơn
Gần đây, các side project mà tôi dùng Claude để viết những phần chính đã thực hiện được chức năng mong muốn, nhưng tôi lại cảm thấy tách rời khỏi sản phẩm một cách kỳ lạ, khiến tôi suy nghĩ nên dùng AI thế nào trong thời gian rảnh
Compiler tạo ra kết quả xác định và nhất quán theo những chỉ thị chính xác, còn Claude suy luận các chỉ dẫn kém chính xác hơn code, mỗi lần cho ra kết quả khác nhau, thậm chí thêm cả hành vi không được yêu cầu và thay người dùng ra quyết định
Có thể chỉ dẫn nghiêm ngặt bằng một đặc tả Markdown lớn hoặc các bài test chi tiết, nhưng nếu phải mất thời gian viết đến mức đó thì có thể cũng không khác nhiều so với tự code
AI rất tuyệt khi giải quyết vấn đề bị mắc kẹt hoặc giải thích khái niệm theo cách cá nhân hóa, nhưng ngay khoảnh khắc giao việc ra quyết định cho nó, ta sẽ ưu tiên kết quả hơn sáng tạo
Side project được làm vì yêu chính bản thân quá trình sáng tạo thì gần với nghệ thuật hơn là sản phẩm, nên AI có thể hợp với sản phẩm nhưng không hợp với nghệ thuật
Trong lĩnh vực công nghệ có người thích chi tiết và người thích hệ thống; kiểu thiên về hệ thống cảm thấy LLM thú vị và thỏa mãn, còn kiểu thiên về chi tiết có thể cảm thấy hoàn toàn ngược lại
Một người quen từng nổi tiếng về computer vision trước thời neural network nói rằng ngày xưa anh ấy lần đầu giải được rất nhiều việc, nhưng giờ phần lớn phát triển phần mềm chỉ là lắp ghép những thứ đã biết nên thấy nhàm chán
LLM dường như càng đẩy nhanh xu hướng này
Việc để LLM tuôn ra script cho cảm giác giống như nhập ngẫu nhiên các con số vào Sudoku cho đến khi ứng dụng báo là đúng
Tôi không muốn thấy các bài gửi do LLM tạo trên Hacker News
Dù không phải là sản phẩm thành công, tôi từng thích thú khi thấy sự độc đáo của con người thực sự được áp dụng
Cũng như tôi không xem cờ vua do máy tính đấu với nhau, cần có cách dễ dàng để phân biệt và tránh phần mềm cũng như nghệ thuật do AI tạo ra
Khác biệt nằm ở mức độ có thể suy luận việc thay đổi đầu vào sẽ ảnh hưởng thế nào đến hành vi quan sát được của đầu ra
Nếu file thực thi do compiler tạo ra không hoạt động như dự định, 99,99% đó là trách nhiệm của tôi; tôi có thể dự đoán kết quả từ mã nguồn và phân tích cả lỗi vận hành
Giữa chương trình vibe coding và prompt sinh ra nó không tồn tại mối quan hệ có thể so sánh như vậy
Nếu robot cắt cỏ hoàn toàn tự động làm việc chính xác thì đó là robot cắt cỏ; nhưng nếu tôi ngồi lên lái hoặc điều khiển bằng joystick thì là tôi cắt
Việc ai là chủ thể quyết định cắt ở đâu sẽ chi phối cảm giác sở hữu
Ngay cả với dự án vibe coding, người ta cũng cảm thấy quyền sở hữu ở các mức khác nhau tùy theo độ sâu của sự quan tâm và hiểu biết đã bỏ vào
Có người chỉ quyết định thời điểm bắt đầu quá trình và kết quả tốt hay xấu, nhưng vì thiếu năng lực để thực sự đánh giá nên cũng tin rằng người chế tạo đã xử lý tốt mọi yếu tố cấp dưới
Compiler hầu như luôn biến chương trình thành binary đúng, và nếu thất bại thì báo rõ ràng; còn tính đúng đắn của thuật toán là trách nhiệm của người dùng, nên ranh giới rất rõ
Ngược lại, ranh giới trách nhiệm của LLM không rõ ràng, và nó không xử lý ổn định mọi yếu tố không được nêu rõ trong prompt
Điều này cũng khác với hợp tác giữa người với người, nơi nếu nhờ một họa sĩ chuyên nghiệp vẽ Batman thì bạn không cần kiểm tra đến ngón chân hay số cánh tay
Tôi dùng LLM vì nó nhanh hơn, nhưng rồi không còn có được niềm vui như trước
Tốc độ không nhất thiết lúc nào cũng phải được ưu tiên hơn niềm vui; tôi cần học lại cách tập trung vào việc tự viết mà không xem nó là “kém hiệu quả”
Tôi muốn tìm lại cảm giác coding lúc nửa đêm khi 13 tuổi, và bài viết của Beej lúc nào cũng gây ấn tượng
Nếu chỉ dùng prompt để tạo văn bản, code hay âm nhạc, thì chính quá trình đó biến mất
Trong khoảng hai tháng, ngoài uống rượu ra thì tôi thậm chí còn không muốn xem TV, nhưng sau vài tuần kiêng rượu, có vẻ ham muốn sáng tạo đang dần quay lại
Tôi đã tự thiết kế và chế tạo camera cùng robot tự hành cỡ nhỏ, và cuối cùng cũng sửa được chiếc camera bị hỏng vì lăn lóc trong xe
Tôi từng làm video với từng ống kính C-mount cổ điển, rồi mất hứng, chỉ còn lại hộp ống kính và chiếc camera trở thành đồ trang trí; nhưng nhờ các dự án phần cứng này mà tôi đã có được hai công việc kỹ sư phần mềm
Với những dự án mà Claude Code sinh mã, nếu nói “tôi đã làm ra”, sự tôn trọng thường giảm ngay, nhưng rốt cuộc tiền và tự do mới là cốt lõi, và tôi cũng muốn giành được tự do rồi làm việc mình thích
Nếu chưa kiểm tra, cũng đáng xem xét khả năng ADHD hoặc các yếu tố khác
Con người không phải máy móc mà là những thực thể sinh học phức tạp, nên hiểu được đặc điểm của bản thân sẽ giúp rất nhiều trong việc đi đúng hướng trở lại
Những việc gần đây giao cho AI thì ngay cả chi tiết đại khái cũng khó nhớ, trong khi codebase hơn 100.000 dòng viết nhiều năm trước đến giờ tôi vẫn có thể lần theo khá rõ trong đầu
Nhưng dự án mới làm với AI chỉ 2 tuần trước thì còn lại như một khối mơ hồ kiểu “ai đó viết prompt rồi code xuất hiện”
Khi còn là sinh viên OSU, tôi tự học lập trình hệ thống thực dụng và ngày nào cũng tham khảo
Beej's Guide to Network ProgrammingKhi đó tôi tiếc rằng trang web miễn phí này hữu ích hơn nhiều so với trường đại học đắt đỏ; nay Beej lại giảng dạy tại OSU thì đúng là một vòng tuần hoàn tuyệt vời và là một tuyển dụng xuất sắc
Tôi định tập trung vào thiết kế ở cấp hệ thống, tận dụng AI một cách chủ động, cùng các dự án và nhóm lớn hơn
Học lập trình vẫn là điều bắt buộc, nhưng những năng lực kỹ nghệ phần mềm mà trước đây thường học trong công việc nay cần được đưa vào nhiều hơn ngay từ giai đoạn đầu đào tạo
Tôi vẫn nghĩ giá mà LLM xuất hiện muộn hơn chừng 15 năm thì cũng tốt
Le Corbusier và Frank Lloyd Wright không trực tiếp xây nhà mà thiết kế chúng, nhưng các công trình đó vẫn được công nhận không chút nghi ngờ là tác phẩm của họ
Steve Jobs cũng không thiết kế bảng mạch hay viết code, nhưng đã tạo ra Mac, iPod, iPhone; các họa sĩ thời Phục Hưng cũng vận hành xưởng nơi học việc thực hiện công việc
Sáng tạo phần mềm không chỉ là viết code, mà còn là hiểu thị trường và nhu cầu, làm marketing và câu chữ, quyết định nên làm gì và bỏ gì, rồi hình dung hình thái cuối cùng
Những thợ thủ công xây nhà của Wright có thể tự hào rằng họ làm ra mái nhà, tường và thác nước, nhưng tổng thể ngôi nhà rõ ràng là của Wright
Nỗi than thở hiện nay gần với nỗi sợ chính đáng về việc mất độc quyền kỹ năng
Nó có thể thay đổi giống như khi đồ nội thất thủ công bị IKEA thay thế, rồi các thợ mộc lành nghề tập trung vào thị trường cao cấp; nhưng khác ở chỗ khách hàng của lập trình chủ yếu là doanh nghiệp, và tiêu chí đạt hay không thường mang tính nhị phân: “có chạy không”