Công nghiệp phần mềm

Toàn cầu hoá đòi hỏi các công ty phần mềm phải có sản phẩm chất lượng với chi phí thấp và xu hướng này tạo ra nhiều cạnh tranh trong các công ty. Theo nghiên cứu gần đây, quãng 75% thị trường phần mềm bị chi phối bởi bốn công ty: Microsoft, Oracle, IBM và SAP. Để sống còn, công ty phải hội tụ vào năng lực của mình để tăng tính hiệu quả, đưa ra sản phẩm trong thời gian ngắn hơn, và giảm chi phí mà không hi sinh chất lượng. Có nhiều cách để làm điều đó, một số công ty khoán ngoài phát triển phần mềm cho các nước chi phí thấp nơi công nhân sẵn lòng làm việc nhiều giờ với lương thấp. Điều này có thể hạ thấp chi phí của họ nhưng không đảm bảo chất lượng. Cách hạ thấp chi phí khác là tái kĩ nghệ các qui trình của họ, khử bỏ các hoạt động không cần thiết, dùng công cụ tốt hơn và thuê những kĩ sư phần mềm giỏi nhất để làm việc cho họ.

Vài năm trước, Watts Humphrey, một nhà khoa học tại Đại học Carnegie Mellon University đã thấy rằng sinh viên được đào tạo về kĩ nghệ phần mềm có thể thực hiện ít nhất 10 lần tốt hơn sinh viên được đào tạo trong khoa học máy tính hay đào tạo lập trình. Quan sát này dẫn tới nỗ lực của ông ấy để hiểu rõ hơn sự khác biệt giữa hai chương trình đào tạo này và cuối cùng đã phát triển thành một mô hình có tên là Mô hình trưởng thành năng lực phần mềm - Software Capability Maturity Model (SW-CMM). Mô hình này được dùng để đo năng lực của tổ chức phần mềm cũng như các thực hành mà người làm phần mềm phải tuân theo để phát triển phần mềm có chất lượng. Có nhiều nghiên cứu xác nhận ích lợi của mô hình này và áp dụng của qui trình kĩ nghệ phần mềm, điều có thể tạo ra kết quả lớn. Vậy mà nhiều công ty phần mềm vẫn bỏ qua mô hình này và nhiều đại học tiếp tục hội tụ vào việc dạy lập trình thay vì các môn kĩ nghệ phần mềm. Có "thái độ tiêu cực" hướng tới việc tuân theo qui trình phần mềm bởi hầu hết những người lập trình được huấn luyện trong Khoa học máy tính. Nhiều người phàn nàn về chi phí và chậm trễ liên kết với việc tuân theo qui trình và những giới hạn nó đặt lên tính sáng tạo cá nhân. Nhiều người lập trình Khoa học máy tính coi bản thân mình là "nghệ sĩ" có tự do sáng tạo phần mềm theo cách họ muốn và phần mềm là "nghệ thuật" chứ không phải là "khoa học." Người kĩ sư phần mềm chỉ ra việc cải tiến trong năng suất và chất lượng được thấy từ việc tuân theo qui trình được xác định tốt và coi phần mềm là "khoa học’ chứ không phải là "nghệ thuật." Với việc nhận ra ích lợi kinh doanh, nhiều kĩ sư phần mềm bằng cách nào đó bị người khác chê cười do quan niệm rằng việc tuân theo qui trình được xác định làm chậm việc phát triển phần mềm hay giới hạn tính sáng tạo. Họ chỉ ra các công ty đã thành công đạt tới SW-CMM mức cao báo cáo việc thu hồi vốn đầu tư tốt (ROI) điều nảy sinh trong việc giảm lãng phí, cho phép các kĩ sư của họ dành nhiều thời gian hơn cho việc phát triển sản phẩm chất lượng cao. Chẳng hạn, kết quả từ các kĩ sư phần mềm trên tầu con thoi khớp sát với kết quả có ý nghĩa của Boeing và nhiều công ty khác. Vâng, nhiều người lập trình vẫn còn không bị động chạm bởi những kết quả này và nhiều đại học cũng bỏ qua sự kiện rằng có nhu cầu cao về kĩ năng kĩ nghệ phần mềm trong công nghiệp phần mềm. Ngày nay tranh cãi giữa hai quan điểm: Kĩ nghệ phần mềm và Khoa học máy tính vẫn còn diễn ra trên các phòng chat internet, và bên trong cộng đồng hàn lâm.

