
Trước hết, một cuộc trao đổi ngắn trên LinkedIn:
Tôi > Có rất nhiều kỹ sư không hiểu biết viết mã kém chất lượng và tạo ra các thiết kế kinh khủng.
Raja > Tôi ngạc nhiên tại sao điều này xảy ra gần như trong mọi tổ chức. Và điều này xảy ra mặc dù tổ chức tuyên bố họ có đội ngũ, quy trình, công cụ tốt nhất, v.v.
Ôi... Tôi thích câu hỏi 'Tại sao'. Vậy, hãy đào sâu vào vấn đề.
Trong một cuộc trao đổi ngắn trên LinkedIn:
Tôi viết: 'Ngày nay, có không ít kỹ sư mới ra trường đang tạo ra mã nguồn kém chất lượng và dẫn đến thiết kế không được tốt.'
Raja phản hồi: 'Tôi thực sự ngạc nhiên và không hiểu tại sao hầu hết các tổ chức đều gặp phải tình trạng này. Điều này trái ngược với những khẳng định của họ về việc sở hữu đội ngũ hàng đầu, quy trình tối ưu và công nghệ hiện đại.'
Tôi bày tỏ: 'Câu hỏi 'Tại sao' luôn khiến tôi hứng thú. Hãy cùng nhau khám phá nguyên nhân đằng sau điều này nhé.'

