12 Jan, 2021
Chuyên nghiệp phần mềm
Một số trong các bạn hỏi tôi về từ “kĩ sư phần mềm chuyên nghiệp” mà tôi thường dùng cho nên tôi giải thích nó ở đây:
Theo định nghĩa trong từ điển, người chuyên nghiệp là “ai đó làm tiền từ kĩ năng,” – Đây là giải thích đơn giản và KHÔNG giải thích nó một cách đầy đủ. Tôi tin nhà chuyên nghiệp đúng phải có nhiều hơn chỉ là kĩ năng làm tiền. Theo ý kiến của tôi, a “nhà chuyên nghiệp” phải có “tính cách chất lượng” sẽ phân biệt họ với những người khác. Cá tính chất lượng của người “chuyên nghiệp phần mềm” là:
1) Lãnh đạo: Có khả năng lãnh đạo, động viên người khác và được người khác kính trọng. Người lãnh đạo tốt thừa nhận những kĩ năng của các thành viên tổ khác, và chắc họ được trao cho những thách thức thích hợp cho nên họ có thể tiến lên trong nghề nghiệp của họ. Quyền lãnh đạo KHÔNG phải là nhãn hiệu mà là cá tính của một người. (Một quan niệm sai là tất cả những người quản lí đều là người lãnh đạo) Quyền lãnh đạo bao gồm việc KHÔNG yêu cầu bất kì ai làm cái gì đó mà bạn không sẵn lòng tự mình làm. Quyền lãnh đạo được kính trọng và sự kính trọng KHÔNG thể bị ép buộc, nó không phải là việc làm như người lãnh đạo dự án hay lãnh đạo kĩ thuật, người được cho nhãn hiệu việc làm này, một số người có thể là người lãnh đạo nhưng một số có thể không.
2) Làm việc tổ: Có khả năng hợp tác chân thành với các thành viên tổ khác để làm cho công việc được thực hiện có hiệu quả và hiệu lực. Thành viên tổ tốt phải làm việc để tận dụng ưu thế lẫn nhau và KHÔNG chỉ ưu thế của riêng họ. Thành viên tổ tin cậy vào người khác và chia sẻ công việc với người khác mà không ngần ngại. Thành viên tổ tốt bao giờ cũng biết rằng người quản lí và khách hàng là một phần của tổ và làm việc cùng nhau để đạt tới mục đích chung.
3) Tính đảm nhiệm: Có khả năng chấp nhận trách nhiệm về công việc được phân công. Có khả năng thực hiện nhiệm vụ độc lập không cần ai đó kiểm tra. Người chuyên nghiệp phần mềm thu được sự tin cậy của người khác, những người tin vào người đó rằng người đó đơn giản có thể làm việc tốt. Chẳng hạn, người lập trình phần mềm lập trình cẩn thận và đảm bảo mã làm việc không có lỗi. Nhà chuyên nghiệp phần mềm để thời gian nghiên cứu các yêu cầu và đặc tả và làm tài liệu cho công việc. Họ kiểm tra các công việc hiện thời và quá khứ để đảm bảo chúng có chất lượng cao. Người chuyên nghiệp phần mềm tốt cũng quan tâm về đạo đức, hiểu các vấn đề pháp lí cơ sở như cấp phép phần mềm và luật sở hữu trí tuệ.
4) Trao đổi: Có khả năng giải thích mọi sự một cách rõ ràng, chính xác và lắng nghe những người khác. Trao đổi là hai chiều cho nên nhà chuyên môn phần mềm tốt kính trọng các thành viên tổ khác và lắng nghe họ khi họ diễn đạt cách nhìn của họ. Công việc tổ KHÔNG thể xảy ra mà không có trao đổi tốt. Trao đổi cũng có nghĩa là nhà chuyên môn biết khi nào hỏi nếu mọi sự không rõ ràng. Trao đổi của các nhà chuyên môn không chỉ là nói miệng mà còn là viết, minh hoạ (như, email, tài liệu, bài trình bày, biểu đồ và tài liệu viết).
5) Cải tiến liên tục tri thức và kĩ năng: Có khả năng cập nhật cho các kĩ năng. Nhà chuyên môn phần mềm bao giờ cũng duy trì nhận biết về điều diễn ra trong công nghiệp. Họ biết xu hướng hiện thời là gì trong công nghệ và sẵn lòng học điều mới. Các nhà chuyên môn phần mềm hiểu việc học cả đời và bao giờ cũng bắt kịp với công nghệ mới nhất và tìm cách cải tiến kĩ năng của mình. Về căn bản các nhà chuyên nghiệp có mối quan tâm đích thực tới việc học bằng việc dành thời gian để đọc các tài liệu kĩ thuật (sách, website, blog v.v.) cho nên họ biết cái gì xảy ra trong công nghiệp và khu vực nào đang thay đổi cho nên họ có thể học nhiều hơn. Người kĩ sư phần mềm giỏi nhất vẫn học về phần mềm.
Là người kĩ sư phần mềm là một điều, là “kĩ sư phần mềm chuyên nghiệp” là điều khác. Tôi chân thành mong ước rằng bạn hiểu sự khác biệt này, nhiều người trong các bạn sẽ để thời gian cải tiến kĩ năng của bạn và là “nhà chuyên nghiệp phần mềm.”
—-English version—-
Software professional
Some of you asked me about the word “Professional software engineer” that I frequently used so I want to explain it here:
By definition in dictionaries, a professional is “someone who makes money from a skill,” – This is a simple explanation and does NOT explain it fully. I believe a true professional should have more than just a skill to make money. In my opinion, a “professional” should have “quality characters” that will distinguish them from others. The quality characters of a “Software Professional” are:
1) Leadership: Be able to lead, motivate others and being respected by others. A good leader recognizes the skills of other team members, and make sure they are given appropriated challenges so they can advance in their careers. Leadership is NOT about a title but a character of a person. (It is a misconception that all managers are leaders) Leadership involves NOT asking anyone to do something that you would not be willing to do yourself. Leadership is being respected and respect can NOT be forced, it is not a job such as project leader or technical leader who are given the job title, some maybe leaders but some may not.
2) Teamwork: Be able to genuinely cooperate with other team members to get the work done effectively and efficient. Good team members should work to mutual advantage and NOT just their own. A team member trusts others and shares the work with others without hesitation. A good team member always knows that managers and customers are part of the team and work together to achieve a common goal.
3) Accountability: Be able to accept responsibility for the work assigned. Be able to perform a task independently without someone checking up. A software professional earn the trust of others who believes in him that he can simply do a good job. For example, a software programmer is carefully programming and make sure the code works without defects. Software professionals take time to study the requirements and specifications and document the works. They test all current and past works to ensure they are of high quality. A good software professional also concerns about ethics, understands basic legal issues such as software licensing and intellectual property law.
4) Communication: Be able to explain things clearly, precisely and listen well to others. Communication is a two ways so a good software professional respects other team members and listens to them as they express their views. Teamwork can NOT happen without good communication. Communication also means that a professional know when to ask questions if things are not clear. Professional’s communication is not just verbal but also in writing, illustrating (e.g., email, document, presentation, diagrams, and written documents).
5) Continuously Improving knowledge and skills: Be able to keeping skills up to date. Software professionals always staying aware of what is going on in the industry. They know what the current trends in technology are and are willing to learn new thing. Software professionals understand lifelong learning and always keep up with the latest technology and looking for way to improve their skills. Basically professionals have genuine interest in learning by spend time to read technical documents (Books, websites, blogs etc.) so they know what happens in the industry and which areas are changing so they can learn more. The very best software engineers are still learning about software.
Being a software engineer is one thing, being a “Professional software engineer” is another thing. I sincerely wish that as you understand the differences, many of you will take time to improve your skills and be a “Software professional”.