Từ 2009, thị trường việc làm toàn cầu đã tăng dần hội tụ nhiều vào khu vực kĩ thuật và ít hơn nhiều vào thương mại. Khu vực nhu cầu cao nhất được liệt kê trong thị trường việc làm của mọi nước là khu vực công nghệ thông tin (CNTT). Việc làm hàng đầu là Kĩ nghệ phần mềm, việc làm này có bao gồm quản lí, thiết kế và tạo ra phần mềm cho mọi thứ, từ hệ thống máy tính mây tới ứng dụng điện thoại di động và trò chơi máy tính. Phân loại này bao gồm: Người quản lí dự án, người quản lí dịch vụ CNTT, kiến trúc sư phần mềm, chuyên viên an ninh, và người phát triển phần mềm.

Theo báo cáo thị trường toàn cầu năm nay, có thiếu hụt kĩ sư phần mềm trong đa dạng rộng các ngành công nghiệp, mức kĩ năng, và miền lương. Tại sao kĩ sư phần mềm có nhu cầu cao thế? Sau cuộc khủng hoảng tài chính năm 2007, có hai khu vực nổi lên, ứng dụng di động và tính toán mây, đang tăng trưởng mạnh. Nhiều hãng đầu tư đã từng đứng im trong nhiều năm, do khủng hoảng tài chính, đột nhiên thấy cơ hội mà họ phải nắm lấy. Khi nhiều đầu tư đang đổ vào hai khu vực này, các công ti bắt đầu thuê người với mong đợi tăng trưởng cao và lợi nhuận cao. Nhiều công ti điện tử đang chuyển sang điện thoại thông minh, máy tính bảng mà đến lượt nó lại tạo ra nhiều nhu cầu hơn về kĩ sư phần mềm, người có thể viết các ứng dụng di động. Nhiều công ti phần mềm đang chuyển sang phát triển “Tính toán mây” hay ứng dụng được lưu kí toàn bộ trực tuyến. Kết quả là thị trường việc làm cho kĩ nghệ phần mềm trở thành rất “NÓNG”.

Xu hướng này không chỉ xảy ra ở Mĩ mà còn ở châu Âu và châu Á. Ngay cả các nước như Ấn Độ và Trung Quốc đã làm tốt với khoán ngoài phần mềm cũng nhảy vào các ứng dụng di động và tính toán mây. Bởi vì việc nổi lên về nhu cầu cao này, việc làm kĩ sư phần mềm trở thành nghề nóng nhất trên toàn cầu. Cho nên với sự tăng nhanh của ứng dụng di động và tính toán mây, sinh viên cần biết học cái gì, và chỗ nào để hội tụ việc học của họ để nắm bắt được cơ hội này.

