12 Jan, 2021
Nghề phần mềm
Nhiều sinh viên đã hỏi tôi họ có thể làm gì sau khi làm việc như người phát triển phần mềm trong nhiều năm. Có nhiều con đường nghề nghiệp mà người phát triển có kinh nghiệm có thể lựa chọn. Sau đây là một số con đường:
1) Kĩ sư yêu cầu hay Người phân tích nghiệp vụ: Người phát triển có vài năm kinh nghiệm kĩ thuật, và có chiều sâu nào đó về tri thức kĩ thuật có thể làm việc như kĩ sư yêu cầu để nhận diện nhu cầu nghiệp vụ của người dùng. Kĩ sư yêu cầu làm việc với khách hàng, người dùng, người quản lí dự án, và kiến trúc sư hệ thống để đảm bảo rằng các yêu cầu được viết ra rõ ràng và được hiểu bởi cả hai phía. Việc làm này là một nghề tăng trưởng nhanh, được cần tới trong công nghiệp phần mềm bởi vì nó có thể tạo ra khác biệt giữa thành công và thất bại. Bên cạnh các kĩ năng kĩ thuật, nó cũng yêu cầu kĩ năng trao đổi tốt như kĩ năng trình bày, kĩ năng viết, kĩ năng thương lượng và kĩ năng quan hệ khách hàng.
2) Lãnh đạo kĩ thuật hay kiến trúc sư: Những người phát triển có kinh nghiệm, có những kĩ năng kĩ thuật chuyên sâu nhưng không muốn làm việc với khách hàng có thể làm việc như kiến trúc sư hệ thống. Vị trí này có tính kĩ thuật cao; nó thường bao gồm việc ra quyết định then chốt về cách hệ thống mới sẽ khớp vào trong kiến trúc tổng thể của tổ chức. Kiến trúc sư phải hiểu các yêu cầu của khách hàng, ra quyết định về cách phân rã những yêu cầu này thành các cấu phần khác nhau mà sẽ được cần cho hệ thống mới, cách khớp các cấu phần này vào trong kết cấu nền hiện có, và theo trật tự nào để thực hiện từng cấu phần. Kiến trúc sư phải nhận diện các vấn đề và rủi ro cũng như yếu tố chi phí và trình bày chúng cho cấp quản lí để được chấp thuận.
3) Người quản lí dự án: Những người phát triển có kinh nghiệm có kĩ năng kĩ thuật qua kinh nghiệm làm việc có thể tiến lên vị trí người quản lí dự án. Người quản lí dự án là người lập kế hoạch, tổ chức và quản lí các hệ thống máy tính mới hay nghĩ ra cách áp dụng các hệ thống hiện có vào các vận hành phụ. Người làm việc này thường phải chịu trách nhiệm thuê nhân viên, lập lịch biểu, và giữ dấu vết của tiến độ qua mọi pha phát triển. Người này 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 có ảnh hưởng tới công việc đó, và đảm bảo từng người lập trình đều làm việc theo phân công cho riêng mình. Người quản lí dự án có thể tiến hành tốt nhất chức năng này nếu người đó hiểu đầy đủ công việc mà mình quản lí. Người quản lí dự án phải vừa là “người của mọi người” cũng như “người của kĩ thuật” để thành công bởi vì người đó phải làm việc với cán bộ kĩ thuật và phi kĩ thuật ở mọi mức của tổ chức. Bên cạnh đó, người quản lí dự án phải quản lí tổ của mình để tạo ra sản phẩm mong muốn đúng thời gian.
4) Người quản lí: Việc làm tối thượng cho người quản lí dự án nhìn vào để đi lên là trở thành người quản lí. Có vài kiểu người quản lí, người quản lí cấp trung hội tụ vào công việc chiến thuật quản lí hàng ngày và người quản lí cấp cao như Giám đốc thông tin (CIO) hay Giám đốc điều hành (CEO), người quản lí toàn công ti. Vị trí này phù hợp nhất cho mọi người có kinh nghiệm với nhiều năm kinh nghiệm làm việc bởi vì các công ti cần những người hiểu nghiệp vụ và cách áp dụng công nghệ làm cho nó tốt hơn. Việc làm này yêu cầu đào tạo thêm, đặc biệt về nghiệp vụ, tài chính và quyền lãnh đạo bởi vì có khả năng tuân theo các chỉ đạo là quan trọng, nhưng có khả năng đưa ra đánh giá riêng của bạn cũng quan trọng tương đương.
Bên cạnh kĩ năng kĩ thuật, tôi tin rằng kĩ năng trao đổi là rất quan trọng cho mọi người phần mềm, dù bạn là người lập trình hay chủ tịch công ti. Mọi người phải học là một người trao đổi tốt. Tất nhiên kĩ năng trao đổi cần nhiều thời gian hơn để phát triển bởi vì nó yêu cầu cả kinh nghiệm và đào tạo để trở nên hiệu quả. Ngày nay, phần lớn các khách hàng không hiểu kĩ thuật để mô tả yêu cầu của họ cho người phát triển phần mềm cho nên điều quan trọng là người kĩ sư yêu cầu phần mềm hiểu nhu cầu của họ bằng việc thảo luận những điều đó với họ qua việc dùng “ngôn ngữ thông tục.” Mặt khác, nhiều người kĩ thuật không hiểu nghiệp vụ mà họ phải thực hiện trong dự án bởi vì nhiều người không thích nói với khách hàng cho nên người kiến trúc sư hệ thống hay người lãnh đạo kĩ thuật phải giải thích các yêu cầu này bằng việc dùng “ngôn ngữ kĩ thuật” mà họ hiểu rõ. Học cách trao đổi, và có kiên nhẫn để thu lấy tri thức là kĩ năng bản chất mà nhiều người làm phần mềm không có và nhiều trường không dạy. Trao đổi không phải là về nói mà còn là về nghe, hiểu và có khả năng giải thích mọi sự theo cách rõ ràng và chính xác.
Chìa khoá để thăng tiến trong nghề nghiệp của bạn trong bất kì công ti nào là để cấp quản lí biết bạn biết gì. Bạn không thể cứ ở chỗ người lập trình mãi được bởi vì bạn phải phát triển kĩ năng mới, học những điều mới và đi lên. Bạn phải học cách trả lời các câu hỏi mà cấp quản lí hỏi, giải quyết các vấn đề khi chúng xảy ra, chấp nhận trách nhiệm mới trong dự án mới, và không ngần ngại đảm đương vị trí lãnh đạo và không ngần ngại chia sẻ ý tưởng tốt hơn. Bằng dự ứng thay vì phản ứng, bạn có thể đi xa bởi vì đó là khác biệt giữa “chỉ là người lập trình khác” hay là người hàng đầu cho việc đề bạt.
Công việc phần mềm là rất thách thức nhưng cũng rất đáng thưởng, bên cạnh việc chúng là việc làm được trả lương rất cao – Phần lớn người làm phần mềm đều làm ra nhiều tiền hơn các lĩnh vực khác và đó là nghề tăng trưởng nhanh nhất trên toàn cầu. Nó cũng có nhiều cơ hội hơn để làm việc ở qui mô quốc tế, theo nhiều nghiên cứu, trên 40% người làm phần mềm sẽ du hành trên thế giới để làm việc ở hải ngoại trong mười năm tới vì nhu cầu này là rất cao trên toàn cầu. Tất nhiên, để làm điều đó bạn cũng cần có kĩ năng ngoại ngữ.
Để trả lời câu hỏi của bạn về cái gì cần làm sau vài năm làm việc như người lập trình, câu trả lời của tôi là đi ra khỏi việc lập trình vào các khu vực kĩ thuật cao cấp hay các vị trí có xu hướng doanh nghiệp như kiến trúc sư hệ thống hay người quản lí dự án. Tất nhiên điều đó yêu cầu thời gian và nỗ lực về phần bạn nhưng tôi tin bản lộ trình nghề nghiệp này có thể giúp bạn quyết định phải làm gì.
Trong cuộc đời chuyên môn của mình, xin đừng quên rằng là nhà chuyên nghiệp bạn phải biết cách cân bằng cuộc sống và công việc bởi vì cuộc sống không phải là làm việc và làm tiền mà bạn phải nhớ rằng “Thứ nhất bạn là người và nghề chuyên nghiệp phần mềm tới sau” cho nên cần tận hưởng cuộc sống của bạn như một người có trách nhiệm với bản thân mình, gia đình mình, xã hội mình và đất nước mình.
—-English version—-
A Software Career
Many students have asked me what they could do after working as software developers for many years. There are many career paths that experienced developer can select. Following are some:
1) Requirements engineer or Business Analysts: Developer who has few years of technical experience, and a certain depth of technical knowledge could work as requirements engineer to identify business needs of users. Requirement engineer works with customers, users, project managers, and systems architects to ensure that the requirements are clearly written and understood by both sides. This job is a fast growing occupation that is needed in the software industry because it can make the difference between success and failure. Beside technical skills, it also requires good communication skills such as presentation skill, writing skill, negotiation skills and customer relationship skill
2) Technical Lead or Architect: Experienced developers who have advanced technical skills but do not want to work with customers could work as system architect. This position is highly technical; it often involves making key decisions on how the new system will fit into the organization’s overall architecture. The architects must understand customers’ requirements, make decisions about how to decompose these requirements into different components that will be required for the new system, how to fit these components into the existing infrastructure, and in what order to implement each component. The architect must identify issues and risks as well as the cost factor and present them to management for approval.
3) Project Manager: Experienced developers who possess technical skills through work experience can advance into project manager position. The project manager is someone who plan, organize and manage new computer systems or devise ways to apply existing systems to additional operations. This job is often responsible for hiring the staff, setting the schedule, and keeping track of the progress through every phase of development. This person is also responsible for assigning the work, dealing with everyday problems affecting that work, and making sure each programmer is working on his own assignment. The project manager can best carry out this function if he truly understands the work he is managing. The project manager must both be a “people person” as well as a “technical person” in order to succeed because he must work with technical and non-technical staff at every level of the organization. Additionally, the project manager has to manage his team effectively to produce the desired product on time.
4) Manager: The ultimate job for many project managers looking to move up is to become the manager. There are several types of manager, the middle manager who focus on managing daily tactical work and the senior manager such as Chief Information Officer (CIO) or Chief Executive Officer (CEO) who manage the company. This position is best suited for very experienced person with many years of work experience because companies want people who understand the business and how to apply technology to make it better. This job requires additional training, especially in business, finance and leadership because being able to follow directions is important, but being able to make your own judgments is equally important.
Beside technical skills, I believe that communication skills are very important for all software people, whether you are a programmer or a president of the company. Everyone should learn to be a better communicator. Of course communication skills take much longer to develop because it requires both experience and training to become effective. Today, most customers do not understand technical to describe their requirements to software developers so it is important that software requirement engineer understand their needs by discussing thing with them using “Regular language”. On the other hand, many technical people do not understand the business that they must implement in the project because many do not like to talk with customers so system architect or technical lead must explain these requirements using “Technical language” that they understand well. Learning to communicate, and having the patience to gain knowledge is an essential skill that many software people do not have and many schools do not teach. Communication is not about talking but also listening, understanding and be able to explain thing in a clear and concise manner.
The key to advance your career in any company is to let management know what you know. You can not stay as programmer for ever because you like to code, you must develop new skills, learning new things and moving up. You must learn how to answer questions that management ask, solve problems when they happen, accept new responsibilities in new projects, and do not hesitate to assume leadership position and do not reluctant to share a better idea. By being pro-active rather than reactive, you could go far because it is the difference between being “just another programmer” or being the top person for a promotion.
Software jobs is very challenging but also very rewarding, beside they are very high paying jobs – Most software people make more money than other fields and it is the fastest growing occupations globally. It also have more chance to work internationally, according to several studies, over 40% of software people will travel to work oversea in the next ten years as the demand is very high globally. Of course, to do that you also need to have foreign language skill.
To answer your question on what to do after several years working as programmer, my answer is to move out of programming into more advanced technical areas or business-oriented positions such as systems architect or project manager. Of course it requires time and efforts on your part but I believe this career roadmap can help you to decide what to do.
During your professional life, please do not forget that as a professional you must know how to balance your life and work because life is not about working and make money but you have to remember that “You are a person first and a software professional later” so enjoy your life as a person who has responsible for yourself, your family, your society, and your country.