Tôi gặp Steve Smith trên chiếc máy bay từ Thượng Hải tới San Francisco. Steve là người quản lí nhân lực về thuê kĩ sư từ hải ngoại cho công ti phần mềm lớn của Mĩ. Anh ấy bảo tôi:

“Chúng tôi cần hàng nghìn kĩ sư phần mềm mỗi năm nhưng chỉ tìm được vài trăm người ở Mĩ cho nên chúng tôi phải đi tìm họ ở hải ngoại, hầu hết là ở Ấn Độ và Trung Quốc. Điều này là không dễ bởi vì các hệ thống giáo dục này khác với Mĩ. Ngay cả trong cùng nước, khác biệt giữa các đại học cũng làm cho tôi rất khó tìm được người đúng cho công ti tôi.”

Tôi hỏi anh ấy: “Anh tuyển chọn họ thế nào? Anh tìm những kĩ năng nào?”

Anh ấy bảo tôi: “Qui trình tuyển chọn dựa trên một số thuộc tính và tiêu chí khách quan. Tiêu chí khách quan chính là: Chất lượng dựa trên bằng cấp, chương trình đào tạo và kinh nghiệm của sinh viên. Tôi cũng tìm các “kĩ năng mềm” như trao đổi, thái độ, cam kết, tính thích ứng và tính quả quyết. Kĩ năng mềm là quan trọng nhưng ít trường ở châu Á dạy về chúng. Trong quá khứ, chúng tôi đã thuê nhiều người kĩ thuật tốt nhưng họ KHÔNG thể làm việc tốt trong tổ cho nên chúng tôi phải để họ đi. Chúng tôi đang đánh giá các chương trình đào tạo từ các đại học và chỉ thuê sinh viên từ những có có chương trình đáp ứng nhu cầu của chúng tôi.”

Tôi hỏi: “Loại bằng cấp nào anh đang tìm? Anh có xem xét chứng chỉ nữa không?”

Anh ấy giải thích: “Chúng tôi chỉ thuê các sinh viên đại học từ những đại học đã tồn tại lâu dài. Chúng tôi tìm người có bằng cử nhân hay bằng thạc sĩ về khoa học máy tính, kĩ nghệ phần mềm, quản lí hệ thông tin. Chúng tôi không thuê những người có chứng chỉ đào tạo nghề. Có nhiều kiểu chứng chỉ nhưng hầu hết đều được cấp bởi các trường dạy nghề đáng hoài nghi, không có bắt buộc gì về những chứng chỉ này, mọi người có thể lừa dối trong các kì thi hay mua chứng chỉ. Chúng tôi kết luận rằng chứng chỉ không phải là điều đảm bảo cho các kĩ năng chúng tôi tìm kiếm.”

Tôi hỏi: “Anh chọn sinh viên tốt nghiệp từ đại học như thế nào? Kĩ năng nào là quan trọng cho công ti của anh?”

Anh ấ bảo tôi: “Nhiều sinh viên nhấn mạnh vào các kĩ năng cỡ thấp như ngôn ngữ lập trình hay các công cụ đặc thù (PowerPoint, World, Excel v.v). Đây KHÔNG phải là kĩ năng bản chất. Chúng tôi mong đợi bất kì sinh viên tốt nghiệp về tính toán nào cũng phải đã biết về chúng rồi. Người kĩ sư phần mềm có kĩ năng phải biết cách giải quyết vấn đề và cách làm việc cùng khách hàng và người dùng. Họ phải biết cách kiến trúc và thiết kế hệ thống nhỏ, thực hiện và kiểm thử sản phẩm phần mềm. Về toàn thể, họ phải hiểu mọi thứ trong vòng đời phát triển phần mềm từ quan niệm tới giải pháp. Vấn đề chính chúng tôi thấy ở châu Á là nhiều trường vẫn chọn dạy các ngôn ngữ lập trình.”

Tôi hỏi: “Vậy làm sao anh phân biệt được sinh viên phần mềm tốt với những người tốt nghiệp không được tốt như vậy?”