Về căn bản có năm khu vực quan trọng mà sinh viên cần biết: Kiến trúc phần mềm, lập trình song hành, phát triển dựa trên web, quản lí dịch vụ CNTT, và kĩ nghệ yêu cầu. Tất nhiên, sinh viên phải có kĩ năng cơ sở như ngôn ngữ lập trình (Java, C++, C#, và Object C), hiểu vòng đời phát triển phần mềm, và kĩ năng gỡ lỗi.

Trong các kĩ năng này, kiến trúc phần mềm hiểu nhiên là rất quan trọng. Để thiết kế hệ thống “tính toán mây”, kĩ sư phải học cách chuyển tư duy của họ từ phát triển sản phẩm sang cách nghĩ cung cấp dịch vụ. Đây là dịch chuyển chính vì phần lớn những người phát triển phần mềm bao giờ cũng nghĩ về xây dựng sản phẩm phần mềm và bỏ qua cái nhìn của người dùng. Dịch chuyển đó yêu cầu họ hiểu việc dùng chung phần mềm và phân bố hiệu quả ở mức dữ liệu để cho họ có thể thiết kế các hệ thống làm cân bằng hiệu năng với chi phí và cách tối ưu hoá cho yêu cầu tốc độ và mức dịch vụ.

Lập trình song hành là khả năng viết cho cơ chế song song và giải quyết hàng triệu thể nghiệm của phần mềm truy nhập vào dịch vụ cùng một lúc. Với tính toán mây, hệ thống phải đáp ứng với các nhu cầu từ nhiều người dùng, tất cả họ đều cần hệ thống nhanh. Điều mấu chốt là xây dựng các ứng dụng lớn và phức tạp mà có thể giải quyết các nhu cầu này. Điều đó yêu cầu người kĩ sư phần mềm hiểu khái niệm cơ bản về phần mềm như dịch vụ như: Tính sẵn có hệ thống, tính liên tục, năng lực và an ninh.

Một thách thức then chốt trong tính toán mây là phần mềm cũng phải được gắn chặt với mô hình thu nhập để tạo ra lợi nhuận. Với phần mềm như dịch vụ, hệ thông tin không còn là “mô hình chi phí” mà là “mô hình sinh thu nhập”. Kĩ sư phần mềm phải hiểu rằng chuyển giao dịch vụ của họ phải được khách hàng kiểm nghiệm mọi lúc, khách hàng sẽ quyết định liệu dịch vụ có tác dụng hay không có tác dụng cho họ. Nếu qui mô, kiến trúc, và hiệu năng không được tối ưu, hệ thống sẽ ảnh hưởng tới kết quả kinh doanh của khách hàng. Điều đó cũng có nghĩa là nếu không được thoả mãn, khách hàng có thể KHÔNG làm kinh doanh với công ti mây nữa. Khía cạnh khác là thiết kế cơ chế an ninh để cho khách hàng không thể thấy được dữ liệu của khách hàng khác và có kế hoạch phục hồi trong trường hợp cái gì đó xấu xảy ra.

Theo một điều tra sơ bộ về tính toán mây, nhiều kĩ sư phần mềm KHÔNG hiểu rủi ro của phần mềm của họ trong mây. Phần lớn không hiểu thấu rủi ro về độ lớn của qui mô chút nào. Thái độ “Nếu có lỗi chúng tôi sẽ sửa chúng về sau” vẫn tồn tại trong phát triển phần mềm sẽ KHÔNG được chấp nhận trong công nghiệp thương mại. Chẳng hạn, năm ngoái một ngân hàng tài chính lớn phải đóng cửa hệ thống mây của mình khi mật khẩu của khách hàng đã được đưa lên URLs. Ngân hàng lập tức huỷ hợp đồng với hãng phần mềm.

Với những ngành công nghiệp nổi lên này, có nhiều vấn đề yêu cầu đào tạo mới, tư duy mới, và đào tạo tốt hơn bởi vì thất bại sẽ KHÔNG được dung thứ. Điều đó dẫn tới nhu cầu cao về kĩ năng quản lí dịch vụ CNTT. Cuộc điều tra này khuyến cáo rằng công nghiệp thương mại KHÔNG nên kí hợp đồng với bất kì phần mềm tính toán mây nào, nếu họ không có nhóm riêng những người quản lí dịch vụ CNTT. Một đại diện của công nghiệp thương mại nói: “Công nghiệp của chúng tôi cần nhóm quản lí CNTT mạnh để giám sát doanh nghiệp của chúng tôi, để cải tiến kinh doanh của chúng tôi, và làm cho nó hiệu quả và hiệu lực hơn. Những người quản lí CNTT này phải có kĩ năng cao với đào tạo chặt chẽ theo mức độ năng lực được xác định rõ.”

Không may, ngay cả ngày nay vẫn còn ít trường dạy về kĩ năng Quản lí hệ thông tin (ISM) hội tụ vào dịch vụ CNTT. Việc làm chính của người quản lí dịch vụ CNTT là thiết kế dịch vụ, cung cấp dịch vụ, quản lí vận hành của dịch vụ, và liên tục cải tiến dịch vụ. Khu vực kĩ năng này là tổ hợp của phần mềm và tri thức doanh nghiệp để hỗ trợ cho lập kế hoạch doanh nghiệp; gióng thẳng và tích hợp chiến lược CNTT với mục đích doanh nghiệp; đo tính hiệu quả và hiệu lực của dịch vụ CNTT, tối ưu hoá chi phí và đạt tới thu hồi theo đầu tư (ROI).

Theo báo cáo công nghiệp này, những việc làm kĩ nghệ phần mềm có nhu cầu cao yêu cầu tri thức và kĩ năng trong doanh nghiệp, khoa học và công nghệ, và TẤT CẢ chúng đều yêu cầu ít nhất là bằng đại học hay cao hơn.

—-English version—-

New opportunity in the industry

Since 2009, the global job market has increasingly focus more on the technical areas and much less on the business. The highest demand area listed in every country’s job market is Information Technology area (IT). The top job is Software Engineering, a job that involves the managing, design and creation of software for everything, from large cloud computer system to mobile phone applications and computer games. This category includes: Project manager, IT service manager, Software architect, Security specialist, and Software developer.

According to this year’s market report worldwide, there is a shortage of Software Engineer across a wide variety of industries, skill levels, and salary ranges. Why Software Engineer is in such high demand? After the financial crisis in 2007, there are two emerging areas, Mobile applications and Cloud computing, that are growing strong. Many investments firms that have been standing still for years, due to the financial crisis, suddenly see an opportunity that they should seize. As more investments are pouring in these two areas, companies begin to hire people with the expectation of high growth and high profits. Many electronic companies are switching to smart-phones, tablets which in turn create more demands for software engineer who can write mobile applications. Many software companies are switching to develop “Cloud Computing” or applications hosted entirely online. The results are the job market for Software Engineering become very “HOT”.

The trend is not just happened in the U.S. but also Europe and Asia. Even countries like India and China that did well with software outsourcing also jump into Mobile applications and Cloud Computing. Because of this surge in high demand, Software Engineer jobs become the hottest career globally. So with the proliferation of mobile applications and cloud computing, students need to know what to study, and where to focus their learning to catch this opportunity.

Basically there are five important areas that students need to know: Software architecture, Concurrent programming, Web-based development, IT service management, and Requirements engineering. Of course, students must have the basic skills such as programming language (Java, C++, C#, and Object C), understand software development life-cycle, and debugging skills.

Among the skills, software architect is obviously very important. To design a “Cloud computing” system, engineers must learn how to switch their thinking from product development to a service provider mindset. This is a major shift as most software developers always think about building software product and ignore users’ views. That shift requires them to understand multi-tenancy and efficient distribution at the data level so they can design systems that balance performance with cost and how to optimize for speed and service-level requirements.

Concurrent programming is the ability to write for parallelism and handle the millions of instances of the software accessing the service at the same time. With Cloud Computing, the system must respond to demands from many users, all of them need the system fast. It is critical to build large and complex applications that can handle these demands. That require software engineers to understand the basic concept of software as a service such as: System availability, continuity, capacity, and security.

A key challenge in cloud computing is the software must also be closely tied to the revenue model to create profits. With software as a service, information system is no longer a “cost model” but “revenue generating model”. Software engineer must understand that their service offerings have to be validated by the customer all the time, Customers will decide if the services work or does not work for them. If the scale, architecture, and performance are not optimized, the system will affect the business outcomes of customers. It also means if not satisfy, the customers may NOT do business with the cloud company. Another key aspect is designing in security mechanisms so customers cannot see other customers’ data and having recovery plans in case some bad things happen.

According to a preliminary survey about cloud computing, many software engineers do NOT understand the risk of their software in the cloud. Most do not comprehend the risks in magnitude of scale at all. The attitude of “If there are defects we will fix them later” that exist in software development will NOT be accepted in the business industry. For example, last year a large financial bank had to shut down its cloud system when customers’ passwords were showing up on URLs. The Bank immediately canceled contract with the software firm.

With these emerging industries, there are many issues that requires new training, new thinking, and better trainings because failures will NOT be tolerated. That lead to the high demand of IT service management skills. The survey recommend that business industry should NOT sign contract with any cloud computing software, if they do not have exclusively large group of IT service manager. A business industry representative said: “Our industry need strong IT service management group to oversee our business, to improve our business, and make it more efficient and effective, These IT managers must be highly skilled with rigorous trainings to a well-defined competency levels.”

Unfortunately, even today there are few schools that teach Information System Management (ISM) skill focusing on IT service. The main job of an IT service manager is to design the services, provide the services, manage the operation of the services, and continual improve the services. This skill area is the combination of software and business knowledge to support business planning; aligning and integrating IT strategy with business goals; measure IT service effectiveness and efficiency, optimize costs and achieve return on investment (ROI).

According to the industry report, these high demand software engineering jobs require knowledge and skills in business, science and technology, and ALL of them require at least a bachelor degree or higher.