Thực ra, chúng không tệ lắm
Đầu tiên, tôi tin rằng nhiều trường hợp mã lởm không phải do kỹ sư tồi.
Chỉ cần có một số kỹ sư không có nhiều kinh nghiệm, thêm vào đó là quản lý yếu và lãnh đạo kỹ thuật không mạnh mẽ, tăng áp lực, bạn sẽ thu được rất nhiều mã lởm.
Nói chung, điều mà tôi mô tả chỉ là một trong những cách để có kết quả tồi. Còn có những cách khác — văn hóa không chia sẻ kiến thức trong tổ chức, thiếu sự hướng dẫn từ mentor, hướng đi không rõ ràng với sự thay đổi yêu cầu liên tục, v.v.
Bạn biết không, câu ngạn ngữ trong lập trình 'Rác vào, rác ra'?
Vì vậy, sự thật là bạn có nhiều yếu tố đầu vào — con người, quy trình, văn hóa và nhiều hơn nữa và một kết quả (phần mềm của bạn).
Bạn có thể có người tốt (hoặc tốt), nhưng nếu phần còn lại của đầu vào là rác, bạn đảm bảo sẽ thu được rác ở phía đích.
Một lưu ý phụ: Bạn có thể bàn luận rằng nếu mọi người đều tốt, họ có thể/sẽ sửa đổi quy trình, văn hóa, v.v. Cố gắng sửa chữa từ 'chiến hào' là một quá trình đau đớn và hiếm khi thành công.
Quan điểm Sai Lầm về Kỹ Sư Phần Mềm: Họ Không Tồi Tệ Như Bạn Nghĩ
Đầu tiên, tôi muốn nhấn mạnh rằng, việc sản phẩm công nghệ không đạt chất lượng không chỉ là do lỗi của các kỹ sư.
Chỉ cần có một (hoặc một vài) kỹ sư thiếu kinh nghiệm, quản lý lỏng lẻo hoặc khả năng kỹ thuật chưa hoàn hảo của nhà lãnh đạo, cùng với áp lực tăng cao, sẽ tạo ra một lượng lớn mã nguồn không đạt yêu cầu.
Đây chỉ là một trong số nhiều nguyên nhân dẫn đến sản phẩm kém chất lượng. Những nguyên nhân khác có thể kể đến như văn hóa doanh nghiệp không khuyến khích chia sẻ kiến thức, thiếu sự hỗ trợ từ những người có kinh nghiệm, hoặc thay đổi mục tiêu dự án thường xuyên, v.v.
Trong lĩnh vực công nghệ thông tin, nguyên tắc 'Rác vào, rác ra' luôn được coi trọng như một lời nhắc nhở về tầm quan trọng của chất lượng đầu vào trong quá trình phát triển phần mềm.
Câu nói này không chỉ ám chỉ đến mã nguồn mà còn mở rộng ra các yếu tố khác như năng lực của đội ngũ phát triển, quy trình làm việc và văn hóa doanh nghiệp.
Mặc dù có thể tự hào về đội ngũ lập trình viên tài năng và kinh nghiệm, nhưng nếu các thành phần khác như quy trình làm việc và văn hóa công ty không đạt chuẩn, sản phẩm phần mềm cuối cùng sẽ khó tránh khỏi 'số phận' kém chất lượng. Điều này đặt ra một vấn đề phức tạp: liệu sự xuất sắc của nhân sự có thể tạo ra điều kỳ diệu, bất chấp những hạn chế khác?
Dù biết rằng những cá nhân ưu tú có khả năng đóng góp vào việc cải thiện quy trình và văn hóa, thực tế cho thấy rằng, việc thực hiện những thay đổi này thường đầy thách thức và không phải lúc nào cũng đạt được kết quả như mong đợi.
Sự không phù hợp về trở kháng
Đây là một chủ đề khác mà tôi đã viết trong bài “Một kỹ sư tệ hại của một công ty lại là một kiến trúc sư giỏi của công ty khác”.
Đôi khi, mọi người đơn giản là không hòa hợp tốt trong công ty. Người có thể tốt, công ty có thể tốt. Tuy nhiên, họ có thể hoạt động ở các bước sóng khác nhau, đánh giá những điều khác nhau và nhấn mạnh vào các lĩnh vực khác nhau.
Và đôi khi, đáng kinh ngạc khi thấy một người từng làm tệ trong một môi trường (tương đối tốt) lại phát triển mạnh mẽ trong một môi trường khác.
'Mismatch' - Thách thức không lường trước trong lĩnh vực Công nghệ
Trong bài viết 'Một kỹ sư không phù hợp tại một công ty, lại trở thành một kiến trúc sư xuất sắc ở một công ty khác', chúng tôi đã đề cập đến một vấn đề đầy thú vị.
Thực tế cho thấy, không phải lúc nào một cá nhân cũng có thể hòa nhập và phát triển trong mọi môi trường công ty. Dù cá nhân đó có năng lực và công ty đó có chất lượng tốt đến đâu, sự khác biệt về phương thức làm việc, giá trị cốt lõi và hướng phát triển có thể tạo ra một 'bức tường vô hình' ngăn cản sự phát triển của cả hai.

