You’re Not a Senior Software Engineer
Chức danh hay title trong lĩnh vực phát triển phần mềm như cái mác định danh cho thân phận của từng anh em Software Engineer. Từ khi bắt đầu dấng thân vào ngành, ai cũng ao ước có được chức danh Senior đầy vẻ vang. Hầu hết các kỹ sư, ít nhất là những người không có tham vọng làm quản lý hay khởi nghiệp để trở thành nhà sáng lập, coi đó là đỉnh cao của thành công.
Nhưng làm sao để đạt được điều đó? Nếu nó không thể được đo lường, theo dõi, hay đánh giá một cách cụ thể thì chúng ta chỉ đang bịa ra mà thôi. Tôi công nhận rằng điều này có phần mơ hồ, nhưng nó không phải là tùy tiện. Sau nhiều năm trong ngành, làm việc với hết các cấp bật kỹ sư, tôi nhận ra rằng:
Cấp bậc kỹ sư của bạn chính là sự chênh lệch giữa kiến thức và kinh nghiệm của bạn.
Kiến thức & kinh nghiệm còn non nớt
Bạn có thể tích lũy kiến thức thông qua nhiều phương pháp học tập khác nhau, đó là những thông tin bạn tiếp thu. Nhưng bạn chỉ có thể có được kinh nghiệm khi làm sai, khi mắc lỗi, hoặc khi thất bại.
Some extraordinary people have the ability, to a higher degree than others, to learn from other people’s mistakes. This skill is not common to engineers but it’s a superpower if you have it.
Vào ngày làm việc chính thức đầu tiên của bạn với tư cách là một kỹ sư phần mềm, bạn có thể có một lượng kiến thức khổng lồ nhưng lại không có kinh nghiệm gì. Kiến thức đó có thể đến từ các khóa học đại học hoặc — như trường hợp của tôi — từ YouTube. Bạn là một Junior Engineer trong ngày hôm đó vì bạn có quá nhiều kiến thức so với kinh nghiệm của mình.
Các Junior Engineer thường hay bị ảo tưởng sức mạnh. Họ chưa có kinh nghiệm thực chiến nên hầu hết đều coi trời bằng vun. Họ khăn khăn các kiến thức họ được học là luôn luôn đúng, nhưng họ quá non nớt để biết rằng, kiến thức trường-lớp và thực tế nó khác nhau một trời một vực. Chỉ có những sai lầm, thất bại và vấp ngã mới làm họ thực sự thức tỉnh. Và sự đứng lên sau những thất bại đó, các Junior Engineer dần dần bước vào con đường tiến lên những cấp bậc cao hơn.
Tôi không có ý chỉ trích các Junior Engineer, tôi cũng đã từng ở đó. Tôi vẫn nhớ rõ ràng khoảnh khắc ngồi bên chiếc bàn làm việc nhỏ, khoảng năm thứ hai khi tôi là kỹ sư phần mềm non trẻ (bây giờ vẫn còn non mà :v), tôi tự tin chắc nịch và ung dung sửa đổi, nâng cấp toàn bộ bộ mã nguồn đang chạy ổn định trên môi trường production. Tôi quả quyết cho rằng những đoạn code mới của mình sẽ tối ưu và chạy nhanh hơn, mang đến trải nghiệm tốt hơn cho người dùng. Và cuối cùng, đã có lỗi xảy ra, tôi không đủ kiến thức để xử lý hết tất cả các phát sinh khác biệt, chỉ một sự khác nhau về kí tự hoa-thường đã gây lỗi cho toàn bộ hệ thống, ảnh hưởng đến trải nghiệm và quá trình sử dụng của khách hàng.
Bây giờ nhìn lại, thật là một thời ngựa non háu đá…
Mặc dù tôi áy náy về sai lầm đó, nhưng tôi rất biết ơn vì nó đã mang lại cho tôi những kinh nghiệm quý giá. Bây giờ tôi trở nên thận trọng hơn, research kỹ càng hơn và lắng nghe-tham khảo ý kiến của sếp nhiều hơn. Tôi đã làm sai và đó chính là kinh nghiệm.
Giá trị của kinh nghiệm không đến từ việc nó thay đổi quan điểm của bạn như thế nào, mà từ cách nó dạy để bạn biết rằng bạn rằng bạn có thể sai. Không ai là Senior Engineer chỉ vì họ luôn có những quan điểm đúng.
Nhiều lần trong sự nghiệp của tôi, khi tranh luận, tôi lại nghĩ về những lần sai lầm trong quá khứ. Điều đó khiến tôi phải tự hỏi về những gì mình tin tưởng ở hiện tại và cân nhắc khả năng mình có thể sai.
Có thêm một chút kinh nghiệm
Không ai muốn mình là Middle Enginner, lạc lối trong khoảng trống giữa Junior và Senior. Đó là cấp bậc trung gian nhắc nhở bạn rằng bạn chưa đủ khả năng để trở thành Senior. Khi bạn có đủ kinh nghiệm để đặt câu hỏi về kiến thức của mình, bạn chính thức trở thành một Middle Enginner. Đây là một bước tiến quan trọng và là một giai đoạn trung gian thực sự đáng giá.
Bạn sẽ nhận ra mình đã ở đó khi bạn nghĩ mình biết câu trả lời nhưng vẫn tìm kiếm các giải pháp thay thế. Khi bạn tranh luận, bạn sẽ không bám víu vào quan điểm của mình như thể chúng là chân lý.
Khi kinh nghiệm nhiều hơn kiến thức
Bạn trở thành Senior Engineer khi kinh nghiệm của bạn vượt qua kiến thức. Lúc này, bạn có khả năng nhận ra sai lầm nhiều hơn. Trong công việc, bạn có nhiều bài học từ những sai lầm và thất bại thực sự quý giá hơn là từ sách vở và bài viết trên blog.
Có một giả định quan trọng mà tôi đang đưa ra ở đây, và điều này rất quan trọng để nhận ra. Ngành công nghệ chứa đựng vô vàn thông tin có sẵn để học hỏi và tiếp thu như là kiến thức. Kiến thức và kinh nghiệm của bạn bị giới hạn theo chiều dọc, chúng không áp dụng cho toàn bộ ngành.
Tôi là một Backend Engineer. Tôi quen thuộc với các dịch vụ đám mây (Cloud Service), thiết kế API, kỹ thuật lập trình Java phía server, và những thứ khác mà bạn có thể kỳ vọng từ một lập trình viên backend. Xung quanh các chủ đề này, tôi đã tích lũy được rất nhiều kiến thức và kinh nghiệm. Tuy nhiên, nếu tôi quyết định gia nhập một đội ngũ lập trình nhúng tại SpaceX, viết mã C cho vi xử lý trên một động cơ điều khiển góc của cánh tên lửa… thì kho kinh nghiệm của tôi gần như vô giá trị.
Điều quan trọng ở đây là các Senior Engineer là Senior trong các lĩnh vực cụ thể. Nếu bạn còn trẻ và đang tự hỏi liệu mình có nên đi sâu vào một lĩnh vực hay mở rộng sang nhiều lĩnh vực, hãy ghi nhớ điều này. Có thể bạn sẽ là một Fullstackn Engineer thực thụ và đi sâu vào cả frontend và backend, nhưng như tôi có thể chia sẻ, điều đó có thể chiếm gần hết thời gian của bạn trong những năm hai mươi tuổi trẻ.
Các cấp độ cao
Trong lĩnh vực công nghệ thông tin, rất nhiều Senior sau vài năm tại vị đã thăng tiến lên các cấp bậc cao hơn. Chẳng hạn như Team Leader, Manager, Architech, … Senior không phải là giới hạn.
Tôi đang nắm trong tay mã nguồn của các dự án lớn và quan trọng, và cũng đã dẫn dắt các bạn Engineer khác. Những gì tôi nhận thấy là không thể lúc nào chúng ta cũng đúng hoàn toàn. Bạn luôn sai, nếu không phải bây giờ, thì sẽ là một lúc nào đó trong tương lai.
Vấn đề là các doanh nghiệp thay đổi, nhu cầu của khách hàng thay đổi, thị trường thay đổi, sản phẩm thay đổi hướng, các nhóm kỹ sư và chuyên môn của họ thay đổi, và vân vân. Tất cả những điều này có nghĩa là những gì chúng ta xây dựng với tư cách là kỹ sư, một ngày nào đó, sẽ phải thay đổi.
Đây là một cấp độ nhận thức khác mà cần rất nhiều kinh nghiệm qua thời gian để nhận ra. Việc chọn AWS Lambda
thay vì GCP Cloud Run
làm cơ sở hạ tầng có thể không phải là lựa chọn đúng đắn nếu AWS phá sản trong mười năm tới. Có những điều nằm ngoài tầm kiểm soát của bạn mà bạn không thể dự đoán.
Với tư cách là một kỹ sư cấp cao, bạn nhận ra những thứ mà bạn có thể kiểm soát và dự đoán, và xây dựng phần mềm của mình xoay quanh chúng. Mọi thứ còn lại là yếu tố ngoại vi mà hệ thống của bạn cần phải trừu tượng hóa để cho phép thay đổi nhanh chóng và dễ dàng.
Thuyết tương đối: Ý nghĩa ở đây là gì?
Không phải tất cả các ý tưởng, thiết kế hay giải pháp triển khai đều như nhau. Giải pháp tốt rồi sẽ có giải pháp tốt hơn, quan trọng là giải pháp nào phù hợp và tối ưu với từng bài toán cụ thể.
Kiến thức là chân ga, thúc đẩy bạn tiến về phía trước trong một cuộc tranh luận. Bạn có các sự kiện, mã nguồn, bài viết, các phương pháp tốt nhất, và một chương từ cuốn sách của Martin Fowler ủng hộ quan điểm của bạn. Những thứ này cung cấp năng lượng cho suy nghĩ, cho bản năng để bạn tin rằng bạn đúng. Chúng đẩy bàn đạp xuống và cuộc tranh luận tiến về phía trước.
Kinh nghiệm là phanh, một sợi dây cứu sinh giúp làm chậm và dừng lại cuộc tranh luận. Những ký ức về những sai lầm trước đây và nỗi sợ lành mạnh rằng giải pháp của bạn có thể không thực sự hiệu quả sẽ mang lại sự rõ ràng và mở ra một cơ hội để bạn xem xét quan điểm thay thế.
If you can’t intelligently argue for both sides of an issue, you don’t understand the issue well enough to argue for either. - GBlink’s Dad
Đôi khi bạn đúng, và khi bạn đúng, hãy thúc đẩy. Đội ngũ, công ty và dự án phụ thuộc vào việc đưa ra các quyết định đúng đắn. Đôi khi bạn sai, và khi bạn sai, bạn sẽ không nhận ra điều đó nếu tất cả những gì bạn có là kiến thức thúc đẩy bạn tiến về phía trước trong một cuộc tranh luận.
Làm thế nào để đánh giá một cách cụ thể kiến thức và kinh nghiệm của ai đó? Thật khó.
Lời kết
Đôi khi, nhận thức về cấp bậc không chỉ đơn giản là về số năm bạn đã làm trong ngành hay số lượng kiến thức bạn tích lũy được. Cấp bậc của bạn không phải là một tiêu chuẩn duy nhất mà bạn có thể đạt được bằng cách chỉ học hỏi và thực hành. Nó là sự kết hợp của kinh nghiệm thực tế, khả năng giải quyết vấn đề, và sự sẵn sàng học hỏi từ những sai lầm.
Để trở thành một Senior Engineer, bạn không chỉ cần kiến thức vững vàng mà còn phải có khả năng nhận diện và sửa chữa sai lầm, đồng thời luôn mở lòng với những quan điểm và phương pháp mới. Điều quan trọng không phải là bạn đã làm gì, mà là bạn đã học được những gì từ những trải nghiệm đó và sẵn sàng thay đổi quan điểm của mình khi cần thiết.
Trở thành Senior không phải là một đích đến cố định mà là một hành trình liên tục, trong đó bạn không chỉ phát triển bản thân mà còn giúp đỡ và dẫn dắt những kỹ sư khác.
Bài viết mang tính chất “ghi chú, lưu trữ, chia sẻ và phi lợi nhuận”.
Nếu bạn thấy hữu ích, đừng quên chia sẻ với bạn bè và đồng nghiệp của mình nhé!
Happy coding! 😎 👍🏻 🚀 🔥
Reference: