Khi lần đầu tiên nhìn thấy danh sách này của lập trình viên nổi tiếng Jeff Atwood, bạn biết mình nghĩ gì không ạ? Lúc đó mình nghĩ rằng đúng là chết tiệt thật, giá như mình biết được danh sách này sớm hơn. Bởi trước đó vì không ai bày cho nên đọc sách gì, nên mình đã cắm cổ đọc sách như điên. Mình thức cả đêm để download hàng trăm cuốn sách, hàng chục GB tài liệu rồi cuối cùng bỏ đó. Và cách đọc sách của mình cũng sai nữa, vớ được cuốn nào là mình đọc hùng hục từ đầu đến cuối, có khi hứng lên còn đọc luôn cả phần lời cảm ơn nữa!
Sau này mình mới biết có những cuốn kinh điển như “Code Complete 2” là sách gối đầu giường của các lập trình viên Âu Mỹ cho đến Ấn Độ. Mình nghĩ cuốn này nên dịch ra để làm giáo trình cho sinh viên đại học CNTT ở Việt Nam thì tốt biết mấy.
Như trong bài viết gần đây, một lập trình viên Mỹ đã than rằng:
“Tôi đã sai lầm khi dành quá nhiều thời gian để đọc những cuốn sách về một công nghệ nhất định nào đó như là ASP.NET hoặc Hibernate, thay vì nên đọc những cuốn sách kiểu như ‘Code Complete’, ‘Clean Code’, và ‘Agile Principles, Patterns And Practices in C#’. (Tất cả những cuốn sách này, nếu bạn chưa đọc chúng thì tôi khuyên bạn nên dành thời gian để đọc.)”
Chúng ta đều biết là số lượng không bằng chất lượng. Bằng chứng là vào năm 1958, một học giả người Mỹ là ông Sturgeon đã công bố nghiên cứu nổi tiếng về quy luật 90/10, rằng “90% tất cả mọi thứ trong đời đều là vớ vẩn“, bạn thử kiểm tra lại các mối quan hệ bạn bè đồng nghiệp, các sách báo mình đã đọc… xem có đúng không?
Và trước khi xem qua danh sách này thì chúng ta hãy cùng đọc lại một đoạn trong bài viết của một lập trình viên khá nổi tiếng tại Ấn Độ nhé:
“Cũng giống như ngoài đại dương bao la kia, phía trên bề mặt thì sóng rất dữ dội nhưng ở mực nước sâu thì mọi thứ tương đối yên tĩnh, phẳng lặng và hầu hết các sinh vật sống và phát triển tại đây. Vì thế, hãy tự cảm nhận rằng mình đang ở mực nước sâu và tiến gần với những công nghệ cốt lõi. Bạn hãy dành nhiều thời gian để học về những khái niệm cốt lõi hơn là cứ ngồi đó mà lo lắng về những framework và công cụ luôn thay đổi xoành xoạch xung quanh nó. Cùng với nền tảng vững chắc của những kiến thức cốt lõi, bạn sẽ luôn dễ dàng học được những framework, công cụ và các API mới.”
Lập trình viên nên chọn cuốn sách nào để “gối đầu giường”?
1. Code Complete 2

Tôi thích cuốn sách này nhiều đến nỗi tên miền blog của tôi (Coding Horror) là xuất phát từ nó. Bạn nên đọc cuốn sách này đầu tiên, và là cuốn sách đầu tiên mà bạn giới thiệu đến các lập trình viên đồng nghiệp của mình.
2. The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)

Tôi thách thức bất kỳ lập trình viên nào đọc cuốn The Mythical Man Month mà lại không tìm thấy câu chuyện về một hệ điều hành không tồn tại nữa, và nhóm người đã phát triển ra nó, rất đáng ngạc nhiên là chúng lại rất liên quan đến vấn đề của bạn ngày nay. Cuốn sách 25 năm tuổi đã minh họa sâu sắc một quan điểm rằng: máy tính có thể thay đổi, nhưng con người thì không.
Đọc cuốn sách kinh điển này chắc chắn sẽ tốt hơn rất nhiều việc bạn sử dụng thời gian để nghiền ngẫm trên hàng ngàn trang tài liệu kỹ thuật mới nhất hiện nay.
3. Don’t Make Me Think: A Common Sense Approach to Web Usability

