Saturday, May 10, 2008

Để thành công trong lập trình

(Lược dịch từ “Teach Yourself Programming in Ten Years” của Peter Norvig)
Công thức để thành công trong lập trình là:

- Yêu thích lập trình vì cảm thấy lập trình rất thú vị. Chắc chắn rằng lập trình đủ thú vị để bạn có thể tiếp tục luyện tập trong 10 năm

- Trao đổi (với những lập trình viên khác) và đọc mã nguồn quan trọng hơn nhiều so với bất kỳ cuốn sách hoặc khóa học lập trình nào.

- Chương trình là trọng tâm. Cách học tốt nhất là “vừa làm vừa học” (learning by doing). Ngưỡng cao nhất mà con người có thể đạt được trong một lĩnh vực không phụ thuộc vào kinh nghiệm tích lũy được (có quan điểm cho rằng khi một người làm việc quá lâu trong một lĩnh vực, họ không thể nâng cao trình độ hơn được nữa). Ngưỡng đó có thể được nâng lên kể cả với những người giàu kinh nghiệm bằng cách luôn cố gắng cải tiến. “Cách hiệu quả nhất để nâng cao trình độ là có một đề bài được định nghĩa tốt với mức độ khó phù hợp cho từng cá nhân, thông tin phản hồi, và cơ hội lặp lại và sửa chữa lỗi” (opportunities for repetition and corrections of errors).

- Học đại học (thường là 4 năm) hoặc học cao hơn nữa sẽ giúp bạn tìm được công việc đòi hỏi bằng cấp, và học tập còn giúp bạn hiểu sâu hơn về lĩnh vực theo học. Nhưng nếu bạn không thích trường học, bạn có thể đạt được kinh nghiệm cần thiết cần thiết cho công việc (bằng cách tự học). “Giáo dục về khoa học máy tính không giúp cho ai đó có thể trở thành lập trình viên lão luyện, nó giống như việc nghiên cứu cây cọ và màu vẽ không giúp cho ai đó trở thành một họa sỹ tài năng”. Tôi (Peter Norvig) đã từng thuê một lập trình viên chỉ học hết cấp 3, anh ta đã làm ra những phần mềm lớn và có đủ tiền để mua một hộp đêm cho riêng anh ta.

- Làm việc nhóm với các lập trình viên khác. Là người “giỏi nhất” trong một số dự án, là người “dở nhất” trong một số dự án khác. Khi bạn là người giỏi nhất, bạn thực hành khả năng lãnh đạo và truyền cảm hứng cho người khác bằng tầm nhìn của bạn. Khi bạn là người dở nhất, bạn học hỏi cách những người giỏi làm việc, và học cả những việc mà người giỏi không muốn làm (vì họ sẽ bắt bạn làm những việc đó).

- Tham gia những dự án với tư cách là người đến sau. Hãy hiểu chương trình viết bởi những lập trình viên khác. Hãy ngẫm nghĩ xem để hiểu chương trình do người khác viết thì cần có những thông tin gì và bổ xung thông tin đó (nếu thiếu). Suy nghĩ xem nên thiết kế chương trình thế nào để thuận tiện cho những người sẽ tiếp tục phát triển chương trình của bạn.

- Học ít nhất 6 ngôn ngữ lập trình. Bao gồm một ngôn ngữ hỗ trợ trừa tượng hóa lớp (class abstraction) như là Java hoặc C++, một ngôn ngữ hỗ trợ trừa tượng hóa hàm (funtional abstraction) như là Lisp hoặc ML, một ngôn ngữ hỗ trợ declarative specifiaction như là Prolog hoặc C++ templates, một ngôn ngữ hỗ trợ coroutines như là Icon hoặc Scheme, một ngôn ngữ hỗ trợ lập trình song song như là Sisal.

- Hãy nhớ từ “máy tính” trong cụm từ “khoa học máy tính”. Phải biết cần bao nhiêu thời gian để máy tính thực hiện một lệnh, đọc một word vào bộ nhớ (khi có hoặc ko có cache miss), đọc những words liên tiếp từ đĩa cứng, và tìm kiếm vị trí mới trên đĩa.

- Tham gia chuẩn hóa ngôn ngữ. Như là tham gia ANSI C++ committee, hoặc đơn giản hơn là quyết định xem coding style của bạn để lề (indentation) theo kiểu 2 ô trắng hay 4 ô trắng. Hãy học xem cái gì làm người khác lại thích ở một ngôn ngữ lập trình, họ thích đến mức nào và nếu có thể tìm hiểu vì sao mà họ thích.

- Hãy sử dụng những chuẩn bạn học được (một cách thích hợp) càm sớm càng tốt.

No comments: