Senior hay không-Senior?

Mình sẽ mở đầu bài viết với một câu châm ngôn của bác Martin Fowler mà mình nghĩ ai là Software Engineer cũng đều nên nhớ,

“Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.”

Tạm dịch là,

“Bất cứ thằng ngu nào cũng có thể viết code cho máy có thể tính hiểu.
Lập trình viên giỏi là người viết code để cho người khác có thể hiểu.”

Nhắc trước, đây là bài viết hoàn toàn dựa trên quan điểm cá nhân của mình và có thể sẽ làm cho nhiều bạn không vui, vì thế để tránh những sự tổn thương không đáng có bạn có thể tắt trình duyệt ngay lúc này.

Việc bạn là Senior hay không-Senior chẳng hề phụ thuộc vào số năm viết code bạn đã từng trải qua. Mình rất tâm đắc với một câu nói khác,

“Người có 10 năm kinh nghiệm sẽ rất khác người trải qua 1 năm kinh nghiệm 10 lần.”

Tất cả sẽ dựa trên năng lực và kỹ năng mà các bạn có, điều này có nghĩa là người Senior sẽ có nhiều kỹ năng hơn là những người chưa-Senior.

Vậy thực sự điểm khác biệt là gì?

Về kiến thức?

Đương nhiên khi nhận mình là một Senior, kiến thức mà các bạn có cần phải nhiều hơn những người không-Senior, các bạn phải biết và hiểu về Design Pattern, về kiến trúc hệ thống, về khả năng chịu tải, về automation testing, về bảo mật, và nhiều hơn thế nữa. Điều quan trọng khi trở thành một Senior, đó là các bạn phải biết mọi thứ trong quá trình phát triển phần mềm hoạt động như thế nào.

Như vậy đối với những người chưa-Senior, điều quan trọng để các bạn có thể thu hẹp khoảng cách đối với người Senior đó là bổ sung thật nhiều kiến thức, để bổ sung kiến thức, các bạn có thể đọc thật nhiều sách, học các khóa học online, tham gia bootcamp,… À, đọc blog của mình cũng chính là một hình thức bổ sung kiến thức nhé.

Tuy nhiên, kiến thức chỉ là một trong số những yếu tố khác biệt, và đây có thể coi là yếu tố cơ bản và đơn giản nhất trong những điểm khác biệt của Senior và không-Senior.

Về khả năng lập trình (coding)

Khác với điều mọi người thường nghĩ, coding là quá trình giao tiếp giữa lập trình viên và máy tính. Trong định nghĩa của bản thân mình, coding là quá trình giao tiếp giữa người với người (lập trình viên với lập trình viên) để chỉ dẫn cho máy tính cách hoạt động “như thế nào cho đúng” (đúng với business logic).

Sự khác biệt giữa người Senior và không-Senior chính là khả năng code để cho người khác, một người mới vào dự án có thể đọc hiểu và làm việc được ngay trên phần code đó.

Thường thì sự khác biệt này sẽ đến chủ yếu từ việc tích lũy kinh nghiệm, càng nhiều kinh nghiệm, càng nhiều trải nghiệm và sai lầm các bạn có thể trải qua và chắc chắn chúng ta cũng sẽ ít nhiều học được nhiều bài học từ đó.

Đối với người không-Senior

Đối với những người không-Senior, mình thường thấy các bạn có mindset về việc chỉ tập trung vào chuyện làm sao cho code chạy đúng, một sản phẩm tốt và một sản phẩm chạy được đối với những người không-Senior là như nhau.

Việc code thế nào cho rõ ràng, đơn giản và dễ hiểu là một điều tương đối khó. Và điều mà mình thường thấy ở những người không-Senior đó là họ luôn ưa thích việc viết những đoạn code phức tạp, hay có vẻ phức tạp. Bạn có thể dễ dàng nhận ra một người không Senior khi nhìn thấy họ cố gắng làm code ngắn đi bằng những toán tử phức tạp, hay tạo ra hàng tá lớp abstractions trong code khiến cho code trở nên phức tạp quá mức cần thiết. Những người không-Senior thường xem việc code phức tạp là cách để thể hiện họ code tốt như thế nào, tuy nhiên trên quan điểm cá nhân của mình thì điều này không tốt chút nào.

Đối với người không-Senior, họ thường tập trung vào việc viết code cho máy tính hiểu và bỏ qua khía cạnh giao tiếp với người khác trên code của mình.

Đối với người Senior

