Nhưng cạo lông bò tót lại rất thú vị: Niềm vui khi xây dựng phần mềm từ con số không

Công nghệ16 tháng 6, 2026·6 phút đọc

Bài viết khám phá khái niệm "yak shaving" (cạo lông bò tót) trong phát triển phần mềm—nghĩa là thực hiện chuỗi các nhiệm vụ phụ để đạt mục tiêu chính, đôi khi dẫn đến việc tự xây dựng công cụ từ đầu. Mặc dù thường bị coi là lãng phí thời gian, tác giả cho rằng đây là một quá trình thú vị và hiệu quả để học hỏi, với ví dụ điển hình là việc Donald Knuth tạo ra hệ thống TeX.

Nhưng cạo lông bò tót lại rất thú vị: Niềm vui khi xây dựng phần mềm từ con số không

Blog này không sử dụng bất kỳ trình tạo trang tĩnh (static site generator) hay khung làm việc (framework) phổ biến nào như Jekyll, Hugo hay Gatsby. Ban đầu, tôi đã thử qua một vài công cụ này, nhưng chúng mang lại quá ít sự tự do trong việc tùy biến, vì vậy tôi quyết định tự xây dựng blog của riêng mình.

Xây dựng hệ thống từ con số khôngXây dựng hệ thống từ con số không

Khởi đầu, tôi chỉ viết bài bằng HTML thô, nhưng cách này quá bất tiện nên tôi đã xây dựng một hệ thống để viết bài dưới dạng tệp JSON. Cách này vẫn khá cồng kềnh với các bài viết dài, nên tôi phát triển một dịch vụ chuyển đổi tệp Markdown thành HTML. Sau đó, tôi lại xây dựng thêm một công cụ để biên dịch và triển khai các tệp kết quả. Cuối cùng, tôi đã tự tạo ra một trình tạo trang tĩnh hoàn chỉnh.

Loại việc này được gọi là "yak shaving" (cạo lông bò tót). Thuật ngữ này được đặt ra bởi Carlin Vieri, một nghiên cứu sinh tiến sĩ tại Phòng thí nghiệm AI của MIT, để chỉ việc thực hiện một chuỗi các nhiệm vụ liên quan cho một mục tiêu duy nhất cho đến khi bạn mất hoàn toàn mục đích ban đầu và kết thúc với một việc gì đó hoàn toàn khác biệt.

Khái niệm "Yak Shaving" là gì?

Một ví dụ trên kênh LangDev IRC đã làm rõ tại sao nó lại được gọi là cạo lông bò tót:

Tôi lấy một cái rìu để chặt cây. Cái rìu quá cùn, nên tôi đi tìm đá để mài nó. Nhưng tôi nghe nói một ngôi làng nào đó có loại đá rất tốt. Tôi lấy một con bò tót để đi đến ngôi làng đó. Lông con bò tót quá dài, nên tôi bắt đầu cạo nó.

Seth Godin, doanh nhân và tác giả nổi tiếng, cũng có một ví dụ tương tự: chỉ để rửa chiếc xe, anh ta cuối cùng lại phải ra sở thú để cạo lông bò tót vì một chuỗi các sự kiện liên quan đến vòi nước, cầu đường và chiếc gối mượn của hàng xóm.

Cả hai câu chuyện này đều xuất hiện sau khi thuật ngữ "yak shaving" được ra đời. Thuật ngữ thực sự bắt nguồn từ một tình huống đời thường của Carlin Vieri. Sau một đêm chơi khúc côn cầu quá muộn, Vieri đang ăn tối lúc nửa đêm và xem TV. Trên TV đang chiếu tập phim "Yak Shaving Day" của hoạt hình The Ren & Stimpy Show. Cốt truyện rất kỳ quặc: nhân vật trang trí nhà bằng tã bẩn và bắp cải cải trộn, sau đó cầu nguyện một con bò tót đã cạo lông sẽ bay trên chiếc ca nô ma thuật đến mang quà cho họ. Vieri thấy điều này thật kỳ lạ, và vài ngày sau, khi đang chật vật với các thủ tục hành chính nhàm chán, anh đã nói với đồng nghiệp rằng mình đang "cạo lông bò tót".

Cạm bẫy của việc "xây dựng từ con số không"

Một sai lầm mà các kỹ sư (hoặc các quản lý đội ngũ kỹ thuật) thường mắc phải là "xây dựng từ con số không" (build from scratch). Một kỹ sư có thể không thích các giải pháp có sẵn (off-the-shelf), hoặc muốn chứng minh kỹ năng của bản thân. Một khách hàng hoặc quản lý có thể có ý niệm sai lầm về khả năng của các giải pháp hiện có, hoặc nghĩ rằng chúng không đáp ứng chính xác các yêu cầu.

