16 Apr, 2021
Bản lộ trình cho người phát triển phần mềm
Một sinh viên khoa học máy tính năm thứ nhất hỏi tôi: “Thầy khuyên gì để trở thành người phát triển phần mềm giỏi? Em cần gì để là người phát triển chuyên nghiệp? Xin thầy lời khuyên.”
Đáp: Là sinh viên đại học, bạn sẽ học một số môn máy tính mỗi năm, điều sẽ cho bạn nền tảng tốt về tri thức kĩ thuật của bạn. Tuy nhiên để là người phát triển phần mềm giỏi, bạn cần làm nhiều hơn. Sau đây là bản lộ trình mức cao mà tôi thường chia sẻ với sinh viên của tôi.
Với sinh viên năm thứ nhất, bạn có thể bắt đầu bằng việc đọc sách lập trình để học về qui trình phát triển rồi làm các bài tập bằng việc viết mã. Bạn càng viết nhiều mã bạn sẽ càng cải tiến tốt hơn kĩ năng lập trình của bạn. Không thành vấn đề bạn học ngôn ngữ nào, dù nó là PHP, Java, hay C++ v.v. Cuối cùng khi bạn có kĩ năng đủ, bạn có thể đọc nhiều hơn về các phương pháp phát triển phần mềm, hiểu các cách phát triển vòng đời đa dạng, và các công cụ. Vào mùa hè, bạn nên tiếp tục thực hành viết mã để cải tiến kĩ năng lập trình của bạn. Bạn nên làm chủ ít nhất một ngôn ngữ lập trình vào lúc bạn bắt đầu năm thứ hai.
Trong năm thứ hai, bạn có thể cải tiến kĩ năng của bạn bằng việc thành lập tổ với các sinh viên khác, đặc biệt với ai đó giỏi hơn bạn. Trong tổ tự quản này, bạn thách thức lẫn nhau, thảo luận về các kĩ thuật lập trình, phương pháp, công cụ và học từ người khác. Đây là chỗ bạn xây dựng các kĩ năng chuyên nghiệp của bạn cũng như kĩ năng mềm. Bạn có thể theo các websites, forums, và blog kĩ thuật để mở rộng tri thức của bạn. Công nghệ thay đổi nhanh chóng cho nên giữ bắt kịp với xu hướng hiện đại trong công nghiệp là quan trọng. Người chuyên nghiệp bao giờ cũng đọc cho nên xây dựng thói quen đọc tốt là quan trọng. Trong mùa hè, bạn cần tiếp tục cải tiến kĩ năng của bạn bằng việc phát triển một số sản phẩm phần mềm đơn giản như websites hay app di động. Có nhiều bài học trên internet mà bạn có thể học từ đó cho nên tận dụng lấy ưu thế của những cung cấp này.
Đến lúc bạn lên năm thứ ba, bạn có thể kiếm việc làm bán thời phát triển phần mềm. Tìm ai đó có thể cần kĩ năng của bạn và đề nghị với họ để cho bạn có thể thực hành nhiều hơn. Không thành vấn đề liệu họ có trả tiền cho bạn hay không. Điều bạn cần là thực hành. Bạn có thể giúp các sinh viên khác bằng việc tạo ra websites cho họ hay tình nguyện giúp cải tiến website của trường. Bạn có thể phát triển một số app di động và chia sẻ chúng với các sinh viên khác. Hỏi họ về điều họ muốn và xem liệu bạn có thể phát triển một app cho nó không. Bạn càng thực hành nhiều, bạn càng học nhiều và sẽ học nhiều bằng việc thực tế làm việc cho người khác. Bạn sẽ học cách thu được yêu cầu đúng, bạn sẽ học cách tương tác với các kiểu người khác, và bạn sẽ học cách thiết kế sản phẩm phần mềm. Không có gì tốt hơn là thực tế làm công việc thực.
Vào mùa hè năm thứ ba, bạn sẽ cần tìm việc làm mùa hè hay làm thử việc với công ti phần mềm. Không cái gì tốt hơn là làm việc dưới sự giám sát của người phát triển phần mềm có kinh nghiệm, người có thể dạy bạn nhiều hơn điều bạn có thể học trong sách, hay websites. Việc làm mùa hè vài tháng có thể giúp bạn phát triển nhiều kinh nghiệm làm việc hơn bạn có thể hình dung. Đến lúc này bạn sẽ hiểu rằng điều bạn đã học trong trường phần lớn là tri thức mức cao và lí thuyết nhưng bằng việc áp dụng những lí thuyết này vào thực hành, bạn sẽ phát triển các kĩ năng mà sẽ làm cho bạn làm được nhiều hơn. Về căn bản không có các lí thuyết này, bạn chỉ có thể làm công việc giới hạn (phần lớn là công việc không thiết kế tốt hay không bảo trì được, bạn có thể có được việc viết mã nhưng không đủ thanh nhã hay phức tạp.) Bằng việc có cả tri thức và thực hành, bạn sẽ phát triển kĩ năng chuyên nghiệp.
Đến lúc bạn sang năm thứ tư, bạn đã có tri thức và kĩ năng vững chắc. Đây là lúc bạn hội tụ vào một khu vực đặc thù và công nghệ đặc biệt mà bạn muốn xây dựng nghề nghiệp của bạn. Khoa học máy tính và kĩ nghệ phần mềm có nhiều chuyên môn. Đây là lúc bạn để cho đam mê của bạn giúp bạn lựa chọn khu vực nào bạn muốn theo đuổi và loại việc làm nào bạn muốn làm. Bạn nên hội tụ vào việc tìm việc làm lúc đầu năm thứ tư, KHÔNG để mãi tới khi tốt nghiệp. Nếu bạn làm tốt trong việc làm mùa hè, cơ hội là bạn sẽ kiếm được đề nghị việc làm ở công ti bạn đã làm việc trong mùa hè.
—-English version—-
A roadmap for software developer
A first year Computer Science student asked me: “What is your advice on becoming a good software developer? What do I need to be a professional developer? Please advice.”
Answer: As a college student, you will take a number of computer courses each year which will give you a good foundation for your technical knowledge. However to be a good software developer, you need to do more. Following is a high level roadmap that I often share with my students.
For first year students, you could start by reading programming books to learn about the development process then do the exercises by writing code. The more you write code the better you will improve your programming skills. It does not matter what language you learn, whether it is PHP, Java, or C++ etc. Eventually when you have sufficient skills, you may want to read more about software development methods, understand various lifecycle developments, and tools. In the summer, you should continue to practice writing code to improve your programming skills. You should at least master one programming language by the time you start the second year.
In the second year, you may want to improve your skills by form team with other students, especially someone who are better than you. In this self-organizing team, you challenge each other, discuss programming techniques, methods, tools and learn from others. This is where you build your professional skills as well as soft-skills. You may want to follow technology websites, forums, and blogs to expand your knowledge. Technology changes fast so keep up with the current trend in the industry is important. Professional people always read so building a good reading habit is important. During the summer, you need to continue to improve your skills by develop some simple software products such as websites or mobile apps. There are many tutorials on the internet that you can learn from so take advantage of these offering.
By the time you go to the third year, you may want to get a part time job develop software. Find someone who may need your skills and offer to them so you can practice more. It does not matter whether they pay you or not. What you need is to practice. You may want to help other students by create websites for them or volunteer to help improve the school’s website. You may want to develop some mobile apps and share them with other students. Ask them for what they want and see if you can develop an app for it. The more you practice, the more you learn and you will learn a lot by actually doing work for others. You will learn how to get the right requirements, you will learn how to interact with different types of people, and you will learn how to design a software product. There is nothing better than actually doing real works.
In the summer of the third year, you will need to find a summer job or an internship with a software company. Nothing better than to work under the mentoring of experienced software developers who can teach you much more than what you can learn in books, or websites. A few months summer job can help you to develop more working experience than you can imagine. By this time you will understand that what you have learned in school is mostly high level knowledge and theories but by apply these theories into practice, you will develop the skills that let you do more. Basically without these theories, you can only do limited works (Mostly not well design or non-maintainable works, you can get the code work but it is not elegant or sophisticated enough.) By having both the knowledge and the practice, you will develop professional skills.
By the time you get to the fourth year, you already have a very strong knowledge and skills. This is the time where you focus on particular area and specific technology that you want to build your career on. Computer Science and Software Engineering have many specializations. This is the time where you let your passion help you to select which special area that you want to pursue and what kind of job that you want. You should focus on finding a job at the beginning of the fourth year, NOT until you graduate. If you do well in the summer job, the chance is you will get a job offer at the company that you worked in the summer.