Sunday, July 20, 2008

Lập trình viên giỏi và đầu bếp giỏi

(Dịch từ http://amix.dk/blog/viewEntry/19328)

Một người đầu bếp giỏi dùng những nguyên liệu cơ bản nhất để tạo ra một món ăn ngon. Một người đầu bếp tồi cho dù có được những nguyên liệu tốt nhất vẫn tạo ra món ăn tồi. Cũng có những đầu bếp tạo ra những món ăn quá cầu kỳ (ví dụ như dùng quá nhiều nguyên liệu) hoặc có đầu bếp không chú ý tới vệ sinh và không trình bày món ăn sao cho đẹp mắt nhưng lại rất giỏi về việc phối hợp các nguyên liệu và gia vị.

Một vài mô tả về đầu bếp giỏi:
* Thức ăn của họ rất ngon
* Họ có thể làm đương đầu tốt với deadline và stress
* Thức ăn của họ được trình bày đẹp
* Món ăn đơn giản mà vẫn ngon

Khi xem chương trình nấu ăn trên truyền hình, bạn sẽ thấy có sự giống nhau giữa đầu bếp và lập trình viên. Lập trình viên dùng những nguyên liệu cơ bản (ngôn ngữ, công cụ, thư viện) và tạo ra chương trình. Sau đây là một vài ví dụ về sự tương đồng:
* Món ăn rất ngon nhưng trình bày kém => Chương trình chạy tốt nhưng việc thực thi rất tệ
* Nguyên liệu làm nên món ăn không tốt => Ngôn ngữ / thư viện làm nên chương trình dở tệ
* Người đầu bếp sử dụng 20 nguyên liệu cho một món ăn mà lẽ ra chỉ cần 4 nguyên liệu => Lập trình viên viết một phần chương trình mà nhẽ ra có thể dùng thư viện
* Người đầu bếp bỏ quá nhiều thời gian vào việc trình bày món ăn và quá ít thời gian vào việc nấu ăn => Lập trình viên bỏ quá nhiều thời gian vào việc làm cho code dễ nhìn và quá ít thời gian vào việc thực thi tính năng

Sự tương đồng này có thể nhận thấy ở một số phần mềm nổi tiếng:
* Facebook: Dùng những nguyên liệu cơ bản nhất (PHP+MySQL) và scale ứng dụng để phục vụ hàng triệu người dùng. Họ là những đầu bếp tài năng nhưng nguyên liệu của họ dở tệ.
* Universal feed parser: Tạo bởi Mark Pilgrim (nhân viên của Google). Phần mềm rất tốt này chỉ có 1 file với khoảng 3000 dòng lệnh. Đây là một ví dụ của một đầu bếp tài năng nhưng có những thói quen không tốt và trình bày không đẹp
* Django: Code, tài liệu và trình bày đều đẹp và đáng yêu

Để trở nên giỏi hơn nữa, bạn nên học tập theo cách những lập trình viên hàng đầu làm việc:
* Họ thực thi những chương trình đơn giản nhất có thể và không thể đơn giản hơn được nữa
* Họ sử dụng idioms (của ngôn ngữ lập trình) một cách thành thạo
* Họ viết code có tính nhất quán cao (ví dụ như cách đặt tên biến và hàm)
* Họ tổ chức chương trình rất tốt (không nhét tất cả vào một file)
* Họ bổ xung comments khi cần thiết
* Họ kết thúc công việc đúng hạn
* Họ tạo ra những chương trình mà các thành phần có sự dính kết và cao nhưng ít phụ thuộc vào nhau

No comments: