Hiện tại đa phần các bạn sinh viên mà tương lai sẽ trở thành lập trình viên chuẩn bị hoặc vừa ra trường (mình gọi chung là fresher) có xu hướng tiếp cận ngôn ngữ lập trình 1 cách chủ động, dựa trên 1 ngôn ngữ và 1 vài framework các bạn chọn phổ biến hiện nay. Các nhà tuyển dụng (công ty phần mềm nói chung) cũng thường có xu hướng hỏi về kinh nghiệm của các bạn đối với ngôn ngữ hay framework mà họ cần làm trong các dự án của họ. Vô hình trung tạo thành 1 thói quen trong cộng đồng lập trình viên (developer) đánh giá năng lực, chia level theo số năm kinh nghiệm làm việc của 1 framework, 1 ngôn ngữ cụ thể nào đó.

Thế nên chia như thế nào?

Thông thường mình hay được nghe về cách chia level của Developer (Dev) thành Fresher, Junior, Mid, Senior. Cũng có 1 số tiêu chuẩn tương đối chi tiết về số năm kinh nghiệm làm việc, các thư viện (library), framework mà các bạn cần biết, nắm rõ để đạt được level tương ứng. Tuy nhiên thực tế đi làm ở các Công ty phần mềm mình cảm nhận, rất khó để chia level 1 cách rõ ràng và chính xác. Việc chia level Dev với mục đích đánh giá, review năng lực chuyên môn, ảnh hưởng đến lương thưởng, chế độ đãi ngộ lại càng khó khăn với các Công ty có quy mô nhân sự bé (khoảng dưới 50 Dev, quy mô phổ biến nhất với các Công ty phần mềm hiện tại) vì sự phức tạp trong các đánh giá cũng như tiêu chuẩn phụ thuộc vào sản phẩm, yêu cầu kĩ thuật của từng Công ty khác nhau.

Mình có được giữ vai trò phỏng vấn nhân sự ở Công ty, tiếp xúc khá nhiều các bạn Dev vừa ra trường hoặc có kinh nghiệm đi làm từ 1 đến 2 năm, mình tạm gọi chung các bạn là fresher. Đối với các bạn fresher này, thường mình có câu hỏi: ‘Dự định lộ trình tương lai của bạn như thế nào?’. Câu trả lời chung chung mà mình gặp được là phấn đấu trong vòng 3-5 năm lên thành Senior Developer. Rõ ràng các bạn thực sự chưa hiểu khái niệm Senior là gì, cần những kỹ năng gì và làm sao để đạt được level đó. Quay lại vấn đề mình đặt ra từ đầu bài, khái niệm Senior dễ bị áp vào theo 1 ngôn ngữ hay 1 framework nào đó mà các bạn sử dụng. Có bạn nhận là Senior của Java, Senior của ReactJS, Senior về MySQL, Senior Android, … cũng có bạn tự nhận mình là Senior về quản lý dự án, Senior Tester, Senior QA, rồi Senior Scrum Master, … Các bạn không sai, nhà tuyển dụng họ cũng đăng tuyển như thế mà đúng không.

Thế tóm lại là bài viết muốn nói cái gì?

Mình muốn các bạn fresher khi bắt đầu bước vào công việc lập trình hiểu rằng lập trình không chỉ là quá trình tích lũy số năm đi làm, cũng không đánh giá bằng số dòng code bạn đã viết, càng không nên tự xưng mình là senior trong 1 ngôn ngữ hay 1 framework nào đó; vì thực sự trình độ của bạn không phản ánh qua những giá trị đó. Level của các bạn phản ánh qua kiến thức về software development, về những hiểu biết của bạn trong phần mềm, trong hệ thống mà các bạn đã, đang và sẽ xây dựng. Rất nhiều bạn không thể tự vẽ lên được các thành phần của hệ thống mình đang phát triển, không thể hiểu được luồng dữ liệu (data flow) trong phần mềm đang chạy như thế nào, nhưng vẫn tự xưng mình là mid-level developer vì đã có tận 5 năm với cả trăm nghìn dòng code (mà toàn copy paste) được viết ra. Viết code thật ra nó cũng giống như 1 môn ngoại ngữ thôi, không phải vì 5 năm ngày nào bạn cũng chào 1 ông Tây bằng câu hello, how are you, I’m fine thankyou mà bạn trở thành 1 nhà ngôn ngữ học được.