Sau hơn 30 năm làm việc trong công nghiệp phần mềm, tôi thấy rằng mối quan hệ giữa công ty và khách hàng của nó là nhân tố chính đóng góp cho sự khác biệt giữa hai cách nhìn này. Trong các công ty phần mềm truyền thống, người lập trình được để tách rời khỏi người dùng bằng nhiều tầng những người quản lí, bán hàng và tiếp thị ở giữa. Lí do then chốt là mối bận tâm về cấp quản lí mất quyền điều khiển và nhu cầu giữ người lập trình hội tụ vào mỗi việc viết mã. (Đào tạo khoa học máy tính hội tụ hầu hết vào viết mã mà ít đào tạo về quan hệ khách hàng hay qui trình kinh doanh nghiệp vụ). Tuy nhiên, nhiều công ty phần mềm tiên tiến hiểu tầm quan trọng của sự hài lòng của khách hàng và muốn kĩ sư phần mềm của họ được tích hợp đầy đủ với người dùng để hiểu các yêu cầu của họ. Theo cách nhìn của họ, công nghệ có thể làm giảm thời gian, giảm chi phí và bằng việc có nhiều người ở giữa có thể làm chậm mọi thứ lại. (Người kĩ sư phần mềm được đào tạo trong kĩ nghệ yêu cầu và quan hệ khách hàng cho nên điều tự nhiên với họ là hoàn thành vai trò này). Khi công nghệ tăng trưởng về độ phức tạp, thách thức của việc làm việc chặt chẽ với khách hàng và người dùng tăng tầm quan trọng của nó và những công ty phần mềm tiên tiến nhất bây giờ đang thuê kĩ sư phần mềm thay vì người tốt nghiệp khoa học máy tính. Nhiều công ty phần mềm truyền thống vẫn tin rằng khách hàng không biết mấy về công nghệ, việc hiểu yêu cầu sản phẩm bằng cách cho phép người lập trình gặp họ có thể tạo ra vấn đề và làm mất số bán cho nên có những lí do để duy trì khoảng cách giữa người lập trình và khách hàng. Các công ty tiên tiến chỉ ra cùng điều này nhưng khẳng định rằng điều này chứng tỏ nhu cầu cần được tích hợp đầy đủ vào qui trình khách hàng để đảm bảo hài lòng cao trong tương lai. Họ thúc đẩy việc dùng nhiều phương pháp agile trong phát triển phần mềm và đầu tư vào quan hệ khách hàng. Họ tin cậy vào việc dùng các qui trình được xác định của kĩ sư phần mềm để giữ các hoạt động phát triển trong kiểm soát. Ngày nay, tranh cãi giữa hai quan điểm này vẫn còn diễn ra chưa thấy chấm dứt.

