Làm thế nào để trở thành kỹ sư phần mềm 10x

Uncategorized

Nội dung từ một bài viết nước ngoài – Tác giả Michael Lin trước đó là trưởng phòng kỹ thuật tại Netflix hiện tại đã nghỉ việc và đang viết các bài chia sẻ về chủ đề kỹ thuật, lời khuyên trong công việc và khởi nghiệp.

Bài viết nói về những kỹ sư giỏi nhất (10x) họ là ai so với kỹ sư bình thường và phải làm gì để trở thành những người ưu tú như vậy. Qua bài biết này mong rằng các bạn có thể biết nên làm thế nào để đạt được mục tiêu là kỹ sư giỏi nhất.

Chúng ta sẽ tìm hiểu về 3 lỗi kỹ sư bình thường hay mắc phải. Bạn có phạm phải những điều này không?

Kỹ sư 10x mới thực sự tồn tại, Bigfoot thì không

Những kỹ sư giỏi thực tế ưu tú hơn gấp 10 lần so với những kỹ sư bình thường. Trong một team gồm các kỹ sư cấp thông thường, kỹ sư 10x[1] tạo ra sản phẩm nhanh hơn và mang nhiều giá trị hơn.

Làm thế nào mà việc này thực hiện được? Càng nhiều người không phải là càng tốt hơn sao?

Trong thời gian là người chịu trách nhiệm kỹ thuật ở Netflix và Amazon tôi đã có cơ hội làm việc cùng với hai người từ lúc là sinh viên mới tốt nghiệp cho đến khi trở thành kỹ sư đứng đầu( hơn L7 của Amazon). Khi đó tôi đã chứng thực được sự tồn tại của kỹ sư 10x. Trước tiên họ không phải là những người sau đây

  • Tốc độ typing nhanh gấp 10 lần 
  • Làm việc nhiều hơn gấp 10 lần 
  • Viết code nhiều hơn gấp 10 lần 

Thực tế tôi đã nhận ra kỹ sư 10x làm việc chỉ một nửa so với người khác, tốc độ typing một nửa và dành nhiều thời gian cho việc xóa hơn là gõ code.

Các kỹ sư 10x có xu hướng giỏi hơn về Leedcode[2] nhưng đó không phải là điều khiến họ trở nên khác

Điểm khác nhau giữa kỹ sư giỏi nhất và kỹ sư bình thường được thể hiện chính xác ở tư duy và cách tiếp cận vấn đề. Họ biết được cách dùng đúng công cụ, đặt câu hỏi phù hợp và biết cách chọn thứ tự ưu tiên. Thực ra đây là kỹ năng mà ngay cả những người không chuyên cũng có thể trau dồi hơn là việc cần skill code giỏi.

Phi kỹ thuật( đáng ngạc nhiên là) chính là điều khác biệt giữa những kỹ sư giỏi nhất với những kỹ sư trung bình

Giờ chúng ta sẽ cũng tìm hiểu xem những sai lầm phổ biến của kỹ sư bình thường và cách những kỹ sư nhiều kinh nghiệm xử lý cùng một vấn đề này như thế nào.

1. Không nghiên cứu về công cụ sử dụng

Abraham Lincoln đã nói rằng “Nếu cho tôi 8 tiếng để chặt một cái cây, tôi sẽ giành 7 tiếng để mài một cái rìu”. Kỹ sư bình thường sẽ chặt cây bằng rìu cùn trong 8 tiếng. Trái lại, kỹ sư hàng đầu sẽ chọn một cái cưa tốt nhất trong 1 tiếng trước khi bắt đầu công việc. Và sẽ chặt bất kỳ cái cây nào chỉ trong vòng 5 phút.

Honest Abe đã trở thành một kỹ sư tuyệt vời

Sai lầm phổ biến mà kỹ sư thường mắc phải đó là họ bắt đầu lao vào gõ code. Họ chỉ gắn bó với các công cụ mà bản thân biết và cố gắng áp dụng nó vào bất cứ đâu.