Vậy làm thế nào để up-level theo như ông nói?

Lập trình (nói đúng hơn là phát triển phần mềm) là 1 công việc để giải quyết bài toán thực tế cho người dùng bằng những dòng code. Vậy đơn giản thì ngôn ngữ lập trình, thư viện, framework cũng chỉ là những công cụ. Sử dụng công cụ đó như thế nào đánh giá mức độ lành nghề của bạn, nhưng cũng chỉ là việc bạn làm theo 1 bản thiết kế có sẵn. Vậy ai mới là người đưa cho bạn cái bản thiết kế đó. Mấy cha đấy có xuất phát từ dân lập trình mà ra không? Tất nhiên là có thể không, nhưng phần lớn là có. Khả năng hiểu hệ thống, đưa ra giải pháp cho 1 bài toán mới là cái thước đo tốt nhất đối với lập trình viên (đúng hơn phải dùng là engineer). Mình có bà chị bán hàng online, biết mình là Dev (đại loại là biết làm ra phần mềm) có order mình:

  • Viết hộ chị các phần mềm mà nó ra được lãi theo ngày cho chị cái. Giờ ngày nào cũng bán được cả trăm đơn mà chả biết lãi bao nhiêu, toàn phải làm sổ tay, mệt quá! Bao nhiêu chị trả, làm nhanh hộ chị.
  • Cái này dễ chị, mấy dòng code thôi-bằng tiền cà phê ấy mà (mình tự tin) – Chị có dữ liệu (data) tiền thu và chi của từng đơn chị bán ko?
  • Tất nhiên là có. Chị viết ra sổ đây này
  • Không! Ý em là có dữ liệu trên máy tính ý. Thế chị mua hàng giá bao nhiêu, chị bán giá bao nhiêu thì phải có con số cụ thể chứ.
  • Thì đương nhiên, nhưng mà khi mua thì chị ghi vào sổ, rồi khi bán thì giá mỗi lúc 1 khác tùy khách với có ế hàng không chứ em, nên chị cũng ghi vào sổ. Em chỉ cần lấy ra tính là được.
  • Ừ hứ. Thế lại phải làm cả đoạn nhập hàng, bán hàng nữa. Phức tạp ghê. Chắc phải lên bằng bữa buffet rồi.

Đấy, câu chuyện mới chỉ là hồi đầu thôi. Nhưng tầm gần 5 năm kinh nghiệm làm Dev như mình chắc chưa giải quyết được (đương nhiên là hồi ý thôi, giờ thì khác – mình từ chối làm ngay :D). Nếu bạn không giải quyết được bài toán cho khách hàng của mình thì tự xưng làm Senior để làm gì? Trừ việc ứng tuyển phỏng vấn ra. :)))))

Tóm cái váy!

Đừng nghĩ 1 bác 40 năm kinh nghiệm lập trình (viết code) mà đã giỏi, đã cao siêu, đã dị nhân. Công nghệ, thư viện, framework thay đổi liên tọi, còn nhanh hơn sở thích của người yêu các bạn. Vì thế hãy đầu tư vào việc tìm hiểu logic, nghiệp vụ, bài toán thực tế. Tạo ra những sản phẩm của riêng mình để giải quyết bài toán cụ thể, đừng chỉ làm Senior để tăng lương. Phải sống đẹp như Cậu Vàng của lão Hạc!

Cảm ơn mọi người!