Bí mật của kỹ sư xứng đáng với mức lương: kỹ năng biến "điều chưa rõ (Ambiguity)" thành "điều có thể làm được"
(terriblesoftware.org)Điểm chính:
- Khác biệt mang tính quyết định giữa kỹ sư senior và kỹ sư mid-level là khả năng cụ thể hóa những vấn đề không chắc chắn và mơ hồ.
- Giá trị của một kỹ sư senior không nằm ở kỹ năng code tự thân, mà ở việc loại bỏ rủi ro của dự án và chuyển nó thành một kế hoạch có thể thực thi.
- Các thực hành tuyển dụng hiện nay (như kiểm tra thuật toán) đang thất bại trong việc đánh giá năng lực này.
- Sự trưởng thành thực sự bắt đầu từ việc luyện tập xác định rõ vấn đề ở giai đoạn trước khi viết code.
Mở đầu: Xem lại định nghĩa về kỹ sư senior
- Thông thường, kỹ sư senior được định nghĩa bằng một danh sách kỹ năng đa dạng như thiết kế kiến trúc, giao tiếp, lãnh đạo, v.v.
- Tuy nhiên, nếu bỏ qua chức danh, mức lương và số năm kinh nghiệm, thì chỉ có một kỹ năng cốt lõi duy nhất để phân biệt kỹ sư senior trở lên: "khả năng giảm bớt sự mơ hồ".
- Mọi năng lực khác (như thực thi kỹ thuật) đều là kết quả phát sinh từ kỹ năng cốt lõi này.
Nội dung chính
1. Khác biệt trong cách giải quyết vấn đề: rõ ràng so với mơ hồ
- Kỹ sư mid-level: tạo ra kết quả xuất sắc khi có sẵn spec và các ràng buộc rõ ràng. Họ giỏi giải quyết những bài toán đã được định nghĩa tốt.
- Kỹ sư senior: tạo ra khác biệt khi nhận các yêu cầu mơ hồ và trừu tượng như "cần cải thiện hiệu năng", "mức độ bất mãn của người dùng tăng lên", hoặc "cần tính đến khả năng mở rộng".
- Kỹ sư senior không chỉ đơn thuần thực hiện một bài toán mơ hồ, mà còn phân tích, tách nhỏ và chuyển nó thành các nhiệm vụ cụ thể.
2. Vai trò cốt lõi của senior là loại bỏ rủi ro của dự án
-
Trước một vấn đề lớn và trừu tượng, kỹ sư senior giải tỏa sự không chắc chắn bằng các cách tiếp cận như sau:
-
Đặt ra những câu hỏi mang tính bản chất mà người khác không đặt ra.
-
Tách tín hiệu quan trọng khỏi nhiễu (Noise).
-
Xác định ưu tiên giữa việc cần làm ngay và việc có thể để sau.
-
Quá trình này làm giảm rủi ro của dự án (De-risking), đồng thời sắp xếp trạng thái "không biết đó là gì" thành "những dự án nhỏ có thể thực hiện và các yếu tố cần loại bỏ".
-
Khi kỹ sư senior làm tốt điều này, dự án sẽ diễn ra trơn tru và nhìn bề ngoài có vẻ dễ dàng, nhưng thực tế đó là kết quả của một lượng lớn "công việc vô hình" đã được thực hiện từ trước.
3. Cách tiếp cận cụ thể để giải quyết sự mơ hồ
- Trước khi viết code, kỹ sư senior đặt ra những câu hỏi sau để làm rõ vấn đề:
- Bản chất của vấn đề: Điều chúng ta thật sự đang cố giải quyết là gì, thay vì giải pháp mà chúng ta nghĩ mình muốn?
- Xác định người dùng: Cụ thể là đang cố giải quyết nỗi đau nào của ai? (tránh dùng từ bao quát như "người dùng")
- Kiểm chứng giả định: Những giả định sai lầm nào đang ẩn trong kế hoạch hiện tại?
- Đánh giá rủi ro: Tình huống xấu nhất sẽ là gì nếu nhận định của chúng ta sai?
4. Giới hạn của hệ thống tuyển dụng và việc chọn senior sai cách
- Phần lớn công ty tuyển dụng bằng cách tập trung vào danh sách tech stack hoặc khả năng giải bài toán thuật toán (LeetCode).
- Cách làm này không thể kiểm chứng năng lực chuyển các yêu cầu sản phẩm mơ hồ thành kế hoạch có thể thực thi.
- Kết quả là xuất hiện hàng loạt kỹ sư "chỉ có danh senior" — code rất giỏi nhưng lại không làm được gì khi đối diện với một spec chưa hoàn chỉnh.
Kết luận: Gợi ý để phát triển
- Năng lực kiến trúc hay giao tiếp đều quan trọng, nhưng chúng chỉ phát huy giá trị sau khi "cần xây cái gì" đã được xác định rõ.
- Sự xuất sắc về kỹ thuật trong trạng thái chưa giải quyết được sự mơ hồ rốt cuộc chỉ là "giải một bài toán sai theo cách thanh lịch".
- Tiêu chí để tự đánh giá mình đã ở cấp senior hay chưa nằm ở việc khi nhận một nhiệm vụ trừu tượng, bạn có chờ người khác làm rõ giúp hay tự mình cụ thể hóa nó để cả team có thể thực thi.
- Đây không phải tài năng bẩm sinh mà là thứ có thể rèn luyện, vì vậy khi nhận một ticket mơ hồ, hãy bắt đầu luyện tập cụ thể hóa vấn đề thay vì lao vào viết code ngay lập tức.
5 bình luận
Tôi cũng cho rằng việc đánh giá lập trình viên senior bằng “bài kiểm tra code thuật toán” là một giới hạn của hệ thống tuyển dụng. Tôi nghĩ một senior developer xứng đáng với mức lương là người đã tiến gần đến bản chất của vấn đề, hoặc có khả năng tiến gần đến nó.
Qua bài này, tôi nhận ra rằng tùy theo góc nhìn mà mỗi người sẽ có cách hiểu khác nhau. Theo tiêu chí của tôi, chuẩn để phân biệt giữa kỹ sư senior và kỹ sư cấp trung chỉ đơn giản là phạm vi phụ trách. Việc cụ thể hóa
Ambiguitylà năng lực nền tảng của một kỹ sư, và tôi nghĩ từ mức kỹ sư cấp trung trở lên thì phải làm được điều này thì danh xưng kỹ sư mới thật sự phù hợp. Vì vậy, với tôi, bài viết này cũng có thể trở thành tiêu chí để phân biệt giữa kỹ sư cấp trung và kỹ sư mới vào nghề (associate).Trong trạng thái chưa thể định nghĩa rõ ràng vấn đề,
sự xuất sắc về kỹ thuật rốt cuộc cũng chỉ là “giải quyết một vấn đề sai theo cách tinh tế”.
Một câu thật sự nổi da gà
Với bài kiểm tra dành cho lập trình viên senior thì đến phần test lập trình còn có thể chấp nhận được
nhưng nếu đưa ra bài toán thuật toán thì thật sự quá khó hiểu (vì bối rối quá nên cũng không nhớ nổi)
1. Kỹ năng đặt câu hỏi và vốn xã hội (Social Capital)
2. Tính tự chủ và quản trị rủi ro (Autonomy & Risk)
3. Lạm phát chức danh và mâu thuẫn cấu trúc trong tuyển dụng
4. Thâm niên (Tenure) đơn thuần so với rèn luyện có chủ đích
If), còn senior luôn giả định và chuẩn bị cho trường hợp điều kiện thay đổi (What-if).5. Góc nhìn hoài nghi về danh xưng senior