06 Jan, 2021
Nhu cầu kỹ sư phần mềm
Hiện nay có nhu cầu rất lớn về người làm phần mềm trên toàn cầu. Ở Mĩ rất khó thuê được kĩ sư phần mềm tại các thành phố chính như San Jose, Boston, Seattle hay New York.
Ở Ấn Độ, thậm chí còn khó thuê hơn mặc dầu Ấn Độ cho tốt nghiệp trên 300,000 người làm phần mềm mỗi năm nhưng chỉ ít hơn 20 phần trăm số họ sẽ có việc làm do hệ thống giáo dục quá lỗi thời ở đó. Phần lớn các công ti hàng đầu Ấn Độ đều thuê những người giỏi nhất từ các trường có tiếng chỉ vài ngày sau khi họ nhận được bằng tốt nghiệp. Ở châu Âu nơi những người tốt nghiệp hàng đầu được các công ti lớn thuê từ nhiều tháng trước khi họ tốt nghiệp. Dựa trên nghiên cứu của tôi và bản đánh giá chuẩn được tiến hành trong năm 2006, khoảng 20% những người làm phần mềm vừa tốt nghiệp sẽ được thuê ngay lập tức nhưng phần còn lại quãng 80 phần trăm người làm phần mềm sẽ không tìm được việc làm bởi vì họ không có kĩ năng mà công nghiệp đòi hỏi. Kết quả là ngành công nghiệp phần mềm đang lâm vào những vấn đề lớn bởi vì có thiếu hụt trầm trọng người làm phần mềm có tài.
Lí do là điều sinh viên học trong lớp thường không khớp đúng với nhu cầu đòi hỏi của công nghiệp, ngay cả ở nhiều trường đang bắt đầu cung cấp bằng Khoa học máy tính hay thậm chí giáo trình Kĩ nghệ phần mềm. Theo cảnh quan nghiệp vụ, đa số người học khoa học máy tính không có kĩ năng cần thiết ngày nay bởi vì giáo trình chỉ tập trung vào ngôn ngữ lập trình và chỉ tạo ra người lập trình hay người kiểm thử tốt nhưng công nghiệp hiện nay đòi hỏi hơn thế nhiều. Các công ti phần mềm hàng đầu thường không muốn những người tốt nghiệp ngành khoa học máy tính bởi vì họ không có những kĩ năng cho các dự án phức tạp mà phần lớn các dự án phần mềm ngày nay lại rất lớn và phức tạp với vài triệu dòng lệnh. Chương trình Khoa học máy tính điển hình nhấn mạnh vào toán học phần lõi cứng và lí thuyết với một số tri thức lập trình. (Bao nhiêu dòng lệnh sinh viên đã viết trong chương trình Khoa học Máy tính?) Khi sinh viên khoa học máy tính tốt nghiệp ra trường, 95 phần trăn không hề biết gì hay nghe nói gì về các yếu tố giải quyết trường hợp sử dụng, chưa bao giờ viết hay đọc tài liệu yêu cầu, và không có bất kì kĩ năng mềm nào hay hiểu biết về qui trình nghiệp vụ.
Tại sao lại có vấn đề này? Lý do giản dị là điều các trường dạy thường bị ảnh hưởng bởi các nghiên cứu mà các giáo sư đã học khi họ làm luận án tiến sĩ của mình. Trong cuộc nghiên cứu về tình trạng giáo dục ở châu Âu, tôi nhận thấy phần lớn các giáo sư đều tốt nghiệp từ những năm 60 và điều họ học thì hoặc đã lạc lậu hoặc không còn hữu dụng do sự thay đổi nhanh chóng trong công nghệ. Hệ thống giáo dục châu Âu dựa trên hệ thống cấp bậc nơi người ta càng dạy lâu, càng có vị trí vững chắc hơn, kết quả là đại đa số các giáo sư đã từng dạy trong ba mươi hay bốn mươi năm nay vẫn dùng cùng sách và kĩ thuật họ đã học từ nhiều năm trước – Đó là lí do tại sao ở châu Âu, công nghiệp phần mềm không đóng vai trò quan trọng như so với Mĩ hay châu Á. Ngày nay nhiều công ti hàng đầu châu Âu đang thuê các kĩ sư Trung Quốc và Ấn Độ thay vì người của riêng họ. Tất nhiên có nhiều giáo sư giỏi, canh tân và hiểu biết ở châu Âu nhưng họ phải đợi đến lượt mình trong đại học bởi vì trong hệ thống hàn lâm này, nhiều giáo sư không chịu về hưu hay bị buộc phải về hưu. Hệ thống hàn lâm này không thưởng công cho các giáo sư dành thời gian nghiên cứu cho các vấn đề với công nghệ hiện thời hay để có kinh nghiệm trong công nghiệp. Kết quả là nhiều sinh viên tốt nghiệp với cái nhìn thiển cận về phần mềm và hệ thống. Nhiều người không có manh mối về ngôn ngữ và hệ thống của họ làm gì và nghĩ rằng việc lặp đi lặp lại những dòng lệnh trên thư viện mà ai đó đã viết là tất cả mọi thứ để phát triển phần mềm.
Làm sao để giải quyết vấn đề này? Tôi mạnh mẽ tin tưởng rằng điều chúng ta cần là mở rộng khoa học máy tính cho phạm vi rộng hơn bằng việc bổ sung thêm các bài giảng thực hành trong các lĩnh vực như kinh doanh điện tử, tự động hoá nghiệp vụ, chính phủ điện tử, thiết kế CAD/CAM, công nghệ tác động tính toán có liên quan và trong trò chơi và người máy. Chẳng hạn, sinh viên mua một người máy cá nhân cùng với sách giáo khoa, mà họ sẽ học để lập trình và chơi như một phần khởi đầu của họ vào bộ môn này, ít nhất họ cũng thấy rằng cách tiếp cận đó hấp dẫn hơn nhiều so với điều như ghi nhớ mọi công thức và lí thuyết trong sách giáo khoa.
Làm cho sinh viên tham gia vào việc ứng dụng lý thuyết vào thực hành là một điều, nhưng tìm ra những người giỏi nhất và lỗi lạc nhất có thể chấp nhận các nhiệm vụ lập trình đầy thách thức và thành công thì đòi hỏi những nền tảng tốt trong bộ môn kĩ nghệ. Do đó giáo trình phần mềm phải được thay đổi để mang khía cạnh thực hành vào đó vì nguyên tắc của các đại học là giáo dục người tốt nhất cho xã hội chứ không chỉ đơn thuần huấn luyện mọi người trong lí thuyết trừu tượng nào đó. Giáo dục phần mềm không thể giới hạn trong việc giới thiệu các lí thuyết phần mềm với vài ngôn ngữ lập trình và dùng các công cụ không còn hữu dụng nữa.
Tôi nghĩ chúng ta cần một nền tảng vững chắc cho giáo trình kĩ nghệ phần mềm mà có thể cho sinh viên kinh nghiệm thực hành với các miền ứng dụng đặc biệt, như đồ hoạ, thiết kế CAD/CAM, và an ninh tính toán. Chúng ta cũng cần trình bày cho sinh viên các nhu cầu của kỹ nghệ về tính đúng đắn, tính bảo trì được, tính kiểm thử được và hiệu năng cùng với các công cụ được dùng cho điều đó. Tuy nhiên khi hoàn thành một danh sách tất cả những cái cần thiết – cho dù ở mức tối thiểu – thi chương trình giảng dạy sẽ đi tới điều mà nhiều người chưa tốt nghiệp không thể nắm vững được, và không thể được giảng dạy một cách hợp lí trong hệ bằng cấp bốn năm. Đây là thế tiến thoái lưỡng ban nhưng tôi tin là việc học không giới hạn trong chương trình giảng dạy mà phải học cả đời. Với sinh viên chưa tốt nghiệp, họ phải đi vào một chương trình làm việc rộng hơn, nhưng họ không nên dừng lại ở đó mà phải học thêm hai năm nữa đến bậc thạc sĩ với các khả năng chuyên môn thì mới có ích cho tất cả – sinh viên lẫn công nghiệp. Tất nhiên, việc yêu cầu học thêm lên thạc sĩ có thể là quá nhiều với nhiều sinh viên nhưng tôi mạnh mẽ tin tưởng rằng một khảo cứu đặc biệt về một lãnh vực chuyên môn sẽ tạo ra được “Kĩ sư phần mềm chuyên nghiệp “.
Tôi hi vọng rằng nhiều người trong chúng ta, những người đang làm việc trong công nghiệp cũng như hàn lâm phải làm việc cùng nhau để cải thiện chương trình bậc phần mềm hiện thời để hấp dẫn các sinh viên giỏi nhất. Chương trình được đề nghị phải mang tính thực tế cung cấp cho sinh viên các kĩ năng mà họ gần như có thể áp dụng được ngay, nó phải hội tụ vào giá trị nghiệp vụ, nhiều kĩ năng qui trình và quản lí bên cạnh các kĩ năng về kiến trúc phần mềm truyền thống, thiết kế, cài đặt, kểm chứng và kiểm thử,.
Theo cảnh quan của tôi, giáo trình hiện thời, đặc biệt trong Khoa học máy tính đã không thay đổi nhiều trong những năm qua, và trong nhiều chương trình bậc đại học sinh viên có lẽ tập trung quá nhiều vào ngôn ngữ lập trình nhưng không vào việc dùng công cụ, qui trình, làm tài liệu, hiểu qui trình doanh nghiệp để trở nên những nhà chuyên môn phần mềm.
Đây là lí do tại sao tôi mạnh mẽ quảng bá cho giáo trình Kĩ nghệ phần mềm thay vì Khoa học máy tính truyền thống. Là một nhà chuyên môn phần mềm có hiệu quả, bạn cần có tài năng và bạn cần được huấn luyện. Phần mềm về bản chất là sản phẩm bạn tạo ra bằng tâm trí. Bạn không thực sự nhìn thấy nó, bạn không thực sự ngửi thấy nó, bạn phải tưởng tượng ra nó trước hết. Giáo trình có thể cho bạn việc huấn luyện nhưng tài năng là cái gì đó bạn phải có bởi vì không phải bất kì ai cũng có thể là kĩ sư phần phầm được, cũng giống như không phải ai cũng có thể là nhạc sĩ. Bạn cần nghệ thuật cũng như khoa học.
Tôi tin rằng điều công nghiệp cần ngày nay là nhiều kĩ sư phần mềm bởi vì bạn không thể lấy sinh viên tốt nghiệp khoa học máy tính và biến họ thành kĩ sư phần mềm được. Bạn sẽ có những khiếm khuyết nền tảng bởi vì việc tập trung của huấn luyện là khác biệt rất bao la nhưng chúng ta cần bắt đầu cải tiến giáo trình từ bây giờ bởi vì yêu cầu toàn cầu và vì ngành công nghiệp của chúng ta tồn tại trong thế kỉ 21. Hiện thời, nhu cầu về tài năng phần mềm liên tục tăng và theo một số nghiên cứu, thế giới sẽ cần trên hai triệu kĩ sư phần mềm trong năm năm tới (tới 2010). Tôi muốn nhấn mạnh rằng nhu cầu là về Kĩ sư phần mềm chứ không phải nhà khoa học máy tính hay người lập trình.
Thế giới đang thay đổi nhanh chóng và tôi trông đợi thấy nhiều chuyên môn hoá và lực lương lao động đa dạng dưới dạng dân tộc, nền tảng kĩ thuật và mục đích nghề nghiệp. Nhiều công ti sẽ phải tìm tài năng trên toàn cầu, điều làm tăng thách thức giáo dục, huấn luyện và quản lí nhưng nó cũng đưa ra những cơ hội lớn cho một số người có khuynh hướng nghề nghiệp, những người hiểu xu hướng toàn cầu và sẵn lòng nhận thách thức.
English version
Software Engineers Demands
There is a significant demand for software people globally. In the U.S it is very difficult to hire software engineer in key cities such as San Jose, Boston, Seattle or New York. In India, it’s even more difficult although India graduates over 300,000 software people every year but only less than 20 percent of them would be employable due to the archaic education system there. Most top India companies hire the best people from well-respected schools within days after they receive their degrees. The matter is worst in Europe where top people are being hired by big companies several months before they graduate. Based on my research and benchmarking conducted in 2006, about 20% of software people will be hired immediately but the rest of the 80 percent of software people will not be so successful because they do not have the skills that industry demand. As a result, the software industry is running into significant problems because there is a critical shortage of talented software people.
The reason is so obvious, what students learn in the classroom often isn’t a good match for industry requirements, even though more schools are starting to provide Computer Science degree or even Software Engineering coursework. From a business perspective, CS majors don’t possess the necessary skills today because the curriculum is only focusing on the programming languages and create only good programmers or testers but the industry demand much more. Top software companies routinely turns down people with a CS background because they don’t possess the skills needed for more complex projects and most software projects today are very large and complex with several million lines of code. Typical Computer Science program emphasize hard-core mathematics and theory with some programming knowledge. (How many lines of code student wrote in CS program?) When CS graduates come out of school, 95 percent of the time they haven’t seen or heard of use cases, have never written or read a requirements document, and don’t possess any soft skills or understanding of business processes.
Why do we all having this problem? What schools teach is often influenced by the studies that professors did when they worked in their doctorate programs. As I found in my study in Europe, most professors come out during the 60s and what they learned are either obsolete or no longer useful due to the fast changing in technology. The European education system is based on hierarchy where the longer you teach, the better secure position you have, resulting in a majority of professors have been teaching for thirty or forty years using the same books and techniques that they learned years ago – That is why in Europe, software industry does not have an important role as compare with the U.S or Asia. Today many top European companies are hiring Chinese and Indian engineers instead of their own people. Off course there are many good, innovative and knowledgeable professors in Europe but they have to wait for their turn in the university because in this academic system, many professors do not retire or being force to retire. These academic systems do not reward professors for spending time on problems with current technology or have experiences in the industry. The result is many students graduated with a shallow view of software and systems. Many have no clue what their language and system does and think that invoking functions on a library someone else wrote is all there is to developing software.
How do you fix this problem? I strongly believe that what we need is to broaden the appeal of computer science to a wider range of students by adding more practical coursework in areas such as e-business, business automation, e-government, CAD/CAM Design, socially relevant computing-impact technology and in gaming and robotics. For example, students purchase a personal robot along with their textbooks, which they will learn to program and play with as part of their initiation into the discipline, at least they have a good indication that that approach is far more compelling than what has been a fairly traditional, memorize all the formulas and theories in textbooks.
Getting students engaged is one thing, but finding the best and brightest who can take on challenging programming tasks and succeed requires a good fundamentals in engineering disciplines. Therefore software curriculum must be changed to more practical aspect because the principle of any universities is to educate to the best applicable to society and not merely train people in some abstract theories. Software education can’t be a simple introduction to software theories with some programming languages and the use of tools that no longer useful.
I think we need a solid foundation for a software engineering curriculum that can give students practical experience with specific application areas, such as graphics, CAD/CAM design, and computing security. We also need to expose students to real-world demands of correctness, maintainability, testability and performance together with the tools used for that. Unfortunately, when you complete a list of all that’s needed-even at a minimum-you come up with a lot of undergraduates can’t handle, and couldn’t reasonably be expected to handle in a four year degree. This is a major dilemma but I also believe in life long learning and additional years for software professional. With an undergraduate degree students are getting a broad exposure, but they should not stop there. An additional two years for a Master Degree that focus on a specific domain area can be useful for both the students and the industry. Of course, requiring a master’s degree for “serious industry work” could be too much for many students but I strongly believe that a specific study on a particular domain specific that truly creating a “Professional Software Engineer”.
I hope that many of us, who are working in industry as well as the academic must work together to improve current computing and software degree programs to attract the best students. The proposed program must be practical that provide students with skills that they can almost immediately apply, it must focus on the business value, lot of process and management skills in addition to the traditional software architecture, design, implementation, verification and testing skills,.
From my perspective, the current curriculum, especially in Computer Science hasn’t changed that much over the years, and in a lot of undergraduate programs students are probably focusing too much in programming languages but not the utilization of tools, processes, documentation, understanding of business processes and most of all, be a software professionals.
This is why I strongly advocate for a Software Engineering curriculum instead of the traditional Computer Science degree. To be an effective software professional, you need to have talent and you need to have training. Software is essentially a product that you create with your mind. You don’t really see it, you don’t really smell it, you have to imagine it first. Curriculum can give you training but talent is something you have to have because not everyone can be a software engineer, just like not everyone can be a musician. You need art as well as science.
I believe that what the industry need today is more software engineer because you can’t take a computer science graduate and turn them into a software engineer. You will have a fundamental flaws because the training focus are vastly different but we need to start improving the curriculum now because of global demand and for our industry to survive in the 21st century. Currently, the demand for software talent continue to grow and according to some studies, the world will need over two million software engineer in the next five years (by 2010). I want to emphasize that the demand is on Software Engineer and not Computer Scientist or Programmer.
The world is changing fast and I would expect to see more specialization and a diverse workforce in terms of ethnicity, technical backgrounds and career goals. Many companies will have to look globally for talent, which increases the education, training and management challenges but it also provide significant opportunities to some career-oriented people who understand the global trend and willing to take the challenge.