Showing posts with label Hoctro Tản Mạn. Show all posts
Showing posts with label Hoctro Tản Mạn. Show all posts

8.02.2026

Ai Là Người Tính Cái Móng (concrete foundation)? — AI thật sự đòi hỏi điều gì ở một kỹ sư kết cấu (Structural engineer)

Tác giả: Học Trò và Claude AI.


Một bài viết ngắn, gửi anh em kỹ sư trong ngành EPC cũng kỹ sư điện toán — 2026-08-02

(Chú thích cho bạn đọc ngoài ngành: EPC là chữ tắt của Engineering – Procurement – Construction, tức là loại hãng nhận trọn gói một nhà máy: thiết kế, mua sắm vật tư thiết bị, rồi xây dựng luôn. Bài này viết cho dân làm trong đó, nhưng tôi có cố gắng giải thích các từ chuyên môn ngay tại chỗ, và ở cuối bài còn có hai phụ lục giải thích cặn kẽ hơn nữa, để bạn nào không làm nghề này vẫn đọc được trọn vẹn.)


1. Hai chữ đáng bỏ túi

Dân kỹ sư mình xưa nay có bao giờ làm việc bằng hai bàn tay trắng đâu. Chẳng ai đi phục một ông kỹ sư nhất định phải đo đất bằng sợi dây xích kéo tay, hay nhất định không thèm đụng tới nhu liệu (software) phần tử hữu hạn, vì cho rằng "tính toán thì phải tính cho đàng hoàng, trên giấy, bằng cây bút chì". Cả lịch sử nghề nghiệp của chúng ta là lịch sử của việc chịu nhận máy móc tốt hơn. Cho nên khi nỗi lo về AI bây giờ hiện ra dưới bộ áo "máy nó tới lấy nghề của mình rồi hả?", tôi thấy nó lệch lệch làm sao. Máy nó tới lấy việc của mình từ mấy chục năm trước rồi, và chính mình là người rước nó vô.

Nói vậy chứ nỗi lo đó có thật, và nó không hề ngu. Nó chỉ nhắm sai chỗ thôi. Cái làm anh em khó chịu trong một hãng EPC hiện giờ không phải là khả năng của món đồ nghề. Mà là cái thế mà món đồ nghề đó được đặt vào. Có hai cái thế khác nhau một trời một vực, mà chúng nó có thể xài đúng y một nhu liệu như nhau; và chừng nào bạn chưa có hai chữ riêng để gọi tên hai cái thế đó, thì bạn còn cãi nhau về cái nhu liệu, cãi hoài mà không đi tới đâu hết.

Hai chữ đó đây.

Nhân mã (centaur) là một người có máy phụ giúp, và chính người đó quyết định xài ở đâu, xài lúc nào, xài cách nào, và có xài hay không. Hình ảnh này lấy từ thần thoại Hy Lạp: con nhân mã có nửa trên là người, nửa dưới là ngựa — cái đầu người và óc phán đoán của người nằm ở trên, sức mạnh và tốc độ của con ngựa nằm ở dưới. Con ngựa không phải là đứa quyết định đi về hướng nào. Chiếc xe đạp làm bạn nhanh gấp ba lần đi bộ, mà bạn vẫn là người chọn đường. Cái máy trợ thính là một bộ xử lý tín hiệu thời gian thực tinh vi hết sức, mà bạn vẫn là người quyết định có đeo nó vô hay không. Cái máy tính bỏ túi cộng trừ nhân chia giỏi hơn bạn xa lắc, vậy mà nó cứ nằm im thin thít đó cho tới khi bạn cầm nó lên. Tinh vi hay không, không phải là chuyện chính. Được chọn hay không, mới là chuyện chính.

Nhân mã lộn ngược (reverse centaur) là cũng bức hình đó, nhưng lộn đầu xuống đất: một người bị bắt đi phụ việc cho máy, chạy theo cái nhịp do máy đặt ra, dưới một chế độ theo dõi giám sát do chủ của cái máy đặt ra, và không có đường nào thoát ra cho thực tế. Bây giờ chính cái đầu người mới là phần bị đóng yên cương. Bức biếm họa xưa nhất về chuyện này đã sáu chục tuổi rồi: cảnh Lucy và Ethel trong xưởng kẹo sô-cô-la. (Đây là một màn trong "I Love Lucy", chương trình hài trên truyền hình Mỹ thập niên 1950, mà người Mỹ nào cũng biết — kiểu như bên mình ai cũng biết mấy vở kịch của Thanh Việt, Túy Phượng vậy.) Hai bà được giao đứng bên băng chuyền để gói kẹo. Băng chuyền chạy mỗi lúc một nhanh. Gói không kịp, hai bà bèn nhét kẹo vô miệng, nhét vô túi áo, nhét luôn vô trong áo — bởi vì cái băng chuyền nó đâu có cần biết là hai bà đang chết chìm. Ta cười, vì cảnh đó tức cười thật. Mà nó tức cười được là vì cái băng chuyền nắm hết quyền hành mà không lãnh một chút trách nhiệm nào; và ai từng đi làm theo cái đồng hồ của người khác thì nhìn phát là nhận ra liền.