Điều đáng ngạc nhiên là, có những trường hợp một người không thể thể hiện hết khả năng của mình trong một môi trường được đánh giá là tốt, lại bất ngờ 'lột xác' một cách ngoạn mục khi chuyển sang một môi trường mới. Câu chuyện này nhấn mạnh tầm quan trọng của việc tìm kiếm và tạo dựng môi trường làm việc phù hợp với cá tính và năng lực của mỗi người, để từ đó họ có thể phát huy tối đa tiềm năng của mình.
Tiền... Tiền... Tiền
Được rồi... Được rồi... Tôi đã hiền lành và mềm mại trong hai phần trước. Bây giờ là lúc lôi ra những vũ khí lớn.
Chúng ta đang tiến gần đến con số 30 triệu kỹ sư phần mềm trên toàn thế giới. Vào khoảng năm 2000 là khoảng 5 triệu và vào năm 1980 là khoảng 1 triệu. (BTW. Đây là những con số gần đúng lấy từ nhiều nguồn khác nhau, vì vậy hãy chú ý tới tính chất ước lượng của chúng). Nếu quay lại năm 1960, số người làm việc liên quan đến kỹ thuật phần mềm (với một sự kết hợp lớn giữa kỹ thuật phần cứng) được đo lường trong hàng chục nghìn người.
Nhân một lúc từ 0 đến 30 triệu kỹ sư phần mềm chỉ trong 60 năm là một thành tựu đáng kinh ngạc. Nhưng thêm vào đó còn có quản lý sản phẩm, quản lý kỹ sư phần mềm, CNTT, Quản trị hoạt động, v.v. Thì con số và sự phát triển sẽ trở nên đáng kinh ngạc hơn nhiều.
Một thập kỷ 60 năm có thể trông như là một khoảng thời gian dài đối với một con người. Tuy nhiên, đó chỉ là một nhấp mắt từ quan điểm xã hội. Trong 60 năm này, ngành công nghiệp đã phát triển từ gần như không có gì đến với 30 triệu kỹ sư. À... Và 5 trong số 10 công ty có vốn hóa thị trường lớn nhất là các công ty phần mềm (với một số lượng phần cứng kèm theo).
Quay trở lại với các kỹ sư phần mềm kém.
Ngành công nghiệp phần mềm đã cuốn hút mọi thứ có thể di chuyển và gõ 'in ra “Xin chào thế giới!”'. Có hàng đống người đã bị mê hoặc bởi số tiền lớn đổ vào phần mềm (À... Tôi không trách những người này. Nếu ngày mai, lương trong thiên văn học trở thành $5 triệu/năm, tôi sẽ seriously xem xét bắt đầu học thêm về các loài ngoài hành tinh :) ).
Vấn đề là có hàng đống những người này không quan tâm đến phần mềm và không muốn học hỏi hoặc cải thiện (miễn là họ nhận được tiền lương).
Đằng Sau Màn Hình Mã: Câu Chuyện Về Tiền Bạc Và Đạo Đức Nghề Nghiệp Trong Lập Trình
Trong hai phần trước, chúng ta đã có những cuộc trò chuyện mang tính xây dựng và dễ chịu. Nhưng đã đến lúc để đào sâu vào những vấn đề quan trọng hơn.
Theo dữ liệu sơ bộ và tổng hợp từ nhiều nguồn, thế giới đang chứng kiến sự bùng nổ về số lượng kỹ sư phần mềm, với ước tính sắp chạm mốc 30 triệu người. Để so sánh, vào năm 2000, con số này chỉ khoảng 5 triệu và khoảng 1 triệu vào năm 1980. Mặc dù không chính xác 100%, những con số này vẫn phản ánh một xu hướng tăng trưởng đáng kinh ngạc trong ngành công nghiệp này. Nếu nhìn xa hơn, vào năm 1960, lượng người làm việc trong lĩnh vực kỹ sư phần mềm - khi đó còn kết hợp với kỹ sư phần cứng - chỉ được đếm bằng hàng chục nghìn.
Lưu ý, những con số trên chỉ bao gồm các kỹ sư phần mềm. Khi xét đến các ngành nghề liên quan khác như quản lý sản phẩm, quản lý kỹ sư phần mềm, công nghệ thông tin, vận hành,... thì bức tranh về sự phát triển số lượng và tốc độ tăng trưởng của lực lượng lao động trong ngành công nghệ thông tin sẽ càng ấn tượng hơn.