Anh ấy cười: “Đó là kinh nghiệm của tôi. Người kĩ sư tốt biết cách nhìn toàn thể nhiệm vụ như một kỉ luật kĩ nghệ và tiếp cận nó từ quan điểm vòng đời. Người nghiệp dư sẽ coi nhiệm vụ này như một phần công việc và tiếp cận nó như đoạn mã hay mô đun. Người kĩ sư tốt nhấn mạnh vào giải pháp kiến trúc với cách tiếp cận cân bằng tới rủi ro nhưng người kĩ sư được đào tạo sơ sài sẽ nhảy vào chi tiết kĩ thuật của viết mã mà thậm chí không xem xét tới khách hàng hay người dùng và không có ý tưởng gì về rủi ro dự án.”

Tôi bảo anh ấy: “Nhiều người quản lí chỉ quan tâm tới viết mã và nếu bạn không viết mã, bạn là không tốt.”

Anh ấy lắc đầu: “Có hàng triệu người có thể viết mã nhưng chúng tôi không tìm người lập trình. Ngày nay phần lớn các công ti phần mềm như chúng tôi đang tìm người kĩ sư phần mềm bởi vì phần mềm KHÔNG phải là mã. Phần mềm là giải pháp có thể cung cấp giá trị cho doanh nghiệp. Khi sinh viên nhận được giáo dục tốt trong kĩ nghệ phần mềm, mà chính là kỉ luật và cách tiếp cận tới giải pháp, họ biết cách giải quyết vấn đề. Viết mã chỉ là một phần nhỏ công việc của họ. Họ biết cách lấy yêu cầu, biết cách tiếp cận tới vấn đề, và biết cách cân bằng nhiều quan điểm trước khi thậm chí bắt đầu thiết kế giải pháp. Lỗ hổng giữa người kĩ sư phần mềm và người lập trình là rất lớn nhưng không may nhiều trường vẫn đang hội tụ vào dạy lập trình. Ông KHÔNG cần tới bốn năm ở đại học chỉ để học lập trình.”

Tôi biện minh: “Nhưng thế giới vẫn cần người lập trình chứ”

Anh ấy bảo tôi: “Như ông biết đấy, ngày nay hầu hết mọi thứ có thể được viết mã đều đã được thực hiện rồi. Ông có thể nhìn vào thư viện phần mềm mở hay ở “thư viện Dot.Net” họ có cả nghìn thứ đã được làm và công cụ để lắp ráp chúng thành sản phẩm phần mềm. Ngày nay, phần lớn phần mềm đều là sản phẩm bán sẵn “Commercial Off-the-Shelf products” (COTS) nơi công ti có thể mua chúng, thuê chúng thay vì làm chúng. Kĩ năng được cần ngày nay là tri thức về chuyên biệt hoá COTS, lắp ráp các bộ phận phần mềm dùng lại từ thư viện, và tổ chức chúng thành giải pháp phần mềm. Đó là lí do tại sao chúng tôi cần người có kĩ năng về kĩ nghệ yêu cầu, kiến trúc hệ thống, thiết kế và tích hợp, an ninh mạng chứ không phải là người lập trình. Đây là những kĩ năng cao hơn viết mã và kiểm thử. Mọi sinh viên tốt nghiệp trong khu vực kĩ nghệ phần mềm đều biết cách viết mã, nhưng họ cũng biết nhiều hơn về những kĩ năng được cần tới này và đó là lí do tại sao bằng cấp đại học là yêu cầu tối thiểu.

Để tôi cho ông một ví dụ, ngày xưa người ta xây nhà bằng gạch được làm từ bùn cho nên họ cần người có kĩ năng biết cách làm gạch. Ngày nay gạch đã được làm trong nhà máy gạch cho nên ông có thể xây nhà mà không có tri thức về cách làm gạch. Ông cần kiến trúc sư và công nhân để xây nhà bằng gạch nhưng ông không còn chăm nom tới bùn và cách làm gạch thêm nữa. Cùng điều đó đang xảy ra với phần mềm, công ti cần các kĩ năng khác của công nhân để xây dựng sản phẩm phần mềm. Không may là vì nhiều trường KHÔNG cập nhật chương trình đào tạo của họ, thế giới có quá nhiều người lập trình nhưng không đủ kĩ sư phần mềm. Đó là lí do tại sao tôi phải đi khắp thế giới để tìm những người có kĩ năng này.”

