Huỳnh Quốc Đạt

PGĐ, Đồng sáng lập
VUTAVN CO.,LTD

Nơi ghi chép và chia sẻ những trải nghiệm của mình trong quá trình học tập và làm việc. Hy vọng, ở đây bạn sẽ tìm thấy được những điều bạn cần tìm!


Lộ trình phát triển của một Software Engineer

Lộ trình phát triển của một Software Engineer
Mục lục

Đọc thêm: Phân biệt giữa Coder, Programmer, Developer và Software engineer


Nói chuyện với nhiều sinh viên, mình nhận thấy phần lớn các bạn còn rất mông lung về hướng đi của mình. Không khó để biết rằng khi còn đi học, mình nên đi thực tập hoặc tham gia vào nhiều cuộc thi, cày nhiều project để có thêm kỹ năng, kiến thức.
Nhưng sau đó thì sao?
Thực tập xong thì làm gì?
Trong 3 năm, 5 năm hay 10 năm nữa, bạn muốn trở thành ai?

Đáng tiếc rằng, những câu hỏi trên, không phải bạn trẻ nào cũng có câu trả lời.


Dành cả thanh xuân để dùi mài kinh sử trên giảng đường, chắc hẳn ai cũng mong muốn có một tương lai xán lạn. Vậy nên ở bài viết này, chúng mình muốn giúp bạn vẽ nên tương lai ấy, bằng cách đưa ra những nét quan trọng nhất về lộ trình phát triển của một Software Engineer. Mong rằng sau khi đọc bài viết này, bạn có thể xác định được vị trí hiện tại của bản thân, cũng như biết cách chuẩn bị cho tương lai của mình.

1. Intern/Trainee Software Engineer

Định nghĩa: Intern (thực tập sinh) thường là vị trí cho các bạn sinh viên từ năm 2, năm 3 trở lên có thể vừa học vừa làm (part-time) hoặc đi làm toàn thời gian (full-time). Thời gian cho vị trí thực tập sinh thường kéo dài từ 3 tháng đến 1 năm, tuỳ từng công ty và từng vị trí.
Yêu cầu: Với vị trí này, nhà tuyển dụng thường quan tâm đến 2 yếu tố:
- Nền tảng — phần quan trọng nhất — là các kiến thức chuyên ngành mà bạn học được ở trường. Nhà tuyển dụng sẽ đưa ra các câu hỏi và tình huống để kiểm tra xem liệu bạn có thể đáp ứng yêu cầu của vị trí ứng tuyển hay không.
- Tiềm năng cũng là một yếu tố quan trọng không kém, thường được đánh giá dựa trên suy nghĩ logic, khả năng giải quyết vấn đề, tư duy lập trình, cũng như thái độ và mục tiêu trong công việc của bạn.
Công việc: Nhiệm vụ của Intern thường là code các module đơn giản, fix bugs, tìm hiểu về các sản phẩm, project của công ty dưới sự hướng dẫn của các tiền bối đi trước. Nhiều công ty sẽ tạo ra những server hoặc sản phẩm riêng cho Intern tự “mò mẫm”, cũng có những công ty như VUTA cho phép bạn tự mình tham gia xây dựng sản phẩm chân chính. Ở giai đoạn này, nếu chịu khó học hỏi và “lăn xả”, bạn sẽ góp nhặt được rất nhiều kinh nghiệm quý giá đấy!

2. Fresher/Junior Software Engineer

Định nghĩa: Fresher/Junior Software Engineer có thể hiểu là vị trí dành cho sinh viên mới tốt nghiệp hoặc mới bắt đầu công việc, chưa có nhiều kinh nghiệm.
Yêu cầu: Trong buổi phỏng vấn, một Fresher cần phải nắm chắc kiến thức chuyên môn và biết cách vận dụng vào thực tế. Trước khi đi phỏng vấn ở bất cứ đâu, hãy chắc rằng bạn đã ôn tập kỹ các kiến thức về:
- Computer Science background: Data Structure & Algorithms, Object Oriented Programming, Design Patterns, Databases, Networking, Operating Systems
- Programming languages: JavaScript, Python, C, C++…
- Databases: MySQL/NoSQL (Redis, MongoDB)/SQL Server
- Operating System: Ubuntu/CentOS/Linux
Công việc: Khác với Intern, bạn sẽ được giao nhiều “trọng trách” hơn, ví dụ như đảm đương hẳn một project với tư cách là một nhân viên chính thức. Giờ đây, bạn phải sẵn sàng học cách chịu trách nhiệm chính và hoàn thành các deadline. Được tự mình tạo nên một website chắc chắn sẽ làm cho bạn hứng thú phải không nào?

