11 Jan, 2021
Kỹ năng doanh nghiệp-kỹ thuật
Sinh viên thường hỏi tôi liệu họ nên theo đuổi nghề trong kĩ thuật hay quản lí. Tất nhiên, câu trả lời tuỳ thuộc thực sự vào mục đích của sinh viên trong cuộc sống và những mục đích đó thường thay đổi theo thời gian. Tuy nhiên, câu trả lời của tôi là: “Lúc ban đầu bạn cần kĩ năng kĩ thuật nhưng qua thời gian bạn có thể chuyển sang miền quản lí.”
Là nhà chuyên môn phần mềm trong nhiều năm, tôi tin sự dịch chuyển từ kĩ năng kĩ thuật sang kĩ năng “kĩ thuật-doanh nghiệp” là rất quan trọng trong thị trường ngày nay. Phần lớn các công ti có thể thuê sinh viên có kĩ năng kĩ thuật vì họ được đào tạo về những kĩ năng này nhưng tìm được người có kĩ năng doanh nghiệp để quản lí dự án hay tổ chức CNTT là cái gì đó không thể dễ dàng thu được. Ngày nay sinh viên về Khoa học tính toán không được huấn luyện về kĩ năng doanh nghiệp. Họ không được đào tạo trong công việc tổ, nhiều người thậm chí không thể trao đổi được trong doanh nghiệp vì họ dùng “ngôn ngữ tính toán” mà khách hàng không hiểu. Họ không biết cách thu được yêu cầu từ khách hàng hay cách thương lượng hợp đồng. Nhiều người không biết cách ước lượng nỗ lực, thời gian hay thậm chí giá của dự án. Tuy nhiên, sinh viên về kinh doanh được đào tạo về quản lí dự án lại không thể quản lí được dự án phần mềm. Họ không có tri thức kĩ thuật và không hiểu bản chất thay đổi của phần mềm. Quản lí dự án phần mềm KHÔNG PHẢI là quản lí dự án bởi vì phần mềm bao giờ cũng thay đổi. Phần mềm cũng không sờ mó được cho nên theo dõi tiến độ dự án phần mềm là khó, nếu bạn không có đủ tính kĩ thuật. Phần mềm cũng duy nhất vì nó có yêu cầu nhiều kinh nghiệm kĩ thuật về công nghệ, nền, hệ thống, cơ sở dữ liệu, các tính năng, và thuộc tính phẩm chất. Đó là lí do tại sao người quản lí dự án phần mềm giỏi nhất thường bắt nguồn từ những người có nhiều kinh nghiệm phần mềm và với “huấn luyện đúng” trong kinh doanh phần mềm.
Sổ tay toàn cảnh nghề nghiệp của Cục Thống kê lao động Mĩ dự đoán rằng người phân tích hệ thống và kĩ sư phần mềm được trông đợi trong số những nghề phát triển nhanh nhất cho tới năm 2017. Theo nghiên cứu của chính phủ thì ở Mĩ, người phân tích hệ thống giữ 887,000 vị trí trong năm 2006 (tăng từ 268,000 vị trí trong năm 2000) so với 455,000 việc làm trong năm 2006 cho người lập trình máy tính (giảm từ 798,000 năm 2000). Sổ tay này cũng nói rằng việc sử dụng nhân công về người lập trình máy tính “được trông đợi tăng chậm hơn các nhà chuyên môn khác.” Và các ước lượng gần đây của Viện chính sách kinh tế đã đưa số việc làm ở Mĩ cần được khoán ngoài lên xấp xỉ 330,000 tới 500,000 việc làm. Quãng 75% số những việc này là việc lập trình máy tính toàn thời. Theo hướng dẫn của ban chỉ đạo công nghiệp phần mềm: Người phân tích hệ thống là người làm chiến lược hoá, lập kế hoạch và phát triển hệ thông tin hay nghĩ ra cách áp dụng tài nguyên của hệ thống hiện có vào các hoạt động phụ thêm như được dạy trong chương trình Quản lí hệ thông tin (ISM hay IS). Nó cũng mô tả người lập trình máy tính là người viết ra chương trình tương ứng với đặc tả được xác định bởi người phân tích hệ thống, như được dạy trong chương trình Khoa học máy tính (CS). Người kĩ sư phần mềm là người làm kiến trúc, thiết kế và tích hợp hệ thống thành “hệ thống các hệ thống” cố kết để giải quyết các vấn đề doanh nghiệp như được dạy trong chương trình Kĩ nghệ phần mềm. Dựa trên những thông tin này, chìa khoá để duy trì nghề tốt sau khi làm việc trong miền kĩ thuật là chuyển lên các vị trí hướng doanh nghiệp như người phân tích hệ thống, người phân tích doanh nghiệp, người quản lí dự án, người kiến trúc hệ thống hay kĩ sư phần mềm. Tuy nhiên, người lập trình máy tính không thể trở thành người phân tích hệ thống hay kĩ sư phần mềm ngay lập tức được. Việc chuyển đổi cần thời gian, nhiều huấn luyện thêm và yêu cầu có đủ kinh nghiệm và học tập để thành công.
Để tôi cho bạn vài ví dụ: Người lập trình thường phải làm việc với khách hàng để thu được yêu cầu và điều khó là khi cả hai bên không thể trao đổi được hiệu quả. Điều này hoàn toàn thông thường bởi vì phần lớn người lập trình thích dùng “ngôn ngữ máy tính” và hầu hết khách hàng không hiểu họ. Khách hàng thường dùng “ngôn ngữ doanh nghiệp” mà nhiều người lập trình chẳng có ý tưởng chúng nghĩa là gì. Môn Khoa học máy tính hiện thời chỉ hội tụ phần lớn vào ngôn ngữ lập trình nhưng không mấy về kĩ nghệ yêu cầu hay phân tích hệ thống. Tuy nhiên, người trong môn Quản lí hệ thông tin hay Kĩ nghệ phần mềm được huấn luyện theo cả hai “ngôn ngữ” và đó là lí do tại sao họ có thể trao đổi có hiệu quả với cả người lập trình và khách hàng.
Người lập trình có nền tảng kĩ thuật và kinh nghiệm tốt có thể lấy thêm đào tạo phụ để trở thành người quản lí dự án phần mềm. Người quản lí dự án phần mềm chịu trách nhiệm lập kế hoạch dự án, thương lượng với khách hàng về tài nguyên, yêu cầu, chi phí và lịch biểu, thuê thành viên tổ và theo dõi tiến độ qua mọi pha phát triển. Là người quản lí, người đó cũng chịu trách nhiệm phân công công việc, giải quyết các vấn đề hàng ngày ảnh hưởng tới công việc, và chắc chắn từng thành viên tổ đang làm việc tương ứng. Về căn bản, người quản lí dự án phần mềm phải là “người doanh nghiệp”, “người kĩ thuật” cũng như “người hướng tới người ” để thành công. Là người giỏi nhất, người quản lí dự án phần mềm phải làm việc với cả người kĩ thuật và phi kĩ thuật ở mọi mức của công ti cũng như ở công ti của khách hàng. Đó là lí do tại sao đây KHÔNG PHẢI là “học trong công việc” như nhiều người lập trình vẫn nghĩ. Không có huấn luyện thêm, không thể nào ra mọi quyết định đúng và đảm bảo thành công dự án.
Người lập trình chỉ thích làm việc với kĩ năng kĩ thuật mà không có quá nhiều tương tác với khách hàng có thể thấy Kĩ nghệ phần mềm là chọn lựa tốt hơn. Kiểu việc này vẫn mang tính kĩ thuật nhưng nó bao gồm nhiều việc ra quyết định đề cập tới vấn đề tích hợp, vấn đề chất lượng và cách hệ thống mới sẽ khớp với hệ thống cũ của công ti. Để thành công, tuyến việc này bao gồm hiểu và kiểm soát các cấu phần liên kết với hệ thống như tính tương hợp, tính đổi qui mô, tính an ninh, chi phí, rủi ro và các nhân tố kiến trúc khác. Họ phải biết cách phân rã và cô lập các cấu phần khác nhau để khớp chúng vào trong hệ thống hiện có và theo thứ tự để thực hiện từng cấu phần tương ứng theo kế hoạch kiến trúc. Không có tri thức thêm về cách chúng có thể được tích hợp, việc tích hợp các cấu phần có thể là thảm hoạ không thể nào tương hợp được với hệ thống hiện thời. Đây là miền của Kĩ nghệ phần mềm mà người lập trình có thể học thêm các môn học về kiến trúc doanh nghiệp, kiến trúc hệ thống, phát triển sản phẩm, kĩ nghệ hệ thống, tương tác và tích hợp hệ thống để cho họ có thể làm việc như người kĩ sư phần mềm.
Như tôi đã nhắc tới trước đây, để là người phân tích hệ thống hay kĩ sư phần mềm giỏi bạn phải có “đào tạo đúng” bằng việc đăng kí học các chương trình đào tạo tốt. Nếu bạn đã có nền tảng kĩ thuật mạnh hay đã làm việc như người lập trình thì bạn có thể theo học đào tạo thêm để trở thành nhà chuyên môn “kĩ thuật-doanh nghiệp” mức cao. Đây là công việc rất thách thức vì bạn thường xuyên làm việc với người quản lí cấp cao, người quản lí doanh nghiệp, người quản lí dự án, và khách hàng, tất cả họ đều có toàn cảnh khác nhau, góc nhìn và ý kiến khác nhau và bằng việc tiến hàng phân tích bù trừ và giữ cân bằng các cách nhìn của họ, bạn có thể trở thành người then chốt tạo ra khác biệt giữa thành công và thất bại. Trong cuộc khủng hoảng toàn cầu hiện thời, tôi đã thấy ngày càng nhiều công ti thuê các nhà phân tích doanh nghiệp và kĩ sư phần mềm để thám hiểm, kiểm điểm, kiến trúc và khuyến cáo các hệ thống khớp với doanh nghiệp để chuẩn bị cho “trận chiến” tiếp khi kinh tế phục hồi. Theo toàn cảnh của riêng tôi, tôi mạnh mẽ tin tưởng phần mềm vẫn là nghề lớn với tương lai hứa hẹn và nó có thể là cơ hội tốt cho những sinh viên thích nhắm tới những công việc cao và nhận công việc có tính thách thức.
Với những người đã có kinh nghiệm nhiều trong cả kĩ thuật và doanh nghiệp nhưng thích trở thành người quản lí cấp cao (CIO hay CEO), khuyến cáo của tôi là đăng kí học chương trình bằng cấp nâng cao, như Thạc sĩ về Quản trị doanh nghiệp (MBA) hay Thạc sĩ Quản lí Hệ thông tin (MISM). Để làm việc cho công ti toàn cầu hay làm kinh doanh toàn cầu bạn cần có bằng cấp nâng cao từ đại học được thừa nhận toàn cầu. Mối quan hệ giữa Đại học Carnegie Mellon với Nhóm Kĩ nghệ phần mềm Việt Nam (SEGVN) là cơ hội lớn để thúc bẩy nghề của bạn khi bạn có thể chuyển sang Đại học Carnegie Mellon hay Đại học Seattle như sinh viên đại học hay sau đại học từ chương trình CMU ở các trường thành viên SEGVN (Duy Tân, Văn Lang và DTT) bạn cũng có thể đăng kí học chương trình Thạc sĩ tại cả hai Đại học Carnegie Mellon hay Đại học Seattle.
Khi tôi chia sẻ với bạn cách tiếp cận tới cải tiến nghề của bạn bằng việc thu nhận tri thức kĩ thuật và tri thức doanh nghiệp nhưng vẫn còn có một lời khuyên cuối cùng: nâng cao ngoại ngữ của các bạn, đặc biệt là tiếng Anh. Vì thế giới đang ngày một nhỏ hơn và phẳng hơn (tôi chắc rằng một số trong các bạn đã đọc cuốn “Thế giới phẳng” của Thomas Friedman) trao đổi là kĩ năng mấu chốt, vì kĩ năng này cần thời gian lâu hơn để phát triển cho nên các bạn cần bắt đầu sớm. Để xây dựng nền tảng vững chắc, bạn sẽ cần ba nhân tố: kĩ năng Trao đổi – đặc biệt bằng tiếng nước ngoài, kĩ năng Kĩ thuật và kĩ năng Doanh nghiệp. Có tất cả ba kĩ năng này là chìa khoá để đi lên chiếc thang nghề nghiệp tại bất kì công ti nào và nó có thể có nghĩa là khác biệt giữa việc là người lập trình, người có thể “viết mã và kiểm thử” hay là người quản lí dự án, người phân tích hệ thống, kiến trúc sư, kĩ sư phần mềm, người quản lí cấp cao hay thậm chí người sáng lập của công ti toàn cầu mà có thể thay đổi nền công nghiệp phần mềm trong tương lai.
Trong thế giới thay đổi nhanh chóng này, mọi thứ đều có thể. Bạn có thể nhớ không lâu lắm trước đây, hai sinh viên Đại học Harvard đã dám nghĩ điều lớn lao (Họ thành lập công ti có tên là Microsoft) hay hai sinh viên từ Đại học Stanford cũng có giấc mơ lớn (Họ thành lập công ti có tên là Google). Vài năm trước đây, một sinh viên ở Carnegie Mellon có tên James Gosling đã làm việc trên đồ án capstone được Sun Microsystems tài trợ để tạo ra một ngôn ngữ lập trình mới. Như là một chuyện đùa với bạn mình ở trường, anh ta gọi nó là “Java” (Vì anh ta uống nhiều cà phê trong thời gian ở CMU). Tôi chắc tất cả các bạn đều biết điều gì đã xảy ra sau khi anh ta tốt nghiệp. Tôi thực sự hi vọng một ngày nào đó, một số trong các bạn sẽ làm ra lịch sử như điều đó.
—-English version—-
Business-technical skills
Students often asked me whether they should pursue a career in technical or in management. Of course, the answer really depends on the student’s goals in life and these goals often change with time. However, my answer is: “In the beginning you need technical skills but overtime you may want to switch into management area”.
As a software professional for many years, I believe the shift from technical skills to “business-technical” skills is very important in today’s market. Most companies can hire students with technical skills since they are trained in these skills but finding people with the business skills to manage projects or IT organization was something that could not easily be obtained. Today students in computer science are not trained in business skills. They are not trained in team work, many could not even communicate in business because they use “computing language” that customer does not understand. They do not know how to obtain requirements from customers or how to negotiate a contract. Many do not know how to estimate project’s efforts, time or even price. However, business students received training in project management could not manage software project either. They do not have the technical knowledge and do not understand the changing nature of software. Software project management is NOT project management because software always changes. Software is also intangible so to tracking progress of software project is difficult, if you are not technical enough. Software is also unique as it does require a lot of technical experiences in technology, platforms, language, systems, data base, features, and quality attributes. That is why the best software project managers usually come from people with lot of software experiences and with “proper training” in the business of software.
The US Bureau of Labor Statistics Occupational Outlook Handbook 2007 predicts that Systems Analyst and Software Engineer are expected to be among the fastest growing occupations through 2017. According to the government study in the US, Systems Analysts held 887,000 positions in 2006 (up from 268,000 positions in 2000) compared with 455,000 jobs in 2006 for computer programmers (down from 798,000 in 2000). The Handbook also states that employment for Computer programmers is “expected to grow slowly than other specialists.” And recent estimates by the Economic Policy Institute have put the number of U.S jobs being outsourced at approximately 330,000 to 500,000 jobs. About 75% of those were full-time computer programming jobs. According to Software Industry steering committee guidelines: A Systems Analyst is someone who strategize, plan and develop information systems or devise ways to apply existing systems’ resources to additional operations as taught in the Information System Management (ISM or IS) program. It also describes a Computer programmer is someone who writes programs according to the specifications determined by Systems Analysts, as taught in the Computer Science (CS) program. A Software Engineer is someone who architect, design and integrate systems into a cohesive “system of systems” to solve business problems as taught in the Software Engineering program. Based on these informations, the key to maintaining a good career after working in the technical area is to move up into more business-oriented positions such as Systems Analyst, Business Analyst, Project Manager, Systems Architect or Software Engineer. However, a computer programmer can’t just become a Systems Analyst or Software Engineer immediately. The transition takes time, more additional trainings and requires the right amount of experience and learning to be successful.
Let me give you some examples: Programmers often have to work with customers to obtain requirements and it is difficult when both sides can not communicate effectively. This is quite common because most programmers like to use “Computer languages” and most customers do not understand them. Customers often use “Business languages” that many programmers have no idea what they mean. Current Computer Science is focusing mostly in programming languages but not much in Requirements engineering or System analysis. However, people in Information System Management or Software Engineering are trained in both “languages” and that is why they can communicate effectively with both programmers and customers.
Programmers who have good technical background and experiences could take additional trainings to become software project managers. Software project manager is responsible for planning the project, negotiate with customers on resources, requirements, costs and schedule, hiring project team members and keeping track of the progress through every phase of development. As a manager, he is also responsible for assigning the work, dealing with everyday problems that affecting the work, and making sure each team member is working accordingly. Basically, software project manager must be a “business person”, a “technical person” as well as a “people oriented person” in order to succeed. To be the best, software project manager must work with technical and non-technical people at every level of the company as well as from the customer’s company. That is why this is NOT a “Learning on the job” as many programmers still think. Without additional trainings, it is impossible to make all the right decisions and to ensure project success.
Programmers who only like to work on technical skills without too much customer interaction may find Software engineering a better choice. This type of work is still technical but it involves more decision making to address the integration issues, the quality issues and how a new system will fit into the company’s old systems. In order to be successful, this line of work involves understand and control the components associated with the systems such as compatibility, scalability, security, cost, risk and other architecture factors. They must know how to decompose and isolate different components to fit them into the existing systems and in what order to implement each component according to an architecture plan. Without additional knowledge on how they could be integrated, it could be a disaster to integrate component that are not compatible with the current systems. This is the domain of Software engineering that programmers could take additional training courses on enterprise architecture, system architecture, product development, system engineering, interfaces and system integration so they can work as software engineers.
As I mentioned before, to be a good Systems analysts or Software engineer you must have “proper trainings” by enrolling in a good training programs. If you already have a strong technical background or already worked as a programmers than you could take additional trainings to become a high-level “business-technical” specialists. This is a very challenging work as you often work with senior managers, business managers, project managers, and customers, all of them have different perspectives, different views and opinions and by conducting trade-off analysis and balance their views, you could become the key person that can make the difference between success and failure. In this current global crisis, I have seen more and more companies hiring business analysts and software engineer to explore, review, architect and recommend systems that fit the business to prepare for the next “battle” when the economy recover. From my own perspective, I strongly believe software is still a great career with a promising future and it could be a good opportunity for students who like to aim high and take challenging works.
For people who already have extensive experiences in both technical and business but like to become senior managers (CIO or CEO), my recommendation is to enroll in an advanced degree program, such as an Master of Business Administration (MBA) or Master of Information System Management (MISM). To work for a global company or doing business globally you need to have advanced degree from university that is recognized globally. The relationship between Carnegie Mellon University with the Software Engineering Group of Vietnam (SEGVN) is a great opportunity to leverage your career as you could transfer to Carnegie Mellon or Seattle University as undergraduate student or after graduate from the CMU program at SEGVN member schools (Duy Tan, Van Lang and DTT) you could also enroll in the Master programs at both Carnegie Mellon or Seattle University.
As I shared with you an approach to improve your career by acquiring technical knowledge and business knowledge but there is one last advice: improve your foreign language, especially in English. As the world is getting smaller and flatter (I am sure that some of you have read “The World is Flat” from Thomas Friedman) communication is the critical skill, since this skill take much longer to develop so you need to start early. To build a solid foundation, you will need three factors: Communication – especially in foreign language, Technical and Business skills. Having all three is the key to moving up the career ladder at any company and it could mean the difference between being a programmer who can “code and test” or a project manager, a system analyst, an architect, a software engineer, a senior manager or even a founder of a global company that could change software industry in the future.
In this fast changing world, everything is possible. You may remember not long ago, two students at Harvard University dared to think big (They found a company called Microsoft) or two students from Stanford University also had a big dream (They found a company called Google). Few years ago, a student at Carnegie Mellon named James Gosling worked on a capstone project sponsored by Sun Microsystems to create a new programming language. As a joke to his friends in school he called it “Java” (As he drank a lot of coffee during the time at CMU). I am sure you all know what happened after he graduated. I really hope that someday, some of you will make history like that.