—-English version—-

Blog288- The needed skills

I met Steve Smith on an airplane from Shanghai to San Francisco. Steve is the Human Resource manager responsible for hiring engineers from oversea for a large U.S software company. He told me:

“We need thousand of software engineers each year but can find only few hundred in the U.S so I have to travel to find them from oversea, mostly in India and China. This is not easy because these education systems are differ from the U.S.  Even in the same country, the differences among universities make it very difficult for me to find the right people for my company”.

I asked him: “How do you select them? What skills are you looking for?”

He told me: “The process of selection is based on some attributes and objective criteria. The main objective criteria are: Qualifications based on degrees, training programs and the experience of students. I also looking for “soft skills” such as communication, attitude, commitment, adaptability and assertiveness. Soft skills are important but few schools in Asia teach them. In the past, we hired many good technical people but they can NOT work well in teams so we have to let them go. We are evaluating training programs from universities and only hire students from places that have programs that meet our needs”.

I asked: “What kind of degree are you looking for? Would you consider a certificate also?”

He explained:” We only hire college graduates from well-established universities. We are looking for people with Bachelor degree or Master degree in computer science, software engineering, information system management. We do not hire people with vocational certification. There are many types of certificate but most are issued by dubious vocational schools, there is no enforcement on these certification, people can cheat on exams or buy a certificate. We concluded that certification is not a guarantee for the skills that we seek”.

I asked: “How do you select graduates from universities? What skills are important to your company?”

He told me: “Many students emphasized on low-caliber skills such as specific programming languages or a particular tools (PowerPoint, World, Excel etc.). these are NOT essential skills. We expect any computing graduates must know them already. A skilled software engineer should know how to solve problems and how to work with customers and users. They should know how to architect and design a small system, implement and test a software product. Overall, they must understand everything in the software development life cycle from conception to solution. The major problem we found in Asia is so many schools are still fixing on teaching programming languages”.

I asked: “So how do you distinguish a good software graduates from a not so good graduates?”

He laughed: “That is my expertise. A good engineer know how to view the overall task as an engineering discipline and approach it from the life cycle view. An amateur will consider the task as a piece of work and approach it as code or a module. A good engineer places emphasis on the architectural solutions with a balanced approach to risk but a poorly trained engineer would jump into the technical detail of coding without even consider customer or users and have no idea about the project risk”.

I told him: “Many managers are only concerning with coding and if you do not code, you are not good”.

He shook his head: “There are millions of people who can code but we are not looking for programmers. Today most software company like us are looking for software engineer because software is NOT code. Software is a solution that can provide value to the business. When students receives good education in software engineering which is a discipline and an approach to a solution they know how to solve problem. Coding is only a small part of their works. They know how to get requirements, know how to approach problems, and know how to balance several viewpoints before even start to design the solution. The gap between software engineer and a programmers is very large but unfortunately many schools are still focusing on teaching programming. You do NOT need four years in college just to learn programming.

I argued: “But the world still need programmers”

He told me: “As you know, today most things that can be coded already been done. You can look at the open source library or at the “Dot.Net library” they have thousand of things already been made and tools to assemble them into software products. Today, most software are “Commercial Off-the-Shelf products” (COTS) where company can buy them, rent them instead of make them. The needed skills today are the knowledge on customize COTS, assemble reuse software parts from a library, and organize them into software solutions. That is why we need people with the skills in requirements engineering, system architecture, design and integration, network security and not programmers. These are higher skills than coding or testing. Every graduated students in software engineering area know how to code, but they also know more of these needed skills and that is why a college degree is the minimum requirements.

Let me give you an example, in the old day people build house from bricks that are made from mud so they need people with the skill of how to make brick. Today brick are already been made in brick factory so you can build house without knowledge on how to make brick. You need architect and workers to build house with brick but you are no longer care about mud and how to make brick anymore. The same is happening with software, company needs different skills of workers to build software products. Unfortunately, because many schools are NOT updating their training programs, the world has so many programmers but not enough software engineers. That is why I have to travel all over the world to find these skilled people.