3. Software Engineer

Định nghĩa: Software Engineer thường dùng để chỉ các bạn Engineer đã đi làm khoảng 2 năm trở lên với nhiều kỹ năng và kiến thức liên quan đến công việc thực tế.
Yêu cầu: Ngoài những yêu cầu như với Fresher, nhà tuyển dụng còn mong muốn ở bạn nhiều kinh nghiệm thực tế hơn, cùng kỹ năng tổ chức và giải quyết công việc, khả năng tự học và phát triển bản thân, cũng như các kỹ năng mềm khác như: làm việc nhóm, giao tiếp, trình bày và teamwork.
Công việc: Một Software Engineer sẽ đảm đương nhiều công việc với độ phức tạp cao hơn, ít sự giám sát và hướng dẫn của Senior hơn so với Junior Software Engineer. Cụ thể, bạn sẽ tham gia vào những module phức tạp hơn, được đóng góp nhiều hơn vào việc phát triển sản phẩm, và thậm chí là làm mentor cho các bạn Intern hoặc Junior.

4. Senior Software Engineer

Định nghĩa: Vị trí Senior Software Engineer có thể coi là giấc mơ của nhiều kẻ mới vào nghề: có hiểu biết sâu rộng về nhiều mảng kiến thức, có thể tự mình phát triển những tính năng phức tạp, hiểu rõ về vòng đời ứng dụng, cơ sở dữ liệu, thành thạo các công nghệ và quy trình, nhiều khả năng thăng tiến…
Yêu cầu: Khi đã “vỗ ngực xưng danh” là một Senior Software Engineer, bạn sẽ phải chứng minh bản thân bằng kỹ năng thực tế và sự chủ động trong công việc. Số năm làm việc không phải là tất cả, vì có “senior” hay không phải xem kiến thức và kỹ năng của bạn đã thành thục đến đâu.
Công việc: Bên cạnh coding, Senior Software Engineer sẽ phải tham gia những buổi họp high-level để cho ra hướng đi, design cũng như solution cho sản phẩm. Trong team, các Senior cũng thường phải đóng vai trò là người hướng dẫn các bạn còn non hơn, cũng như tham gia vào các chương trình training cho thực tập sinh hoặc nhân viên mới.

5. Technical Lead/Team Leader

Định nghĩa: Khác với Senior Software Engineer, Technical Lead/Team Leader là khi bạn trở thành “anh cả” của một hoặc nhiều team kỹ thuật.
Yêu cầu: Vị trí Technical Lead không chỉ yêu cầu bạn có kỹ năng và kinh nghiệm dày dặn, mà còn đòi hỏi khả năng quản lý, phân công công việc và đôn đốc cả quá trình tạo ra sản phẩm.
Công việc: Bạn sẽ là người chịu trách nhiệm về kỹ thuật cho cả team, tham gia các cuộc họp với Manager để quyết định phát triển sản phẩm bằng công nghệ gì. Từ đó, Team Leader sẽ phân công công việc, cũng như phổ biến các yêu cầu cụ thể cho cả team. Những công việc như hướng dẫn, quản lý chương trình training cho các thành viên trong team cũng là một phần của vị trí này.
Technical Lead/Team Leader là một vị trí vô cùng quan trọng, đòi hỏi nhiều năm phấn đấu và có thể sẽ là bến đỗ cuối cùng của bạn. Tuy nhiên, nếu muốn tiến xa hơn thì đây cũng là lúc bạn cần chuẩn bị cho một ngã rẽ khác trong sự nghiệp của mình.