Nếu kỹ sư bình thường chỉ biết sử dụng búa họ cũng sẽ dùng nó để đào đất.

Họ hầu như không dành thời gian hơn xem xét các lựa chọn thay thế khác. Hay suy nghĩ liệu có thể giải quyết được vấn đề mà không cần dòng code nào hay không.

Kỹ sư 10x dùng đúng công cụ hoàn thành công việc với chỉ 10 phút trong khi kỹ sư bình thường đổ công sức mất mấy tuần. Đây chính là sự chênh lệch hiệu suất 10x.

Ví dụ: Phát triển một website

Gần đây tôi đã cá với một đàn em vừa tốt nghiệp xem ai có thể tạo ra trang web cá nhân nhanh hơn. Trong 2 tuần em ấy đã viết hơn 1000 dòng code. Thậm chí đã qua 2 tuần vẫn chưa hoàn thành. Còn tôi đã tạo trang web chỉ trong một ngày mà không có dòng code nào. Các bạn có thể xem kết quả Homepage mà tôi làm.

Notion page + super.so for deployment = michaellin.

Tôi hỏi em ấy đã tiến hành như thế nào và đã hiểu được sao lại mất nhiều thời gian như thế.

Em đã bắt đầu làm bằng cách viết code từ đầu theo cách tạo một ứng dụng(React) đã học ở trường. Nhưng để tạo image và CSS quá khó. Và em cũng không biết cách deploy nó. Vì vậy, em nghĩ rằng phải viết tập lệnh triển khai tuỳ chỉnh trên AWS nhưng cách dùng Console lại không dễ tí nào. Micro instant và large instant có điểm khác biệt thế nào vậy?”

Tôi nhận ra rằng lời giải thích của kỹ sư này đang bỏ sót một vài điểm quan trọng. Đầu tiên em ấy đã sót những phần sau đây.

  • Yêu cầu – không đề cập đến SEO, nhận xét code, các template tạo sẵn có sử dụng được hay không
  • Công cụ thay thế – chỉ biết đến react và AWS và không tìm hiểu phương án khác

Hãy tưởng tượng bạn đang cố gắng xây dựng lại các tính năng bình luận từ đầu. Hơn nữa việc đảm bảo SEO hoạt động bình thường không phải là việc đơn giản. Để những chức năng này hoạt động đúng cần có nhóm phát triển can thiệp vào. Không có gì ngạc nhiên khi không hoàn thành được qua 2 tuần.

2. Không yêu cầu sự giúp đỡ

Đây là lỗi thực sự đơn giản và có thể sửa đổi, rất nhiều kỹ sư lại cứ bỏ qua điều này nên tôi muốn đề cập đến.

Kỹ sư bình thường có quan niệm sai lầm rằng kỹ sư giỏi giống như một thiên tài đơn độc. Đương nhiên nếu các bạn cứ liên tục bám lấy vấn đề biết đâu vẫn tìm ra được giải pháp.

Những kỹ sư 10x không phải là thiên tài đơn độc, họ cũng cần sự giúp đỡ

Tuy nhiên giữa hai điều này có sự khác biệt rất lớn. Điểm lớn nhất, đó là tự phán đoán tình hình và thiếu năng lực diễn giải thông tin. Nên thay vì yêu cầu sự giúp đỡ, họ xem đi xem lại từng dòng code và gặp rắc rối với nó. Trong khi chỉ hỏi đồng nghiệp 5 phút là vấn đề có thể được giải quyết đơn giản.

Một kỹ sư ít kinh nghiệm hơn nhưng biết cách yêu cầu sự giúp đỡ sẽ luôn đánh bại kỹ sư tài năng hơn.

Đôi lúc rõ ràng chỉ cần có thêm ngữ cảnh để tiếp tục công việc. Ví dụ, bạn sẽ gặp khó khăn để hiểu những điều sau đây nếu không rõ ràng

  • Lý do codebase được cấu trúc theo cách của nó
  • API nào để gọi từ nhóm khác
  • Cách deploy các hoạt động