Trong khi người không-Senior luôn luôn nghĩ về chuyện code sao cho chạy, thì người Senior sẽ luôn nghĩ về chuyện làm sao cho code của mình có thể dễ bảo trì, thay đổi hoặc thậm chí là đập bỏ trong tương lai. Vì thế mà khi đọc vào code của những người Senior sẽ thường có cảm giác dễ hiểu hơn, đi thẳng vào vấn đề hơn và đôi khi những đoạn code đó vẫn bị các bạn không-Senior chửi là “code ngu” (chuyện này đã được Tôi đi code dạo chia sẻ trong một bài viết gần đây).

Sự đơn giản và dễ hiểu là điều tối quan trọng đối với code của một người Senior nhưng điều này không đồng nghĩa với chuyện cứ code xấu sẽ là Senior, chuyện này mình đã từng chia sẻ trong bài viết Chuyện tối ưu code, xấu đẹp, đẹp xấu. Điều này không phải ngày một ngày hai là có thể cảm nhận được. Như mình đã nói ở trên, để đạt được điều này, các bạn phải tích lũy thật nhiều trải nghiệm, và sai lầm.

Về cách làm việc

Đối với người không-Senior, do bản chất về việc chưa có nhiều kinh nghiệm, nên công việc hàng ngày của họ sẽ xoay quanh những thứ task đơn giản và ít ảnh hưởng lên toàn bộ hệ thống, khi làm việc họ sẽ cần chỉ dẫn của những người có nhiều kinh nghiệm hơn. Trong khi Senior sẽ có thể xoay sở để làm công việc của họ mà không cần chỉ dẫn gì.

Việc đặt câu hỏi là một kĩ năng quan trọng với kỹ sư phần mềm, đây cũng chính là điểm khác biệt lớn giữa người Senior và người không-Senior. Những người Senior sẽ biết cách đặt câu hỏi đúng, đưa ra cách giải quyết cũng như so sánh lợi và hại cho từng phương án để giải quyết vấn đề. Những người không-Senior thường rất ít đặt câu hỏi, một số người có nhiều kinh nghiệm hơn thì vẫn đặt câu hỏi, nhưng họ chỉ đặt câu hỏi khi nó liên đến task của họ.

Người Senior, sẽ luôn biết cách đưa ra những cách làm đúng cho phương án của họ và hiếm khi họ bị “lầm đường lạc lối” trong cách giải quyết của mình. Tuy nhiên thì không vì vậy mà họ không cần đến sự giúp đỡ của người khác, vì không ai có thể giỏi tất cả mọi thứ trên đời, nên việc nhờ một người có nhiều kinh nghiệm hơn giúp đỡ là một việc rất bình thường.

Việc những người chưa-Senior, việc họ đặt ra những câu hỏi không đúng với ngữ cảnh, hay không liên quan cũng là một chuyện hết sức bình thường vì họ chưa có nhiều kinh nghiệm, họ sẽ luôn cần những sự chỉ dẫn từ người nhiều kinh nghiệm hơn để đưa họ về lại “chính đạo”, lâu dần kĩ năng đặt câu hỏi sẽ được cải thiện. Là những người không Senior, các bạn cũng phải sẵn sàng để chấp nhận thử thách, làm những việc khó hơn, thậm chí là ngoài vùng an toàn của bản thân để có thể có thêm trải nghiệm.

Tóm lại

Sự khác biệt giữa người Senior và người không-Senior sẽ không nằm ở số năm kinh nghiệm mà nằm ở kỹ năng mà họ có. Sự khác biệt về kiến thức không phải là sự khác biệt lớn nhất giữa người Senior và không-Senior, nhưng kiến thức chính là nền tảng cho những sự khác biệt khác, vì thế khi kiến thức còn chưa đủ thì các bạn đừng vội rèn luyện những kĩ năng khác mà hãy tập trung rèn luyện kiến thức chuyên môn cho vững chắc.

Sự khác biệt lớn sẽ nằm ở mindset khi viết code, mindset khi làm việc, cách tiếp cận vấn đề, cách đặt câu hỏi cũng như cách hành động dựa trên phương án đã đưa ra trong từng tình huống cụ thể. Để đạt được những kỹ năng đó đòi hỏi các bạn phải có những sự trải nghiệm nhất định.

Cuối cùng, kỹ sư phần mềm là người giải quyết vấn đề, vì thế luôn luôn giữ trong đầu tư tưởng,

“First solve the problem, then write the code.”

Tạm dịch,

“Giải quyết vấn đề trước rồi mới viết code.”

Code cuối cùng cũng chỉ là công cụ, cách giải quyết vấn đề như thế nào để giải pháp đó bền vững về sau mới là điều tạo nên một người Senior.

One thought on “Senior hay không-Senior?

Bình luận

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s