Trong bối cảnh thế giới biến đổi không ngừng, thời gian 60 năm có thể mở ra một chương mới hoàn toàn khác biệt cho nhân loại. Đối với một cá nhân, 60 năm là một khoảng thời gian dài, nhưng đối với toàn xã hội, đó chỉ là một khoảnh khắc ngắn ngủi. Ngành công nghiệp phần mềm từ một điểm khởi đầu khiêm tốn đã phát triển mạnh mẽ, đạt được con số ấn tượng là 30 triệu kỹ sư. Đáng chú ý hơn, trong số những tập đoàn có giá trị vốn hóa thị trường hàng đầu, phần lớn là các công ty công nghệ, nơi phần mềm và phần cứng đóng góp vào giá trị thực sự.
Tuy nhiên, cùng với sự phát triển không ngừng của ngành công nghiệp phần mềm, thách thức cũng dần xuất hiện, đặc biệt là về vấn đề chất lượng nguồn nhân lực. Mức lương hấp dẫn đã thu hút một lượng lớn người lao động đến chỉ vì động cơ kiếm tiền mà không thực sự đam mê hoặc mong muốn đóng góp cho lĩnh vực công nghệ thông tin. Điều này dẫn đến tình trạng nhiều cá nhân không thực sự đam mê và thiếu kiến thức cơ bản về lập trình vẫn có thể “lách” vào ngành chỉ bằng những kỹ năng nền tảng nhất như viết được dòng lệnh ‘print “Hello world!”’. Sự thực này không chỉ làm dấy lên quan ngại về chất lượng sản phẩm phần mềm mà còn là lời cảnh báo về tương lai của ngành công nghiệp nếu không tìm ra giải pháp kịp thời.
Mặc dù không thể phủ nhận sức hấp dẫn về mặt tài chính của ngành phần mềm, và không ai có thể trách cứ những người chọn theo đuổi lợi nhuận. Tuy nhiên, để ngành công nghiệp phần mềm tiếp tục phát triển bền vững, cần có sự cân nhắc và đầu tư nhiều hơn vào việc nâng cao kỹ năng và kiến thức cho nguồn nhân lực, từ đó tạo ra những sản phẩm công nghệ chất lượng cao, góp phần thúc đẩy sự tiến bộ của xã hội.

