Cùng suy nghĩ về thói ăn sẵn của coder
“Bây giờ cái gì cũng có trên mạng. Library và source code đầy rẫy. Thay vì tự suy nghĩ và tự code thì chỉ cần cop về. Thế là mất gốc”. Dù đang là một nghề có thu nhập và cơ hội việc làm cao, nghề code cũng không phải là miễn nhiễm với những lời chỉ trích. “Coder bây giờ lười và thích ăn sẵn” là 1 trong các lời chỉ trích đấy. Đi dạo quanh những diễn đàn code, trò chuyện với những nhà quản lý hay những coder lão làng kỳ cựu, bạn dễ dàng bắt gặp các lời chỉ trích dạng như: “Bây giờ mẫu gì cũng có trên mạng. Library và source code đầy rẫy. Thay vì tự suy nghĩ và tự code thì chỉ biết cop về. Thế là mất gốc”. Đã đến lúc chúng ta cần suy nghĩ lại về tư tưởng nghề nghiệp của mình.
“Ăn sẵn” là bắt buộc
Một trong những bước đột phá từ lập trình tuần tự (procedural) lên hướng đối tượng (object-oriented) là khả năng tái sử dụng code một phương pháp dễ dàng và hiệu quả. Thay vì phải copy lại 1 đoạn code khi bạn sử dụng 1 tính năng, bạn chỉ cần “gói” đoạn code dùng lại nhiều lần vào 1 hàm hoặc một class. Bất cứ lúc nào bạn hoặc một người khác cần dùng đến đoạn code đấy, người này sẽ không phải cần copy và paste (và sửa) mà chỉ cần gọi tới hàm bạn đã cung cấp qua API.
Bạn đã thực sự hiểu nhiệm vụ chính của một coder hay chưa?
Tư tưởng cốt lõi ở đây là cực kỳ đơn giản: đừng bao giờ lặp lại những việc người khác (hoặc chính bạn) đã làm. Nếu bạn có nhiệm vụ tính toán và tổng hợp số liệu đã lấy lên từ database, trọng tâm của bạn là khâu xử lý số liệu chứ chẳng phải là khâu lấy data từ DB. Một coder tốt luôn hiểu rằng các dự án phần mềm luôn luôn là nổ lực của cả tập thể. Ôm đồm lấy toàn bộ công việc không phải là ý kiến hay.
Việc đem library từ trên mạng hoặc thậm chí là copy code từ GitHub, từ StackOverflow cũng mang tính chất tương tụư. Khi thực hiện công việc code, bạn đều sẽ phải đối mặt với những đề bài hết sức rõ ràng (nếu ko rõ thì phải hỏi lại PM, team lead, BA). Nhiệm vụ tối thượng của bạn là giải quyết đề bài đấy chứ không phải là tự nghĩ ra giải thuật tốt nhất, tự tạo library của riêng mình v…v…
Copy code thực chất đã phát triển thành một phần ko thể thiếu của nghề code.
Đừng nghĩ điều này chỉ áp dụng có những library “đao to búa lớn” kiểu I/O, những framework đình đám hay những package/library bạn nhận được từ đồng nghiệp. Trong trường hợp đã có ai đấy đã implement một function tương tự như cái bạn cần mà bạn vẫn quyết tâm code lại từ đầu thay vì gọi đến hàm của người khác, hoặc trong trường hợp bạn cố chấp code lại những bài toán đã quá phổ biến trên GitHub, các vấn đề Google rất nhanh là ra… Bạn thực sự đáng trách vì phí phạm thời gian sếp trả lương cho bạn.
“Ăn sẵn” có đầu óc
Nói như vậy ko có nghĩa rằng 1 coder tốt chỉ có thể đem thành quả của người khác về sử dụng. Ví như bạn copy code, bạn vẫn phải biết cách đánh giá đoạn code đã copy về đã tối ưu khi cần thiết. Tiếp đến, giữa 1 biển các thư viện và những đoạn mã nguồn mở có trên mạng, bạn cũng bắt buộc phải biết phương pháp so sánh và đánh giá để tìm ra tùy chọn thích hợp nhất. Bất kỳ 1 coder nào cũng cần phải thành thục những kỹ năng, thao tác cần thiết để có thể thử nghiệm và so sánh những giải pháp sẵn có với (refactor, debug, v…v…). nếu thấy giải pháp sẵn có là không đủ đáp ứng yêu cầu, hiển nhiên bạn buộc phải tự implement những gì bạn cần từ đầu.
Không biết copy code cũng đáng trách, mà copy code kiểu mù quáng cũng đáng trách.
Nhưng, đề cập đến kỹ năng copy code là nhắc đến phương pháp copy mang đầu óc, với khả năng tìm lọc và đánh giá.
Vậy, nếu đã bỏ công ra tìm hiểu các phương pháp sẵn có thì tại sao không tự giải lấy bài toán ngay từ đầu? Câu trả lời nằm ở chỗ tự mình nghĩ ra một giải pháp và cải tiến một giải pháp có sẵn là hai phạm trù tách biệt, giống như là viết văn và phê bình văn học vậy. Trong rất nhiều những trường hợp, cải tiến 1 giải pháp có sẵn sẽ vừa giúp tiết kiệm thời gian và chi phí, vừa giúp đem đến hiệu quả kinh tế.
Dĩ nhiên, điều đó không có nghĩa rằng coder có quyền ngừng học hỏi. Nhưng câu hỏi bạn cần phải đặt ra là “ưu tiên cái gì trước ?”. Từ kinh nghiệm bản thân của tôi, một phần lớn hình ảnh và các đánh giá của đồng nghiệp dành cho bạn sau này sẽ nằm ở những gì bạn đang chịu trách nhiệm chứ không phải là những gì bạn sẽ được giao phó trong tương lai. Điều này có nghĩa rằng bạn cần cân bằng giữa học hỏi giữa những điều mới mẻ với hệ thống bạn đang nắm. Trọng tâm của một coder được giao phó xử lý dữ liệu vẫn là xử lý dữ liệu chứ không phải là lấy data từ DB, nhưng tìm hiểu toàn bộ các thành phần hệ thống từ database cho tới tận front-end sẽ là một cách tốt để chứng minh năng lực trong tương lai.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!