4. Rapid Development

Rapid Development thì không nói về việc phát triển nhanh ứng dụng như cái tên của nó. Nội dung cuốn sách nói về *thực tế của thất bại*. Phần lớn các dự án phát triển phần mềm đều thất bại: chúng thường vượt quá thời hạn kế hoạch đã đặt ra, tạo ra các kết quả không đạt yêu cầu, hoặc đôi khi thậm chí nó còn không thể kết thúc được. Điều này không còn phải tranh cãi; vì đó là một thực tế đã được thống kê. Có một sự thực không mấy dễ chịu đó là team của bạn phải trở nên giỏi hơn trong việc tránh những thất bại đơn giản để có thể thành công. Trong khi nghe điều này có thể làm bạn nản lòng — vâng, nó thì rất nản lòng — nhưng bạn sẽ vẫn muốn đọc cuốn sách này.
Tại sao ư? Bởi vì một nửa thành công là không được lặp lại những sai lầm mà bạn hoặc người khác đã mắc phải. Quan điểm của cuốn sách này đó là việc phạm sai lầm là tốt. Nhưng nếu bạn đang phạm phải chính những sai lầm kinh điển trước đây, thì bạn đã thất bại ngay trước khi thậm chí bắt đầu. Và nếu bạn không biết điều đó là như thế nào thì bạn đang phạm phải một trong những sai lầm đó ngay lúc này.
Lĩnh vực của chúng ta là một trong số ít lĩnh vực thường xuyên thay đổi, vì vậy cách duy nhất là ôm lấy sự thay đổi đó và thử áp dụng những kỹ thuật phát triển “Rapid” khác biệt. Nhưng điều ngược lại thì không đúng. Chúng ta không thể cho rằng có quá nhiều thay đổi từ năm 1970, dẫn đến tất cả các bài học về phát triển phần mềm trước đây đều trở nên lỗi thời và không thích hợp khi so sánh với những công nghệ mới đang “hot” hiện nay. Điều này thì cũng đề cập đến cùng một câu chuyện: máy tính đã thay đổi; con người thì không.
Ít nhất thì cũng có một vài ý tưởng về cái gì làm việc và cái gì không trước khi bạn bắt đầu — như McConnell đã nói, “hãy đọc hướng dẫn sử dụng trên thùng sơn trước khi sơn“. Chắc chắn là vấn đề này nghe có vẻ hiển nhiên cho tới khi bạn đọc cuốn sách này và nhận ra điều đó rất hiếm khi và thực sự xảy ra trong lĩnh vực của chúng ta.
5. Peopleware : Productive Projects and Teams, 2nd Ed.

Trong khi Peopleware chứa đầy những quan điểm hoàn toàn vững chắc và tuyệt vời, nó cũng ngụ ý về một mức độ kiểm soát nhân viên dựa trên không gian làm việc là hoàn toàn kỳ quặc tại hầu hết các công ty. Nhưng ít nhất bạn cũng sẽ biết khi nào thì môi trường làm việc của mình, hoặc team của mình đang gặp một vấn đề thực sự — và quan trọng hơn là cần phải làm gì để giải quyết nó.
6. The Design of Everyday Things

7. About Face 3.0: The Essentials of Interaction Design

Cuốn sách này, cùng với cuốn GUI Bloopers, có khuynh hướng trở thành những cuốn sách về quy tắc sư phạm trong việc trình bày một GUI nhất quán. Nhưng đây là một trong những chỉ dẫn đầy đủ nhất mà bạn có thể ứng dụng được.
Không giống như cuốn GUI Bloopers, vì nó xuất bản thời trước khi có web, vì vậy không có sự bàn luận về cách trình bày trên web và nó có tác động đến thiết kế GUI như thế nào. Nhưng nó thì vẫn là một cuốn sách hữu ích tuyệt vời; tôi đã sử dụng chương sách nói về mô hình quản lý thông điệp lỗi (error messages) cho một dự án .NET gần đây.
8. The Inmates Are Running the Asylum : Why High Tech Products Drive Us Crazy and How To Restore The Sanity

