Nối tiếp phần 1, bài viết này bao gồm 35 bài học tiếp theo trong số 70 bài học rút ra từ cuốn The Pragmatic Programmer mà mình đã nhắc tới ở bài trước.
35 bài học còn lại:
- Giảm thiểu quan hệ giữa các module: Tránh sự chồng chéo, dính chùm bằng cách hạn chế việc các module gọi nhau quá nhiều (Nên đưa ra interface v…v).
- Config chứ đừng tích hợp: Hiện thực theo cách mà ta có thể tích hợp các lựa chọn về công nghệ 1 cách dễ dàng (Bằng cách config), chứ ko phải dùng code hay tích hợp bằng tay.
- Tập trung vào abtraction: Code cần tập trung giải quyết theo hướng tổng quát, trừu tượng (Mình thấy cái lời khuyên này hơi vô lý, khá khó thực hiện).
- Nghiên cứu kĩ luồng chạy, tăng tính phân luồng của code.
- Thiết kế theo service: Mỗi component nên nằm trong 1 service riêng, giao tiếp với nhau thông qua interface (Đây là ý tưởng mở đầu cho khái niệm Dependency Inversion trong SOLID).
- Thiết kế cho việc phân luồng: Thiết kế để hệ thống có thể chạy được phân luồng nếu yêu cầu.
- Tách biệt giữa view và model: Tách biệt view và model ra sẽ làm tăng tính linh hoạt của thiết kế lên rất nhiều.
- Dùng design pattern blackboards để quản lý các luồng chạy.
- Đừng code kiểu “hên xui”: Đừng code theo kiểu “hên xui”, không biết vì sao code chạy, hoặc dùng các trò “chích choát”. (Nói vậy thôi, các bạn xem source code của Windows vẫn 1 đống trò hack hoặc chích choát đấy thôi).
- Đánh giá thuật toán: Trước khi code, hãy thử đánh giá thuật toán/code bạn sử dụng sẽ chạy mất bao lâu.
- Thử nghiệm lại đánh giá: Để xác thực đánh giá của mình, đừng tin vào thuật toán hay báo cáo, hãy chạy code trong môi trường thực tế và đo đạc lại.
- Refactor sớm và thường xuyên: Code cũng giống như làm vườn, phải thường xuyên tỉa tót, thay đổi thiết kế thì mới tốt được. (Mình thì không đồng tình với lời khuyên này lắm, đôi khi trễ deadline, code chết mợ, thời gian đâu mà refactor).
- Thiết kế để test: Trước khi code, hãy nghĩ mình sẽ test thế nào.
- Test phần mềm cho kĩ, nếu không người dùng sẽ làm điều đó: Test kĩ càng và quyết liệt, đừng để người dùng nhặt bug cho bạn.
- Cẩn thận với tool sinh code: Hãy hiểu đống code mà tool sinh ra trước khi sử dụng chúng (Một số bạn bây giờ khoái dùng code tự sinh mà ko hiểu, đến lúc có lỗi hoặc cần sửa chữa lại chả biết làm thế nào).
- Đừng tổng hợp requirement, hãy đào sâu mà tìm: Requirement không có sẵn để bạn đi vòng vòng mà “tổng hợp”. Phải chịu khó đào sâu, làm phiền, quấy rối, tra tấn, móc họng khách hàng để họ “ói” requirement ra cho bạn.
- Làm việc với người dùng, đặt mình vào vị trí người dùng, suy nghĩ như người dùng.
- Tập trung vào abstraction: Những thứ trừu tượng như interface v…v sẽ sống lâu hơn implementation. Kể cả khi ta có thay đổi công nghệ hoặc thay đổi cách hiện thực, abstraction vẫn giữ nguyên.
- Hãy có 1 cuốn sổ tổng hợp: Tập trung những từ ngữ chuyên biệt, ý nghĩa của chúng vào sổ. Sau này mỗi khi team cần tra v…v thì rất dễ dàng.
- Tìm cách giải quyết vấn đề “bất khả thi”: Khi gặp vấn đề “bất khả thi”, hãy xác định các giới hạn, sau đó tự hỏi “Có bắt buộc phải làm cách này ko? Có thật sự phải giải quyết vấn đề này không?”
- Bắt đầu ngay sau khi bạn đã sẵn sàng.
- Có nhiều thứ làm thì dễ hơn giải thích: Đừng quá sa đà vào giải thích, mô tả, viết document, hãy code ngay khi có đủ dữ liệu bạn cần.
- Đừng quá gò bó vào phương pháp: Đừng ép mình sử dụng các phương pháp lập trình một cách cứng nhắc, hãy áp dụng linh hoạt dựa theo khả năng của team và bản thân.
- Tool mắc tiền chưa chắc đã tốt.
- Hãy chia team như chia code: Đừng tách team ra thành các bộ phận như designer, tester, developer. (Đây là một trong những ý tưởng mở đầu cho kỉ nguyên Agile).
- Hạn chế làm tay: Những process như copy file, chạy bản build, lặp đi lặp lại, chúng ta không nên làm bằng tay. Hãy lập trình để script làm điều đó.
- Test, test nữa, test mãi: Chạy test mọi nơi mọi lúc, với mọi bản build (Test nên là test tự động).
- Code chưa tính là xong cho tới khi toàn bộ test đã pass.
- Vọc bug để kiểm tra test: Hãy copy source code của bạn ra một vài bản khác, sau đó cố tình tạo bug để xem test của bạn có bắt được những bug đó ko.
- Test trạng thái của chương trình, không chỉ test code: Đừng chỉ kiểm xem test có cover hết các dòng code hãy ko, hãy để ý xem test có cover được các trạng thái của chương trình hay ko
- Tìm bug 1 lần: Tester chỉ test và tìm bugs 1 lần đầu tiên và duy nhất. Từ những lần sau, hãy để automation test chạy và verify bug đó.
- Tiếng Anh cũng chỉ là ngôn ngữ: Hãy viết document như viết code: Dễ hiểu, đừng lặp lại, có thể sinh bằng tool nếu cần.
- Viết document, tách riêng với code: Đừng để mỗi lần sửa code lại phải sửa document.
- Hãy vượt qua kì vọng của người dùng: Code để chương trình đáp ứng kì vọng của người dùng, sau đó hơi quá kì vọng 1 chút, người dùng sẽ rất thích điều này.
- Kí tên trên code: Nếu code làm bạn tự hào, hãy kí tên (Bằng comment). Nếu code như shit, bạn cũng nên kí tên, điều này giúp tăng tinh thần trách nhiệm của bạn với code mình viết ra.
Bài viết đến đây là hết rồi, rất mong nhận được sự góp ý, nhận xét từ các bạn (Ai góp ý comment gì đi, tui buồn là tui bỏ không viết blog nữa đó).
Bản gốc: http://blog.codinghorror.com/a-pragmatic-quick-reference/
theo em nghĩ trước tiên là code cứ phải chạy đúng kết quả cái đã, vì chả có cha nào rảnh ngồi đọc code của mình, nhất là làm outsource. 70 điều trên là dành cho các developer tự ý thức bản thân thôi, ý thức được thì trình sẽ lên còn không thì cứ cùi cùi tàng tàng thế 😀
LikeLike
70 điều này không chỉ là code mà còn về quá trình làm việc v..v nữa bạn :D. Về việc code hay dở thì nào thì mình có viết bài “Éo ai quan tâm đến code bạn viết đâu” rồi đấy =)))
LikeLike
Chính vì suy nghĩ cứ code cho xong nên developers Việt Nam mình giờ hầu như là lởm vậy đó 😦
LikeLike
Comment chứ không anh bỏ :3
“Ai góp ý comment gì đi, tui buồn là tui bỏ không viết blog nữa đó”
LikeLiked by 1 person
70 điều rất hay, có chỗ cuối hài ghê… :v
“…Nếu code như shit, bạn cũng nên kí tên, điều này giúp tăng tinh thần trách nhiệm của bạn với code mình viết ra.”
LikeLike