12 Jan, 2021
Công nghiệp phần mềm cần gì
Tuần trước tôi gặp một nhóm quản lí cấp cao của các công ti phần mềm Trung Quốc khi họ tới thăm Carnegie Mellon. Chúng tôi đã thảo luận về công nghiệp phần mềm ở Trung Quốc và họ bảo tôi rằng rất khó tìm được người đúng với kĩ năng đúng bởi vì đào tạo đại học là KHÔNG nhất quán.
Một số đại học làm việc tốt nhưng các đại học khác thì không, về toàn thể họ tất cả đều tập trung vào lí thuyết với ít thực hành bởi vì hầu hết các giáo sư đều được đào tạo hàn lâm ít có kinh nghiệm. Hiện thời Trung Quốc có hơn mười nghìn công ti phần mềm nhưng phần lớn đều nhỏ, thường từ mười tới năm mươi người và không thể làm kinh doanh toàn cầu được. Một người quản lí phàn nàn: “Chúng tôi muốn cạnh tranh với Ấn Độ nhưng với hệ thống giáo dục cổ lỗ hiện thời, chúng tôi không thể phát triển đủ tài năng để xây dựng các công ti mạnh và lớn hơn mà có thể cạnh tranh toàn cầu. Đó là lí do tại sao chúng tôi cần đem giáo trình mới, chương trình đào tạo mới từ các đại học nước ngoài hàng đầu. Đó là giải pháp nhanh chóng nhất thay vì chờ đợi hệ thống giáo dục cải tiến.”
Đại học Carnegie Mellon và chính phủ Trung Quốc đã từng cộng tác để xây dựng một trung tâm đào tạo lớn ở Vô Tích có tên là “:iCarnegie” để đào tạo quãng 8000 sinh viên một năm theo chương trình CMU và nhóm sinh viên đầu tiên đã được tuyển vào tháng chín vừa rồi. Một người quản lí cấp cao nói với tôi: “Đó là bước đầu tiên nhưng 8000 sinh viên một năm là KHÔNG đủ. Chúng tôi không thể chờ đợi bốn năm nữa mặc dầu chúng tôi đã kí thoả thuận để thuê tất cả các sinh viên đã tốt nghiệp từ iCarnegie. Chúng tôi cần nhiều trung tâm đào tạo kiểu thế này ở nhiều thành phố hơn và đó là lí do chúng tôi ở đây.”
Tôi bảo họ: “Chương trình đào tạo yêu cầu sinh viên giỏi và giáo sư giỏi cho nên các ông không nên vội xô vào. Các ông KHÔNG thể mở thêm các trung tâm đào tạo, đào tạo số lượng lớn vài nghìn người và mong đợi có chất lượng. Các ông phải lựa chọn cẩn thận những sinh viên có phẩm chất từ các trường trung học hàng đầu bởi vì đầu vào tốt và chương trình đào tạo tốt sẽ cung cấp đầu ra tốt. Vì kết quả dài hạn, các ông phải bắt đầu đúng lúc ban đầu bằng việc đảm bảo rằng các ông có giáo sư đúng, người cung cấp đào tạo có chất lượng và hỗ trợ có chọn lọc cho sinh viên. Chương trình tốt với các giáo sư được huấn luyện tồi sẽ KHÔNG đem tới kết quả tốt. Hiện thời hầu hết các đào tạo ở Vô Tích đều được tiến hành bởi các giáo sư từ Carnegie Mellon nhưng họ cũng cung cấp việc đào tạo giảng viên cho các giáo sư Trung Quốc để kế tục việc đào tạo này trong vài năm và chương trình này sẽ yêu cầu nhiều nỗ lực và cộng tác từ cả hai phía.”
Cuộc thảo luận chuyển vào trong việc tuyển lựa sinh viên đã tốt nghiệp. Một người quản lí nói với tôi: “Bởi vì phẩm chất của sinh viên thay đổi lớn “phương pháp thông thường” mà nhiều công ti vẫn làm là thuê nhiều sinh viên đã tốt nghiệp rồi đánh giá họ sau vài tháng, chúng tôi giữ lại người có kĩ năng và thải người không có năng lực vậy. Cho dù tất cả họ đều có bằng cấp nhưng kĩ năng của họ không đủ tốt để làm việc trong công nghiệp.”
Tôi ngạc nhiên về phương pháp “thuê rồi thải” cho nên tôi hỏi ông ấy về điều ông ấy đang tìm kiếm ở các sinh viên đã tốt nghiệp.
Ông ấy bảo tôi: “Ứng cử viên phải có kĩ năng cao và họ phải trung thực về kĩ năng của mình. Có khả năng “trưng bầy” tri thức nào đó về máy tính KHÔNG nhất thiết nghĩa là họ có thể làm công việc tin cậy và có phẩm chất mọi ngày. Bạn KHÔNG thể làm ngôi nhà giấy và bảo mọi người rằng bạn có thể xây dựng nhà được. Biết cách viết ra vài trăm dòng mã KHÔNG có nghĩa gì trong công nghiệp phần mềm. Có nhiều điều hơn mà sinh viên phải có như khả năng làm việc và trao đổi trong tổ. Biết cách làm công việc chất lượng và hiểu ứng dụng phần mềm để làm gì chứ không chỉ lập trình trong C hay JAVA. Họ phải biết các phương pháp kiểm thử; cả cách tiếp cận chính thức và không chính thức và giữ cho mọi thứ được tổ chức đủ để người quản lí có thể kiểm được công việc của họ và sửa chữa chúng khi cái gì đó không đúng. Vài năm trước đây hầu hết sinh viên đều có thể kiếm được việc làm dễ dàng bằng việc biết ngôn ngữ lập trình nào đó nhưng ngày nay mọi sự khác nhiều rồi. Trong khi điều bản chất cần biết ngôn ngữ nào đó, nhưng có nhiều điều hơn như biết về nguyên tắc nằm dưới ngôn ngữ hay công cụ xác định và là một nhà chuyên nghiệp có kỉ luật. Nhiều sinh viên ngày nay KHÔNG muốn học điều nền tảng, họ muốn “Thủ thuật nhanh” và “lời khuyên nhanh” khi họ đi vào công nghiệp, phần lớn các thủ thuật này sẽ KHÔNg có tác dụng.”
Người quản lí khác phàn nàn: “Hàng tuần tôi đều xem hồ sơ lí lịch của sinh viên đã tốt nghiệp và bác bỏ hầu hết họ vì họ không có kĩ năng mà chúng tôi cần cho công việc của mình. Sinh viên với điểm hàn lâm tốt bị bác bỏ bởi vì họ có hiểu biết rất giới hạn về điều công nghiệp cần. Trong thị trường cạnh tranh cao này, chúng tôi phải cạnh tranh với các nước khác để thắng việc. Chúng tôi KHÔNG thể đảm đương được việc thuê ai đó người “gần đúng” nhưng cần thời gian để học. Người giỏi nhất phải có khả năng làm việc ngay lập tức bởi vì nhiều dự án của chúng tôi cần được chuyển giao trong thời gian rất ngắn thậm chí khi yêu cầu vẫn còn đang được hoàn tất. Hiển nhiên dự án không có thời gian cho phép người “gần đúng” được “học”. Chúng tôi cần tìm ra ai đó với tập kĩ năng đích xác, người có thể thu thập yêu cầu, thiết kế và viết mã trong vài tháng ngya lập tức. Trong thị trường điên khùng này, chúng tôi phải thuê người có kĩ năng hàng đầu thay vì người có thể học kĩ năng trong vài tháng hay cả năm.
Một người quản lí khác thêm vào: “Có nhiều lí do để bác bỏ sinh viên mới tốt nghiệp. Đôi khi chúng tôi có được hợp đồng vào phút cuối thành ra ít có thời gian chuẩn bị. Đủ mọi thứ việc bất ngờ có thể xảy ra, và khi lợi nhuận là mỏng do thị trường cạnh tranh cao điều đó làm cho chúng tôi không có chọn lựa nào. Dù sinh viên giỏi tới đâu cũng không thành vấn đề trong dài hạn, chúng tôi đơn giản KHÔNG thể đảm đương được chi tiêu cho đào tạo ngắn hạn. Nó là phản xạ trên thực tại thương mại của toàn cầu hoá nơi cạnh tranh là mọi thứ.”
Vấn đề khác họ nói cho tôi là nhiều sinh viên “nói dối” trong lí lịch của họ. Lí do đơn giản là họ tin nếu họ không biết về một kĩ thuật đặc thù cho giỏi, họ có thể học chúng trong vài tuần thay vì viết vào trong lí lịch của mình rằng họ không biết kĩ năng đó.
Một người quản lí nói với tôi: “Điều thất vọng nhất về mọi người không trung thực là ở chỗ họ tin điều đó có thể có tác dụng. Một khi họ được thuê và KHÔNG có những kĩ năng đó, họ sẽ bị thải hồi và điều đó là rất tai hại cho sự tự tin của họ và cuối cùng phá huỷ họ. Người sử dụng lao động đã từng bị lừa vởi vấn đề này biết cách đối xử với những người kiểu như vậy và đó là lí do tại sao “Phương pháp thông thường” là thuê họ và đánh giá họ và đuổi họ nếu họ không đáp ứng kĩ năng được cần tới.
Tôi hỏi họ: “Vậy các ông tìm gì khác trong sinh viên tốt nghiệp?”
Họ chia sẻ với tôi điều sau: “Kĩ năng lập trình trong C++, Java; kiểm thử hay kiểm thử đơn vị dựa trên khuôn khổ hay phương pháp luận (chẳng hạn jUnit trong Java, nUnit trong .NET); qui trình dựng tự động, theo kịch đoạn hay hình thức (chẳng hạn Ant nếu chúng ta đang nói tới Java, nAnt trong .NET, hay Cruise Control, Draco etc.); tri thức về kiến trúc phần mềm, hay mô hình hoá và sự tương tự với qui trình phát triển phần mềm (chẳng hạn RUP, Agile, ISO, XP, Scrum v.v.); kĩ nghệ yêu cầu cơ bản và khả năng làm việc với khách hàng (chẳng hạn, phân tích nghiệp vụ, Trường hợp sử dụng, UML, và mô hình hoá hệ thống v.v.); tri thức về quản lí dự án (chẳng hạn, lập kế hoạch, ước lượng kích cỡ, tài nguyên, ngân sách, giám sát và kiểm soát v.v.) và khả năng trao đổi và làm việc trong tổ.
—-English version—-
what software industry needs
Last week I met a group of senior managers of China’s software companies when they visited Carnegie Mellon. We discussed about software industry in China and they told me that it is very difficult to find the right people with the right skills because university training is NOT consistent. Some universities do good jobs but others do not, overall they are all focusing on theories with little practices because most professors are academic trained with little experiences. Currently China has more than ten thousands software companies but most are small, from ten to fifty people and can not do business globally. One manager complained: “We want to compete with India but with the current archaic education system, we could not develop enough talent to build strong and larger companies that can compete globally. That is why we need to bring in new curriculum, new training programs from top foreign universities. That is the fastest solution rather than waiting for the education system to improve”.
Carnegie Mellon University and Chinese government has been collaborated to build a large training center in Wuxi called “:iCarnegie” to train about 8000 students a year based on CMU programs and the first group of students already enrolled last September. One senior manager told me: “That is a first step but 8000 students a year is NOT enough. We can not wait for another four years although we already signed agreement to hire all graduated students from iCarnegie. We need more training centers like that in more cities and that is the reason we are here”.
I told them: “Training program requires good students and good professors so you should not rush. You can NOT open more training centers, massively train several thousands people and expect quality outcomes. You must carefully select qualified students from top high schools because good inputs and good training programs will provide good outputs. For long term results, you must start correctly in the beginning by making sure that you have the right professors who provide the quality training and effectively support the students. A good program with poorly trained professors will NOT bring good results. Currently most of the trainings in Wuxi are conducted by professors from Carnegie Mellon but they also provided faculty training to Chinese professors to take over the training within few years and this program will require a lot of efforts and collaboration from both sides.
The discussion moved into the recruiting of graduated students. One manager told me: “Because the qualification of students varies greatly the “common method” that many companies do is hiring many graduated students then evaluate them after few months, we keep the skilled people and fire the not-so competent people. Even they all have degrees but their skills are not good enough to work in the industry.”
I was very surprised about this method of “Hiring then firing” so I asked him about what he is looking for in graduated students.
He told me: “Candidates must have the right skills and they must be honest about their skills. Being able to “show off” some knowledge about computer does NOT necessary mean they can do reliable and quality work every day. You can NOT make a paper house and tell people that you can build houses. Knowing how to write few hundreds line of code does NOT mean anything in software industry. There are much more that students must have such as being able to work and communicate in a team. Know how to do quality work and understand what the software application is for and not just programming in C or JAVA. They must know testing methods; both formal and informal approaches and keeping things organized enough so managers can check their works and fix them when something is not correct. Few years ago most students could get programming job easily by knowing some programming languages but today things are different. While it is essential to know some languages but there are much more such as knowing the principles that underlie the specific language or tool and being a disciplined professional. Many students today do NOT want to learn the fundamental, they want “Quick tricks” and “fast tips” when they enter the industry, most of these tricks will NOT work”.
Another manager complained: “Every week I review resumes of graduated students and rejects most of them because they don’t have the skills that we need for our works. Students with good academic record are rejected because they have very limited understanding of what industry need. In this highly competitive market, we have to compete with other countries to win work. We can NOT afford to hire someone who is “almost right” but need time to learn. The best people should be able to work immediately because many of our projects need to be delivered within a very short time even when requirements are still being finalized. Obviously the project has no time allowance for an “almost right” person to “learn”. We need to find someone with the exact skill-set who can gather requirements, design and code within few months immediately. In this crazy market, we have to hire people who have top skills instead of top people who could learn the skill in few months or a year.
Another manager added: “There are many reasons for rejecting newly graduated students. Sometimes we get the contract at the last minute leaving us with little time to prepare. All sorts of unexpected things can happen, and when profits are slim due to highly competitive market it lead us with no choice. No matter how good the students will be in long-term, we simply can NOT afford the expense of short-term training. It is a reflection on the commercial reality of globalization where competition is everything.
Another problem that they told me was many students “lying” on their resumes. The simple reason is they believe if they do not know a particular technology well, they could learn them in few weeks instead of putting in their resume that they do not know that skill.
One manager told me: “The most frustrating thing about people being dishonest is that they believe it can work. Once they are hired and do NOT have the skills, they will be fired and that is very devastating for their confidences and eventually destroy them. Employers that have been cheated by this problem know how to deal with people like that and that is why the “Common method” is to hire them and evaluate them and fire them if they do not meet the skills needed.
I asked them: “So what else are you looking for in graduated students?”
They shared with me the following: “Programming skills in C++, Java; Testing or unit testing based on a framework or methodology (for example jUnit in Java, nUnit in .NET); Formal, scripted or automated build process (for example Ant if we are talking Java, nAnt in .NET, or Cruise Control, Draco etc.); A knowledge of software architecture, or modeling and familiarity with software development process (for example RUP, Agile, ISO, XP, Scrum etc.); Basic requirements engineering and ability to work with customers (For example, Business analysis, Use Case, UML, and system modeling etc.); knowledge of project management (For example, planning, estimates size, resources, budgets, monitoring and controls etc.) and ability to communicate and work within a team.