Từ chuyện cargo cult programming, đến phong cách lập trình theo kiểu “bầy đàn”

Thảo luận trong 'Góc Chia Sẽ' bắt đầu bởi Phạm Huy Hoàng, Thg 5 19, 2020.

  1. Chuyện kể rằng, vào thời thế chiến thứ 2, binh lính Mĩ lần đầu tiên tiếp xúc với các thổ dân ở nhiều quần đảo thuộc vùng Melanesia.

    Vì nhu cầu chiến tranh, quân Mỹ/Nhật chở hàng loạt tàu hàng, cho máy bay thả hàng tiếp tế (thức ăn, lương thực, vũ khí) xuống, làm đời sống nhân dân trên đảo được cải thiện.

    Khi chiến tranh kết thúc, hàng hoá cũng hết theo. Cư dân trên đảo bắt đầu bắt chước hành động của binh lính Mĩ. Họ cũng dựng chòi canh, khắc gỗ làm radar headphone, quơ quào trên đường băng như binh lính liên lạc.

    [​IMG]
    Cư dân trên đảo làm giả máy bay, headphone, đài phát sóng; với hi vọng máy bay thật sẽ quay lại

    Dân chúng bắt đầu làm theo những nghi lễ này, với hi vọng máy bay sẽ quay lại, mang theo những thùng hàng tiếp tế. Tất nhiên là, dù họ có quơ quào cả năm trời, cũng chẳng có chiếc máy bay nào quay lại cả.

    Dần đà, những thứ này trở thành nghi lễ, được thờ cúng. Những tôn giáo, nghi lễ dạng này được gọi là cargo cult (cargo là hàng hoá được chuyên trở trên tàu).



    Ơ, chuyện nghe thú vị đấy, nhưng mà nó có liên quan gì đến lập trình đâu?? Ấy vậy mà có đấy!


    Từ chuyện “đạo tàu” tới chuyện lập trình


    Dần đà, cargo cult trở thành một thuật ngữ để chỉ chuyện “tuân theo những nghi thức, nguyên tắc vô ích một cách mù quáng”. Nghe quen quen, giống ông dev nào đó phải không nào?

    Dân developer quốc tế gọi triệu chứng này là cargo cult programming. Ở Việt Nam ko thấy có khái niệm tương tự nên mình gọi nó là lập trình theo kiểu “bầy đàn”, chuyên đi mò mẫm, bắt chước chạy theo người khác.

    Những biểu hiện của hội chứng cargo cult programming này bao gồm:

    • Fix bug bằng cách “mò đại”, sửa tùm lum
    • Copy code từ code cũ, hoặc trên mạng về dán vô cho nó chạy mà không hiểu vì sao (còn lại là full stack overflow developer)
    • Áp dụng linh tinh, vô tội vạ các design pattern, coding style mà không hiểu nguyên lý hoạt động của chúng
    • Viết tùm lum comment dư thừa vì nghĩ rằng code càng nhiều comment càng tốt.
    • Vì không hiểu ngôn ngữ, hệ thống đang dùng nên viết quá nhiều code thừa cho chắc ăn: xoá object trong khi ngôn ngữ tự code garbage collection; check array null hoặc empty trước khi duyệt; dùng ToList() trong LINQ quá nhiều lần
    • Luôn tự tin rằng ngôn ngữ/phần mềm/tool mình đang dùng là nhất, mà không giải thích được vì sao
    [​IMG]
    Ai đọc xong thấy nhột thì cứ tự nhủ thằng Code Dạo nó né mình ra nha.
    Lập trình kiểu “bầy đàn” có gì không tốt??


    Thật ra, với những người mới học, lập trình kiểu “bầy đàn” là chuyện bắt buộc. Trước khi hiểu cách thức code hoạt động, bạn phải làm cho code chạy được cái đã.

    Viết code là chuyện dễ, hiểu code là chuyện vừa, thực sự hiểu sâu cách code chạy mới là chuyện khó.

    Ví dụ thế này, bất kì bạn nào viết C# cũng biết dòng code Where ở line 21 làm chuyện gì: Lọc ra những course có Rank > 3.


    Tuy nhiên, để thực sự hiểu tại sao có thể viết c => c.Rank > 3, các bạn phải nắm rất nhiều khái niệm, từ Generic Class, Enumeration, Delegate/Predicate, và 1 chúc functional programming nữa. Các bạn giỏi hơn sẽ hiểu cách hàm Where chạy ra sao nữa.

    Nếu chỉ lập trình kiểu “bầy đàn”, thấy sao làm theo vậy, bạn sẽ không hiểu cách hệ thống hoạt động, khó mà nâng cấp, mở rộng, khi có vấn đề cũng không biết giải quyết ra sao.

    Không nắm được những kiến thức chuyên sâu, về lâu dài bạn sẽ khó leo lên các vị trí cao hơn, đòi hỏi kiến thức chuyên môn hơn. Bạn sẽ tự thấy mình giống code monkey, chứ không phải software engineer chân chính.

    [​IMG]
    Bạn sẽ tự thấy mình giống code monkey, chứ không phải software engineer chân chính.
    Tạm kết, vậy người developer phải nàm sao??


    Như mình đã nói, lập trình kiểu “bầy đàn” không xấu, ai cũng từng như vậy. Bản thân mình khi làm dự án mới, học công nghệ mới cũng làm theo kiểu mò mẫm, bắt chước, cho nó chạy được rồi mới tìm hiểu dần sau.

    Tuy nhiên, nếu muốn trở nên tốt hơn, giỏi hơn, không còn “bầy đàn” nữa, các bạn nên làm những điều sau:

    • Tò mò lên, hỏi nhiều vào: Đừng vội tự hào khi dòng code mình viết (hoặc copy trên mạng) chạy được. Hãy tự hỏi tạo sao nó chạy được, liệu mình có hiểu thứ mình viết ra không?
    • Đừng mù quáng nghe theo, làm theo người khác: Thấy code dự án, người ta dùng async/await nhiều nên mình dùng theo, thấy người ta try/catch nhiều cũng dùng theo luôn? Đừng nên mù quáng làm theo, mà hãy xem lý do, tại sao họ dùng như vậy, liệu có thể bỏ bớt hay cải thiện gì không
    • Hiểu thứ mình đang dùng: Mình cũng từng khuyên các bạn phải hiểu công nghệ chứ đừng dùng công nghệ. Thay vì dùng framework, hãy thử hiểu lý do nó được tạo ra, framework chạy ra sao. Có vậy khi có vấn đề bạ mới xử lý được.
    [​IMG]
    Lâu lâu, hãy tự hỏi mình: Liệu bạn đã hiểu rõ công nghệ, hay chỉ biết cắm đầu mà sử dụng?

    Đấy, hi vọng đọc xong bài này, các bạn sẽ cải thiện được bản thân, nắm được nhiều kiến thức sâu hơn, chứ không chỉ mò mẫm làm theo nhé.

    Bản thân mình thì mình uống trà sữa với bầy đàn của mình tiếp đây :3.



    Một số bài viết liên quan:


    Đọc tiếp...
     

Chia sẻ trang này