Trước ngưỡng cửa này, bạn sẽ phải lựa chọn 1 trong 2 hướng: đào sâu về chuyên môn (technical) hoặc mở rộng sang quản lý (management). Với mỗi lựa chọn, con đường phía trước đều sẽ thay đổi hoàn toàn cuộc đời bạn, vậy nên hãy đọc tiếp và cân nhắc thật kỹ để tìm ra hướng đi phù hợp cho mình nhé.

6. Hướng Technical: Software Architect

Định nghĩa: Software Architect (kiến trúc sư phần mềm) là một chức danh nhận được nhiều sự ngưỡng mộ trong giới IT. Có thể nói đây là nấc thang cao nhất trong sự nghiệp của một Software Engineer theo hướng kỹ thuật.
Yêu cầu: Để trở thành Software Architect yêu cầu bạn phải có hiểu biết vô cùng rộng về các hệ thống phức tạp để có thể đưa ra giải pháp, hoàn thành những yêu cầu (kể cả còn khá mơ hồ) của khách hàng. Phải mất từ 10–20 năm để bạn có thể tích luỹ đủ kiến thức, cũng như thành thạo những kỹ năng cần thiết cho vị trí này.
Công việc: Sau khi nhận yêu cầu về sản phẩm, bạn sẽ phải phân tích và đánh giá các yêu cầu trên, sau đó làm việc với tất cả các Team Leader và Manager (PM, Technical Lead, Test Lead…) để xây dựng team và đưa ra các quyết định quan trọng về kiến trúc. Engineering team sẽ lo phần code và hoàn thiện sản phẩm, nhưng Software Architect cũng luôn phải theo sát tiến độ công việc, từ khi xây dựng, vận hành cho đến khi duy trì và mở rộng hệ thống.

7. Hướng Management: Project Manager

Định nghĩa: Đúng như cái tên Project Manager (PM — quản lý dự án), giờ đây bạn sẽ trở thành người chịu trách nhiệm tổ chức, giám sát và đảm bảo các project được hoàn thành đúng với yêu cầu và tiến độ được giao.
Yêu cầu: Để trở thành một PM không nhất thiết yêu cầu bạn phải trải qua giai đoạn Senior Software Engineer hay Technical Lead. Tuy nhiên, bạn cần có một nền tảng đủ mạnh về Programming để có thể hiểu được bản chất và các bước đi của một dự án kỹ thuật, cũng như các phương pháp và quy trình để thực hiện chúng (Scrum, Agile, Waterfall…). Các kỹ năng mềm như quản lý dự án, nhân lực, cũng như kỹ năng giao tiếp, thuyết trình cũng là những đầu mục must-have nếu bạn muốn trở thành PM.
Công việc: PM sẽ phải làm việc với tất cả các team, từ Software Architect để làm rõ quy trình, với Team Leader để phân bố nhân lực, với các Software Engineer để theo sát tiến độ, với Test/QA Team để đảm bảo chất lượng cho project, thậm chí cả với… HR Team để tuyển thêm người. Bạn sẽ không phải dùng nhiều đến kỹ năng coding hay dấn sâu vào các vấn đề kỹ thuật, nhưng sẽ vô cùng “mệt đầu” khi chạy theo một (hoặc vài) dự án từ đầu đến cuối đấy!

Ngoài những nhánh chính kể trên, chúng ta còn rất nhiều nhánh nhỏ khác như: BA (Business Analyst), Data Scientist, BrSE (Bridge System Engineer), DevOps Engineer… Hãy cho chúng mình biết bạn muốn tìm hiểu thêm về vị trí nào nhé!

Tác giả: Uyen Tran

Từ khóa được tìm kiếm nhiều nhất:  lộ trình phát triển, Software Engineer, Front-end, Back-end, Thực tập sinh, Technical Lead, Software Architect, Project Manager

Đừng quên vote ở đây nè:
5 / 5 (10 phiếu bầu)
Xem nhiều gần đây
Series Khóa học NukeViet CMS cơ bản

  Hãy để lại ý kiến của bạn nhé!

  • Huỳnh Quốc Đạt Huỳnh Quốc Đạt 3 tháng trước
    Thực tập xong thì làm gì?
    Trong 3 năm, 5 năm hay 10 năm nữa, bạn muốn trở thành ai?