Đây là những ví dụ về tình huống theo ngữ cảnh mà bạn nên yêu cầu sự trợ giúp hơn là tự tìm hiểu. Đừng ngại trong việc tìm kiếm sự giúp đỡ.

3. Không mang lại giá trị kinh doanh

Kỹ sư 10x là nhà đầu tư sáng suốt.

Họ hiểu rằng công việc của họ là một khoản đầu tư và thành quả đầu tư của họ phải lớn hơn rất nhiều so với chi phí của thời gian mà họ bỏ ra. Hơn nữa, họ hiểu rõ về chi phí của cơ hội. Giống như thời gian tham gia vào xây dựng một chức năng có nghĩa không dành thời gian phát triển một chức năng khác.

Kỹ sư phải luôn luôn cân nhắc về chi phí cơ hội. “ Trong tất cả các chức năng có thể tạo, chức năng mà bạn đang phát triển có phải là cách sử dụng tốt nhất thời gian của bạn không?”

Họ hiểu rằng code là một cách thức để đạt được mục tiêu doanh nghiệp. Nếu không code mà vẫn đạt được mục tiêu doanh nghiệp lại càng tốt hơn. Ít công việc trực tiếp viết code thì sẽ có ít code phải bảo trì – một tình huống mang hiệu quả mà hai bên đều có lợi.

Những kỹ sư 10x là nhà đầu tư, như Warren Buffet

Tôi đã thấy nhiều kỹ sư mới không nhìn thấy được mục tiêu kinh doanh này. Chẳng hạn:

  • “Công nghệ mới này thật sự tuyệt vời. Hãy đầu tư 5 ngày tích hợp tính năng này vào website của chúng ta.” (Không có sự liên kết với sản phẩm)
  •  “Uhm.. cấu trúc code tôi không hài lòng lắm. Sprint tiếp theo hãy tái cấu trúc lại.”(Chi phí cơ hội – đây có phải cách sử dụng thời gian tốt hơn so với việc xây dựng các tính năng tạo doanh thu hay không)
  • “Nền tảng này quá cũ. Hãy chuyển sang nền tảng mới đi.” (Sự thay đổi này có chắc trở nên tốt hơn không?)

Hiệu suất cao của kỹ sư 10x dựa theo tính toán như sau đây. Kỹ sư mới lãng phí 2 tiếng vào triển khai tính năng phức tạp không nâng cao lợi nhuận, nhưng kỹ sư cao cấp dành 1 tiếng vào việc thay đổi code đơn giản cho lợi nhuận gấp 5 lần và nhận được sự cải thiện về năng suất gấp 10 lần.

½ thời gian tạo ra lợi nhuận gấp 5 lần doanh thu đương nhiên tạo ra giá trị gấp 10

Kết lại

Yếu tố khác biệt giữa kỹ sư mạnh nhất và kỹ sư yếu nhất đó chính là kỹ năng mềm. Nếu một kỹ sư tránh được tất cả những sai lầm trên nhưng lại khó làm việc được với họ thì cũng vô dụng.

Một đoạn trích giới thiệu văn hóa công ty từ CEO Netflix

Các bạn đã làm việc chăm chỉ để trở thành một kỹ sư giỏi. Nhưng engineer là teamplay. Đừng để nỗ lực của bạn bị lãng phí vì cái tôi của bạn. Và bạn hãy luôn nhớ rằng:

Kỹ sư phải ưu tiên truyền tải giá trị hơn bất cứ điều gì.

[1] Programmer 10x cũng gọi là engineer 10x, so với kỹ sư khác là người có năng lực duy nhất cho thấy tính năng suất gấp 10

[2] Coding test và site giải thuật toán

[3] Tạo facebook và thư viện open source javascript để phát triển giao diện người dùng

[4] Thu thập toàn bộ source code được sử dụng để built tạo hệ thống phần mềm đặc trưng, ứng dụng phần mềm, các yếu tố tạo nên phần mềm


The translated article above belongs to Michael Lin author and Metacoders commits not to use this article for any commercial purposes

The topic: How to be a 10x Software Engineer