Phân biệt lập trình viên Junior, Mid-Level và Senior
Mở đầu Trình độ của lập trình viên hiện nay thường được phân biệt dựa trên ba cấp độ: Junior (Sơ cấp), Mid-Level (Trung cấp) và Senior (Cao cấp). Nếu như đi học ở trường thường có thể phân loại học sinh dựa trên số năm học thì lập trình viên dùng kỹ năng để phân loại. Số năm ...
Mở đầu
Trình độ của lập trình viên hiện nay thường được phân biệt dựa trên ba cấp độ: Junior (Sơ cấp), Mid-Level (Trung cấp) và Senior (Cao cấp). Nếu như đi học ở trường thường có thể phân loại học sinh dựa trên số năm học thì lập trình viên dùng kỹ năng để phân loại. Số năm kinh nghiệm không quyết định được trình độ của lập trình viên, đôi khi có thể thấy một lập trình viên Junior có tuổi đời và tuổi kinh nghiệm đều nhiều hơn một lập trình viên Senior. Nhưng không có nghĩa những lập trình viên ở cấp độ Senior là chuyên gia của tất cả mọi thứ, nhưng chắc chắn kỹ năng của họ sẽ nhiều hơn các lập trình viên ở tầm Junior và Mid-Level. Và kỹ năng ở đây không chỉ bao gồm mỗi kỹ năng viết mã, mà quan trọng hơn cả là tư duy và khả năng giải quyết vấn đề.
1. Sự hiểu biết
Kiến thức là một trong các yếu tố để phân biệt cấp độ của lập trình viên. Thông thường, một lập trình viên Senior sẽ nắm vững được nhiều mẫu thiết kế, các kiến trúc hơn một lập trình viên Junior hay Mid-Level. Bên cạnh đó, một số kiến thức về kiểm thử (tự động), đo hiệu suất, đánh giá bảo mật cũng rất cần thiết. Tuy nhiên việc biết tất cả các kiến thức cũng không khiến cho một lập trình viên là Senior. Quan trọng nhất là phải biết vận dụng các kiến thức của bản thân vào phát triển phần mềm, làm chủ được các quy trình, chứ không phải chỉ làm theo chỉ dẫn của người khác.
2. Kỹ năng viết mã
Hầu hết mọi người đều nghĩ rằng viết mã nguồn cho phần mềm để nó có thể giao tiếp với máy tính. Nhưng không, thực tế thì mã nguồn là ngôn ngữ để con người giao tiếp với nhau và đồng thời hướng dẫn cho máy tính làm việc, máy tính sẽ biên dịch các mã này, chuyển nó thành mã máy để thực thi chỉ thị. Việc viết mã phải đảm bảo cho tính mở rộng và bảo trì sau này. Mã nguồn phải đủ dễ hiểu để cho những nhóm phát triển vào sau có thể dễ dàng mở ra và bắt đầu làm việc với các tính năng mới hoặc sửa các lỗi. Viết mã là một trong những điểm khác biệt cơ bản giữa lập trình viên Senior và Junior. Càng lên cấp cao thì khả năng viết mã của lập trình viên sẽ càng trở nên dễ hiểu với các lập trình viên khác. Còn về Mid-Level, họ là những người ở giai đoạn trung gian, họ viết mã nguồn để khiến cho bản thân họ và một số người có thể hiểu được, nhưng không phải tất cả. Đa phần lập trình viên Mid-Level sẽ đang ở giai đoạn sửa chữa sai lầm từ khi còn là Junior để dần hoàn thiện mình và nâng lên tầm Senior.
2.1 Cách nhận biết các lập trình viên Junior
Họ là các lập trình viên trẻ thiếu kinh nghiệm. Một số người vừa tốt nghiệp và đang bắt đầu công việc toàn thời gian đầu tiên của họ. Suy nghĩ của một lập trình viên Junior thường chỉ dừng ở mức làm cho mã họ viết có thể hoạt động là đủ. Phần mềm làm việc và phần mềm tốt được họ coi là như nhau. Họ thường thấy khó khăn khi viết các mã nguồn đơn giản, hoặc đôi khi họ có thể kết luận là không thể viết được. Khi đó, các lập trình viên ở cấp này sẽ viết các đoạn mã theo sở thích của họ. Họ đôi khi sẽ viết ra những đoạn mã máy móc, chẳng hạn như chỉ cần viết một lớp cơ sở đơn giản nhưng qua tay họ lại trở thành một lớp trừu tượng đến mức phức tạp. Lập trình viên Junior thích quan trọng hóa vấn đề không cần thiết để chứng tỏ cho người khác thấy họ viết mã tốt như thế nào. Nhưng điều đó hoàn toàn sai lầm, nó chỉ làm tăng độ khó khăn của việc bảo trì và sửa lỗi sau này.
2.2 Dấu hiệu của một lập trình viên Senior
Trong trường hợp ngược lại, khi mà bạn nhìn vào mã nguồn do lập trình viên cao cấp viết ra …. Thật không thể tin nổi, bạn đôi khi sẽ không tin vào mắt mình. Nó được tối giản hóa đến mức ai cũng hiểu, và đôi khi sẽ có vài nhận xét rằng nó thật ngu ngốc, cái đó ai mà chẳng viết được. Nhưng đó là một phẩm chất mà một lập trình viên cấp cao rất cần. Tôi nhớ trong cuốn sách Clean Code của tác giả Robert C. Martin có một đoạn cho rằng một hàm chỉ nên đảm nhiệm một công việc, nhưng phải là cái làm tốt nhất. Điều này cũng được thể hiện với một nguyên tắc thường được nhắc đến khi làm việc. Đó là [KISS – Keep It Simple, Stupid] (Hãy giữ nó thật đơn giản thôi, đồ ngốc ạ). Với lập trình viên cấp Junior, họ chỉ nghĩ đơn giản là viết mã sao để cho máy chạy được là ổn, nhưng với cấp Senior, họ sẽ nghĩ đến việc mở rộng và bảo trì cho đoạn mã của mình.
3. Kỹ năng ngoài việc viết mã
Như tôi đã nhắc đến ở phần trên, kỹ năng viết mã chỉ là một trong số các kỹ năng để phân loại cấp độ của lập trình viên, nhưng nó không phải tất cả.
- Các lập trình viên Junior, thường sẽ thực hiện các nhiệm vụ bình thường hoặc nhiệm vụ đơn giản với tác động thấp. Họ không tác động bất cứ thiết kế kiến trúc nào mà chỉ làm việc dựa trên thiết kế có sẵn.
- Các lập trình viên Mid-Level tuy cũng không thiết kế các kiến trúc và giải pháp, chỉ thực hiện các nhiệm vụ. Nhưng khác với lập trình viên Junior là họ thực hiện các nhiệm vụ đó với ít sự giám sát hơn, và được giao cho các nhiệm vụ tương đối thường xuyên.
- Khác với 2 cấp độ trên, một lập trình viên Senior có thể tự phát triển một ứng dụng từ bước thiết kế đến bước ra thành phẩm.
Một điểm khác biệt nữa có thể là do cách đặt câu hỏi trong cuộc đời lập trình viên.
- Các Senior sẽ biết cách đặt câu hỏi đúng và cách xử lý những câu hỏi này, có thể họ không có lời giải nhưng biết cách đi đâu để tìm lời giải. Và họ sẽ thường chỉ tìm sự giúp đỡ từ các nhà phát triển khác có kinh nghiệm trong lĩnh vực họ đang gặp vấn đề, chứ không phải tìm sự giúp đỡ từ bất kì ai.
- Các Mid-Level có thể đặt câu hỏi đúng khi nói đến các nhiệm vụ tương đối thường xuyên của họ, nhưng lại cần trợ giúp cho các nhiệm vụ phức tạp hơn.
- Còn Junior thường sẽ không biết cách đặt câu hỏi đúng, và nếu có thì cũng không biết lựa chọn giải pháp hợp lý. Họ thiếu kinh nghiệm, và cần hướng dẫn từ một lập trình viên có kinh nghiệm hơn. Các Junior cần được cung cấp các nguồn lực cần thiết hoặc một cú hích lớn theo đúng hướng.
4. Phát triển trình độ lên cao
4.1 Từ Junior đến Mid-Level
Muốn thăng cấp từ Junior lên Mid-Level, các lập trình sẽ cần được trau dồi kinh nghiệm, bằng việc trải qua toàn bộ chu trình phát triển phần mềm ít nhất một vài lần. Họ sẽ có thể rơi vào rất nhiều bẫy, và cần học cách tránh bẫy trong các lần tiếp theo. Khi nói đến viết mã , các lập trình viên nên học cách viết mã đơn giản thay vì những mã phức tạp đa tính năng. Hãy luôn nghĩ về người tiếp theo sẽ làm việc với đoạn mã đó như thể chính mình sau này. Bên cạnh đó, họ cũng nên tìm hiểu cách gỡ lỗi, vì điều này sẽ giúp hiểu rõ hơn về những gì xảy ra trong quá trình phần mềm hoạt động. Ngoài ra, các kiến thức về kiến trúc phần mềm, phương pháp tối ưu hiệu suất và các quy tắc về bảo mật cũng nên được bổ sung đầy đủ, điều này góp phần thu ngắn khoảng cách với Mid-Level.
4.2 Từ Mid-Level lên Senior
Để từ một Mid-Level lên Senior sẽ là một chặng đường khó khăn đối với lập trình viên. Một số thậm chí sẽ ở mức Mid-Level trong toàn bộ sự nghiệp của họ. Qua việc phạm phải các sai lầm trong quá khứ, tích lũy kinh nghiệm, một lập trình viên Senior sẽ biết trong sản phẩm chỗ nào là chỗ nên loại bỏ, chỗ nào không nên. Mid-Level cần phải nhận nhiều hơn các nhiệm vụ mà không ai trong nhóm biết cách khắc phục. Hơn cả hoàn thành công việc, họ phải hoàn thành công việc một cách tốt nhất dù ban đầu họ còn không nắm rõ ràng về phương pháp giải quyết nó. Với vai trò là một Senior, công việc cũng sẽ bao gồm giúp đỡ các lập trình viên ít kinh nghiệm hơn. Họ là người dự phòng cho các lập trình viên khác khi những người đó không biết cách làm gì để giải quyết công việc. Và cuối cùng, các lập trình viên Senior sẽ làm chủ được công nghệ mà họ sử dụng, biết nhiều hơn cả kỹ năng viết mã, và có thể nhận biết tất cả các công cụ và ứng dụng đang được sử dụng trong công ty mà họ làm việc.
Kết luận
- Sự khác biệt giữa một lập trình viên Junior, Mid-Level hay Senior không phải chỉ được tính bằng số năm kinh nghiệm. Chắc chắn, khá an toàn khi nói rằng các Senior có nhiều kỹ năng hơn Mid-Level hay Junior. Nhưng suy cho cùng kiến thức không phải là yếu tố quan trọng nhất, mặc dù nó cũng là một trong các yếu tố cần thiết và không thể thiếu.
- Các lập trình viên Senior viết mã theo một cách đơn giản và dễ hiểu hơn và tất nhiên cũng có tư duy khác với các Junior. Kỹ năng cần thiết không chỉ bao gồm kỹ năng viết mã, mà quan trọng là biết đặt câu hỏi. Biết những câu hỏi đúng để hỏi và cách để theo dõi những câu hỏi đó là điều cần thiết. Và đó là điều mà chỉ có lập trình viên Senior, với kinh nghiệm phong phú của họ, sẽ biết cách làm trong mọi tình huống.
- Để phát triển đi lên Mid-Level từ một lập trình viên Junior, bạn nên tập trung vào viết mã đơn giản và trải qua nhiều chu kỳ phát triển vài lần. Và để lên được Senior, bạn nên tập trung vào việc học nhiều hơn là chỉ sửa các công việc thường ngày. Bạn nên sẵn sàng nhận những nhiệm vụ khó khăn nhất và trở thành bậc thầy về công nghệ của bạn. Một trong các việc làm khác của một Senior là trở thành phương án dự phòng cho các lập trình viên ít kinh nghiệm hơn. Tôi sẽ để lại cho bạn một trích dẫn từ Martin Fowler: Một kẻ ngốc có thể viết mã mà máy tính có thể hiểu được. Lập trình viên giỏi viết mã mà con người có thể hiểu được.”