Vừa là giáo sư đại học và nhà chuyên nghiệp phần mềm, tôi tin rằng phần mềm là "khoa học," không phải là "nghệ thuật." Việc dùng các phương pháp khoa học, toán học, quản lí rủi ro, kiến trúc, các bài học rút ra, và việc áp dụng qui trình là sự khác biệt then chốt giữa chương trình đào tạo kĩ nghệ phần mềm và khoa học máy tính. Kĩ sư phần mềm được đào tạo để chia việc lớn thành nhiều nhiệm vụ nhỏ và các nỗ lực. Nỗ lực và nhiệm vụ có thể được phân lớp hoặc, "Chúng ta đã làm điều này," hoặc "Điều này là việc mới." Với kỉ luật kĩ nghệ cho việc sử dụng qui trình và dữ liệu, người kĩ sư phần mềm có thể thúc bẩy công việc của người khác cũng như kinh nghiệm riêng của họ để xây dựng nền tảng của "cấu phần dùng lại được." Với những kĩ năng về kiến trúc và tích hợp hệ thống, họ có thể lắp ráp các cấu phần dùng lại thành sản phẩm mới nhanh hơn, tốt hơn và rẻ hơn. Khi họ phạm sai lầm hay khi kết quả khác với trông đợi, họ để thời gian để hiểu căn nguyên và tuân theo qui trình để làm giảm xác suất các vấn đề tương tự trong tương lai. Những bài học được rút ra này giúp người khác không phạm cùng sai lầm và cải tiến chất lượng sản phẩm phần mềm một cách có ý nghĩa. Bằng việc tuân theo qui trình dựa trên phương pháp thống kê, người kĩ sư phần mềm có thể khử bỏ nhiều lỗi bằng việc hiểu sự khác biệt giữa các nguyên nhân thông thường so với đặc biệt và cải tiến cơ hội thiết kế, xây dựng sản phẩm chất lượng cao. Điều không may là nhiều người lập trình không được đào tạo về phương pháp kĩ nghệ, kiến trúc, tích hợp, quản lí rủi ro, kiểm soát qui trình thống kê, cách đo và phân tích căn nguyên. Người lập trình có xu hướng nhằm vào việc tăng độ phức tạo như nhân tố đóng góp cho chất lượng kém của sản phẩm và phàn nàn rằng với các dự án lớn, nhiều sức ép bị đặt lên công việc của họ, yêu cầu họ làm nhiều giờ hơn.

Không có tri thức về toàn cầu hoá và đòi hỏi về tốc độ, các công ty phần mềm truyền thống có xu hướng tạo ra cấu trúc tổ chức cứng nhắc để đảm bảo công việc được thực hiện. Có những tuyến thẩm quyền và kiểm soát rõ rệt để đảm bảo không ai làm việc trên những thứ khác hơn điều hiện thời đã được phân công. Người quản lí sẽ hội tụ vào lập kế hoạch, lên lịch biểu, ngân sách, và chỉ đạo mọi người; người lập trình sẽ hội tụ vào viết mã, kiểm thử và làm tài liệu. Không may là nhiều người quản lí không được huấn luyện về khía cạnh quản lí dự án phần mềm. Một số là người lập trình giỏi được đề bạt lên quản lí. Một số bắt nguồn từ các trường kinh doanh và tài chính mà không có tri thức về phần mềm. Không được đào tạo thêm về phần mềm, nhiều người sẽ phải vật lộn với gánh nặng ước lượng, điều phối và đáp ứng đòi hỏi của khách hàng và những sức ép này sẽ đưa nhiều dự án tới thất bại. Các công ty phần mềm tiên tiến biết cách xây dựng lực lượng lao động của họ bằng những kĩ sư phần mềm được đào tạo tốt và có phẩm chất tốt. Họ tuyển lựa các kĩ sư từ các đại học nổi tiếng và cộng tác với các đại học theo nhu cầu của họ. Bằng việc có các kĩ sư có kĩ năng duy nhất bổ sung cho nhau, các công ty này thường có các tổ công tác tự quản, có khách hàng tham gia và nhỏ. Họ thúc bẩy các công nghệ và công cụ hiện đại, nhưng điều quan trọng nhất là họ thúc bẩy các hoạt động tổ để tất cả cùng làm điều đó. Họ nghĩ rằng việc tích hợp như vậy của các tổ nhỏ đưa tới kết quả nhanh hơn với sản phẩm đáp ứng nhu cầu khách hàng. Bằng việc áp dụng các phương pháp khoa học như phân tích căn nguyên, kiểm soát qui trình thống kê, họ có thể giảm sai lầm bởi vì nguyên nhân của lỗi đã được khử bỏ ra ngoài hệ thống. Đây là lí do tại sao phương pháp agile đi đôi với kiểm soát qui trình thống kê có thể có ích lợi cho cả công ty cũng như khách hàng của họ.

Tác phẩm, tác giả, nguồn

  • Tác phẩm: Doanh nghiệp và khởi nghiệp
  • Nguồn: Blog của giáo sư John Vu, Carnegie Mellon University.
  • Wiki hóa: https://kipkis.com