Dù là dự án thương mại hay dự án đồ chơi, hầu hết các dự án đều có ngân sách và thời gian hạn chế. Nếu xây dựng từ đầu, bạn cuối cùng sẽ bắt đầu cạo lông bò tót, và một khi đã bắt đầu cạo, không ai biết nó sẽ kết thúc ở đâu. Cuối cùng bạn bỏ lỡ mục tiêu ban đầu. Trong trường hợp đó, nước đi đúng đắn là tìm một giải pháp thay thế thỏa mãn các yêu cầu cốt lõi và cắt giảm công việc tối đa có thể.

Nhưng cạo lông bò tót lại rất thú vị

Tuy nhiên, không thể phủ nhận rằng cạo lông bò tót rất vui. Tạo ra thứ chưa từng tồn tại, tìm kiếm và giải quyết vấn đề, đào sâu vào chuỗi kiến thức để hiểu cách thức hoạt động của một thứ gì đó: tất cả đều thu hút các kỹ sư. Chính ý tưởng tự xây dựng thứ bạn muốn cũng rất hấp dẫn ngay cả khi bạn không phải là kỹ sư.

Trong cuốn The Mythical Man-Month, Frederick P. Brooks Jr. đã đưa ra những lý do sau đây giải thích tại sao lập trình lại thú vị:

  • Niềm vui thuần túy khi tạo ra sự vật.
  • Niềm vui khi tạo ra thứ gì đó hữu ích cho người khác.
  • Sự hấp dẫn khi tạo ra một đối tượng phức tạp, giống như câu đố, từ các bộ phận chuyển động lồng vào nhau, và xem các quy tắc bạn xây dựng trong nó diễn ra trong các chu kỳ tinh tế.
  • Niềm vui của việc học hỏi liên tục.
  • Niềm vui khi làm việc với một phương tiện diễn đạt linh hoạt, dễ xử lý.

Bài học từ TeX

TeX, một hệ thống sắp chữ, cũng được sinh ra từ việc cạo lông bò tót. TeX do giáo sư Donald Knuth của Đại học Stanford tạo ra. Năm 1976, Knuth đang chuẩn bị cho lần xuất bản thứ hai của cuốn The Art of Computer Programming. Ông muốn sử dụng phương pháp in nóng (hot type) như lần đầu, nhưng phương pháp này không còn khả dụng. Không hài lòng với các lựa chọn thay thế, Knuth quyết định xây dựng hệ thống sắp chữ kỹ thuật số của riêng mình.

Knuth đã xây dựng phiên bản đầu tiên của TeX bằng ngôn ngữ SAIL, sau đó phát triển và hoàn thiện nó bằng WEB, một ngôn ngữ lập trình do chính ông tạo ra. Ông gọi mô hình lập trình này là "lập trình văn học" (literate programming). Cùng với Michael Plass, Knuth cũng đề xuất thuật toán ngắt dòng Knuth-Plass. Trên hết, ông còn thiết kế phông chữ Computer Modern cho TeX, tạo ra ngôn ngữ METAFONT để định nghĩa đồ họa vector, và thậm chí phát triển định dạng DVI (Device Independent).

Vì vậy, chỉ để viết một cuốn sách, Donald Knuth đã tạo ra một ngôn ngữ lập trình, một mô hình lập trình, một thuật toán, các công cụ và một kiểu phông chữ. TeX mất gần mười năm để xây dựng, và cuốn sách cũng muộn hơn bấy nhiêu mới ra mắt. Nhưng đó không phải là một sự lãng phí.

Tất nhiên, đây là một câu chuyện thành công cực đoan; hầu hết các vụ cạo lông bò tót đều thất bại. Bạn nên dừng lại ở đúng điểm, nhưng một khi đã bắt đầu cạo, rất khó để dừng lại. Mặt khác, đối với ai đó đang cố gắng học hỏi, tôi nghĩ cạo lông bò tót lại vô cùng hiệu quả. Hầu hết các khóa học Khoa học Máy tính đều đòi hỏi một lượng cạo lông bò tót nhất định, và đôi khi bạn thu được nhiều kiến thức từ việc đào sâu xung quanh một bài tập hơn là từ chính hướng dẫn của nó.

Dù sao đi nữa, cạo lông bò tót thực sự rất vui.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