Cũng có một phân tích khá thú vị ở đây về việc các lập trình viên có khuynh hướng nghĩ rằng bản thân họ có khả năng tạo ra các quyết định về usability nhân danh những người dùng “bình thường”, nhưng trong thực tế thì hoàn toàn ngược lại. Các lập trình viên chính là những người dùng kỳ cục và cực đoan nhất.
Một bài học ẩn chứa phía sau cuốn sách này đó là đôi khi thiết kế của bạn có tốt như thế nào chăng nữa cũng không quan trọng: phần mềm cho máy scanner và phần mềm phát triển webđược sử dụng làm ví dụ trong cuốn sách này, cả hai đều thất bại trên thị trường vì những lý do rằng không có gì phải làm với tính usability của chúng cả.
Dù sao thì đây là một cuốn sách tuyệt vời khác của tác giả Cooper, và một sự tiến bộ hợp lý kể từ cuốn About Face đã đề cập phía trên. Trong cuốn About Face, tác giả Cooper coi đối tượng “Perpetual Intermediates” như là độc giả chính, còn ở đây, có một sự xác định rõ ràng hơn và vì vậy dễ phát triển hơn, đó là đối tượng personas.
9. GUI Bloopers: Don’ts and Do’s for Software Developers and Web Designers

Một thực tế đó là thế giới GUI cổ điển và thế giới của trình duyệt (browser) đang dần nhập lại với nhau — kết hợp lấy tất cả những ưu điểm tốt nhất của cả hai. Có những loại ứng dụng mà có giao diện giống hệt của browser.
10. Programming Pearls (2nd Edition)

Tôi sẽ không nói dối bạn: phần lớn các chương trong cuốn sách này bạn có thể lờ đi. Ví dụ, tôi không thể tưởng tượng việc thực thi các thuật toán sorting, heap hoặc hash lại được viết lại trong các chương 11, 13 và 14 tương ứng, vì ngày nay đã có những thư viện tuyệt vời cho những thứ nguyên thủy cơ bản này. Chỉ cần đọc lướt qua cuốn sách, lờ đi các phần code. Chương 8, “Back of the Envelope” thì quan trọng, có thể là phương pháp ước lượng tốt nhất mà tôi đã từng được nhìn thấy. Nó cũng tiến một bước dài về phía trước để giảng giải về những câu hỏi phỏng vấn điên khùng mà các công ty thường sử dụng để làm phiền chúng ta.
11. The Pragmatic Programmer: From Journeyman to Master

Nếu bạn muốn biết thêm một chút về cuốn sách này, thì tôi đã tạo ra một phiên bản HTML một phần mục lục tóm tắt để tham chiếu đến các phần bên trong, nó sẽ cung cấp cho bạn một cái nhìn tổng quan về nội dung cuốn sách.
12. Designing Web Usability : The Practice of Simplicity

13. The Visual Display of Quantitative Information
14. Visual Explanations: Images and Quantities, Evidence and Narrative
15. Envisioning Information

16. Mastering Regular Expressions, Second Edition

Tôi có thể trở thành một thành viên của câu lạc bộ “Keep It Simple Stupid – giữ cho nó đơn giản nhất đồ ngốc ạ”, nhưng tôi đang làm một ngoại lệ đối với regular expressions. Nếu viết tốt, thì chúng sẽ tiết kiệm cho bạn vô số thời gian trong việc thao tác bằng tay để bắt các trường hợp khác nhau, và tôi cũng hiếm gặp một dự án nào mà chúng lại không có ích ở một nơi nào đó.
Một khi bạn đã nhảy vào thế giới của regular expressions, thì bạn có thể sẽ trở nên mê mẩn với sức mạnh tuyệt vời và tiềm năng mà chúng có.