(Xin ghi ơn cho phải phép: cặp chữ nhân mã / nhân mã lộn ngược này tôi lấy từ quyển The Reverse Centaur's Guide to Life After AI của ông Cory Doctorow — đó là chỗ đầu tiên tôi thấy có người vạch ra sự phân biệt này gọn gàng tới vậy. Từ câu này trở xuống là phần tôi tự dịch nó qua thế giới của anh em mình.)

Để ý coi cái gì không phải là chỗ phân biệt giữa hai thứ. Không phải là độ tinh vi của cái máy — cái băng chuyền là một món đồ đơn giản hết sức, mà cái thế nó tạo ra vẫn hạ nhục người ta như thường. Cũng không phải là chuyện tự động hóa nói chung: khối công việc tự động hóa tới tận răng mà con người vẫn nắm quyền, và khối công việc gần như chẳng tự động gì hết mà con người thì không nắm gì cả. Cái phân biệt hai thứ đó chỉ có đúng một câu hỏi:

Bạn có quyền nói "không" với món này — trên chính hồ sơ này, ngay hôm nay — mà không lãnh hậu quả gì hay không?

Không phải "về nguyên tắc thì được". Không phải "trong nội quy có ghi là tùy ý". Mà là hôm nay, trên tập hồ sơ có tên bạn ký ở dưới: bạn có thể từ chối không xài nó, và không có chuyện gì xảy ra cho bạn hết, được hay không? Nếu được, bạn là nhân mã, và cái nhu liệu kia là một món đồ nghề. Nếu không được, thì bạn đang bị người ta cưỡi, và cái món đồ nghề đó khôn ngoan cỡ nào cũng không thay đổi được điều đó.


2. Một cái móng, hai ngày thứ Sáu

Nói cho cụ thể, và nói trên đúng một món việc: cái móng. Giả sử là móng cho một cái máy nén khí (compressor) trong một dự án mở rộng nhà máy — có tải trọng của máy, có báo cáo khảo sát địa chất, có sức chịu tải cho phép của nền đất, có mặt cắt địa tầng kèm vài ghi chú, có danh sách tải trọng từ bên cơ khí gởi qua, và có một cái móng phải được tính kích thước, kiểm tra, rồi vẽ chi tiết ra.

(Nếu bạn không làm nghề này: cái móng là khối bê tông chôn dưới đất, nằm dưới cây cột hay dưới cỗ máy, có nhiệm vụ duy nhất là dàn cái sức nặng đó ra trên một diện tích đất đủ rộng để đất khỏi lún, khỏi nghiêng, khỏi xê dịch. Phụ lục 1 ở cuối bài giải thích kỹ hơn.)

Bạn có trong tay một nhu liệu thiết kế móng có gắn AI. Bạn đưa vô các trường hợp tải trọng và các thông số của đất; nó đề nghị kích thước mặt bằng và bề dày, nó phân bố ứng suất dưới đáy móng, nó chạy hết các bài kiểm tra — lật, trượt, cắt một chiều và cắt hai chiều, lún, và cả phản ứng động do máy chạy rung — rồi nó trả lại cho bạn một cái móng đã có kích thước, có bố trí cốt thép, kèm một bản báo cáo. Món này hay thật, nhanh hơn bạn thật, và tới cái móng thứ bốn chục nó vẫn không biết mệt.

Ngày thứ Sáu thứ nhất. Bạn tự đi kiếm cái nhu liệu này về xài, vì cái kiểu sai mà bạn thật sự sợ trên một hồ sơ bốn chục cái móng không phải là kiểu sai cao siêu, mà là kiểu sai lãng nhách: sót một trường hợp tải, lấy nhầm trị số sức chịu tải ở một độ sâu khác, vẽ chi tiết cái móng theo cái bệ máy của bản sửa đổi kỳ trước. Bạn tính nhẩm cái móng máy nén bằng tay trước cho ra một con số áng chừng, bởi bạn muốn có sẵn một con số trong đầu trước khi cái máy đưa con số của nó cho bạn. Rồi bạn mới chạy nhu liệu. Nó ra hơi lớn hơn của bạn một chút, bạn bèn đi tìm coi tại sao — hóa ra nó bị khống chế bởi điều kiện lật, dưới một tổ hợp tải mà bạn đã gạt đi. Bạn ngó lại cái tổ hợp đó, thấy nhu liệu nói đúng, và bạn chỉnh lại. Qua cái móng kế tiếp, một cái đế đơn giản đỡ giàn ống, bạn không thèm chạy nhu liệu luôn, vì bạn nhìn là thấy đáp số rồi. Chẳng ai để ý hết, bởi vì chẳng có ai đang ngồi ghi sổ coi bạn cho những cái móng nào chạy qua cái nhu liệu đó.

Ngày thứ Sáu thứ nhì. Cũng cái nhu liệu đó. Cũng phiên bản đó. Có điều bây giờ nó chạy ra nguyên bộ bốn chục cái móng trong một đêm; cái lịch trình dự án đã được vẽ lại sau khi hãng mua cái nhu liệu này, vẽ lại dựa trên lời hứa hẹn về những gì nó làm được; và việc của bạn ngày thứ Hai là coi lại rồi đóng dấu. Có một cái bảng theo dõi (dashboard) treo trên màn hình. Nó hiện con số số móng trên mỗi kỹ sư mỗi tuần, và tỉ lệ đóng ý kiến trên các điểm mà chính cái nhu liệu đó gắn cờ báo; và hai con số đó ông xếp trực tiếp của bạn ngồi đâu cũng thấy. Trên giấy tờ thì bạn vẫn là kỹ sư chịu trách nhiệm. Trên thực tế thì bạn là bốn chục con dấu năng suất, gói trong một cửa sổ năm ngày, và không có một dòng ngân sách nào cho hai ngày mà bạn cần để thật sự kiểm lại hai cái móng đang làm bạn thấy không yên bụng.

Cùng một món đồ nghề. Hai công việc khác nhau hoàn toàn. Ngày thứ Sáu thứ nhất, bạn có trong tay một dụng cụ rất tốt. Ngày thứ Sáu thứ nhì, bạn đã bị xếp lại thành một hạng khác: phần thiết kế đã dời qua cho cái máy, còn cái được thu hoạch từ bạn là con dấu — đúng cái phần duy nhất trong cả trình tự có sức nặng pháp lý và không tự động hóa được, mà nó không tự động hóa được chính bởi vì nó là cái phần mang nghĩa đã có một con người coi qua cái này rồi.

Toàn bộ sự phân biệt nằm ở đó, và không có một mảy may nào của nó là thuộc tính của cái nhu liệu hết.


3. Làm thì làm ra sao

Đây mới là phần quan trọng hơn phần chẩn bệnh, bởi vì đây là phần bạn nắm được trong tay vào một ngày thứ Ba bình thường. Nước cờ nhân mã không phải là từ chối món đồ nghề — mà là giữ lại phần kiểm chứng cho riêng mình. Trên cái móng máy nén kia, điều đó có nghĩa là một danh sách ngắn những việc bạn không giao cho ai:

Bạn kiểm cái con số đó ở đâu ra, chứ không phải chỉ kiểm con số. Cái nhu liệu nuốt vô đúng một trị số sức chịu tải cho phép. Còn bản báo cáo địa chất thì dày ba chục trang, và nằm đâu đó trong đó là một câu về một lớp đất yếu ở độ sâu ba thước, một ghi chú về mực nước ngầm mùa mưa, và một lời khuyến cáo có kèm điều kiện — mà mấy cái điều kiện đó thì một con số trơ trọi không cách nào chở nổi. Cái nhu liệu có con số. Bạn thì đã đọc bản báo cáo. Cái chênh lệch đó không phải là khuyết điểm của nhu liệu — nó chính là cái lý do cụ thể vì sao bạn còn đứng trong vòng, và nó đáng được nói lớn tiếng ra khi có người hỏi tại sao coi lại mà lâu vậy.

Bạn kiểm đường truyền lực và các tổ hợp tải, bởi đó là một quyết định về cách mô hình hóa, chứ không phải là chuyện cộng trừ. Những trường hợp tải nào đã được đưa vô; tải trọng động của cỗ máy đã được xử theo đúng ý mà tờ dữ liệu (data sheet) của nhà chế tạo muốn nói hay chưa; độ lệch tâm rơi vô chỗ mà giả thiết phân bố ứng suất của nhu liệu còn đúng hay không; có ai xét tới lực đẩy nổi khi mực nước ngầm dâng cao hay là chưa xét gì hết. Mỗi một câu trong đó là một phán đoán về việc kết cấu này thật ra là cái gì, phán đoán trước khi bất cứ phép tính nào bắt đầu; và làm sai chỗ đó thì cái bạn nhận được là một đáp số được kiểm tra hoàn hảo — cho một câu hỏi sai.

Bạn giữ sẵn một con số trong đầu trước đã. Một cái tính tay thô sơ trước khi chạy nhu liệu tốn của bạn mười phút, mà nó biến kết quả xuất ra từ chỗ là một mệnh lệnh thành chỗ là một bằng chứng. Chênh nhau trong vòng hai chục phần trăm thì hai bên xác nhận lẫn nhau; chênh nhau tới một nửa thì một trong hai đứa sai bét, và ngay lúc đó bạn biết là mình phải đi tìm coi đứa nào sai — mà đó đúng là cái trạng thái tinh thần bị cái lịch "bốn chục cái móng trước thứ Sáu" giết chết.

Bạn rút riêng ra mấy cái mà bạn không tin. Rút êm, khỏi diễn văn: cái này tôi làm tay, vì mặt cắt địa tầng chỗ đó kỳ kỳ và tôi không tin một trị số sức chịu tải mà bao trùm nổi cả cái diện tích này. Hai trên bốn chục thì không phải là chống đối. Đó là cái bằng hành nghề nó đang làm đúng công việc mà nó sinh ra để làm.

Và tới lúc phải nói thì bạn đi nói, nói lớn, nói bằng lời lẽ trơn tru dễ hiểu. Không cần công văn. Không cần bản kiến nghị. Bạn đi thẳng vô phòng ông kỹ sư trưởng và bạn nói: Tôi không đóng dấu bốn chục cái móng này trước thứ Sáu đâu. Với thời gian được cho, tôi kiểm không xuể, cho nên tôi không ký. Cho tôi thêm một tuần, hoặc cho tôi thêm một người kiểm thứ hai, hoặc rút phần móng ra khỏi hồ sơ đợt này — chớ tôi không đóng con dấu của tôi lên những tính toán mà tôi chưa kiểm.

Nguyên cuộc nói chuyện chỉ có bấy nhiêu, và nói ra thì nó đỡ ghê gớm hơn là ngồi tưởng tượng ra nó nhiều lắm. Bạn không hề từ chối cái nhu liệu; từ đầu tới cuối bạn không hề nhắc tới cái nhu liệu. Bạn chỉ đang phát biểu đúng một sự thật mà không ai ở ngoài ngành có thể tự nhìn ra được: món đồ nghề chạy nhanh lên, còn việc kiểm thì không nhanh lên. Tốc độ sản xuấttốc độ kiểm chứng là hai đại lượng khác nhau, mà cái lịch trình kia thì được dựng lên trên cái giả thiết ngấm ngầm rằng hai cái đó là một. Bốn chục cái móng đẻ ra trong một đêm không phải là bốn chục cái móng đã được kiểm, và cái khác nhau giữa hai thứ đó chính xác là cái mà con dấu của bạn chứng nhận.

Nói nó ra y như cách bạn báo rằng một áp suất thiết kế đã bị vượt — nói phẳng, không mắc cỡ, không có một câu xin lỗi nào trong đó. Trong một dự án, có những ràng buộc thuộc loại lịch trình và đẩy được; có những ràng buộc thuộc loại vật lý và không đẩy được; con dấu thì thuộc loại thứ hai, và bạn là người duy nhất trong tòa nhà này có giấy phép để phán cái nào là cái nào.

Nói mấy điều đó ra thì cái thế "thứ Sáu thứ nhì" thường là được thương lượng lại, bởi vì ngay từ đầu nó có bao giờ là một quyết định được cân nhắc đâu. Nó chỉ là một ông nào đó ngồi vẽ lịch trình dựa trên một buổi trình diễn hàng của nhà bán nhu liệu.


4. Cái sườn mà tôi khỏi phải gõ

Thêm một trường hợp nữa, lần này là chuyện của chính tôi, bởi vì nó cho thấy nửa còn lại của cái thế nhân mã — không phải là chuyện đi kiểm cái mà món đồ nghề đẻ ra, mà là chuyện xài nó để đi tới một chỗ mà mình vốn không đủ sức bỏ tiền ra để khởi sự.

Tôi muốn có một câu lệnh (command) trong SmartPlant 3D, để đặt nguyên một cái "mặt bàn" bằng thép vô một mô hình nhà máy đang chạy: bốn cây cột, bốn cây dầm chạy quanh chu vi, cộng với toàn bộ hạ tầng lưới trục mà mấy cấu kiện đó móc vô — hệ tọa độ, các trục, các mặt phẳng cao độ, các mặt phẳng lưới thẳng đứng, và tám đường lưới thật sự ghim từng đầu cấu kiện vô đúng chỗ của nó trong không gian.

(Nói cho bạn đọc ngoài ngành: SmartPlant 3D là nhu liệu dựng mô hình ba chiều mà các hãng EPC dùng để "xây" nguyên nhà máy trong máy tính trước khi xây ngoài đời. Bình thường nó không biết cách dựng riêng một khung thép của riêng một nhà máy nào bằng một cái bấm chuột — muốn vậy thì phải có người viết thêm một mẩu nhu liệu nhỏ dạy nó. Đó là việc tôi làm ở sở. Phụ lục 2 ở cuối bài kể chuyện này chi li hơn.)

AI viết bản đầu tiên. Không phải một bản phác thảo — mà là một bộ khung chạy được, với mấy phần lặp đi lặp lại đã được gõ ra sẵn: tám cái đối tượng đường lưới gần như giống hệt nhau, mấy chỗ chốt sổ giao dịch (transaction commit) với mô hình, và phần kiểm tra dữ liệu trên bốn ô nhập liệu của cái hộp thoại.

Bản đầu tiên đó không đúng. Nó gần đúng, mà gần đúng lại là một chuyện khác hẳn và đáng giá hơn nhiều. Đi từ gần đúng tới đúng là phần của tôi: mấy cái điểm gốc quy chiếu (cardinal point — với cây cột thì lấy trọng tâm, với cây dầm thì lấy mặt trên của thép, bởi vì bên vẽ chi tiết ở khâu sau người ta đọc như vậy); chuyện góc xoay phải gắn vô hệ tọa độ của lưới trục, để mọi thứ ràng buộc vô đó cùng xoay theo, thay vì chỉ ngó có vẻ đúng ở góc không độ; thứ tự chốt sổ phải khớp với cái cách mà bộ API đó thật sự hành xử; và chỗ tra cứu ca-ta-lô khi thất bại thì phải báo lỗi bằng một câu có nêu tên tiêu chuẩn và tên tiết diện, chớ không phải quăng ra một cái lỗi "null reference" trơ trọi. Đó là gỡ rối (debugging), và cái phần kỹ thuật thật sự nằm ở chỗ gỡ rối đó.

Cái mà tôi thật sự mua được là cái sườn — tức là mấy ngày mà lẽ ra tôi phải bỏ ra để dựng giàn giáo, trước khi mon men tới được bất cứ quyết định thú vị nào. Và bởi vì cái sườn đó có sẵn, mà tôi lại hiểu từng dòng trong đó, nên tôi cứ thêm vô hoài được: thêm hệ giằng, thêm bản đế chân cột, thêm một nhịp thứ hai, thêm cái gì tôi cần kỳ tới cũng được. Đó là cái khác nhau giữa một món đồ nghề làm giùm việc của bạnmột món đồ nghề nâng cái nền mà bạn đứng lên để làm việc.

Một chương trình viết giỏi có thể vẽ cái cầu thang này trong vòng vài phút!

Và không có ai ngồi ghi sổ hết — nghe thì nhỏ nhặt, mà thật ra đó là phân nửa cái lý do khiến nó là một cái thế tốt. Đó là việc làm ngày thứ Bảy trong cái ga-ra. Không ai giao, không ai định kỳ hạn, và làm xong rồi cũng không có ai đứng ở cửa hỏi coi mấy cái máy khoan máy cưa nó làm giùm bao nhiêu phần trăm. Câu hỏi duy nhất mà thiên hạ sẽ hỏi về cái kệ đó là nó có chịu nổi sức nặng hay không. Bây giờ bạn thử hình dung cũng cái kệ đó, mà đóng trong một xưởng nơi ông quản đốc ghi sổ coi cái máy khoan chạy được bao nhiêu phút, rồi mỗi tuần báo cáo con số đó lên trên. Cũng cái máy khoan đó, cũng cái kệ đó, cũng con người đó — mà là hai buổi chiều khác nhau hoàn toàn, bởi vì một bên là công trình của bạn, còn bên kia là một chỉ tiêu năng suất mà người ta đang đo bạn.


5. Cái con dấu, nó có ra để làm gì

Cũng nên nhớ lại rằng cái nghề của mình đã đánh trận này một lần rồi, và đã thắng, từ hồi chưa ai trong chúng ta ra đời.

Ông Frederick Taylor với thuyết quản trị theo lối khoa học (scientific management) đặt ra mục tiêu là dời cái phán đoán đi chỗ khác: nghiên cứu một công việc, rút cái hiểu biết ra khỏi cái đầu của người đang làm nó, mã hóa nó thành một thủ tục kèm một cái nhịp, rồi mướn một người rẻ tiền hơn vô thi hành. Người thợ không cần biết tại sao cái xẻng phải bự cỡ đó. Ban quản trị biết là đủ. Người thợ chỉ cần theo kịp. Mọi cái thế nhân mã lộn ngược đều là cái thuyết đó, mặc bộ đồ nghề mới hơn, và cái món bị moi ra bỏ đi bao giờ cũng là quyền tự quyết của người đang cầm đồ nghề.

Con dấu PE là một món đồ chống-Taylor. (Ở Mỹ, PE — Professional Engineer — là kỹ sư có bằng hành nghề do một hội đồng của tiểu bang cấp, sau khi thi cử và sau nhiều năm làm việc dưới sự giám sát của một PE khác; gần giống chứng chỉ hành nghề bên nhà, nhưng sức nặng pháp lý và cá nhân thì nặng hơn nhiều.) Con dấu đó không phải là một biện pháp tăng năng suất; nó là điều ngược lại — nó là việc cố ý nhét một con người có tên có tuổi, đang cầm một cái bằng có thể bị tước, vô giữa một trình tự mà nếu không có người đó thì chạy nhanh hơn. Điều lệ nghề nghiệp nói thẳng cái phần mà người ta hay nói nhỏ: anh không được đóng dấu lên công việc mà anh chưa kiểm, và không một chủ đầu tư hay chủ hãng nào được quyền ép anh đóng dấu lên cái mà anh tin là không an toàn. Kiểm tra tính toán, thư hỏi đáp kỹ thuật (RFI), kiểm tra thiết kế độc lập (IDC), mấy đợt duyệt 30/60/90 phần trăm, HAZOP, thủ tục quản lý thay đổi — tất cả đều ăn vô lịch trình, tất cả đều phải đấu tranh mới có, đấu với những người chỉ muốn bản vẽ ra khỏi cửa cho lẹ, và tất cả đều ghi lại cùng một điều đã tìm ra được: phán đoán của con người và trách nhiệm của con người, nén tới một mức nào đó thì không nén thêm được nữa.

Cho nên cái mối nguy đáng gọi tên là một mối nguy hẹp thôi. Nó không phải là chuyện AI tính cái móng — một món đồ tính được cái móng thì nó là một cây xẻng nhanh hơn, mà xẻng nhanh hơn thì xưa giờ mình vẫn nhận. Mối nguy là ở chỗ tốc độ xuất hàng của nó lặng lẽ trở thành cái thước đo cho tốc độ của lớp kiểm tra; và khi chuyện đó xảy ra thì không có gì lên tiếng báo hết. Kho từ vựng vẫn còn nguyên vẹn: vẫn còn "kiểm", vẫn còn "ý kiến", vẫn còn "tỉ lệ đóng ý kiến", vẫn còn "đóng dấu". Chỉ có cái mà mấy chữ đó đo là đã đổi. Một ý kiến được đóng lại mà không được hiểu thì đóng nhanh hơn một ý kiến được đóng cho đàng hoàng.


6. Đôi lời kết

Cái trục đáng kể là quyền được chọn, chớ không phải là khả năng của máy. Hai người kỹ sư cầm y hệt một nhu liệu như nhau lại đang ở trong hai hoàn cảnh khác nhau hoàn toàn, tùy theo đúng một câu hỏi — và đó là câu hỏi về quyền hành, chớ không phải về kỹ thuật: ai là người quyết chuyện này, và cái quyết định đó có gỡ ra được không?

Nghĩa là cách đối phó có ích không phải là cách phòng thủ. Gần như chẳng bao giờ có ai đem cái thế nhân mã tới trao tận tay bạn đâu — bạn phải tự dựng nó lên, dựng từng mảnh một, bằng chính cái quyền tự quyết mà bạn đang có sẵn trong tay. Hãy xài AI cho tới bến trên những phần việc mà bạn kiểm chứng được, và trên những cái giàn giáo mà nếu không có nó thì bạn chẳng bao giờ vượt qua nổi. Hãy giữ sẵn một con số tính tay trong đầu trước khi ngó tới kết quả của máy. Hãy đọc bản báo cáo địa chất, dù cái nhu liệu chỉ đòi có một dòng trong đó. Và khi cái lịch trình mặc nhiên coi rằng kiểm tra là chuyện miễn phí, hãy nói ra câu đó: tôi kiểm không xuể trong thời gian được cho, nên tôi không đóng dấu.

Làm được vậy thì bạn sẽ không có cái cảm giác bị AI xài. Bạn sẽ thấy về nó cái cảm giác mà bạn vẫn có với một bộ nhu liệu phân tích tốt: nó giỏi, thỉnh thoảng nó sai theo mấy kiểu mà bạn biết cách bắt — và nó hoàn toàn là của bạn, muốn chĩa đi đâu thì chĩa.

Rốt cuộc, phép thử vẫn là phép thử ở phần đầu bài. Hãy để ý coi món đồ nghề đó làm chuyện đó lên ai, và làm chuyện đó cho ai. Một người kỹ sư kết cấu đang ngồi tính cái móng thì phải trả lời được liền, và câu trả lời phải là làm cho tôi. Nếu không phải vậy, thì cái đó không phải lỗi của cái máy. Cái đó là một cách sắp đặt — mà cách sắp đặt thì do người ta bày ra, nghĩa là cãi lại được, và đôi khi dẹp đi dựng lại cái khác cũng được luôn.


Phụ lục 1: Cái móng, tập tính toán, và con dấu — thật ra là những thứ gì

Bài ở trên mặc nhiên cho rằng bạn đã biết cái móng là gì, "chạy số" là làm những gì, và tại sao cái con dấu lại ghê gớm tới vậy. Nếu bạn không làm trong ngành xây dựng thì mấy cái đó chẳng có gì là hiển nhiên hết, cho nên đây là phần giải thích bằng lời lẽ thường ngày — khỏi cần biết chút kỹ thuật nào cũng đọc được.

"Đo đất bằng dây xích" và "nhu liệu phần tử hữu hạn" nghĩa là gì. Bài mở đầu bằng câu nói chẳng ai đi phục ông kỹ sư nhất định phải làm hai chuyện này theo lối cũ — mở ra chỗ này cũng đáng, vì nó gói nguyên cái lý luận mở đầu của bài vô trong một hình ảnh. Đo đất bằng dây xích là nghề đo đạc thuở xưa: hồi chưa có GPS và chưa có máy đo bằng tia laser, người đi đo phải kéo căng một sợi dây xích kim loại (đúng nghĩa là một sợi xích, sau này là thước thép, có chiều dài chuẩn cố định) trên mặt đất, đo từng khoen từng khoen rồi cộng lại. Đo vậy vẫn chính xác, nhưng một toán mấy người làm nguyên một ngày mới xong cái mà bây giờ một cái máy GPS hay máy laser làm trong một tiếng, lại còn ít chỗ sai hơn. Nhu liệu phần tử hữu hạn là món tương đương thời nay cho phần tính toán kết cấu: thay vì một công thức đơn giản coi nguyên cây dầm hay tấm sàn như một hình dạng lý tưởng duy nhất (lối tính tay cổ điển, làm bằng cây thước tính rồi sau này bằng máy tính bỏ túi), cái nhu liệu băm nhỏ kết cấu ra thành hàng ngàn mẩu nhỏ nối với nhau ("phần tử hữu hạn"), viết ra phương trình vật lý cho chuyện từng mẩu nhỏ đẩy và kéo mấy mẩu bên cạnh nó ra sao, rồi giải nguyên cái hệ phương trình khổng lồ đó cùng một lượt — chuyện mà không một người nào giải nổi bằng tay trong suốt một đời làm việc, mà lại tóm được những rắc rối có thật ngoài đời (hình dạng méo mó, vật liệu chỗ này khác chỗ kia, tải trọng đặt kiểu kỳ cục) mà công thức tay giản lược buộc phải bỏ qua. Cả hai trường hợp, lối cũ không hề "thật" hơn hay "lương thiện" hơn — nó chỉ là món đồ tốt nhất có được vào thời đó; và khi đã có món tốt hơn mà còn nhất định không xài, thì đó không phải là nghiêm cẩn, mà chỉ là chậm.

Cái móng là gì. Cái móng là khối bê tông chôn dưới một cây cột, một bức tường, hay một cỗ máy nặng, mà nhiệm vụ duy nhất của nó là dàn cái sức nặng đó ra trên một diện tích đất đủ rộng, để nền đất khỏi lún, khỏi nghiêng, khỏi trôi. Bạn hình dung cái khác nhau giữa mang đôi giày ống đứng trên tuyết và mang đôi giày bơi trên tuyết (snowshoe — cái vỉ rộng bè bè cột dưới chân để đi trên tuyết). Sức nặng của bạn có đổi đâu; cái đổi là diện tích mà nó được dàn ra, và đó là cái khác nhau giữa lún tới đầu gối và đi phăng phăng trên mặt. Cái móng là đôi giày tuyết của tòa nhà. Tải càng nặng, hoặc đất càng mềm, thì móng càng phải bự — và đó là phần lớn ý nghĩa của việc "tính kích thước" cái móng.

"Tập tính toán" là gì. Nói chuyện thường ngày thì "tính toán" nghĩa là làm một phép toán. Trong dự án, "tập tính toán" (calculation package) là một tập tài liệu có thật — thường dày mấy chục trang — trình bày nguyên cái chuỗi lý luận đứng sau một mẩu thiết kế: tải trọng là bao nhiêu, ở đâu ra, đã chạy những bài kiểm tra nào, kết quả ra sao, và rốt cuộc người kỹ sư chốt lại kích thước và cốt thép là bao nhiêu. Nó ít giống một bài toán, mà giống một bản phúc trình thí nghiệm hơn: đáp số thì quan trọng thật, nhưng cái tập tài liệu đó tồn tại là để một người khác đi lại được từng bước đã dẫn tới đáp số, và bắt được cái sai trước khi bê tông đổ xuống.

Mấy con số ở đâu ra. Hai nguồn dữ liệu, từ hai chỗ khác nhau. Tải trọng — cỗ máy nặng bao nhiêu, lúc chạy nó đẩy và rung mạnh cỡ nào, gió hay động đất có thể quật vô nó với lực bao nhiêu — thì từ nhà chế tạo thiết bị và từ tiêu chuẩn thiết kế mà ra. Dữ liệu về đất thì từ báo cáo khảo sát địa chất: người ta khoan những lỗ khoan xuống đúng miếng đất đó tại đúng công trường đó, đem mẫu về phòng thí nghiệm thử, rồi một kỹ sư địa kỹ thuật viết ra thành một bộ khuyến cáo (đất chỗ này gánh nổi bao nhiêu áp lực cho an toàn, mực nước ngầm nằm sâu bao nhiêu, dưới mấy thước có lớp đất yếu nào không). Tập tính toán cái móng gộp cả hai nguồn đó lại.

Mấy bài kiểm tra thật ra đang hỏi cái gì. Vài câu hỏi rất mộc mạc, được chạy dưới dạng những bài kiểm tra chính thức có tên nghe dữ dằn hơn cái ý bên trong:

  • Ứng suất dưới đáy móng (bearing pressure) — tải đã được dàn ra đủ rộng để đất bên dưới không bị ép nát hay phá hoại hay chưa? (Đúng cái câu hỏi đôi giày tuyết.)
  • Lật (overturning) — một lực đẩy ngang (gió, động đất, cái rung của cỗ máy đang chạy) có thể lật cái móng nhào không, y như cái bàn nặng đầu trên bị xô một bên?
  • Trượt (sliding) — cũng lực đẩy ngang đó, có thể đẩy cái móng lết ngang trên nền đất không, y như cuốn sách trượt trên mặt bàn khi bạn đẩy mạnh mà không có gì chặn mép?
  • Cắt / chọc thủng (shear) — tải có thể đâm xuyên thẳng qua khối bê tông ở ngay chỗ chân cột không, y như cái đục lỗ xuyên qua xấp giấy, thay vì lan tỏa dịu dàng ra như nó phải làm?
  • Lún (settlement) — cái móng có từ từ lún xuống trong nhiều tháng nhiều năm khi đất bị nén dưới sức nặng thường trực không, dù ngày đầu nó chẳng hư hại gì?

Qua được hết mấy bài này, còn dư biên an toàn, thì mới gọi là "cái móng đã được tính xong". Kết quả xuất ra còn có phần cốt thép — mấy cây sắt chôn trong bê tông, được chọn cỡ và khoảng cách để gánh lực kéo, là cái mà bê tông trơn thì yếu xìu.

"Kiểm tập tính toán" nghĩa là gì. Trước khi một tập tính toán đi đâu đó, thường phải có một kỹ sư thứ hai — không phải người viết ra nó — ngồi coi lại: tự mình dựng lại các tải trọng một cách độc lập, xét lại mấy giả thiết coi có hợp lý không, đối chiếu các con số trong tập tính toán với bản vẽ coi có khớp không. Việc này có khi gọi là kiểm tra tính toán (calc check) hay kiểm tra thiết kế độc lập (IDC). Nó tồn tại vì đúng cái lý do mà người phi công phụ phải kiểm chéo lại người phi công chính trước khi cất cánh: một mình thì không ai làm hoàn hảo được, và cái giá của một lỗi lọt sổ ở đây là một tòa nhà hay một cái bệ máy hư ngoài đời thật, chứ không phải hư trên giấy.

Cái con dấu, thật ra nó là gì. Ở phần lớn các nước, chỉ có kỹ sư có bằng hành nghề (Professional Engineer, gọi tắt PE, hay tên tương đương ở địa phương — cái bằng đó do một hội đồng của chính quyền cấp, sau khi thi cử và sau nhiều năm làm việc dưới sự giám sát) mới được luật cho phép đóng con dấu của mình — một cái dấu nổi hay dấu in chính thức, có tên và số bằng hành nghề của người đó — lên một tập tính toán hay một bản vẽ sẽ được đem đi xây. Con dấu đó không phải là cái lô-gô của hãng, và cũng không phải là thủ tục cho có. Đóng nó lên một tờ giấy là chính cá nhân người kỹ sư đó, có tên có tuổi, đang tuyên bố — theo một cách có hiệu lực pháp lý: chính tôi đã coi lại cái này, tôi tin nó an toàn, và tôi đem cái bằng hành nghề của tôi ra đặt cược cho điều đó. Nếu sau này cái móng hư, mà tập tính toán hóa ra sai hoặc chưa hề được kiểm, thì cái bị đem ra là cái bằng của người đó — tức là cái quyền hợp pháp của họ được đi làm kỹ sư nói chung — chớ không phải chỉ là danh tiếng của cái hãng. Nó gần với chữ ký của ông bác sĩ trên toa thuốc hơn là gần với cái mộc cao su đóng lên tờ đơn: nó có nghĩa là có một con người chịu trách nhiệm đã ngó vô cái này và đứng ra bảo đảm.

Đó là nguyên cái chuỗi mà bài viết ở trên nói tới: một tải trọng, một bản báo cáo địa chất, một bộ các bài kiểm tra, một tập tài liệu trình bày lý luận, một kỹ sư thứ hai kiểm lại, và một người có tên tuổi có bằng hành nghề ký chính chữ ký của mình lên kết quả. Nhu liệu AI bây giờ làm được rất nhiều khúc giữa của cái chuỗi đó — phần cộng trừ, phần kiểm tra, thậm chí cả bản nháp đầu tiên của phần lý luận. Nó không làm được bước cuối, bởi vì bước cuối căn bản không phải là một phép tính. Nó là một con người nhận lãnh trách nhiệm cá nhân và trách nhiệm pháp lý cho một vật thể có thật, sẽ phải gánh sức nặng suốt năm chục năm tới.


Phụ lục 2: "AI viết bản đầu tiên" một câu lệnh SmartPlant 3D thì thật ra gồm những gì

Phần 4 nói AI viết ra một bộ khung chạy được cho một câu lệnh SmartPlant 3D, và chuyện đó tiết kiệm được mấy ngày chứ không phải mấy phút. Nếu bạn không viết nhu liệu thì lời quả quyết đó khó mà kiểm được, bởi vì mọi danh từ trong đó — cái nhu liệu, cái "solution", cái mã, cái hộp thoại, cái API — đều xa lạ. Đây là phần kể ra những gì thật sự nằm giữa "tôi có một ý" và "cái sườn đã có", nói bằng lời lẽ thường, để bạn thấy được cỡ của cái đường tắt đó.

SmartPlant 3D là cái gì. SmartPlant 3D (gọi tắt SP3D, hiện do hãng Hexagon bán) là nhu liệu dựng mô hình ba chiều mà một hãng EPC dùng để dựng nguyên cái nhà máy trong máy tính: từng ống, từng cây thép, từng cỗ thiết bị, từng cái giá đỡ, tất cả đều nằm ở tọa độ thật và được máy tự động kiểm coi có món nào đụng món nào không, trước khi đem đi gia công ngoài đời. Nó không phải là một chương trình vẽ theo cái kiểu chương trình đánh máy là một chương trình viết chữ — nó là một kho dữ liệu chứa những vật thể thật có quan hệ thật với nhau (cây dầm thuộc về cây cột, đường ống chạy từ thiết bị này qua thiết bị kia), mà tình cờ hiện lên màn hình dưới dạng một bức hình ba chiều. Mua về xài liền thì nó không biết cách dựng cái khung thép riêng biệt của một nhà máy riêng biệt nào bằng một cú bấm chuột; muốn có một hình dạng lặp đi lặp lại như vậy thì phải có người dạy nó, bằng cách viết một mẩu nhu liệu riêng — một "câu lệnh" (command) — để người kỹ sư bấm chạy ngay từ bên trong SP3D.

"Tạo một solution trong Visual Studio" nghĩa là gì. Visual Studio là chương trình mà dân viết nhu liệu dùng để viết, thử, rồi đóng gói nhu liệu. Một "solution" là cái vỏ chứa mà nó dùng để đựng một dự án — bạn cứ hình dung nó là cái thư mục cộng với bộ thiết lập, nói rằng "mấy tập tin này thuộc về nhau, chúng nó ráp lại thành cái này, và đây là danh sách những thư viện bên ngoài mà chúng nó được phép gọi". Trước khi gõ được một dòng logic có ích nào, cái vỏ chứa đó phải hiện hữu đã: một solution mới, một dự án mới nằm trong đó, một tham chiếu (reference) trỏ tới thư viện lập trình của chính SP3D (để cho cái mã mới viết được phép nói chuyện với SP3D), loại dự án phải chọn cho đúng (dạng Windows Forms, để nó bày ra được một hộp thoại), và mấy thiết lập biên dịch phải khớp với đúng phiên bản SP3D đang cài trên máy. Tới đây thì chưa ra được cái gì nhìn thấy được hết — nó tương đương với việc dọn sạch cái bàn thợ và bày đồ nghề ra trước khi khởi công. Nó cũng đúng là loại chuyện dễ làm sai sơ sơ theo mấy kiểu mà mãi về sau mới lòi ra, và làm lại từ trí nhớ mỗi lần thì rất chán.

"Cái mã" là gì. Là mấy dòng chỉ thị thật sự, viết bằng một ngôn ngữ lập trình (ở đây là VB.NET) trong một tập tin văn bản, chạy tuần tự từng bước khi người kỹ sư bấm nút của câu lệnh. Trong trường hợp này là chừng 350 dòng, sắp thành mấy công việc riêng biệt: đọc mấy giá trị mà người dùng gõ vô hộp thoại, tra tiết diện thép và vật liệu trong ca-ta-lô của SP3D, dựng mấy đường lưới mà cái khung sẽ bám vô, đặt bốn cây cột, đặt bốn cây dầm, rồi báo là xong hay báo một câu lỗi rõ ràng. Mỗi công việc trong đó phải xảy ra đúng thứ tự — thí dụ mấy đường lưới phải hiện hữu trước thì mới bảo cây cột bám vô chúng nó được — mà làm sai thứ tự thì nó không quăng ra một dòng chữ đỏ báo lỗi như khi gõ sai chính tả đâu; nó lẳng lặng đẻ ra một cây cột đứng nhầm chỗ, mà như vậy còn tệ hơn.

"Cái hộp thoại" là gì. Trước khi câu lệnh làm bất cứ chuyện gì, người kỹ sư cần một cái hộp nhỏ để gõ vô: chiều dài nhịp, chiều rộng nhịp, chiều cao, góc xoay, cộng với mấy ô thả xuống để chọn tiết diện thép, chọn mác vật liệu, và đặt tên cho cái khung sắp ra. Dựng cái hộp đó trong Visual Studio nghĩa là kéo mấy ô nhập liệu và mấy cái nhãn thả lên một cửa sổ trống, rồi viết mã nằm sau mỗi cái: nếu có ai gõ chữ vô ô "chiều cao" thay vì gõ số, thì cái ô đó đỏ lên và cái nút "Đặt" tự khóa lại, để một giá trị bậy bạ không bao giờ tới được cái phần chương trình nói chuyện với SP3D. Đây là một mẩu nhỏ, chẳng vẻ vang gì, trong tổng số công việc; và nó cũng là cái phần dễ bị bỏ qua hoặc làm cho có nhất khi bị hối — cho nên có nó nằm sẵn ở đó, viết rồi, đấu dây rồi với mấy ô phía sau, là đáng giá.

"Gọi API" là gì. SP3D bày phần chức năng của nó ra ngoài dưới dạng một bộ API (Application Programming Interface) — một kho từ vựng cố định gồm những mệnh lệnh mà mã tự viết được phép ra lệnh, thí dụ "tạo một cây cột mới ở đây", "tra tiết diện thép này trong ca-ta-lô", hay "chốt sổ thay đổi này vô mô hình". Cái câu lệnh tự viết không tự nó dựng ra hình khối ba chiều của cây cột; nó chỉ nói, đại khái là: "SP3D ơi, đặt giùm một cây cột tiết diện này, vật liệu này, chạy từ điểm này tới điểm kia", rồi bộ máy của chính SP3D đi làm chuyện đặt cột. Học coi trong hàng trăm lời gọi API của SP3D có những lời gọi nào, phải ra lệnh theo thứ tự nào, và mỗi lời gọi ngấm ngầm giả định điều gì (thí dụ: mấy vật thể quy chiếu nào đó phải hiện hữu sẵn thì mới được phép trỏ một cây cột vô chúng nó), tự nó đã là một khối kiến thức lớn và riêng biệt — gần với chuyện học một thứ thổ ngữ chuyên biệt hơn là chuyện tra một hàm trong sách chỉ dẫn.

"Người lập trình tự viết hàm của mình để tổng quát hóa lời gọi API" nghĩa là gì. Một lời gọi API thô thì hẹp — một cây cột, một bộ đường lưới cụ thể. Thay vì chép đi chép lại mấy khối mã gần y hệt nhau bốn lần cho bốn cây cột và bốn lần cho bốn cây dầm, cái mã tự định nghĩa mấy hàm nhỏ dùng lại được của riêng nó (MakeColumn, MakeBeam, CreateGridInfrastructure), nhận vô một nhúm giá trị đơn giản — một cái tên, một điểm đầu, một điểm cuối, một cỡ tiết diện — rồi bên trong nó lo hết mấy khúc đường ống API lặp nhặt, lo đúng một lần. Đây cũng đúng cái phản xạ của người viết macro cho bảng tính: làm cho đúng cái chuỗi thao tác lằng nhằng đó một lần, gói nó lại thành món dùng lại được, rồi mọi lần dùng về sau chỉ còn là đưa vô mấy con số. Có thêm một lớp phụ tá riêng làm y như vậy cho phần tra ca-ta-lô — "tìm giùm tôi một tiết diện cột dạng chữ W trong bộ tiêu chuẩn này" — để cái mẩu logic đó nằm ở đúng một chỗ thay vì nằm rải bốn chỗ. Mã sắp xếp kiểu này không chỉ ngắn hơn; nó còn dễ kiểm hơn nhiều, bởi vì chỉ có một phiên bản duy nhất của "một cây cột được đặt ra sao" cần đi kiểm, chớ không phải tám bản na ná nhau.

Mã nguồn nhu liệu biếu không để minh họa cho việc tự động hóa

Tại sao "được cho không 80%" thật ra là một hai ngày. Không có mẩu nào ở trên là xa lạ đối với một người viết nhu liệu có kinh nghiệm. Cái làm chúng nó mắc là ở chỗ có tới cả chục mẩu như vậy, chúng nó phải ráp theo một thứ tự nhất định, và một cái sai ở mẩu đầu (đặt tham chiếu dự án sai, hay đặt cái điểm gốc quy chiếu vô nhầm đầu cây dầm) thì không hư một cách ồn ào — nó đẻ ra một mô hình nhà máy có cây dầm lơ lửng sai chỗ, mà mãi sau này mới có người ngó cái hình ba chiều rồi phát hiện. Dựng cái solution, đấu dây cái hộp thoại, học cho ra đúng thứ tự các lời gọi API, và viết bản nháp đầu của mấy hàm phụ tá dùng lại được — đó mới là phần ngốn của một người đã biết cách làm nguyên một hai buổi làm việc, bởi vì phần lớn thời gian đó là thời gian đi ráp cho đúng mấy khúc ống, chớ không phải thời gian quyết định mấy khúc ống đó nên làm gì. Có sẵn một bản nháp chạy được của tất cả những thứ đó, gõ ra rồi — dù nó vẫn còn cần tôi sửa cái điểm gốc quy chiếu, sửa cái góc xoay, và viết lại câu báo lỗi ca-ta-lô — chính là cái mà chữ "gần đúng" mua được cho tôi: hai ngày lẽ ra đổ vô giàn giáo, được đổ vô bốn năm cái quyết định thật sự cần tới đầu óc kỹ thuật.

8.01.2026

Đi Xa Hơn Cái Gợi Ý Tự Động (Past the Autocomplete)

Tác giả: Học Trò và Claude AI.


Cửa sổ dòng lệnh cho ta cái gì mà cái khung gợi ý bên hông trình soạn thảo không cho được — chuyện kể cho người không phải dân thảo chương

Viết ngày 1 tháng Tám, 2026. Bài này viết lại từ một quyển sách dài hơn và riêng tư hơn, kể về một năm trời làm việc chung với một trợ tá AI, trong khuôn khổ một gói thuê bao thường thường bậc trung, có giới hạn mức xài. Quyển sách đó viết cho người đã sống qua cái năm ấy. Bài này thì viết cho một người khác hẳn: một người đi làm, đã và đang xài trợ tá AI ngay trong trình soạn thảo mã (code editor) của mình, không phải dân thảo chương và cũng không có ý trở thành dân thảo chương, và đã nghe loáng thoáng đâu đó rằng "cái terminal" mới là chỗ có chuyện hay ho — mà chưa ai chịu nói cho nghe cái đó thực sự nghĩa là gì, và mắc gì phải chịu cực đi học nó. Mọi chuyện trong bài đều rút ra từ một năm làm thiệt, việc thiệt. Không nêu tên file, không nêu tên công cụ, không nói tới tính năng của sản phẩm nào — chỉ có ý tưởng, và cái giá phải trả để học được từng ý một.

Ghi chú riêng cho bản tiếng Việt: nguyên tác viết cho người đọc bên Mỹ, vốn đã xài AI hằng ngày ở sở làm, nên nhiều khái niệm tác giả chỉ nói lướt qua một câu là người ta hiểu. Bản này có nới rộng ra ở những chỗ đó — thêm câu, thêm thí dụ, thêm phần cắt nghĩa mấy chữ nhà nghề — để bạn đọc ở nhà không phải vừa đọc vừa đoán. Chữ tiếng Anh nào cần thiết thì tôi để trong ngoặc, vì đằng nào bạn cũng sẽ gặp lại nó trên màn hình.


Một lời thú nhận làm đảo ngược cả bài

Xin bắt đầu bằng cái chi tiết đá giò lái ngay chính người viết.

Người mà cái năm làm việc của họ được kể lại trong bài này là một kỹ sư nhu liệu (software engineer). Làm về xây dựng và kết cấu, làm tự động hóa cho các nhu liệu vẽ kỹ thuật (CAD), trên 30 năm xài nhiều ngôn ngữ thảo chương thiệt (C, C++, AutoLisp, Java, Vidual Basic 6, VB.NET, C#, v.v) để làm ra sản phẩm thiệt cho hãng xưởng — chớ không phải kiểu tài tử, học chơi cho biết. Vậy mà trong một thư mục làm việc sau này chứa tới mấy trăm chương trình lớn nhỏ — nào là công cụ đọc cao độ nốt nhạc trên bản nhạc scan bằng cách đo từng chấm ảnh (pixel), nào là mấy đoạn mã đi rà soát để bắt cho ra một cái link sai lạc giữa mấy trăm cái link đúng, nào là cả một dây chuyền dịch nguyên quyển sách năm trăm trang, dịch từng đoạn một theo số thứ tự — ông ta không tự tay gõ lấy một dòng nào trong đó hết.

Chuyện này không phải khoe khoang kiểu "tôi biết giao việc cho người khác", mà cũng không phải thú nhận là mình làm biếng. Nó chính là cái lý lẽ của cả bài, nói trước ra ngay từ đầu. Nếu một người thừa sức viết tay từng chương trình đó, mà viết còn nhanh hơn là ngồi tả cho máy nghe, vậy mà suốt một năm trời vẫn cố tình chọn không viết — thì câu hỏi đáng bàn không còn là "AI có viết được mã hay không". Chuyện đó ai cũng biết rồi. Câu hỏi đáng bàn là: khi phần việc gõ phím đã dọn ra khỏi tay người kỹ sư hết, thì cái còn lại trong sự phán đoán của ông ta là cái gì — và cái phần còn lại đó, một người không biết thảo chương có học được không?

Câu trả lời mà bài này bênh vực là: học được. Và cửa sổ dòng lệnh (terminal) chính là chỗ để học, bởi vì đó là nơi duy nhất mà phần việc máy móc thực sự nằm ngoài tay bạn.

Cũng nên nói cho rõ điều đó có nghĩa gì với bạn, nếu bạn hoàn toàn không phải dân kỹ thuật. Cái phần bị lấy đi là phần : cú pháp, tra cứu thư viện hàm, cái công đoạn máy móc để dịch một ý tưởng trong đầu thành mã chạy được. Cái phần ở lại — mà thiệt ra còn nặng thêm — là: quyết định cho thật chính xác món đồ này phải làm được cái gì, kiểm lại coi nó có làm đúng vậy thiệt không, và định trước rằng lần tới nếu nó sai theo một kiểu chẳng ai ngờ tới thì mình sẽ xử ra sao. Cái danh sách thứ nhì đó không phải là thảo chương. Đó là mô tả của một người làm nghề đàng hoàng, trong bất cứ ngành nghề nào, và mỗi ngày bạn đã đang làm một phiên bản của nó rồi. Thí dụ cụ thể nhất là bài cùng ra ngày hôm nay https://hoctroviet.blogspot.com/2026/08/ten-cac-tac-gia-tung-cong-tac-voi-tap.html , tôi làm nó mà không viết tới một dòng mã Python.


Chương Một — Cái trợ tá AI trong trình soạn thảo của bạn thực sự đang làm gì, và nó ngừng ở đâu

Trước hết xin tả lại cho rõ cái ta đang so sánh, kẻo nói qua nói lại mà hai người hiểu hai kiểu.

Cái trợ tá AI nằm trong trình soạn thảo — cái khung gợi ý hiện lên bên hông, hoặc hiện lên chữ mờ mờ ngay chỗ con trỏ, đề nghị nốt phần câu bạn đang gõ dở — cực kỳ giỏi ở đúng một dạng bài: bạn đang ngó vô một chỗ, bạn đã lờ mờ biết cái gì phải tới kế tiếp, và nó đỡ cho bạn cái công gõ. Nó đọc cái file bạn đang mở, có khi đọc thêm vài file lân cận. Nó đề nghị. Bạn nhận, hoặc bạn bỏ. Vòng quay đó nhanh, thua thiệt cũng nhẹ, và gói gọn hoàn toàn trong cái màn hình trước mặt bạn.

Cái đó quý thiệt, và bài này không hề có ý can bạn đừng xài. Nhưng xin để ý cái hình dáng của bức tường bao quanh nó, vì mọi giới hạn kể sau đây đều từ đó mà ra. Cái trợ tá đó chỉ thấy cái bạn đang mở. Nó không thấy bốn trăm file còn lại trong dự án. Nó không chạy thử được cái gì rồi coi kết quả ra sao. Nó không có cách nào để tới thứ Năm còn nhớ cái bạn dạy nó hôm thứ Ba. Nó không mang theo một bộ luật lệ thường trực nói rằng công việc trong dự án này phải làm theo lối nào. Và đơn vị công việc của nó là một lời gợi ý mà bạn sẽ nhận hay bỏ trong vòng hai giây — nghĩa là nó chỉ giúp được những việc nhỏ tới mức phán đoán xong trong hai giây.

Cái ràng buộc cuối đó mới là cái trần thiệt sự, và hồi bạn còn đang ở bên trong nó thì bạn không thấy nó đâu. Một công cụ chỉ giúp được những quyết định hai giây, lâu ngày nó lặng lẽ dạy bạn chỉ đem tới cho nó những bài toán hai giây. Rồi bạn hết còn để ý tới đống việc mình không đem tới cho nó nữa: cái bảng tính cần lặp lại cùng một phép sửa trên mười một cái tab; cái thư mục hai trăm cuốn PDF scan mà từ trước tới giờ chưa ai lập mục lục; cái bản báo cáo lẽ ra tháng nào cũng nên dựng lại tự động từ đúng sáu nguồn dữ kiện đó, mà rốt cuộc tháng nào cũng ngồi ráp tay; cái vụ chuyển nguyên bộ tài liệu từ định dạng này qua định dạng khác mà ai cũng đồng ý là nên làm, và không ai có nổi ba ngày rảnh liên tiếp để làm.

Mấy cái đó không phải bài toán thảo chương. Đó là bài toán công việc, và cái nào cũng cùng một cấu trúc: lớn quá, ôm hết trong đầu một lần không nổi; lặp đi lặp lại nhiều quá, làm tay không xuể; mà lại lẻ tẻ thất thường quá, mướn hẳn một người thảo chương thì không đáng. Đó đúng y cái hình dáng mà terminal kham được, còn cái khung gợi ý bên hông thì không.


Chương Hai — Dời qua terminal thì thực sự đổi cái gì

Chỗ khác nhau về mặt máy móc thì chẳng có gì hào nhoáng. Thay vì một cái hộp gợi ý nằm cạnh dòng mã của bạn, bạn có một cuộc đối thoại với một thứ có thể: nhìn được nguyên thư mục của bạn, mở bất cứ file nào trong đó, viết ra file mới, chạy chương trình, đọc coi chương trình đó in ra cái gì, rồi sửa và làm lại. Toàn bộ chỗ khác nhau về khả năng chỉ có bấy nhiêu. Mọi thứ còn lại trong bài này đều từ đó mà suy ra.

Nói thêm cho bạn nào chưa từng đụng tới: "terminal" chỉ là một cửa sổ chữ đen chữ trắng, bạn gõ câu vô đó bằng tiếng người bình thường, và cái trợ tá trả lời ngay trong cửa sổ đó. Nó không hề đòi bạn phải biết mấy câu lệnh cổ lỗ sĩ kiểu dir, cd, grep. Bạn cứ viết như viết cái email dặn việc cho một người phụ tá mới vô làm. Cái khác duy nhất — và là cái khác quan trọng — là người phụ tá này có chìa khóa vô nguyên cái thư mục, chớ không phải chỉ được ngó qua vai bạn coi một trang giấy.

Nhưng cái khác về mặt thực dụng thì lớn hơn cái khác về mặt máy móc, và nên gọi tên ra làm bốn phần.

Đơn vị công việc trở thành một việc, chớ không còn là một cú gõ phím. Bạn thôi nói "viết nốt dòng này" mà bắt đầu nói "đi hết mọi tài liệu trong thư mục này, rút cái mục lục của từng cuốn ra, rồi gom lại cho tôi một bảng tra cứu duy nhất đã sắp thứ tự". Đó là một câu mà bất cứ người đi làm nào cũng nói được. Nó không đòi cú pháp, không đòi bạn biết cái chương trình sắp được viết ra sẽ viết bằng ngôn ngữ gì — thậm chí không đòi bạn biết rằng sẽ có một chương trình được viết ra.

Có một vòng kiểm tra và sửa sai mà bạn không đứng ở giữa. Khi cái trợ tá viết ra một thứ, đem chạy, và nó chạy hỏng, thì nó đọc cái lời báo lỗi rồi tự sửa, không cần tới bạn. Đây là lý do lớn nhất khiến terminal với tới được những bài toán mà cái khung bên hông không với tới: một lời gợi ý bên hông là một phỏng đoán không có cách nào tự kiểm chứng, còn một việc giao trong terminal là một phỏng đoán cộng một lần kiểm cộng một lần sửa, lặp đi lặp lại cho tới khi kiểm lọt. Bạn không còn là cái lớp phiên dịch giữa "lời báo lỗi" và "cách sửa" nữa. Bạn là người quyết định cái thứ cuối cùng chạy lọt đó có đúng là cái mình muốn hay không.

Sản phẩm làm ra không nhất thiết phải là mã. Chỗ này quan trọng ghê gớm với người đọc mà bài này nhắm tới, mà cũng là chỗ đa số người ta bỏ sót. Suốt cái năm có thiệt đằng sau bài này, sản phẩm làm ra là: bài viết, sách dịch qua bốn thứ tiếng, mục lục tra cứu cho mấy ngàn bài báo trong tạp chí cũ, danh sách đường dẫn nhạc đã kiểm chứng từng cái, bản ký âm chép lại từ bản thảo viết tay, và sách in ra giấy đàng hoàng. Mã thì có, mà có rất nhiều — nhưng có với tư cách đồ nghề dùng rồi bỏ, dựng lên để làm ra mấy thứ kia, chẳng ai đọc tới, giữ lại chỉ vì biết đâu có bữa cần chạy lại. Bạn không cần trở thành người biết đọc mã mới trở thành người biết đặt hàng người ta viết mã.

Lời dặn dò nằm lại được. Ở cái khung bên hông, mọi thứ bạn biết đều bốc hơi giữa hai phiên làm việc. Trong một dự án làm ở terminal, bạn viết xuống được rằng ở đây công việc phải làm theo lối nào — viết bằng tiếng người bình thường, trong một tờ giấy bình thường nằm ngay cạnh chỗ làm việc — và tờ đó được đọc trước khi bất cứ việc gì bắt đầu. Đây chính là cái tính năng biến "một năm xài AI" thành "một năm tích lũy được cái gì đó", và một nửa những chuyện kể sau đây đều xoay quanh nó.


Chương Ba — Bốn cái trần, nói cho cụ thể

Câu "AI thì có giới hạn của nó" nói ra thì mơ hồ quá, không dựa vô đó mà tính toán gì được. Trên một gói thuê bao thường của người tiêu dùng — không phải trương mục hạng doanh nghiệp với ngân sách co giãn thoải mái, cũng không phải tiền tài trợ nghiên cứu — mấy cái giới hạn đó có bốn hình dáng rất cụ thể. Và mọi cái hàng rào an toàn nhắc trong bài này đều có mặt vì một trong bốn cái trần đó đã bị đụng ít nhất một lần, và phải dựng cái gì đó lên để đừng đụng y như vậy lần thứ nhì.

Cái đồng hồ đo mức xài. Công việc không hề miễn phí như người ta tưởng khi buông câu "thì cứ nhờ AI làm chớ gì". Mỗi lần đọc một file, mỗi lần chạy một câu lệnh, mỗi lần thả thêm một "thợ phụ" ra làm song song, đều trừ vô cùng một cái hạn mức chung. Cho chạy một lượt bốn thứ thì cái đồng hồ quay nhanh gấp bốn — nghe thì có vẻ lợi, cho tới lúc nó cạn ngay giữa chừng và không thứ nào trong bốn thứ đó xong.

Cái khung trí nhớ tạm có mép cứng. Chữ nhà nghề gọi là context window. Xin hình dung nó như cái mặt bàn: một cuộc đối thoại chỉ trải ra được chừng đó giấy tờ cùng một lúc, và cái mặt bàn đó không nới ra được. Một dự án bốn trăm file, hay một quyển sách dài, không cách nào nằm hết trên bàn một lượt. Cái gì lớn hơn cái bàn thì phải cố ý chia nhỏ ra, kèm theo một cách để làm tiếp từ chỗ đứt — bằng không thì công việc lặng lẽ rơi mất, mà lại rơi mất không kêu một tiếng nào.

Không có trí nhớ giữa hai phiên làm việc, trừ khi bạn tự dựng lấy một cái. Mỗi cuộc đối thoại mới đều bắt đầu từ con số không. Một bài học ba tuần trước phải trả giá đắt mới học được thì nay đơn giản là không còn nữa, trừ phi có người đã viết nó xuống ở một chỗ mà phiên sau được dặn là phải đọc.

Các hạng model, tức là cái vụ đánh đổi giữa tiền và chất lượng, mà đúng lúc đánh đổi thì mình không thấy. Nói cho dễ hiểu: cùng một hãng AI thường có nhiều "đời máy", cái nhanh và rẻ, cái chậm và mắc. Hai cái đó không thay thế cho nhau được, và chỗ khác nhau thì không chịu tự khai ra bằng một thông báo lỗi. Có khi nó hiện ra dưới dạng mấy trăm chữ trôi chảy, tự tin, câu cú đàng hoàng — mà sai, sai theo cái kiểu bạn đọc lướt sẽ không bắt được.

Bốn thứ này, nói trên lý thuyết thì chẳng có gì đáng ngạc nhiên. Cái đáng nói cho thật thà là: không cái nào trong bốn cái được tính trước hết. Mọi luật lệ kể ở dưới đều được viết ra sau khi đã đụng trần. Mà đó cũng là bài học hữu ích nhất của bài này: bạn sẽ không nghĩ ra được một lối làm việc hay ho trước khi bắt tay vô làm đâu. Bạn sẽ sai trước cái đã, rồi mới viết xuống được là mình đã sai chính xác ở chỗ nào.


Chương Bốn — Chạy song song là cái bẫy, khi cái đồng hồ tính tiền là của chung

Một buổi chiều, đang làm tới một bộ nhạc lớn cần tách ra rồi chép lại từng bài, có bốn "thợ phụ" chạy ngầm được thả ra một lượt. Nhìn thì đúng bài bản sách vở: bốn khúc việc độc lập, bốn người làm, xong trong một phần tư thời gian.

Trương mục đụng trần mức xài ngay giữa chừng. Cả bốn thợ phụ đều hỏng dở dang. Hai đứa quay về tay không, chỉ đưa ra mấy cái file rỗng — file thì có đó, mở ra thì bên trong không có lấy một chữ việc thiệt. Nhưng mất công việc chưa phải là chỗ tệ nhất; chỗ tệ nhất là sự mập mờ: đứng ngoài không có cách nào biết được đứa nào trong bốn đứa đã lặng lẽ hết tiền trước khi làm xong và đứa nào thiệt sự làm trọn. Thành ra không có cái kết quả nào tin được hết. Phải làm lại từ đầu, làm tuần tự từng cái một, làm ngay trong cuộc đối thoại chính, chỗ mà mỗi bước đều nhìn thấy được.

Cái luật rút ra từ bữa đó nay nằm ở dòng đầu tiên trong tờ nội quy của dự án, đứng trên hết mọi thứ khác: ở đây đừng giao việc cho mấy thợ phụ chạy ngầm song song; cứ làm thẳng, làm ngay trong dòng, dù có phải làm nhiều bước và mất nhiều thì giờ.

Chỗ nghịch lý nằm ở chỗ cái luật đó đang nhắm giữ cho được cái gì. Bốn thợ phụ cảm giác là nhanh hơn, và nếu cái đồng hồ tính tiền không có trần thì đúng là nhanh hơn thiệt. Nhưng khi có trần, cái giá của việc làm lại sau một lần hỏng đã ăn hết phần lời; mà một cái hỏng xảy ra tuốt trong một luồng chạy ngầm thì khó bắt sớm hơn nhiều so với cái hỏng xảy ra ngay trước mắt bạn. Làm tuần tự nhưng nhìn thấy được, rốt cuộc lại là con đường nhanh thiệt, một khi đã đếm cho sòng phẳng cái giá của kiểu hỏng nửa chừng mà im ru.

Đây không phải một lời tuyên bố chung về mấy "tác tử" AI (agent), và hiểu theo nghĩa đó là hiểu sai. Đây là một lời tuyên bố rất riêng về cái giá của việc chạy song song khi cái đồng hồ tính tiền là của chung và có giới hạn — mà đó chính là mô tả của mọi gói thuê bao cá nhân, tức là mô tả của bạn.


Chương Năm — Việc lớn thì phải chia đợt, đừng bao giờ cho chạy một lèo

Cái trần thứ nhì im hơn một lời báo lỗi: có những việc lớn quá, không nhét vô một lượt được, và cách phản ứng ngây thơ nhất — "thì cứ cho nó làm nguyên cục một hơi cho rồi" — hỏng theo kiểu lặng thinh chớ không hỏng theo kiểu la làng.

Thí dụ rõ nhất là một quyển sách năm trăm trang, viết lai rai trong hai chục năm, cần dịch ra thành ba ấn bản tiếng Anh, tiếng Pháp và tiếng Ý, hay đủ để đem in. Quăng nguyên bản thảo vô một cuộc đối thoại thì không đời nào xong — không phải vì máy báo "quá cỡ", mà vì một lần chạy dài thượt và không có kết cấu như vậy thì không cho bạn cách nào kiểm phần đã làm được, cũng không cho cách nào nối lại cho gọn sau khi bị đứt ngang. Cái thay cho câu "thì cứ dịch đi" là: rút hết từng đoạn văn trong bản gốc ra thành một danh sách có đánh số; dịch theo đợt, mỗi đợt năm chục tới chín chục đoạn; ráp lại; rồi ghi từng đoạn đã dịch trở vô đúng vị trí số thứ tự cũ của nó trong tài liệu gốc.

Mấy tháng sau, một lần rà soát lại ấn bản tiếng Anh đã hoàn tất phát hiện ra ba khúc đã lặng lẽ biến mất — nội dung mất tiêu kể từ sau một trang nọ trong bản in thử. Nhờ công việc có đánh số, cách chữa chỉ là vá đúng ba khúc đó. Không phải làm lại cái gì đã đúng, và cũng không phải đi dò lại từ đầu coi phần nào thì đã xong rồi.

Cái hình dáng đó — đánh số công việc, làm theo từng khúc có giới hạn, ghi tình trạng xuống đĩa sau mỗi khúc, dựng lại cái bản kết quả nhìn thấy được sau mỗi lần — lặp lại ở mọi việc lớn trong năm đó: một dây chuyền đi tìm rồi kiểm chứng, rốt cuộc chạy qua hơn một ngàn món trong ba bộ sưu tập khác nhau; và một đợt rút mục lục từ mấy trăm số tạp chí scan. Chạy tới chừng đó lần thì đúc ra được bốn câu bỏ túi, và cả bốn đều đem qua xài thẳng được cho bất cứ việc số lượng lớn nào bạn định đem tới terminal.

Luôn luôn chạy thử một lô nhỏ trước. Cho chạy cách làm đó trên năm tới mười món thôi, chạy đồng bộ ngay trước mắt mình, tự tay đọc kết quả, rồi đối chiếu với những gì mình đã biết chắc là đúng, xong rồi mới nhân lên. Mọi con bọ (bug) thiệt sự trong mấy dây chuyền của năm đó đều bị bắt theo kiểu này, hồi vết thương còn có năm dòng chớ chưa phải sáu trăm dòng.

Mỗi lần chỉ cho một người ghi. Hai tiến trình cùng cập nhật một cái file theo dõi sẽ đè lên nhau và làm mất dòng một cách im ru. Chuyện này chán ngắt, nó không phải chuyện của riêng AI, và nó sẽ cắn bạn đúng một lần.

Món nào không chạy trót lọt thì đánh dấu rồi đi tiếp. Trong đám tạp chí scan có mấy số không hề có trang mục lục xài được. Cái phản xạ tự nhiên — dừng lại, ngồi chép tay nguyên cuốn này, dựng lại cái đáng lẽ chỉ là một cú tra cứu năm giây — đúng là cái phản xạ ngốn sạch ngân sách của cả một phiên làm việc cho một cuốn, trong khi chín mươi chín cuốn khác ngồi chờ. Cứ ghi một dòng tạm, đề "cuốn này cần người coi lại", rồi đi tiếp.

Làm tới đâu lưu tới đó. Nếu một phiên làm việc dài có thể đứt trước khi công việc xong, thì mấy phần đã xong phải nằm sẵn trên đĩa rồi. Soạn hết trong đầu rồi cuối cùng mới ghi ra một lượt, nghĩa là khi đụng trần bạn mất trọn gói thay vì mất số không.

Cái nguyên tắc nằm dưới cả bốn câu, nói gọn một lần: đừng bao giờ cho một việc chạy một lèo không ai kiểm, khi nó có thể chia thành một chuỗi các đợt có chốt và có thể làm tiếp từ tình trạng đã ghi xuống đĩa. Kiểu hỏng mà một lần chạy dài không kết cấu sinh ra không phải là "nó ngừng và báo lỗi". Nó là "nó đẻ ra một thứ trông y như đã xong mà lặng lẽ chưa xong" — và cái đó phát hiện trễ thì tốn kém hơn nhiều lắm.


Chương Sáu — Chọn model theo mức dễ thấy của cái sai, chớ đừng theo độ khó của việc

Chuyện đáng học nhất trong năm đó lại là một chuyện nhỏ, máy móc, và hơi quê: nguyên một bài viết đã hoàn tất phải bị coi là đáng ngờ, chỉ vì cái model viết ra nó thuộc hạng không đúng.

Công việc làm bằng tiếng Việt, một thứ tiếng mà dấu không phải đồ trang trí — dấu đổi thì chữ đổi luôn. Một model nhanh hơn và rẻ hơn đẻ ra bài viết với dấu bị lột sạch. Cái đó không phải máy sập. Không phải máy từ chối. Nó là văn xuôi trôi chảy, câu cú đàng hoàng, giọng tự tin, mà sai chánh tả theo cái kiểu đọc lướt cả đời cũng không bắt được — và nó lọt lưới cho tới khi đã xảy ra ít nhất một lần rồi mới có người thấy.

Cái luật viết ra sau đó dùng ngôn từ gắt nhất trong cả tờ nội quy của dự án — việc này phải xài hạng cao nhất, mà nếu phát hiện đang chạy bằng hạng thấp hơn thì ngưng và báo ngay lập tức — nhưng cái đáng giá không nằm ở cái luật. Nó nằm ở câu hỏi đẻ ra cái luật.

Sức hút về phía cái model nhanh hơn, rẻ hơn thì lúc nào cũng có, và thường thường là đúng. Đa số công việc là máy móc và tự nó kiểm được nó, trả giá cao cho mấy việc đó là phí của. Câu hỏi làm đổi câu trả lời không phải là việc này khó cỡ nào, mà là: nếu model sai ở chỗ này, cái sai đó có nhìn thấy được không?

Một chương trình chạy sập, một file mở không ra, một dòng dữ kiện méo mó — mấy thứ đó tự khai ra. Bạn tìm ra trong vài giây, không tốn đồng nào. Còn dấu tiếng Việt bị lột im ru, một mệnh đề dịch trật một chút, một con số đọc lệch qua hàng bên cạnh trên trang scan, một bản tóm tắt bỏ mất đúng cái ý quan trọng nhất — mấy thứ đó không tự khai. Và mỗi giờ trôi qua trước khi bạn bắt được nó, cái giá lại đắt thêm, bởi vì đã có thêm việc khác chồng lên trên nó.

Vậy thì: xài model mắc tiền đúng ngay những chỗ mà một câu trả lời sai sẽ trông rất ổn, và để dành model rẻ cho cái phần việc lớn hơn nhiều, nơi cái sai tự nó lòi ra và bắt lại ở lượt sau chẳng tốn gì. Đây là một phán đoán về chuyện phân bổ tiền bạc, không phải một phán đoán kỹ thuật — và bạn đã đủ tư cách để phán đoán chuyện đó rồi.


Chương Bảy — Trí nhớ là thứ mình phải tự xây

Cái trần thứ ba — hết phiên là chẳng còn gì sống sót — chính là thứ làm cho mọi bài học trong bài này đều mau hư. Một cái luật hôm thứ Ba phải trả giá mới học được thì tới thứ Năm chẳng đáng gì hết, nếu không có cái gì mang nó qua.

Cách chữa được dựng lên cho chuyện này là: một tờ mục lục, cộng với một thư mục đựng từng tờ ghi nhớ riêng lẻ, mỗi tờ ngắn thôi, mỗi tờ có dán nhãn cho biết nó thuộc loại gì, và mỗi tờ dựng quanh hai câu hỏi mà rốt cuộc mới là toàn bộ vấn đề: tại sao chuyện này xảy ra, và lần tới nó phải làm đổi cách làm việc ra sao.

Xin kể năm tờ, tả theo nội dung chớ không theo tên gọi, vì cái nội dung mới là cái đem qua chỗ khác xài được:

Vụ bốn thợ phụ chạy song song ở Chương Bốn, kèm ngày tháng và kiểu hỏng chính xác, để cái cơn thèm "thì cứ cho chạy bốn cái một lượt" vừa ló ra là đã có sẵn câu trả lời.

Một luật buộc mọi cao độ nốt nhạc chép ra đều phải được gọi đích danh tên nốt, không được tả bằng hình dáng lên xuống — luật này viết sau khi nguyên một đợt hai mươi hai bài hát được chép xong mà trong đó không có lấy một cái tên nốt nào; mà bắt được cũng chỉ nhờ đem một file dựng cạnh một file làm đàng hoàng của một bộ sưu tập khác rồi hỏi tại sao bên này có nốt còn bên kia chỉ có tính từ.

Một luật nói rằng một kết quả tìm kiếm có khớp cái tên thì chưa phải là một kết quả đúng bài đó, đúng người đó — viết sau khi 136 trong số 776 đường dẫn đã "kiểm chứng" hóa ra là sai, dù về mặt chữ nghĩa thì khớp.

Một luật cấm dựng bất cứ khẳng định thống kê hay tần suất nào trên một lần đọc nhanh, làm ẩu — viết sau khi đúng chuyện đó xảy ra, và đã neo cả cái luận điểm chính của một bài viết vô một con số đếm không những sai mà còn ngược. Câu đáng mang theo từ vụ đó: một cách đọc dở mà nhất quán với chính nó thì không phải là bằng chứng rằng cách đọc đó đúng.

Một luật cấm trích lời ca hay tài liệu gốc theo trí nhớ — luôn luôn phải chép lại từ bản đã kiểm chứng — viết sau khi có một câu trích lọt lưới, mà câu đó một nửa là nhớ lộn, một nửa là bịa trắng.

Không có cái nào trong đó là chuyện lý thuyết viết sẵn từ trước. Mỗi cái là một vết thẹo có ghi ngày, giữ lại đúng để cái lỗi đó không cần phải xảy ra lần thứ nhì mới học được. Và cái công viết mấy tờ đó không phải giấy tờ hành chánh dư thừa — nó chính là cái biến "một năm xài một công cụ" thành "một năm càng ngày càng xài giỏi hơn".

Đây là chỗ khác thật sự so với kinh nghiệm ở cái khung bên hông, và cũng nên nói thẳng: không có cái này, bạn sẽ có một năm gồm nhiều phiên làm việc từng phiên đều ổn, mà cuối năm chẳng còn gì trong tay. Mấy bài học sẽ sống trong đầu bạn, mờ dần đi, rồi bị học lại từ đầu. Có cái này, bạn có một cuốn cẩm nang vận hành do chính những lần thất bại viết ra.


Chương Tám — Một tờ nội quy thường trực, được đọc trước cả khi bạn kịp hỏi

Mấy tờ ghi nhớ riêng lẻ bắt được từng cái lỗi riêng lẻ. Nằm trên chúng là một thứ rộng hơn: một tờ giấy viết bằng tiếng người bình thường, nằm ngay cạnh dự án, ghi rõ ở đây công việc làm theo lối nào, và được đọc vào đầu mỗi phiên làm việc, trước khi bất cứ chuyện gì khác xảy ra.

Đây là món không hề có món tương đương ở cái khung bên hông trình soạn thảo, và nó cũng là món làm đổi nhiều nhất cái khả năng của công cụ. Một phần nội dung trong đó là mấy điều cấm sinh ra từ thất bại — ở đây đừng chạy song song; việc này đừng xài model rẻ; đừng kết bài bằng đúng cái câu kết đó nữa, vì nó đã xài rồi và nay cho về hưu. Một phần là chuyện chỉ đường: đây là chỗ để tài liệu tham khảo, đây là thứ tự phải tra, và khi hai nguồn cãi nhau thì nguồn nào thắng. Một phần là văn phong của nhà, tả kỹ tới mức kiểm được: viết thành đoạn văn xuôi chớ đừng gạch đầu dòng, vì gạch đầu dòng đọc ra giống biên bản họp hơn là giống văn; bài dài chừng này chữ; bố cục theo kiểu này.

Và một phần trong đó là một luật thường trực về sự thành thật, mà rốt cuộc lại quan trọng hơn hết thảy phần còn lại. Trong lúc làm một khối bài viết lớn về văn hóa, một lượt kiểm tra dữ kiện phát hiện ra mấy câu nghe rất giống ca dao tục ngữ, đã được trích như là của dân gian, mà kỳ thực chẳng dân gian chút nào — bịa ra, bịa rất trôi chảy, để chống đỡ cho một luận điểm. Cái luật viết ra sau đó nói: đừng bao giờ trích một câu tục ngữ hay ca dao trừ khi nó có mặt trong một nguồn in ra giấy; khi không chắc thì cứ tả cái ý đó ra bằng lời mình, đừng đóng ngoặc kép; và nếu một câu nghe hợp với lập luận của mình một cách đáng ngờ, thì hãy coi đó là dấu hiệu báo động chớ đừng coi là hên.

Cái lý lẽ đằng sau luật đó vượt xa khỏi một dự án riêng lẻ, và nó là điều quan trọng nhất trong cả bài này, nếu công việc của bạn sẽ có người đọc mà người đó không đứng bên cạnh nhìn bạn làm: người đọc chỉ tin một công việc có AI nhúng tay vô nếu mọi câu trích, mọi con số, mọi lời ghi nguồn đều tra lại được — và chỉ cần một chi tiết bịa là mọi thứ chung quanh nó mất giá theo. Toàn bộ giá trị của một trăm bài viết cẩn thận có thể tan tành vì một câu trích bịa nằm ở bài thứ mười. Cái đó không phải lý do để đừng xài công cụ. Đó là lý do để cắm luôn phần kiểm chứng vô tờ nội quy thường trực, để nó xảy ra bất kể bạn có nhớ dặn hay không.


Chương Chín — Đúc phần việc máy móc thành công cụ mà bạn không bao giờ phải đọc

Làm tay cùng một việc chừng hai ba lần là cái khuôn của nó lộ ra: một phần là phán đoán, một phần thuần túy máy móc và rất dễ sai. Cái phần máy móc đó nên thôi để cho mô hình ngôn ngữ làm.

Đó là hình dáng của mọi thủ tục dùng lại được, dựng lên trong năm ấy. Cái nào cũng gồm hai vế: một bản mô tả cách làm viết bằng lời — phần phán đoán — đi kèm một chương trình chạy được thiệt, làm cái phần máy móc y hệt nhau mỗi lần. Đo vị trí chấm ảnh trên một trang scan để biết chính xác một nốt nhạc nằm chỗ nào. Định dạng một bản ký âm đã xong thành kết quả đồng nhất. Chuyển một tài liệu thành một trang trình bày coi được. Đi tìm, đối chiếu, rồi rà soát trên mấy trăm món.

Có một lý do rất riêng khiến chuyện này quan trọng hơn cả chuyện nhanh chậm, và đó là bài học nhỏ mà sắc nhất của cả năm. Tờ nội quy của dự án đó có một điều cấm tuyệt đối — không ngoại lệ, không có màn "thôi lần này thôi" — cấm nhờ model gom nhiều tài liệu dài lại thành một, hoặc đổi một tài liệu dài từ định dạng này qua định dạng khác, bằng cách đọc rồi chép lại nội dung. Việc đó bắt buộc phải để cho một chương trình làm. Không phải vì model dở chuyện đó, mà vì một model được nhờ chép lại một tài liệu dài thì có lúc sẽ lặng lẽ tóm tắt thay vì chép lại — và cái kết quả trông y như đúng, cho tới khi có người ngồi đếm. Một chương trình năm dòng giữ nguyên từng ký tự, không xen vô một chút phán đoán nào. Xài model cho phán đoán và xài chương trình cho sự trung thực từng chữ, và đừng bao giờ để hai vai đó đổi chỗ cho nhau.

Cũng cái bản năng đó cắt nghĩa vì sao một thủ tục viết ra giấy ăn đứt một thủ tục nhớ trong đầu. Cái gì lặp lại quá hai lần đều được viết xuống thành một cách làm có tên, có các bước đánh số, để phiên sau chạy đúng cái đó chớ không tự chế lại một phiên bản hơi khác. Một đoạn văn nhớ lại rồi kể lại thì trôi dạt. Một thủ tục viết ra giấy thì không.

Mà điều đó dẫn thẳng tới cái thất bại tinh vi nhất trong cả bài này.


Chương Mười — Nói lại bằng lời khác thì nó trôi mất, và chuyện phải rà soát lượt thứ hai

Một đợt hai mươi hai bản chép nhạc được làm theo một tờ ghi chú cách làm, viết riêng cho đợt đó. Tờ ghi chú ấy diễn lại cái lối đọc của thủ tục thường trực bằng lời hơi khác đi một chút — tả cái lối đọc nhanh đó là "lấy dáng nhạc chung làm chính". Thủ tục thường trực xưa nay đòi chặt hơn nhiều: mỗi tiếng hát đều phải có một tên nốt gọi đích danh, và đánh dấu khi không chắc. Chẳng ai có ý làm nhẹ cái luật đó đi hết. Câu diễn lại kia được viết ra với thiện chí, bởi một người đang cố nói cho gọn và cho dễ hiểu.

Cả hai mươi hai file đẻ ra không có lấy một cái tên nốt. Chỉ toàn văn xuôi tả hình dáng — "đi ngang đều", "ngân dài một nốt". Không file nào xài được cho bất cứ lập luận nào về cao độ, mà đó lại đúng là lý do làm ra chúng. Cái trôi dạt đó vô hình suốt hai ngày, và bắt được cũng chỉ nhờ đem một file trong đám đó so với một file làm đàng hoàng ở một bộ sưu tập khác.

Cái luật viết sau đó: đừng bao giờ nói lại một luật thường trực bằng lời mới. Hãy chỉ thẳng vô câu chữ gốc, y nguyên. Một câu diễn nôm của bản đặc tả (spec) chính là một bản đặc tả mới, viết ra một cách vô tình, bởi một người tưởng mình đang tiết kiệm công.

Chỗ này đáng ngồi ngẫm một chút, nếu bạn đi lên từ cái khung bên hông, bởi vì đây là một dạng thất bại chỉ tồn tại khi bạn đã bắt đầu đưa cho AI những chỉ thị viết ra giấy có tính thường trực — nghĩa là chỉ tồn tại khi bạn đã bắt đầu làm đúng cái chuyện khiến terminal đáng công xài. Cái hỏng không nằm ở chỗ model ngu. Ai dính vô cũng làm đúng y cái mình được dặn. Chỉ có điều cái lời dặn đã lặng lẽ đổi.

Và đó cũng là lý do bài học tổng quát đắt tiền nhất của năm đó là câu này: một lượt kiểm chỉ bắt được những kiểu hỏng mà bạn đã nghĩ tới trước để mà kiểm.

Cái dây chuyền đi tìm rồi kiểm chứng nói ở trên chạy hai lượt rà, và hai lượt cố ý khác hình dáng nhau. Lượt đầu thuần máy móc: cái tên mình đang tìm có thực sự xuất hiện như một từ trọn vẹn trong chính cái tựa của kết quả đó không? Lượt thứ nhì dựa trên phán đoán, nhắm thẳng vô đúng cái mà lượt đầu về mặt cấu tạo không thể thấy — một cái tên có mặt đó thiệt, mà là tên của cái phòng trà chớ không phải tên ca sĩ; hoặc là tên nhà thơ làm bài thơ gốc chớ không phải tên người hát; hoặc một cái tựa chỉ đơn giản là nối dài cái tựa mình cần thành ra một bài khác hẳn ("Thành Phố Buồn" hiện ra khi đang tìm "Phố Buồn"). Trên một bộ sưu tập, riêng lượt thứ nhì bắt được 136 kết quả sai trên 776 — mà cái nào cũng đã qua lượt đầu, cái lượt máy móc kia, một cách sạch sẽ.

Vụ chép nhạc kể ở trên là cùng bài học đó nhìn từ phía ngược lại: nó không bị bắt bởi bất cứ lượt kiểm tự động nào hết, bởi vì chẳng có lượt kiểm nào được viết cho câu hỏi "file này có thực sự chứa tên nốt hay không". Nó bị bắt bởi một hành động rất người: đem hai thứ đặt cạnh nhau mà ngó.

Nói gọn một lần: một lượt rà soát thứ nhì, cố ý làm cho khác hình dáng với lượt đầu, không phải là làm dư. Nó là thứ duy nhất bắt được cái loại hỏng mà lượt đầu ngay từ khi thiết kế đã không được làm để thấy. Còn chuyện đem hai thứ đặt cạnh nhau mà so — kết quả cạnh kết quả, kết quả cạnh bản gốc — cho tới nay vẫn là cách rà soát rẻ nhất mà loài người từng nghĩ ra.


Chương Mười Một — Đọc kỹ cái sổ sách trước khi tin nó

Còn hai cái thất bại nữa đáng gọi tên, vì đó là loại thất bại mà một người thông minh vẫn mắc trong lúc đang rất cẩn thận, và vì cả hai đều là chuyện về bằng chứng chớ không phải chuyện về AI.

Cái thứ nhất: một bản kiểm kê toàn dự án được dựng lên bằng cách quét một thư mục rồi sắp mọi thứ theo ngày tạo, để dựng lại một dòng thời gian. Kết luận là không có gì có trước một tháng Giêng nọ. Kết luận đó sai, mà sai vì một lý do rất tầm thường — cái lệnh quét bị chỉ vô sâu hơn một tầng, thành ra nguyên một thư mục anh em nằm bên cạnh chưa hề được ngó tới lần nào. Khi đem ra coi thẳng, nó đẩy cái ngày bắt đầu thiệt lùi lại ba tháng. Mấy cái ngày tháng đã thu thập được thì đúng hết. Chỉ là có nguyên một vùng của thế giới chưa từng lọt vô khung hình.

Không thấy bằng chứng chỉ là bằng chứng của sự không có, khi và chỉ khi bạn nói được chính xác cuộc tìm kiếm của mình đã bao trùm tới đâu. Mọi kết luận phủ định mà AI đưa cho bạn đều đáng bị hỏi thêm một câu: rốt cuộc bồ đã ngó vô những chỗ nào?

Cái thứ nhì: cũng trong bản kiểm kê đó, hơn phân nửa số file mang y hệt một cái mốc ngày giờ tạo. Không phải vì nửa dự án được viết ra trong một ngày, mà vì bữa đó nguyên đống file được chép hàng loạt qua chỗ mới, và hệ điều hành đóng dấu cái giờ chép đè lên cái giờ viết. Cuốn sổ trông thì chính xác mà kỳ thực là chuyện phịa. Bài viết ra đời từ đó rốt cuộc phải nói rõ ra: khẳng định nào dựa trên ngày tháng tin được, và khẳng định nào dựng lại từ lời kể — một chỗ phân biệt mà đa số bài tổng kết sẽ lặng lẽ ủi bằng cho êm.

Cái thói quen đó đáng bưng nguyên về mà xài, vì nó chính là thứ làm cho công việc có AI nhúng tay vô đứng vững được trước người đọc khó tính: hãy nói rõ khẳng định nào là đo được và khẳng định nào là suy ra; và khi hai nguồn cãi nhau thì nói thẳng là chúng cãi nhau, kèm theo mình đã cân nhắc ra sao — chớ đừng âm thầm chọn một cái rồi trình bày như thể đã ngã ngũ. Cái luật thường trực mà dự án đó dùng cho chuyện này chỉ có bốn chữ: bằng chứng trước, kết luận sau.

Trong cùng họ với nó có một kỷ luật nhỏ nữa: khi một thông số có tính hệ thống bị sai, thì mọi thứ nằm phía sau nó sai cùng một lượt. Đọc một trang bản nhạc thì cái bộ khóa (key signature, tức mấy dấu thăng giáng ghi ở đầu dòng nhạc) chính là loại thông số đó — đếm lộn một dấu thôi là mọi nốt bị ảnh hưởng trong cả bài đều sai, sai im ru và sai đều đặn. Cái luật thành hình: hãy kiểm cho ra cái thông số đầu độc mọi thứ, kiểm một cách rõ ràng và kiểm mỗi lần, trước khi làm bất cứ phần việc nào dựa trên nó. Cái thông số tương đương của bạn có thể là một khoảng ngày tháng, một đơn vị đo, một loại tiền tệ, một tỷ giá hối đoái, một sơ đồ ánh xạ cột trong bảng tính, hay là chuyện trong hai file gốc tên na ná nhau thì file nào mới là file hiện hành. Nó là gì cũng được — cứ kiểm nó trước, kiểm có chủ ý, ngay cả khi nó có vẻ hiển nhiên.


Chương Mười Hai — Tại sao chọn tiếng người, chớ không chọn tự tay dựng một bộ khung

Có một con đường mà năm đó cố ý không đi, và nó lại đúng là con đường thiên hạ đang rùng rùng kéo nhau đi: tự tay dựng lấy một "tác tử" (agent). Nghĩa là viết một chương trình biết lập kế hoạch, biết gọi công cụ, và biết chạy vòng lặp cho tới khi xong việc — viết theo lối cổ điển: một lớp điều phối, một cái máy trạng thái tường minh, mấy câu dặn dò cắm cứng vô từng nhánh mã, dựa trên một bộ khung (framework) có sẵn hoặc một vòng lặp tự chế. Thứ mã mà sau đó phải dò lỗi, phải đánh số phiên bản, phải bảo trì theo đúng cái cách nhu liệu vẫn được bảo trì xưa nay: một con người ngồi đọc nó và sửa nó mỗi lần nó hư.

Ván bài đặt ngược lại là: con đường đó chậm hơn chớ không nhanh hơn. Lý lẽ: bản thân model đã giỏi viết mã và dò lỗi hơn cái đống mã mà người ta định đấu dây cho nó điều phối, và nó còn giỏi thêm theo một nhịp mà không cá nhân nào theo kịp bằng cách ngồi chỉnh tay từng file. Một bộ khung dựng tay là tấm hình chụp lại cái gì có vẻ đúng vào cái ngày nó được viết. Còn một bản mô tả bằng tiếng người về chuyện gì nên xảy ra — một tờ nội quy thường trực, một thủ tục viết ra giấy, một tờ ghi nhớ chép lại một lần hỏng có ghi ngày — là thứ mà cái model đời sau, giỏi hơn, đọc vô và thi hành hay hơn đời trước, mà không ai phải quay lại sửa một dòng điều phối nào hết. Đặt cửa vô mấy cái giàn giáo viết tay để mong nó không lỗi thời, tức là đặt cửa ngược với chính cái đà tiến của model. Đặt cửa vô một bản đặc tả viết ra giấy thì mỗi lần model lên đời là một lần công việc bạn đã tả một lần bỗng nhiên tốt lên miễn phí.

Đây không phải linh cảm riêng của một người, và cũng nên biết rằng nhiều người nhìn vô ruột mấy hệ thống này rõ hơn ta nhiều đã công khai lập luận y như vậy:

  • Cách nói của Andrej Karpathy — "ngôn ngữ thảo chương nóng nhất hiện nay là tiếng Anh" — về sau ông nói rõ thêm trong bài thuyết trình "Software 3.0", coi mấy mô hình ngôn ngữ lớn (LLM) như một loại máy điện toán mới, được thảo chương bằng tiếng người y như mấy cỗ máy đời trước được thảo chương bằng C hay Python, với bản thân cái model đóng vai trình thông dịch. (Karpathy trên X; ghi chú về bài nói Software 3.0)
  • Bài "The Bitter Lesson" (Bài học cay đắng) của Rich Sutton — rút từ bảy chục năm nghiên cứu AI qua cờ vua, cờ vây, thị giác máy và nhận diện tiếng nói — nhận xét rằng những hệ thống dựng trên tri thức do con người gò tay vô, về lâu về dài đều thua những phương pháp tổng quát biết lớn theo sức tính toán và theo lượng học được. Bài đó không nói về mấy bộ khung tác tử, nhưng nó là phiên bản xưa nhất và được thử lửa kỹ nhất của cùng một lập luận: hãy đặt cửa vô cái hệ thống tự nó khá lên, thay vì cái hệ thống chỉ khá lên khi có người ngồi sửa. (bản chép lại bài của Sutton; một bài nhìn lại có phê bình, nhắc luôn chuyện chính Sutton sau này cũng dè dặt về việc mô hình ngôn ngữ có khớp gọn vô cái khuôn đó hay không)
  • Bài của Marc Brooker về thành tích thực tế của lối "thảo chương bằng tiếng người" nói thẳng vô khía cạnh bền lâu: ngôn ngữ, cộng với một sự phân vai rành mạch, không bị lỗi thời theo kiểu một công cụ chuyên dụng hay một bộ khung bị lỗi thời, bởi vì nó không bị buộc chặt vô một thế hệ đồ nghề nào. ("On the success of 'natural language programming'")
  • Và một cách nói huỵch toẹt hơn về chuyện gì còn sống sót sau một dự án có AI nhúng tay, một khi đồ nghề chung quanh nó đã thay đổi hết: cái ADN thì ở lại còn mã thì chết, và mấy cái quyết định mới là phần còn sống. ("Code Is Dead. Specs Are Dying. What Survives?")

Chuyện này chưa hề ngã ngũ, và trình bày nó như đã ngã ngũ là vi phạm ngay cái luật thành thật ở hai chương phía trên. Chính Sutton cũng đã phản biện lại chuyện mô hình ngôn ngữ có khớp với luận đề của ông tới đâu. Nhiều người làm nghề khác thì cãi ngược hẳn, ít ra là trong ngắn hạn — rằng mã đã sinh ra rồi thì chính nó mới là bản ghi chính xác duy nhất về việc một hệ thống thực sự làm cái gì, và rằng tiếng người dở hơn một bản đặc tả hình thức cho bất cứ chuyện gì đòi hỏi sự đúng đắn ngặt nghèo. Ở đây xin nêu tên cả hai phía, chớ không phải chỉ nêu cái nửa tiện cho mình.

Cái mà năm đó làm, là đặt một ván bài có làm việc thiệt lên một bên của một câu hỏi còn đang mở thiệt. Và cách để biết bên nào đúng thì không bao giờ là ngồi cãi suông. Nó là một năm gồm những thư mục có ghi ngày, giữ lại đúng để sau này đem ván bài ra đối chiếu với cái đã xảy ra, chớ không đối chiếu với cái người ta đã tiên đoán.

Với bạn, phiên bản thực dụng của ván bài đó nhỏ hơn và an toàn hơn nhiều: hãy tả cái bạn muốn ra giấy, giữ cái bản tả đó lại, và coi mã như đồ dùng rồi bỏ. Nếu mã ngưng chạy vì đồ nghề chung quanh đổi, thì bản tả sẽ đẻ lại nó. Còn nếu mất bản tả, thì bao nhiêu mã cũng không trả lại cho bạn được.


Chương Mười Ba — Từ chỗ xin một món đồ, tới chỗ đặt hàng luôn cả cách làm

Đem mấy lời dặn việc hồi đầu năm đó đọc cạnh mấy lời dặn hồi cuối năm, chỗ khác nhau không nằm ở tham vọng. Cả hai đều với tới những sản phẩm lớn. Chỗ khác nằm ở chuyện cái gì được nói rõ ra trước khi bắt tay vô làm.

Một lời dặn hồi đầu, tóm lại, đọc như vầy: viết cho tôi một bài về người này.

Một lời dặn hồi cuối đọc như vầy: xài model hạng này; nhắm chừng này chữ; tra ba nguồn tài liệu này theo đúng thứ tự này trước khi viết một chữ nào; bản in thắng về mặt dữ kiện còn hồi ký thắng về mặt bối cảnh, và nếu hai bên cãi nhau thì nói ra ngay trong bài chớ đừng lặng lẽ chọn một bên; tránh đúng cái lỗi đã xảy ra lần trước; và đừng kết bằng cái câu kết đó, vì nó cho về hưu rồi.

Cái bước chuyển ấy chính là toàn bộ câu chuyện, và nó không phải chuyện hình thức bề ngoài. Nó là kết quả cộng dồn của việc mỗi cái trần trong bài này đều đã bị đụng một lần, được gọi tên, rồi được đổi thành một lời dặn không bao giờ phải nghĩ lại từ đầu nữa. Một luật kiểu "ở đây đừng chạy song song" hay "việc này chỉ hạng cao nhất" không phải một lời khuyên để AI cân nhắc. Nó là một bản đặc tả, và nó ra đời theo đúng cái cách mọi bản đặc tả kỹ thuật tử tế ra đời: từ một lần hỏng có ghi chép, chớ không từ chuyện ngồi đoán trước xem cái gì có thể hỏng.

Và tới đây, cuối cùng, là câu trả lời cho câu hỏi mở đầu bài — một người không biết thảo chương thực sự học được cái gì khi làm việc trong terminal.

Bạn không học thảo chương. Bạn sẽ lượm được ít nhiều từ ngữ nhà nghề theo kiểu thẩm thấu, và sau một năm bạn sẽ hiểu về cách nhu liệu được ráp lại nhiều hơn bạn tưởng — nhưng đó là tác dụng phụ chớ không phải cái đích. Cái bạn thực sự học được chính là cái còn sót lại sau khi phần gõ phím đã bị lấy đi: cách nói cho thật chính xác cái mình muốn, cách kiểm coi mình có được đúng cái đó không, và cách ghi câu trả lời xuống để không ai phải mò lại lần nữa. Việc của bạn không phải là hỏi cho hay hơn. Việc của bạn là đặc tả cho hay hơn — mà chất lượng của một bản đặc tả chỉ khá lên bằng cách sai trước, rồi viết xuống chính xác mình đã sai chỗ nào.

Cái tài đó không dính gì tới AI và cũng không hết hạn khi đồ nghề đổi đời. Nó vẫn là cái tài phân biệt một bản yêu cầu công việc xài được với một bản yêu cầu vô dụng, một tờ dặn việc rõ ràng với một tờ mù mờ, một lượt duyệt bài bắt được chuyện với một lượt duyệt chỉ để đóng mộc. Nếu bạn từng là cái người trong phòng họp nhận ra rằng cái bản yêu cầu ai cũng gật đầu kia thực ra có tới ba cách hiểu, thì bạn đã sẵn có cái tạng cho việc này rồi. Terminal chỉ đơn giản là môi trường đầu tiên mà đa số người không phải dân thảo chương sẽ gặp, nơi cái tạng đó là toàn bộ công việc, còn chuyện gõ phím thì thiệt sự đã là việc của người khác.


Chương Mười Bốn — Bắt đầu cách nào cho cụ thể

Xin nói cụ thể, đúng tinh thần mọi chuyện phía trên.

Hãy lấy một việc thiệt mà bạn vẫn né, chớ đừng lấy một bài tập cho vui. Một việc số lượng lớn, chán ngắt, mà bạn thiệt lòng muốn có người làm giùm cho xong: một thư mục tài liệu chưa ai lập mục lục, một bản báo cáo tháng nào cũng phải ráp tay, một xấp file cần lặp lại cùng một phép sửa cho hết. Mấy bài tập cho vui không dạy bạn được gì hết, vì bạn không có cách nào biết kết quả nó ra đúng hay sai.

Hãy tự tay làm năm món đầu, hoặc ngồi coi kỹ năm món đầu. Đây chính là cái luật chạy thử lô nhỏ. Bạn không phải đang kiểm coi AI có làm nổi hay không. Bạn đang khám phá ra mình đã quên nói cái gì — mà lần nào cũng sẽ có ít nhất hai cái.

Hãy viết tờ nội quy của bạn ngay khi bạn phải sửa cùng một chuyện tới lần thứ hai. Đừng viết sớm hơn. Cái bản đầu tiên của tờ nội quy đó, trong suốt cả năm ấy, mà viết trước khi bắt tay vô làm thì cũng vô dụng thôi, vì lúc đó chưa ai biết mấy cái lỗi nào sẽ là lỗi đi tới đi lui. Mỗi dòng trong đó đều xứng đáng có mặt vì nó đã thực sự xảy ra.

Hãy đòi một lượt kiểm có hình dáng khác với công việc. Đừng hỏi "làm đúng chưa" — câu trả lời lúc nào cũng là rồi. Hãy hỏi cái gì có cấu trúc: cho tôi số món đã làm và số món ra kết quả rỗng, kèm lý do tại sao mấy cái rỗng lại rỗng. Chỉ tôi coi ba món mà bồ ít chắc bụng nhất. So kết quả với bản gốc rồi liệt kê mọi chỗ hai bên không khớp.

Hãy đòi cho bằng được rằng chỗ nào không chắc thì phải thấy được là không chắc. Cái quy ước có giá trị nhất trong cả năm làm việc đó là đánh một cái dấu vô mọi chỗ đọc mà mình không chắc, để người đọc sau này thấy chính xác chỗ nào đáng tin và chỗ nào chưa. Một kết quả không có dấu ngờ vực nào hết thì không phải là đáng tin hơn cái có dấu. Nó kém đáng tin hơn, bởi vì bây giờ bạn không còn biết phải ngó vô đâu.

Và hãy đính cái "tại sao" vô mỗi luật bạn viết ra. Một cái luật không có câu chuyện nào đứng sau, sớm muộn gì cũng bị một người rất biết điều nới lỏng ra, vì người đó không thấy được nó đang che chắn cho cái gì — mà nhiều phần người đó là chính bạn, ba tháng nữa, trong lúc đang cố làm cho lẹ.


Kết — Cái hạ tầng mới là thành tựu thiệt

Cuối năm đó, cái đáng chỉ tay vô không phải một bài viết nào, một chương sách dịch nào, hay một cuốn mục lục nào đã làm xong. Mỗi thứ đó chỉ là một tấm hình chụp: khoảnh khắc mà một bộ luật lệ, thủ tục và bài học nhớ được tình cờ đang chĩa vô một đề tài nào đó.

Mấy cái luật thì không phải hình chụp. Mấy thủ tục viết ra giấy không phải hình chụp. Mấy tờ ghi ngày, chép lại chính xác một chuyện đã hỏng ra sao, không phải hình chụp. Mấy thứ đó được đem ra xài lại, xài lặng lẽ, mỗi lần có bất cứ cái gì mới được làm ra sau này. Mấy ngàn tài liệu hoàn tất tồn tại được không phải vì mỗi cái đều được đắp tay một lần, mà vì một số ít cách làm viết ra giấy và một số ít chương trình nhỏ được đem ra xài đi xài lại — và một người kỹ sư nhu liệu đang hành nghề đã không tự tay gõ lấy một chương trình nào trong số đó.

Nếu bạn chỉ mang theo một điều từ bài này: chỗ khác nhau giữa "một năm xài trợ tá AI" và "một năm ngày càng giỏi hơn trong việc xài nó" nằm trọn ở chuyện bạn có giữ lại được cái gì hay không. Cái khung bên hông cho bạn một ngàn cú tăng tốc nhỏ và cuối cùng chẳng còn gì trong tay. Terminal cho bạn cũng chừng đó cú tăng tốc, cộng thêm một chỗ để cất cái bạn đã học được — và chính cái chỗ để cất đó mới là cái sinh lợi kép.

Bạn không cần phải là dân thảo chương mới xây được cái đó. Bạn chỉ cần chịu sai một cách có ghi ra giấy, có ghi ngày, về một chuyện cụ thể — rồi giữ lại tờ giấy đó.


Phụ Lục — Cẩm nang bỏ túi

Mọi luật trong bài, mỗi luật một dòng, theo đúng thứ tự xuất hiện:

  1. Hãy đem tới cho công cụ những việc, đừng đem tới mấy cú gõ phím. Nếu bạn chỉ đem tới cho nó những bài toán hai giây, bạn sẽ không bao giờ để ý tới những bài toán nó thiệt sự giải được.
  2. Đừng thả thợ phụ chạy song song khi cái đồng hồ tính tiền có giới hạn. Làm tuần tự mà thấy được thì ăn đứt chạy song song mà không truy được, một khi đã đếm sòng phẳng cái giá của việc làm lại sau một lần hỏng im ru.
  3. Chia đợt, chốt lại, nối tiếp được — đừng bao giờ cho chạy một lèo không ai kiểm. Đánh số công việc, làm từng khúc có giới hạn, ghi tình trạng xuống đĩa, giữ cho phần đã làm luôn nhìn thấy được.
  4. Chạy thử năm món trước khi nhân lên năm trăm. Mọi con bọ thiệt sẽ bị bắt ở đây, rẻ; hoặc bị bắt sau đó, mắc.
  5. Mỗi lần chỉ một người ghi lên cùng một chỗ. Hai tiến trình cùng cập nhật một file sẽ nuốt việc của nhau mà không kêu tiếng nào.
  6. Món nào không chạy trót lọt thì đánh dấu rồi đi tiếp. Đừng đem cái ngân sách của chín mươi chín món đổ vô một món.
  7. Làm xong phần nào thì lưu phần đó. Một phiên đứt sớm chỉ nên làm mất phần chưa xong, chớ đừng làm mất hết.
  8. Chọn hạng model theo mức dễ thấy của cái sai, đừng chọn theo độ khó của việc. Xài cái mắc tiền đúng chỗ mà một câu trả lời sai sẽ trông rất ổn.
  9. Viết xuống mọi bài học, kèm ngày, kèm nguyên do, kèm cách nó phải làm đổi công việc lần sau — viết trước khi hết phiên. Một cái luật không viết ra sẽ phải học lại với giá đầy đủ.
  10. Giữ một tờ nội quy thường trực nằm cạnh dự án, được đọc trước khi bất cứ việc gì bắt đầu, gồm điều cấm, thứ tự ưu tiên của nguồn tài liệu, văn phong của nhà, và mấy đòi hỏi về sự thành thật.
  11. Đừng bao giờ để lọt một chi tiết bịa. Một câu trích bịa làm mất giá mọi thứ chung quanh nó; không kiểm chứng được thì cứ tả cái ý ra, đừng đóng ngoặc kép.
  12. Xài chương trình cho sự trung thực từng chữ, xài model cho phán đoán, và đừng bao giờ đổi vai — một model được nhờ chép lại tài liệu dài có thể lặng lẽ tóm tắt nó.
  13. Đừng bao giờ nói lại một luật thường trực bằng lời mới. Một câu diễn nôm của bản đặc tả chính là một bản đặc tả mới, viết ra một cách vô tình.
  14. Chạy lượt rà thứ hai có hình dáng khác lượt đầu. Lượt đầu bắt cái bạn đã lường trước; chỉ có lượt sau mới bắt được cái bạn không lường.
  15. Đem hai kết quả đặt cạnh nhau mà ngó. Cách rà soát rẻ nhất từ trước tới nay, và là cách bắt được cái mà chẳng có lượt kiểm tự động nào được viết ra để bắt.
  16. Hỏi coi một kết luận phủ định thực sự đã tìm những đâu. Không thấy bằng chứng mà không nói rõ được phạm vi đã tìm thì chẳng có nghĩa gì hết.
  17. Kiểm cái thông số đầu độc mọi thứ phía sau nó — kiểm trước, kiểm rõ ràng, kiểm mỗi lần, kể cả khi nó có vẻ hiển nhiên.
  18. Nói rõ khẳng định nào là đo được, khẳng định nào là suy ra, và nói thẳng khi hai nguồn cãi nhau. Bằng chứng trước, kết luận sau.
  19. Giữ bản tả viết ra giấy, coi mã như đồ dùng rồi bỏ. Bản tả đẻ lại được mã; mã không đẻ lại được bản tả.
  20. Đặc tả luôn cả cách làm, đừng chỉ đặc tả món đồ — nguồn nào, thứ tự nào, cái lỗi nào phải tránh, và kết quả không được trông ra làm sao — nói trước khi bắt tay vô làm, chớ đừng nói sau khi đã hỏng.

7.27.2026

Tiện ích mới: "Bài viết liên quan" (Related Articles)

Bạn,

Giới thiệu với bạn tiện ích mới nhất: "Bài Viết Liên Quan".

Hãy cắt dán vào một HTML widget trong trang thiết kế để coi nó có chạy hay không.



Tôi có làm thử một cái, dùng chính đoạn mã mà tôi viết dưới đây, vào trang Anh ngữ của tôi, thì nó chạy ngay http://hoctro.blogspot.com/2010/08/testing-of-new-related-articles-widget.html . Trang Hoctro Việt cũng có tiện ích này.





Nếu bạn đã lắp các "Bài Liên Quan" widget trước của tôi, bạn cứ tự nhiên lắp tiếp cái này, chứ đừng bỏ cái kia vội. Cái mới này chỉ cần một bước cài đặt thôi, mà sau khi cài đặt xong ta có thể chuyển nó sang chỗ mới dễ dàng, không như cái cũ.

Như bạn thấy, cái tiện ích này tạo ra một dòng mã gồm những từ khóa/nhãn của trang đang xem, sau đó nó gửi lên Google, và được kết quả trả về gần sát nhất những gì bạn muốn tìm. Các kết quả này do google tìm kiếm trong trang của bạn mà thôi. Ta thấy cách này hệt như khi ta muốn tìm một bài viết nào đó trên Google http://www.google.com/ .





Theo thiển ý, đây là widget sát ý nhất với ý nghĩa "bài liên quan", vì nó đăng lên những bài giống với những từ khóa mà ta tìm nhất. tiện ích trước tôi viết không làm được điều này, vì nó chỉ trả về những kết quả mới nhất của từng nhãn trong trang mà thôi, những bài hay nhất mà xưa thì sẽ không được hiện ra. Ta đã dùng giải thuật "page ranking" của Google lần này để tìm các bài liên quan nhất.

Tôi sẽ đăng tiếp một bài viết tiếp theo về những động lực để làm tiện ích, giải thích cấu trúc mã, và những chỉnh sửa khác. Có nhiều cách như dùng CSS để chỉnh màu sắc, font chữ, hiện thêm dòng ngắn giới thiệu (snippet) hay không, v.v.

Chúc bạn thành công,

Thân mến,

Hoctro
8/16/2010

***
7/29/2026 Update; Tôi nhờ Claude Sonnet 5 sửa code để tiện ích này chạy tiếp. Nó làm xong trong vòng 10 phút. Thật kinh ngạc!!!! Code dưới đây là của nó, viết lại từ code cũ của tôi.

<!-- ===================================================================
     Bài Viết Liên Quan — bản nâng cấp 2026
     Thay Google AJAX Search API (đã ngừng hoạt động 11/2014) bằng
     feed JSON theo nhãn của chính Blogger. Không cần API key.
     Dựa trên ý tưởng gốc: Hoctro, "Related Articles - Take 5", 8/2010
     https://hoctroviet.blogspot.com/2010/08/tien-ich-moi-viet-lien-quan-related.html
     =================================================================== -->
<div id="hoctro-related-wrap">
  <div id="hoctro-related-results">Đang tải bài viết liên quan…</div>
</div>

<style>
#hoctro-related-wrap { margin: 24px 0; }
#hoctro-related-heading { font-size: 1.05em; font-weight: bold; margin-bottom: 8px; }
#hoctro-related-results { font-size: 0.95em; }
#hoctro-related-results ul { list-style: none; margin: 0; padding: 0; }
#hoctro-related-results li { padding: 4px 0; border-bottom: 1px dotted #ccc; }
#hoctro-related-results li:last-child { border-bottom: none; }
#hoctro-related-results a { text-decoration: none; }
#hoctro-related-results a:hover { text-decoration: underline; }
#hoctro-related-results .hr-thumb { display:inline-block; width:16px; height:16px; vertical-align:middle; margin-right:6px; border-radius:2px; }
</style>

<script>
(function () {
  'use strict';

  var MAX_LABELS_TO_QUERY = 4;   // số nhãn tối đa sẽ dò feed (giới hạn số request)
  var MAX_RESULTS_SHOWN   = 8;   // số bài liên quan tối đa hiển thị
  var callbackCounter     = 0;
  var pendingRequests     = 0;
  var collected           = [];  // {title, href, thumb}
  var seenHrefs           = {};
  var currentHref         = location.href.split('#')[0].split('?')[0];

  function baseUrl() {
    return location.protocol + '//' + location.host;
  }

  function escapeHtml(s) {
    return String(s)
      .replace(/&/g, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;');
  }

  // Bài đang xem chỉ có "liên quan" trên trang từng bài (item page).
  // Blogger đặt class "item-page" hoặc <body> có data khác nhau tùy theme,
  // nên cách chắc ăn nhất là: chỉ chạy nếu tìm thấy đúng 1 khối bài viết
  // và có ít nhất 1 link nhãn trên trang.
  function getCurrentLabels() {
    var labels = [];
    var seen = {};
    // Các theme Blogger khác nhau đặt link nhãn ở những nơi/class khác nhau;
    // dò theo thứ tự, dùng bộ chọn đầu tiên khớp được.
    var selectors = [
      '.post-labels a',
      '.post-footer-line .labels a',
      'a[rel="tag"]',
      'a[href*="/search/label/"]'
    ];
    for (var s = 0; s < selectors.length; s++) {
      var links = document.querySelectorAll(selectors[s]);
      if (links.length) {
        for (var i = 0; i < links.length; i++) {
          var href = links[i].getAttribute('href') || '';
          var m = href.match(/\/search\/label\/([^?&#\/]+)/);
          if (m) {
            var label = decodeURIComponent(m[1].replace(/\+/g, ' '));
            if (!seen[label]) { seen[label] = true; labels.push(label); }
          } else if (!href) {
            var text = (links[i].textContent || '').trim();
            if (text && !seen[text]) { seen[text] = true; labels.push(text); }
          }
        }
        break; // bộ chọn đầu tiên có kết quả là đủ, không dò tiếp
      }
    }
    return labels;
  }

  function renderResults() {
    var box = document.getElementById('hoctro-related-results');
    var heading = document.getElementById('hoctro-related-heading');
    if (!collected.length) {
      box.innerHTML = '<em>Không tìm thấy bài viết liên quan.</em>';
      return;
    }
    var html = '<ul>';
    for (var i = 0; i < Math.min(collected.length, MAX_RESULTS_SHOWN); i++) {
      var item = collected[i];
      var thumb = item.thumb
        ? '<img class="hr-thumb" src="' + escapeHtml(item.thumb) + '" alt="">'
        : '';
      html += '<li>' + thumb + '<a href="' + escapeHtml(item.href) + '">' + escapeHtml(item.title) + '</a></li>';
    }
    html += '</ul>';
    box.innerHTML = html;
    heading.style.display = '';
  }

  function handleFeed(feed) {
    pendingRequests--;
    var entries = (feed && feed.feed && feed.feed.entry) ? feed.feed.entry : [];
    for (var i = 0; i < entries.length; i++) {
      var entry = entries[i];
      var href = '';
      for (var l = 0; l < entry.link.length; l++) {
        if (entry.link[l].rel === 'alternate') { href = entry.link[l].href; break; }
      }
      if (!href || href === currentHref || seenHrefs[href]) continue;
      seenHrefs[href] = true;
      collected.push({
        title: entry.title && entry.title.$t ? entry.title.$t : '(không có tiêu đề)',
        href: href,
        thumb: entry.media$thumbnail ? entry.media$thumbnail.url : ''
      });
    }
    if (pendingRequests === 0) renderResults();
  }

  function queryLabel(label) {
    pendingRequests++;
    var cbName = 'hoctroRelatedCB_' + (callbackCounter++);
    window[cbName] = function (feed) {
      handleFeed(feed);
      delete window[cbName];
    };
    var src = baseUrl() + '/feeds/posts/default/-/' + encodeURIComponent(label) +
      '?alt=json-in-script&max-results=6&callback=' + cbName;
    var script = document.createElement('script');
    script.src = src;
    script.async = true;
    document.body.appendChild(script);
  }

  function init() {
    var labels = getCurrentLabels();
    if (!labels.length) {
      document.getElementById('hoctro-related-results').innerHTML =
        '<em>Bài này chưa gắn nhãn nên không thể tìm bài liên quan.</em>';
      return;
    }
    labels = labels.slice(0, MAX_LABELS_TO_QUERY);
    for (var i = 0; i < labels.length; i++) queryLabel(labels[i]);
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init);
  } else {
    init();
  }
})();
</script>