Những đau đớn từ sự phát triển
Và tiếp tục chủ đề về sự phát triển bùng nổ của ngành công nghiệp phần mềm.
Thật không may, nhiều người rơi vào lĩnh vực phần mềm mà không được chuẩn bị tốt cho nó. Một số sẽ đuổi kịp, nhưng nhiều người chỉ đang lặn lội và chuyển từ công ty này sang công ty khác, để lại dấu vết của những vấn đề sau lưng.
Còn một điều nữa được gây ra bởi sự phát triển nhanh chóng này.
Khi công ty phát triển thực sự nhanh chóng, điều đó thường gây hậu quả khá tồi tệ cho bộ phận kỹ thuật. Nếu bạn không có đủ người chủ chốt làm việc tốt và có thể chia sẻ/bảo trì/áp dụng các phương pháp tốt nhất, bạn sẽ nhanh chóng đến một nơi mà mọi thứ đều được chấp nhận. Và chất lượng mọi thứ sẽ giảm đi rất nhanh.
Cũng chính với ngành công nghiệp nói chung đã xảy ra tình trạng tương tự. Sự phát triển diễn ra quá nhanh, trong khi nhiều phương pháp tốt nhất thậm chí còn chưa được áp dụng đầy đủ. Thực ra, quan trọng hơn là áp dụng, nhiều phương pháp tốt nhất thậm chí còn chưa được đồng thuận.
Kết Quả Của Sự Phát Triển: Mọi Người (Bao Gồm Cả Tôi) Thường Xuyên Phát Minh Lại Những Bánh Xe Đã Tồn Tại, Vấp Ngã Và Đứng Lên Chỉ Để Khám Phá Ra Những Điều Nên Được Dạy Ngay Từ Năm Đầu Tiên Ở Đại Học Cho Những Người Bước Nhập Ngành Của Chúng Tôi.
Đau Đớn Từ Sự Phát Triển: Cái Giá Của Sự Tăng Trưởng Nhanh Chóng Trong Ngành Công Nghệ Thông Tin
Trong bối cảnh ngành công nghiệp phần mềm phát triển với tốc độ chóng mặt, một vấn đề nổi lên là nhiều người khi bước vào lĩnh vực này không được chuẩn bị kỹ lưỡng. Trong khi một số có thể thích nghi nhanh chóng và bắt kịp xu hướng, thì đa số chỉ duy trì và liên tục chuyển việc từ công ty này sang công ty khác, để lại sau lưng một chuỗi vấn đề chưa được giải quyết.
Một Hậu Quả Khác Của Sự Phát Triển Nhanh Chóng Này Là Sự Suy Giảm Chất Lượng Kỹ Thuật. Khi Một Tổ Chức Phát Triển Rất Nhanh, Điều Này Thường Gây Hậu Quả Khá Tồi Tệ Cho Bộ Phận Kỹ Thuật. Nếu Không Có Đủ Nhân Sự Chủ Chốt Với Năng Lực Và Kỹ Năng Cần Thiết Để Chia Sẻ, Bảo Trì Và Thực Thi Các Quy Định Và Phương Pháp Làm Việc Tốt Nhất, Tình Trạng 'Tùy Tiện' Sẽ Trở Nên Phổ Biến.
Ngành Công Nghiệp Đã Chứng Kiến Sự Phát Triển Nhanh Chóng, Diễn Ra Quá Nhanh Chóng Mà Không Kịp Tiếp Nhận Những Phương Pháp Tốt Nhất. Điều Này Dẫn Đến Tình Trạng Nhiều Quy Trình Và Phương Pháp Vận Hành Chưa Được Thống Nhất Rộng Rãi, Thậm Chí Là Chưa Được Áp Dụng Đúng Mức.
Kết Quả Là, Không Ít Cá Nhân Trong Ngành, Bao Gồm Cả Tôi, Liên Tục Tìm Kiếm Và 'Phát Minh' Lại Những Giải Pháp Đã Có, Chỉ Để Trải Qua Không Ít Thất Bại Và Thành Công Chỉ Để Nhận Ra Rằng Những Kiến Thức Và Kỹ Năng Cần Thiết Này Lẽ Ra Đã Được Trang Bị Từ Những Năm Đầu Tiên Của Quá Trình Đào Tạo Đại Học.
Sự Không Đồng Đều Trong Ngành
Viết phần mềm cho Voyager 1 có bao nhiêu điểm tương đồng so với việc tạo ra một đoạn mã nhanh chóng để dọn dẹp dữ liệu trên dự án sở thích của bạn?
Điều đầu tiên (Voyager) đòi hỏi tồn tại qua nhiều thập kỷ, làm việc trên phần cứng cực kỳ hạn chế, và cần được tài liệu hóa, đánh giá, xem xét lại và xem xét lại một lần nữa.
Một cái khác có thể chỉ là một mớ lộn xộn, được tạo ra trong vòng 15 phút, thực thi một lần và sau đó bị bỏ đi. Và nó thực sự có thể chạy trên một thiết bị cực kỳ mạnh mẽ và sẽ không được tài liệu hóa, xem xét, và vân vân.
Phần mềm có vẻ như giống nhau khi nhìn từ góc độ toàn diện. Tuy nhiên, sự thật là công nghệ không phải là một ngành đồng nhất theo bất kỳ cách nào.
Những bài học quý báu học được trong một lĩnh vực của thị trường phần mềm có thể gây hại trong lĩnh vực khác. Kết quả là, các kỹ sư chuyển sang các ngành công nghiệp liền kề có thể mang lại những bài học sai lầm.
Sự Đa Dạng Trong Ngành Công Nghệ Thông Tin
Việc phát triển phần mềm cho Voyager 1 có sự khác biệt hoàn toàn so với việc viết một đoạn script đơn giản để xử lý dữ liệu trong một dự án cá nhân.
Dự án Voyager 1, một sứ mệnh vũ trụ lịch sử, yêu cầu phần mềm của nó phải hoạt động một cách bền bỉ qua hàng thập kỷ trong điều kiện hạn chế về phần cứng. Điều này đòi hỏi một quy trình phát triển phần mềm nghiêm ngặt, bao gồm việc tài liệu hóa cẩn thận, thông qua nhiều vòng đánh giá và kiểm duyệt liên tục để đảm bảo mọi thành phần hoạt động chính xác và hiệu quả.
Trái ngược lại, việc viết một đoạn script nhỏ để xử lý dữ liệu cho một dự án cá nhân có thể không đòi hỏi đến mức độ chuẩn mực như vậy. Script này có thể được viết nhanh chóng, thực thi một lần và sau đó không còn giá trị sử dụng, không yêu cầu tài liệu hóa hoặc đánh giá kỹ lưỡng. Khả năng chạy trên một cấu hình máy tính mạnh mẽ giúp nó dễ dàng xử lý dữ liệu mà không cần tối ưu hóa đến mức cao.
Điều này phản ánh sự đa dạng trong lĩnh vực công nghệ thông tin, từ những ứng dụng đòi hỏi độ phức tạp và độ tin cậy cao đến những nhu cầu thông thường với mục đích cải thiện hiệu quả công việc cá nhân.
Nhìn từ độ cao 30.000 feet, các sản phẩm phần mềm có vẻ không có nhiều khác biệt. Tuy nhiên, thực tế lại cho thấy ngành công nghệ thông tin là một lĩnh vực đa dạng và phức tạp.
Trong một môi trường đa dạng như thế, những kinh nghiệm và bài học quý báu tích lũy ở một phân khúc có thể trở nên không phù hợp hoặc thậm chí gây hại khi áp dụng vào một phân khúc khác. Điều này đặt ra thách thức cho các kỹ sư phần mềm khi họ chuyển từ ngành này sang ngành khác, ngay cả khi hai ngành đó có vẻ liền kề hoặc tương tự nhau, họ có nguy cơ áp dụng những giải pháp và bài học không phù hợp với hoàn cảnh mới.

