Bao Công xử án Coder

Bài viết được đăng trên
Fsoft Potato TechMag
potato.fsoft.com.vn

Xưa kia ở thành Hà Nội, thuộc nước An Nam dân quốc, có công ty phần mềm outsourcing chuyên làm nghề code thuê , quân số lên tới cả nghìn người. Khách hàng khắp năm châu bốn biển, âu á phi mỹ đủ cả, dự án phần mềm lên tới cả triệu mỹ kim.
Năm ấy, công ty gặp phải một sự cố nghiêm trọng. Dự án phần mềm lớn của công ty phát triển gặp issue về chất lượng, dẫn tới khi deploy, hệ thống không hoạt động. Khách hàng quyết định hủy dự án, thiệt hại hàng triệu mỹ kim.
CEO vô cùng tức giận, lập tức lệnh cho đội QA tra xét, điều tra nguyên nhân. Tổng quản QA là Bao Công cho gọi đội kĩ thuật đến yêu cầu ngày đêm review source code, kiểm tra process…
Đến khi chứng cứ thu thập đầy đủ, Bao Công lập tức thăng đường xét xử.

  • Cho giải Coder vào công đường.
Bao Công đập hương án quát lớn
  • Coder, ngươi thân làm lập trình viên, chịu trách nhiệm làm ra sản phẩm phần mềm, nhưng lại mắc phải như sai lầm nghiêm trọng, mới dẫn tới hậu quả như ngày hôm nay…
Tội của ngươi đó là
  1. Đạo code mà không hiểu
Khi gặp bài toán cần xử lý, việc đầu tiên là Google search, check Stack Overflow để tìm code mẫu. Copy paste code là công việc mà Coder nào cũng làm. Đó cũng là chuyện thường như cân đường hộp sữa, bản phủ có thể niệm tình mà không tra xét.
Nhưng copy code thì cần phải dành thời gian tìm hiểu đoạn code đấy làm gì, có phù hợp với bài toán của mình không để customize lại cho đúng.
Cụ Steve Job lúc sing thời đã mượn lời của danh họa Picasso
“Good Artists Copy; Great Artists Steal”



Đại loại là copy code thì nên học cao thủ “Độc cô đạo code” biến code của người khác thành của mình.
Hãy xem xét ví dụ cụ thể sau
Có một mảng gồm 20 phần tử, cần sắp xếp từ lớn đến bé
Coder lập tức google và copy code của thuật toán QuickSort về, do QuickSort có độ phức tạp là O(n log(n)) là thuật toán sắp xếp nhanh nhất
Tuy nhiên việc thuật toán chạy nhanh hay chậm còn tùy thuộc vào dữ liệu đầu vào. Với dữ liệu chỉ 20 phần tử, thì có nhiều thuật toán sắp xếp khác tốt hơn so với QuickSort do không phải gọi đệ quy. Ví dụ như selection sort
Sử dụng đệ quy tuy implement thì đơn giản nhưng khi thực thi máy tính sẽ phải thực hiện số lượng phép tính rất lớn, gây tốn bộ nhớ.
Ngươi copy paste code từ Google một cách quá máy móc nên mới dẫn tới chương trình performance thấp ảnh hưởng tới chất lượng sản phẩm.
  1. Thiếu kĩ năng làm việc nhóm
Dự án lớn cả triệu đô, Coder tham gia cả trăm người, mỗi người phụ trách code một module. Nhưng mạnh ai nấy code mà bỏ quên giai đoạn tích hợp, dẫn tới code merge xong không build được, do anh Coder X commit thiếu file, chị Coder Y fix bug của anh X gây degrade bug OT triền miên để tìm nguyên nhân, tích hợp và sửa lỗi. Dẫn tới trễ dead line, khác hàng phàn nàn.
Nguyên nhân là do không biết áp dụng phương pháp continuous integration (CI). Phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên (Ví dụ như commit code thường xuyên để tránh việc xảy ra quá nhiều sai khác trong source code, gây khó khăn trong việc merge code)
Đây là mô hình CI
Image result for continuous integration icon
Khi Coder commit code, hệ thống sẽ lấy code từ SVN, build và send mail thông báo cho team nếu như build có lỗi, cho biết lỗi xảy ra ở revision nào, ai commit Việc tra xét trở nên dễ dàng.
  1. Không chịu học kĩ năng mềm
Phát triển phần mềm không đơn thuần chỉ có ngồi code, mà còn phải làm tài liệu như thiết kế, test specs, manual, trình bày giải thích vấn đề cho người khác hiểu…
Nhưng Coder ngươi chỉ biết chăm chăm code trâu, cày khỏe mà thiếu những kĩ năng sau
Presentation Skill
Kĩ năng thuyết trình và diễn đạt trước đám đông. Mặc dù hiểu vấn đề, nhưng không thể diễn đạt được ý tưởng của mình cho team hiểu. Viết code như quỷ khóc thần sầu nhưng đừng trước đám đông thì lại tim đập chân run, không nói lên lời. Khiến cho bụng đầy sách lược mà không ai hiểu, thật tiếc lắm thay…
Technical Writing
Kĩ năng viết tài liệu kĩ thuật như Architecture design, detail design, technical article…Kiến thức về UML để vẽ sequence, class diagram, component diagram mô tả hệ thống.
Coder không những phải giỏi code Java/C# mà còn phải thạo cả Word, Powerpoint.
Kĩ năng giao tiếp
Tiếng anh Toeic > 800, tiếng Nhật Nx, bằng cấp đầy mình nhưng khi tiếp xúc với khách hàng thì e ngại, không nói được. Đó là không chịu luyện kĩ năng giao tiếp, nên thiếu phản xạ nói, dẫn tới có học mà chẳng có hành.
  1. Lười học hỏi công nghệ mới
Ở trường đại học, Coder được học những kiến thức nền tảng như cấu trúc dữ liệu và giải thuật (Linked List, Double Link List), thuật toán tìm binary searching, quick sort, kiến trúc máy tính x86, phương pháp tính…
Tuy nhiên sự lan tỏa của phần mềm từ máy chủ đến đám mây, rồi đến lĩnh vực Big Data, Machine Learning khiến cho Coder cần không ngừng bổ sung những kĩ năng mới, những thứ không được học ở trường.
Những công nghệ mà Coder nên tìm hiểu là
Ngôn ngữ lập trình
Java/C# là những ngôn ngữ lập trình thông dụng. Nhưng để tiếp cận với Machine Learning thì cần phải học Python, Mathlab. Phát triển ứng dụng iOS thì học C-Objetive, Swift…
Nắm vững một vài framework
Thực tế số lượng framework ra đời là vô cùng lớn, nhưng chúng vẫn dựa trên một số nền tảng như MVC, MVVM…biết càng nhiều thì càng tốt.
Tiếc thay, Coder ngày nay sau 30 tuổi là muốn làm quản lý, sếp to, dẫn tới tổ chức mất đi một người kĩ thuật giỏi, lại thêm một anh lãnh đạo tồi.
Công nghệ phát triển hàng ngày, không tiến tức là tự lùi. Không mong chạy đua công nghệ, chỉ mong không bị lạc hậu là tuyệt vời rồi.
----
Bao đại nhân nói đến đây bỗng đập hương án thét lớn:
Nay tội trạng đã rõ rành rành, ngươi còn gì để nói? Cẩu đầu trảm chờ lệnh
Khai …đao…
Phập…
Chuyện coding như nước chảy về đông
Sao Coder cứ hay muộn phiền
Quyết tâm fix bug, bug càng thêm bug
Cố tránh ON, lại OT
Powered by Blogger.