12 Jan, 2021
Thăng tiến nghề nghiệp
Tháng trước tôi có ăn trưa với vài cựu sinh viên. Bữa ăn thông thường nhanh chóng trở thành cuộc đối thoại về xu hướng hiện thời trong công nghiệp phần mềm, cách các công ti phần mềm toàn cầu lập kế hoạch và cách kĩ sư phần mềm có thể khớp với những kế hoạch đó. Phần lớn các cựu sinh viên của tôi đều làm việc trong công nghiệp phần mềm trong nhiều năm nhưng họ đã không biết cái gì sẽ là các bước tiếp của họ trong nghề nghiệp của mình. Họ hỏi làm sao họ khớp được và họ nên tập trung vào miền nào. Tôi cố vấn cho họ “Học thêm về kinh doanh của công ti bạn.”
Bởi vì phần lớn các cựu sinh viên của tôi đều đã có kĩ năng kĩ thuật và có kinh nghiệm trong các dự án phần mềm cho nên bước tiếp là đi lên trong nghề nghiệp của họ và học kĩ năng doanh nghiệp để quản lí các dự án phần mềm. Kĩ năng doanh nghiệp trở nên quan trọng hơn cho công nghiệp phần mềm khi nó đang thay đổi để điều chỉnh với xu hướng toàn cầu. Từ điều tôi đã thấy, công nghiệp phần mềm đã có nhiều người kĩ thuật như người thiết kế, người lập trình, người kiểm thử nhưng rất ít người quản lí phần mềm tốt.
Việc chuyển sang “miền doanh nghiệp” KHÔNG có nghĩa là họ có thể học vài môn học rồi có kĩ năng này mà nó yêu cầu nhiều thực hành và kinh nghiệm. Khuyến cáo của tôi là làm việc chuyển đổi “tại việc làm” bằng cách giả thiết có nhiều trách nhiệm hơn khi họ học kĩ năng doanh nghiệp. Tôi gợi ý cho họ rằng họ nên bắt đầu bằng cách tập trung vào phân tích hệ thống và thiết kế hệ thông bằng việc chấp nhận các trách nhiệm này cho dự án của họ. Với việc có những kĩ năng này, họ học cách phần mềm tương tác với phần cứng và cách hệ thống phần mềm khớp vào nhu cầu doanh nghiệp. Đây thực sự là việc làm của người kĩ sư hệ thống nhưng rất ít trường ngày nay cung cấp đào tạo kĩ nghệ hệ thống vì nó yêu cầu nhiều kinh nghiệm công nghiệp. Sau khi có kĩ năng này, họ có thể học nhiều kĩ năng doanh nghiệp hơn bằng việc giả thiết có nhiều trách nhiệm hơn trong làm việc với mọi người từ miền doanh nghiệp, đặc biệt với khách hàng. Đây là miền của kĩ nghệ yêu cầu hay phân tích doanh nghiệp được cần tới nhưng ít người có thể làm nó tốt. Qua thời gian, khi tự tin của họ phát triển, những kĩ năng và tri thức này sẽ trở thành một phần việc làm của họ khi họ tiến bộ trong nghề nghiệp của mình.
Tôi đã xem lại nhiều môn đào tạo quản lí nhưng tôi thấy rằng chừng nào chúng còn chưa có kĩ năng kĩ nghệ hệ thống (Kiến trúc, thiết kế, và tri thức giao diện phần cứng) và kĩ nghệ yêu cầu hay kĩ năng phân tích doanh nghiệp, họ sẽ KHÔNG ích lợi gì mấy từ các đào tạo này. Để có kĩ năng doanh nghiệp, họ phải có kinh nghiệm, để là người quản lí tốt họ phải biết mọi thứ về dự án phần mềm và điều này phải được xây dựng qua thời gian trong thực hành. Điều xấu nhất có thể xảy ra cho người lập trình tốt là được đề bạt thành người quản lí phần mềm mà không có thời gian thích hợp để chuẩn bị và không có kinh nghiệm trong miền thiết kế hệ thống và phân tích doanh nghiệp. Đó là lí do tại sao ngày nay, chúng ta vẫn có nhiều dự án phần mềm thất bại và rất ít người quản lí phần mềm tốt. Như tôi đã nói nhiều lần “Bằng việc làm điều đó, công ti sẽ mất người lập trình tốt và thu được người quản lí tồi.” Tôi đã khuyến cáo cho sinh viên của tôi: “Đừng bao giờ chấp nhận thăng cấp vào quản lí mà không có đào tạo đúng và chuẩn bị thích hợp bởi vì bạn sẽ thất vọng bởi sự bất lực của mình khi làm việc.”
Người quản lí phần mềm tốt PHẢI có cả kĩ năng kĩ thuật và kĩ năng doanh nghiệp. Những kĩ năng này KHÔNG thể được học trong lớp nhưng phải dựa trên thực hành thực tế. Người quản lí phần mềm tốt phải hiểu nhu cầu của khách hàng, có khả năng trao đổi tốt với khách hàng và các “kĩ năng mềm” này như kĩ năng trình bày, kĩ năng viết đề án, kĩ năng tài chính là bản chất. Tôi khuyến cáo các cựu sinh viên của tôi rằng họ cần “học nhiều về kinh doanh của công ti của họ” bằng việc giả định có trách nhiệm hơn, tham gia tích cực vào làm việc với người dùng để nhận diện vấn đề của họ, và giải quyết các vấn đề đó TRƯỚC KHI họ tham gia lớp học đào tạo về quản lí thêm. Chỉ thế thì họ mới có thể giả định vào vị trí quản lí có tự tin và có khả năng thăng tiến nghề nghiệp của mình trên nền tảng vững chắc. Có hiểu biết tốt về dự án phần mềm, họ có thể tăng tương tác với những người kinh doanh; họ có thể học nhiều hơn về vấn đề doanh nghiệp và tiếp tục cải tiến kĩ năng doanh nghiệp của mình.
Như tôi đã quan sát trên thị trường công nghiệp phần mềm, ngày nay Ấn Độ đang chi phối thị trường dịch vụ phần mềm nhưng Trung Quốc đang tiến nhanh để bắt kịp và cạnh tranh sẽ gay gắt trong vài năm tới. Vẫn đứng ở lập trình, kiểm thử và sẵn lòng làm việc nhỏ không phải là ý tưởng tốt. Cạnh tranh về giá không phải là giải pháp dài hạn, nếu giá thấp nhưng chất lượng kém, quản lí không tốt thì bạn sẽ không bao giờ có khả năng cạnh tranh trong thị trường toàn cầu. Để duy trì tính cạnh tranh, mọi công ti đều phải cạnh tranh về tri thức và kĩ năng. Bằng việc có dịch vụ tuyệt hảo và sự hài lòng tốt của khách hàng, công ti có thể phân biệt mình rõ ràng với các công ti khác và kiếm được nhiều kinh doanh hơn. Cách tốt nhất để dịch chuyển từ kĩ năng kĩ thuật sang kĩ năng doanh nghiệp là “học qua hành” trong việc làm hàng ngày và không cái gì tốt hơn là kinh nghiệm thực tế.
—-English version—-
Advancing your careers
Last month I had lunch with several former students. The casual lunch quickly became a conversation about current trends in the software industry, how global software companies were planning and how software engineer could fit into those plans. Most of my former students have been working in the software industry for several years but they did not know what will be their next steps in their careers. They asked how they would fit and what area they should focus on. I advised them “Learn more about the business of your company.”
Because most of my former students already have technical skills and have experiences in software projects so the next step is move up in their careers and learn about business skills to manage software projects. Business skills are becoming more important to the software industry as it is changing to adjust to the globalization trend. From what I have seen, the software industry already has many technical people such as designers, programmers, testers but very few good software managers.
The move to the “business area” does NOT mean they can take few courses then have the skill but it requires a lot of practices and experiences. My recommendation is to make the move “on-the-job” by assume more responsibility as they learn the business skills. I suggested to them that they should start by focusing on systems analysis and system design by accepting these responsibilities for their projects. By having these skills, they learn how software interacts with hardwares and how software system fits into a business needs. This is really a system engineer job but very few schools today offer system engineering trainings as it requires a lot of industry experiences. After having this skill, they could learn more business skills by assume more responsibilities in working with people from the business area, especially with the customers. This is the domain of requirements engineering or business analysis that are needed but few people can do it well. Over time, as their confidences grow, these knowledge and skills will become part of their jobs as they are progressing in their careers.
I have reviewed several management training courses but I found that unless they have the system engineering skills (Architect, design, and hardware interfaces knowledge) and requirements engineering or business analysis skills, they will NOT benefit much from taking these trainings. To have business skills, they must have experiences, to be a good manager they must know everything about software project and these must be built over time with practices. The worst thing that can happen to a good programmer is to get promoted to software manager without adequate time to prepare and without experiences in the system design and business analysis area. That is why today, we still have so many failed software projects and very few good software managers. As I have said several times “By doing that, company will lose a good programmer and gains a bad manager”. I have recommended to my students: “Never accept promotion to management without proper trainings and adequate preparation because you will be frustrated by your incompetent to do your job”.
A good software manager MUST have both technical skills and business skills. These skills can NOT be learned in classes but must be based on actual practices. A good software manager must understand customers’ needs, be able to communicate well with customers and these “Soft skills” such as presentation skills, writing proposal skills, financial skills are essential. I recommend to my former students that they need to “learn more about the business of their company” by assume more responsibilities, actively participate in working with users identifying their issues, and resolving those issues BEFORE they take additional management training classes. Only then, they can assume the management position with confidences and be able to advance their careers with strong foundations. Having a good understanding of software projects, they can increase their interactions with business people; they can learn more about business issues and continue to improve their business skills.
As I have observed on the software industry market, today India is dominating the software service market but China is moving fast to catch up and the competition will be tough in the next few years. To stay in programming, testing and willing to work for less is not a good idea. To compete in price is not a long term solution, if the price is low but the quality is bad, the management is not good then you will never be able to compete in global market. To stay competitive, every company must compete on knowledge and skills. By having superior services and good customer satisfaction, company can clearly distinguish itself from others and get more businesses. The best way to shift from technical skills to business skills is “learning by doing” in the daily jobs and nothing is better than actual experiences.