Tóm Lược
Đầu tiên, tôi nghĩ rằng những nguyên nhân lớn nhất gây ra kết quả tồi tệ không phải là do kỹ sư phần mềm kém, mà là do các công ty kém chất lượng.
Tuy nhiên, ngay sau những công ty kém chất lượng, có những người không có hứng thú gì với bất kỳ cải thiện nào (và không bỏ công sức vào) và tham gia vào lĩnh vực phần mềm chỉ vì một mức lương lớn hơn.
P.S. Có một điểm bổ sung hay từ Vivek rằng có vấn đề về động lực. Tôi nghĩ rằng nhiều người đã gia nhập ngành phần mềm chỉ vì tiền có thể hạnh phúc với mức lương thấp hơn của thị trường phần mềm. Và có thể quá phiền toái để đầu tư nhiều thời gian và năng lượng vào việc học thêm (để có được một mức tăng lương đủ lớn để làm cho việc đó trở nên thú vị).
Tổng Kết
Trước hết, cần phải nhận biết rằng, những kết quả không mong muốn thường bắt nguồn từ các tổ chức kém chất lượng chứ không phải từ các kỹ sư kỹ thuật thiếu kỹ năng.
Tuy vậy, ngay sau đó, chúng ta lại thấy sự hiện diện của một nhóm người thiếu sự quan tâm đến việc nâng cao trình độ chuyên môn hoặc không sẵn lòng đóng góp công sức thực sự mà chỉ tham gia vào lĩnh vực công nghệ thông tin với mục tiêu kiếm được một khoản lương cao hơn mức bình thường.
P.S. Tôi cũng muốn nhấn mạnh một ý kiến thú vị từ Vivek về động lực cá nhân. Có vẻ như một bộ phận không nhỏ những người tham gia vào ngành này với mục đích tài chính có thể dễ dàng chấp nhận một mức lương không cao trong ngành, bởi việc đầu tư thêm thời gian và năng lượng để học hỏi và phát triển bản thân, nhằm đạt được những cơ hội lương bổng hấp dẫn hơn, có thể được xem là một thách thức quá lớn đối với họ.