# 72: Đôi khi hãy tái phát minh bánh xe

Hãy dùng thứ gì đó có sẵn — tái phát minh bánh xe là một điều ngớ ngẩn

Bạn có bao giờ nghe điều này hay những câu đại loại như thế? Chắc chắn bạn đã từng nghe qua. Tại sao lại như thế? Tại sao việc tái phát minh bánh xe lại khiến người ta trở nên khó chịu? Nguyên nhận là thông thường các đoạn code có sẵn là những đoạn code hoạt động được. Nó chắc chắn đã trải qua một vài phương thức kiểm định chất lượng nghiêm ngặt, và hoạt động cùng thành công. Hơn nữa đầu tư thời gian vào việc tái phát minh bánh xe hầu như không thể sánh với việc sử dụng sản phẩm hoặc codebase có sẵn. Bạn có nên tái phát minh bánh xe không? Lý do và nguyên nhân của việc này?

Có lẽ bạn đã từng xem qua những mô hình chung trong phát triển ứng dụng, hay trong những cuốn sách nói về thiết kế ứng dụng. Những cuốn sách là những kẻ ru ngủ bất kể nội dung của chúng có tuyệt vời thế nào đi chăn nữa. Điều này cũng giống như việc coi một bộ phim về chèo thuyền hoàn toàn khác so với đi thuyền ngoài thực tế. Chính vì thế đừng bao giờ so sánh những đoạn code có sẵn với đoạn code mà chính tay bạn xây dựng nên từ ban đầu, kiểm tra nó, làm hỏng nó, sửa chữa nó, và phát triển nó trên đường phát triển sản phẩm.

Tái phát minh bánh xe không chỉ là bài tập giúp bạn nâng cao khả năng xây dựng cấu trúc của code mà chúng còn giúp cho bạn có được những kiến thức quý giá về cách hoạt động của nhiều thành phần khác nhau đã tồn tại. Bạn có biết làm cách nào để bộ quản lý bộ nhớ hoạt động? phân trang ảo? Bạn có thể tự mình cài đặt chúng không? Hay là danh sách liên kết đôi? Những đối tượng mảng động? ODCD client? Bạn có thể viết một giao diện đồ hoạ hoạt động như cái mà bạn đang sử dụng? Bạn có thể tự mình tạo ra những tiện ứng cho trình duyệt web của bạn? Bạn có biết khi nào nên viết hệ thống multiplex hay đa luồng? Làm sao để quyết định database sử dụng file hay bộ nhớ?

Hầu hết các lập trình viên chưa bao giờ tự tạo ra các thiết lập cốt lõi của phần mềm này do đó họ không có một lượng kiến thức nhất định về cách thức hoạt động của chúng. Hậu quả dẫn đến những phần mềm được tạo ra theo cách này trông giống như những hộp đen bí ẩn đang hoạt động. Chỉ hiểu phần nổi của tảng băng trôi là không đủ để biết được những gì thực sự nguy hiểm bên dưới nó. Không thực sự thấu hiểu cặn kẽ vấn đề trong phát triển phần mềm sẽ giới hạn khả năng tạo ra những sản phẩm tuyệt vời nhất.

Tái phát minh bánh xe và đối với những sai lầm giá trị hơn việc sử dụng cái có sẵn ngay từ đầu. Chúng sẽ cho bạn những bài học từ những lần thử nghiệm, lỗi, và những cảm xúc nhất định đối với thành phần đó, đây chính là điều mà đọc một quyển sách không thể cho bạn được.

Những sự thật và kiến thức từ trong sách thật sự rất quan trọng, nhưng để trở thành một lập trình viên vĩ đại yêu cầu thật nhiều kinh nghiệm như việc sưu tầm những sự thật. Tái phát minh bánh xe đóng vai trò vô cùng quan trọng trong quá trình học tập của lập trình viên như việc cử tạ đối với vận động viên thể hình.