Đạo/2025-08-01/3 phút
v2

Trình độ tỉ lệ thuận với số lượng dòng code đã viết.

"Cần code được ít nhất 1 triệu dòng code để bạn trở thành một lập trình viên cừ khôi"

#triết lý#sản phẩm
fig.01 — accrue.svgdòng code →trình độ1 000 000?

Malcolm Gladwell có một con số mà nhiều người nhớ: cần khoảng 10.000 giờ luyện tập để giỏi một việc gì đó. Tôi hay nói một con số tương tự cho nghề mình, rằng phải viết chừng một triệu dòng code thì mới thành một lập trình viên giỏi. Con số ấy tôi nghĩ ra trong lúc nói, chẳng dựa vào đâu cả. Phần ý nằm sau nó thì tôi tin thật.

Ai từng học triết ở trường chắc còn nhớ câu "lượng đổi thì chất đổi". Lúc học, câu ấy nghe khô và xa, giống một dòng phải thuộc để đi thi. Với người viết code, nó lại hiện ra khá cụ thể. Có một ngày người ta đọc một đoạn code lạ và hiểu nó định làm gì trước khi đọc hết, mà không chỉ ra được mình học điều đó từ lúc nào.

Từ hồi mới học lập trình, tôi có thói quen gặp đoạn code nào trong sách hay bài hướng dẫn là gõ lại ngay. Ban đầu thì nhìn mà chép. Sau đó chạy thử, sửa một chỗ, chạy lại xem kết quả đổi ra sao, rồi sửa chỗ khác. Đến khi thấy đã thấm, tôi xoá hết và viết lại từ đầu mà không nhìn mẫu.

Trẻ con tập viết cũng đi đúng con đường ấy. Lúc đầu tô theo nét chấm, rồi chép theo chữ mẫu, rồi tới một ngày viết được chữ của riêng mình, hơi nghiêng và hơi xấu. Không ai giảng được cho bàn tay một nét chữ. Bàn tay phải viết đủ nhiều cho tới khi nó tự biết.

Sách Luận Ngữ mở đầu bằng câu "Học nhi thời tập chi, bất diệc duyệt hồ", học rồi thường xuyên luyện tập, chẳng vui lắm sao. Tôi để ý chữ "tập" đứng ngay sau chữ "học". Tôi đọc nó như thể học mà chưa tập thì việc học vẫn chưa xong.

Khi gặp một bài toán, tôi chỉ dành vừa đủ thời gian để nghĩ ra một giải pháp tạm ổn, rồi bắt tay vào viết. Giải pháp đầu tiên ít khi là giải pháp tốt nhất. Có điều, phải viết thì tôi mới gặp những chỗ lúc nghĩ chưa thấy, và mới biết giả định nào của mình hoá ra sai. Dòng code đầu tiên dẫn tới mười dòng tiếp theo, và mười dòng ấy thường quay lại cho tôi biết dòng đầu tiên nên viết khác đi thế nào.

Người học đi xe đạp ngã nhiều lần trước khi giữ được thăng bằng, và chẳng ai coi những cú ngã đó là thời gian phí. Bug với tôi cũng vậy. Có viết thì mới có bug, và mỗi lần lần ra một bug là một lần tôi hiểu thêm về cái hệ thống mình tưởng đã hiểu. Tôi ngờ rằng thứ tích lại sau một triệu dòng code chủ yếu là những lần như thế.

Gladwell lấy con số 10.000 giờ từ nghiên cứu của Anders Ericsson về những người chơi violin. Về sau chính Ericsson nói con số ấy bị hiểu sai. Điều ông quan sát được là luyện tập có chủ đích, mỗi buổi nhắm vào một chỗ còn yếu, và số giờ chỉ là thứ đi kèm.

Tôi nghĩ dòng code cũng thế. Một triệu dòng gõ cho xong việc có lẽ chẳng dạy được bao nhiêu. Thói quen sửa một chỗ rồi chạy lại xem điều gì thay đổi, nhìn lại thì, gần với kiểu luyện tập Ericsson nói tới hơn tôi tưởng. Lượng vẫn cần, chỉ là phải là lượng mà mình có nhìn vào.

Có viết thì mới có code dở, và phải có code dở thì sau này mới có code tốt hơn. Người nấu ăn lâu năm hẳn cũng từng làm hỏng không ít nồi canh, mặn quá hoặc nhạt quá, trước khi nêm được bằng cảm giác. Những nồi canh hỏng ấy chẳng ai còn nhớ, nhưng cái lưỡi thì nhớ.

Làm nghề này đủ lâu, ai cũng có lúc mở lại code của mình từ vài năm trước và lẩm bẩm "hồi đó code ngu thật". Để thấy đoạn code cũ dở, mình phải đứng ở một chỗ khác với lúc viết ra nó. Nên mỗi lần lẩm bẩm câu đó, tôi thấy ngượng thì ít mà vui thì nhiều, vì nó cho tôi biết mình đã đi được một đoạn kể từ hôm viết những dòng ấy.

Trạm Dev · 2025-08-01 · v2 · EOF
#triết lý#sản phẩm
$ ls ./dao1 / 6