Trong bài viết này, tôi muốn kéo bức màn bí ẩn lên và chỉ cho bạn một con đường sự nghiệp tiềm năng từ sự khởi đầu trong lĩnh vực kỹ thuật như một Junior Programmer cho đến đỉnh cao nhất là trở thành một CTO (Giám đốc công nghệ).
Lưu ý: Nhiều sự nghiệp lớn dừng lại ở các điểm khác nhau của nấc thang nghề nghiệp và ở lại đó cho đến tuổi nghỉ hưu. Một số sự nghiệp thậm chí đã bỏ qua một vài nấc thang. Nhưng các vai trò quản lý và lãnh đạo không phải là sẽ phù hợp cho tất cả mọi người, và bạn có thể sẽ thấy mối quan tâm của mình trong quản lý thay đổi theo năm tháng. Khi bạn đang ở độ tuổi 20, bạn có thể ghét ý tưởng về việc trở thành một nhà quản lý, nhưng khi ở tuổi 40 thì bạn có thể lại ghét công việc ngồi viết code. Rất khó để dự đoán. Tuy nhiên, việc biết và hiểu rõ các lựa chọn của mình và kết quả mà chúng mang lại là điều rất cần thiết.
Dưới đây là một hình minh họa về các cơ hội nghề nghiệp dành cho một lập trình viên với mức lương trung bình. Lưu ý rằng có một số người kiếm được gấp đôi hoặc gấp ba số tiền ở hình trên, đó là những lập trình viên thuộc một ngành dọc nào đó như ngân hàng, chứng khoán, v.v..., vì vậy những con số ở trên chỉ đại diện cho một phạm vi trung bình, không phải là đại diện cho tất cả.
Junior Developer
- 0-3 năm kinh nghiệm (thường là người vừa bước chân ra khỏi giảng đường đại học)
- Có thể viết các script đơn giản
- Hiểu biết sơ bộ về toàn bộ một vòng đời ứng dụng
- Hiểu biết sơ bộ về cơ sở dữ liệu và các dịch vụ ứng dụng (queues, caching, v.v...)
- Không cảm thấy thoải mái trong bất cứ phần nào của một ứng dụng phức tạp
Khi bạn bắt đầu bước chân vào sự nghiệp lập trình, nó có thể đầy khó khăn và nản lòng. Có lúc bạn cảm thấy chiều sâu kiến thức của mình chưa đủ để đáp ứng cho công việc, không chắc chắn về việc làm thế nào mà người ta có thể viết ra những ứng dụng lớn và phức tạp đến như vậy. Và đôi khi, bạn lại tự hỏi tại sao mình vẫn chưa được thăng chức lên thành Senior Developer. Bạn nhìn vào các lập trình viên senior khác và nghĩ rằng về cơ bản thì bạn cũng đang làm công việc giống như họ.
Nhưng một dấu hiệu của lập trình viên junior chính là sự thiếu kinh nghiệm. Ngay cả các lập trình viên junior thông minh và học hỏi nhanh nhất cũng không được tiếp xúc với nhiều code hoặc các trường hợp hóc búa mà cần có sự khôn ngoan của một lập trình viên senior. Trong thuật ngữ lập trình, một hình thức của sự khôn ngoan được gọi là các software design pattern. Mặc dù bạn có thể đọc sách về các pattern, nhưng bạn cần phải viết đủ code tồi trong sự nghiệp của mình với vỡ ra được những kiến thức đó và mới hiểu sâu được giá trị của software pattern.
- Cuốn sách "Design Patterns" của tác giả Gamma
-
- Một lập trình viên "junior" thực sự có nghĩa là gì?
- Trở thành một lập trình viên junior
Senior Developer
- 4-10+ năm kinh nghiệm
- Có thể viết các ứng dụng phức tạp
- Hiểu biết sâu sắc về toàn bộ vòng đời của ứng dụng
- Hiểu biết sâu sắc về cơ sở dữ liệu và các dịch vụ ứng dụng (queues, caching, v.v...)
Làm việc thoải mái trên bất kỳ phần nào của một ứng dụng
Một lập trình viên senior là một vai trò điển hình cho những người thực sự giỏi trong việc xây dựng toàn bộ các ứng dụng ở quy mô lớn. Phần lớn sự nghiệp của một lập trình viên có thể với tư cách là một lập trình viên senior. Trong thực tế, nếu bạn ghét làm quản lý và bạn chỉ yêu thích việc viết code, thì bạn có thể là một lập trình viên senior trong suốt sự nghiệp của mình. Tôi đã từng thuê nhiều lập trình viên senior ở nhiều độ tuổi khác nhau, nhưng đây cũng là vai trò ngày càng khó để cạnh tranh một khi bạn trở nên lớn tuổi.
Vai trò này cũng có thể là một cách để nhảy đến một vị trí khác trong nấc thang sự nghiệp. Một khi bạn hiểu công nghệ đủ để trở thành một lập trình viên senior, thì bạn có thể đã có những bí quyết kỹ thuật để trở thành một technical founder hoặc CTO (Giám đốc công nghệ) của một startup. Việc trở thành một founder hoặc CTO tại một startup liên quan rất ít đến công việc lập trình nhưng lại phải có nhiều kỹ năng về con người. Tuy nhiên kiến thức kỹ thuật có chiều sâu sau một chặng đường dài là rất cần thiết để làm tốt công việc ở những vai trò này.
Lead Developer hoặc Architect
- 7-10+ năm kinh nghiệm
- Có các kỹ năng cơ bản giống như một lập trình viên senior
- Lead Developer: là vai trò chuyển tiếp vào một chức vụ quản lý cấp trung (Mid-Level Manager)
- Architect: là một vai trò kỹ thuật thuần túy
Sau hơn 7+ năm lập trình, nếu bạn thấy mình không phù hợp với công việc quản lý, thì trở thành một architect là một cấp bậc cao nhất còn lại trên các nấc thang sự nghiệp kỹ thuật. Các architect đôi khi viết code, nhưng họ thường thiết kế các hệ thống phức tạp mà sẽ được thực hiện bởi các nhóm lập trình viên senior và junior. Công việc của một architect là sử dụng những kiến thức kỹ thuật của mình thu được sau nhiều năm kinh nghiệm (nghiêng về lập trình patterns và anti-patterns) để tạo ra cấu trúc cho một dự án phần mềm thành công. Khi có một yêu cầu mới, một software architect cần phải biết những cách hợp lý để xây dựng và mở rộng tất cả các loại ứng dụng khác nhau.
Một lead developer là một lập trình viên senior mà những lập trình viên junior và senior khác tìm đến để được hướng dẫn và chỉ đạo. Mặc dù các lead developer thường không đảm nhiệm công việc tuyển dụng và sa thải các lập trình viên, nhưng họ làm rất nhiều công việc tương tự như các nhà quản lý. Họ phối hợp những công việc cần phải được thực hiện và là người ra quyết định về các vấn đề thực được thưc thi trong khi viết code.
Mid-Level Manager (Quản lý cấp trung)
- Chức danh này thường bao gồm các từ như Manager hoặc Director (Developer Manager, * Product Manager hoặc Project Manager)
- Là sếp (có thể thuê/sa thải) của các lập trình viên
- Báo cáo công việc tới một Senior Leader
Quản lý thường là nấc thang tiếp theo trong sự nghiệp dành cho các kỹ sư. Có những trọng tâm khác nhau trong việc quản lý. Nếu bạn là người yêu thích theo dõi luồng công việc và có mối ám ảnh về những chi tiết, thì việc trở thành một project manager là lựa chọn đúng đắn. Nếu bạn bị ám ảnh về các tính năng và cải tiến sản phẩm, thì trở thành một product manager là rất phù hợp.
Tuy nhiên hầu hết những vị trí quản lý mà một lập trình viên trở thành thường là developer manager. Vai trò điển hình của developer manager là để dàn xếp các nhu cầu của product manager và project manager với các thành viên của nhóm phát triển. Vai trò này đòi hỏi kỹ năng mềm rất lớn, tài năng để dàn xếp các xung đột. Công việc của developer manager không chỉ là để tuyển dụng, mà có thể là sa thải các lập trình viên khi cần thiết. Điều này có nghĩa là rất khó để có thể kết bạn với họ. Việc trở thành bạn bè đặt bạn vào vị trí khó xử. Nếu bạn từng biết một ai đó đã trở thành developer manager của một team mà anh ta đã từng là một thành viên, thì bạn sẽ thấy rằng họ dường như thay đổi hẳn tính cách chỉ sau một đêm. Đây là lý do tại sao. Đó là một công việc khó khăn, và thường bị mang tiếng là một kẻ vong ân bội nghĩa.
Nhưng nó cũng có những phần thưởng xứng đáng khi bạn dẫn một team đến thắng lợi. Nếu bạn muốn nâng cao kỹ năng lãnh đạo của mình để chuẩn bị cho vai trò quản lý, thì hãy đọc cuốn sách của tác giả Phil Jackson dưới đây:
- "Eleven Rings: The Soul of Success" by Phil Jackson Senior Leader
Senior Leader (Quản lý cấp cao)
- VP, CTO hoặc CEO
- Là sếp (có thể thuê/sa thải) các quản lý cấp trung
- Báo cáo công việc tới một Senior Leader khác hoặc tới Ban giám đốc
Sự khác biệt rõ ràng giữa một nhà quản lý cấp trung (mid-level manager) và một lãnh đạo cấp cao (senior leader) đó là các senior leader phụ trách các mid-level manager. Tuy nhiên, các manager thường không cần phải quản lý. Họ cần phải được dẫn dắt. Các mid-level manager cần biết định hướng cấp cao mà họ cần phải đi theo, chứ không phải là chỉ hướng đi chi tiết.
Công việc của một senior leader là đưa ra những quyết định cấp cao và truyền cảm hứng cho lực lượng lao động của họ đi cùng với những quyết định đó, và tin vào sứ mệnh đó.
Bạn càng leo lên các nấc thang sự nghiệp cao hơn, thì bạn càng ít tiếp xúc với công việc lập trình. Ở phía trên, tất cả công việc là về con người. Các nhà quản lý cấp trung (mid-level manager) vẫn có thể có thời gian để vọc vậy với công nghệ, nhưng các Senior Leader phải dành tất cả thời gian của họ để tập trung vào vấn đề con người: truyền cảm hứng, tạo động lực, lãnh đạo, và ra chiến lược. Nếu bạn viết code, thì đó thường chỉ là các dự án cá nhân (trừ khi bạn là Bill Gates, nhưng hầu như không ai là Bill Gates cả, ông ta là một người xuất chúng). Ở cấp độ này bạn cần phải đọc cuốn sách của Phil Jackson, đọc thực sự chứ không chỉ là mua nó cho có.
Công việc của một senior leader là đảm bảo cho tất cả mọi người trong toàn bộ công ty cùng tiến theo một hướng, đảm bảo hướng đi đó dẫn đến miền đất hứa, và đảm bảo rằng mọi người đều biết lý do tại sao họ lại đang đi theo hướng đó. Đó là một công việc rất khó khăn. Công việc này đầy nguy hiểm, đau khổ và cạm bẫy. Nếu bạn đang được cất nhắc lên vị trí này, thì hãy đọc cuốn sách "The Hard Thing About Hard Things" by Ben Horowitz.
Các senior leader chẳng phải được sinh ra một cách tự nhiên. Họ phải tôi luyện mà thành. Phải thực hành thật nhiều và thật tốt công việc đó. Bạn hãy đọc blog của Ben Horowitz về Making Yourself a CEO để thấy một số ví dụ về điều này.
Kết luận
Cơ hội cho các lập trình viên ngày nay là rất phong phú và dồi dào. Và lập trình viên hiện nay đang có nhu cầu cao hơn so với bất kỳ giai đoạn nào trong lịch sử. Đây là một thời điểm tuyệt vời để trở thành một lập trình viên. Nhưng nó sẽ chẳng bao giờ là quá sớm để lên kế hoạch cho sự nghiệp của mình. Tôi hy vọng bài viết này đã cho bạn một số hướng dẫn và những tài liệu để bạn có thể chuẩn bị cho tương lai phía trước.
[Nghean-Aptech st]