Kĩ năng và tiến bộ
Cái nhìn truyền thống của đào tạo về Khoa học máy tính là phát triển người lập trình để viết mã và sửa lỗi. Phần lớn những người lập trình KHÔNG gặp khách hàng, KHÔNG kiến trúc hay thiết kế hệ thống, KHÔNG viết yêu cầu, hay viết trường hợp kiểm thử tự động mà chỉ viết mã. Cái nhìn này bây giờ là LẠC HẬU vì viết mã chỉ là một phần nhỏ của toàn bộ việc phát triển phần mềm. Ngày nay, người phần mềm tốt nghiệp từ Khoa học máy tính hay Kĩ nghệ phần mềm phải làm nhiều thứ HƠN việc lập trình. Tuỳ theo chỗ họ làm việc, liệu đó là công ty nhỏ hay lớn, việc đào tạo của họ có thể thực sự tạo ra khác biệt trong thành công hay thất bại của họ.
Trong công ty nhỏ, người làm phần mềm phải làm nhiều điều khi được yêu cầu. KHÔNG thể nào chỉ viết mã hay kiểm thử được. Các công ty nhỏ cần người phần mềm có khả năng làm bất kì cái gì cần thiết để giúp cho dự án thành công. Đó là lí do tại sao hầu hết các công ty nhỏ đều thà thuê người kĩ sư phần mềm hơn là sinh viên khoa học máy tính bởi vì họ biết về việc đào tạo cho các bằng cấp này. Nhân tố then chốt trong công ty nhỏ là sự linh hoạt và nhanh nhẹn của người phần mềm.
Công ty lớn tổ chức qui trình phát triển thành các khu vực đặc biệt cho nên họ ưa thích thuê các chuyên gia có kinh nghiệm. Việc làm của họ thường yêu cầu nhiều năm kinh nghiệm trong khu vực đặc biệt như Kiến trúc sư phần mềm, Kĩ sư yêu cầu, Người phân tích nghiệp vụ, Người kiểm thử phần mềm, Chuyên viên đảm bảo chất lượng v.v. Trong trường hợp này, mọi việc đều đặc biệt hội tụ vào chuyên môn. Chẳng hạn Kiến trúc sư thiết kế; Người lập trình viết mã; Người lãnh đạo kĩ thuật quản lí người lập trình; Người quản lí dự án lập kế hoạch và giám sát hoạt động dự án. Nhân tố then chốt trong công ty lớn là phân biệt vai trò, trách nhiệm và đảm nhiệm.
Tính linh hoạt và vai trò đôi khi tạo ra vấn đề cho người phần mềm. Một người đã làm tốt trong công ty lớn có thể KHÔNG cảm thấy thoải mái trong công ty nhỏ và ngược lại. Theo cảnh quan giáo dục và đào tạo, tôi tin mọi sinh viên phần mềm trước hết phải học khái niệm nền tảng về phát triển phần mềm hay lập trình (viết mã và sửa lỗi). Sau khi làm chủ lập trình, sinh viên cũng phải học các kĩ năng hỗ trợ như Kiểm thử, Quản lí cấu hình, Đảm bảo chất lượng, Làm tài liệu, Phân tích yêu cầu. Thực tế đó là những kĩ năng hỗ trợ tạo ra sự khác biệt giữa người lập trình và người phát triển. Người phát triển có cái nhìn rộng hơn nhiều và có khả năng thấy toàn thể quá trình phát triển. Người lập trình chỉ viết mã và kiểm thử công việc của họ có cái nhìn hẹp hơn nhiều và KHÔNG biết qui trình phát triển. Đào tạo kĩ sư phần mềm đi xa hơn vào toàn thể hệ thống bằng việc hiểu vấn đề doanh nghiệp, giải pháp kiến trúc và thiết kế, lựa chọn phần cứng thích hợp và trên hết tất cả, họ cũng hiểu khía cạnh quản lí của dự án phần mềm.
Bởi vì sự khác biệt trong chương trình và đào tạo, một số sinh viên làm tốt hơn những người khác. Người lập trình tốt có thể KHÔNG phải là người phát triển phần mềm tốt. Viết mã là quan trọng nhưng không đủ dưới dạng phát triển phần mềm. Người phát triển tốt có thể KHÔNG phải là người có thể giải quyết được vấn đề doanh nghiệp. Biết thiết kế và viết mã là bản chất nhưng không thích hợp dưới dạng giải quyết vấn đề doanh nghiệp. Điều quan trong với sinh viên là hiểu các chương trình đào tạo khác nhau, điều họ bao quát và lựa chọn chương trình thích hợp. Nhiều giáo sư hàn lâm tranh cãi rằng chương trình bậc đại học hiện thời phải dạy nhiều chủ đề thế, sinh viên phải học nhiều môn thế nên đào tạo thêm về phát triển phần mềm là quá nhiều. Tốt hơn cả là để người lập trình viết mã và thuê người khác, người có nhiều kinh nghiệm hơn làm các hoạt động khác. Tôi KHÔNG đồng với cách nhìn đó bởi vì nó giới hạn sinh viên vào kĩ năng tầm thường và cách li họ với mọi thứ trong phát triển phần mềm. Ngày nay, công nghệ thay đổi nhanh thế, có cảnh quan hẹp sẽ làm hại cho họ nhiều hơn là giúp họ để tiến vào chuyên nghiệp phần mềm. Ngày nay, công nhân phần mềm phải hiểu công việc của khách hàng và người dùng. Họ phải giúp khách hàng giải quyết các vấn đề. Nếu nhà trường không dạy những kĩ năng này thì điều quan trọng đối với công nhân phần mềm là đi đào tạo thêm về quản lí cấu hình, đảm bảo chất lượng hay hỗ trợ kĩ thuật v.v.
Một số sinh viên KHÔNG muốn là người phát triển phần mềm hay kĩ sư phần mềm. Họ chỉ muốn là người lập trình vì họ thích viết mã và học C, C++. Java, Dot.Net, Network, J2EE v.v. Tất nhiên, họ có thể tìm được việc làm nhưng tương lai của họ bị rất giới hạn. Họ có thể học kĩ năng thêm tại công ty của mình, vì họ có kinh nghiệm họ có thể chuyển từ người lập trình sang người phát triển nhưng điều đó mất thời gian. Công nghiệp phần mềm đang thay đổi nhanh chóng bởi vì công nghệ thay đổi nhanh chóng. Công nhân phần mềm không theo kịp những thay đổi này có thể bị tụt lại sau. Công nhân phải bắt kịp với công nghệ mới để nhận diện cơ hội và xác định cách các công nghệ này tác động tới việc làm của họ. Nếu họ không làm như vậy, họ có thể bị ra ngoài công việc.
Ngày nay một số người lập trình vẫn kiếm sống tốt chỉ bằng việc viết mã nhưng việc làm lập trình sẽ thay đổi khi người lập trình từ các nước có chi phí thấp hơn đang đi vào trong thị trường này và cạnh tranh. Vài năm trước, có nhiều người lập trình ở Mĩ và châu Âu nhưng khi những người lập trình từ Ấn Độ và Trung Quốc vào thị trường này, phần lớn trong họ hoặc đổi việc làm hoặc phải học kĩ năng mới để vẫn còn được thuê. Ngày nay, người lập trình Ấn Độ và Trung Quốc sợ mất việc cho các nước có chi phí thấp như Nam Mĩ và châu Phi. Tôi đã thấy nhiều người lập trình từ các nước như Chile, Argentina, Nicaragua, Nigeria, Congo, và Kenya cạnh tranh thành công với Ấn Độ và Trung Quốc khi họ làm quãng 20% của điều người lập trình trung bình ở Trung Quốc làm.
Tôi tin hoặc bạn học bây giờ hoặc học về sau nhưng bạn không thể dừng lại với cùng một kĩ năng mãi mãi được. Thế giới đang thay đổi nhanh chóng và nếu bạn KHÔNG đi cùng nó, bạn sẽ bị tụt lại sau. Ngày nay khi những công nghệ mới như dùng các bộ xử lí đa lõi và lai, tính toán ảo hoá và “kết cấu” (các bộ xử lí nối kết qua mạng), kết mạng xã hội, tính toán mây, công nghệ Web, tính toán phổ cập, tính toán ngữ cảnh, thực tại gia tăng (dữ liệu do máy tính sinh ra và dữ liệu thế giới thực hỗn hợp), và ngữ nghĩa nâng cao (ngôn ngữ phần mềm được gán nghĩa) đã làm thay đổi công nghiệp phần mềm rất nhiều khi so sánh chỉ tròn hai năm. Chẳng mấy chốc nhiều công ty sẽ bắt đầu với tính toán ảo hoá và mây, công ty phần mềm hay bộ phận CNTT vận hành theo cách truyền thống sẽ KHÔNG có khả năng cạnh tranh, người lập trình có kĩ năng hầu hết để viết mã trong Pascal hay C sẽ không có khả năng tìm được việc.
Vì công nghệ vẫn cứ thay đổi ngày một nhanh chóng hơn mọi năm, bạn phải tiếp tục học điều mới để đáp ứng cho nhu cầu thị trường. Trong tương lai rất gần, những thứ như Ruby, Ajax, Enterprise 2.0, Web 2.0, SEO, Phần mềm xã hội, Mô hình tiêu thụ, Phần mềm như dịch vụ (Saas), Tính toán mây, Hướng ngữ cảnh sẽ là thông dụng như C++, Java, Dot.Net, hay J2EE ngày nay vì môi trường làm việc tiếp tục thay đổi và trở nên phức tạp hơn. Tất cả những điều này đã thêm vào điều người phát triển phần mềm trung bình phải biết. Trong tương lai rất gần, người phát triển phần mềm phải làm việc chặt chẽ với doanh nghiệp bởi một phần của doanh nghiệp tương tác với phần khác của doanh nghiệp. Họ phải hiểu khái niệm về Quản lí quan hệ khách hàng (CRM), Lập kế hoạch tài nguyên doanh nghiệp (ERP), và Quản lí dây chuyền cung cấp (SCM) vì điều này phải được quản lí tại mức chương trình hay tuyển tập chương trình. Đó là lí do tại sao để thành công, sinh viên cần chấp thuận việc học cả đời và tiếp tục học những điều mới khi chúng tới.
Tác phẩm, tác giả, nguồn
- Tác phẩm: Xu hướng khoa học công nghệ toàn cầu
- Nguồn: Blog của giáo sư John Vu, Carnegie Mellon University.
- Wiki hóa: https://kipkis.com