150 điểm bởi GN⁺ 2025-04-10 | 19 bình luận | Chia sẻ qua WhatsApp
  • Khi gặp gỡ nhiều lập trình viên khác nhau, tác giả bắt đầu suy ngẫm về những đặc điểm chung mà các lập trình viên xuất sắc nhất cùng sở hữu
  • Bài viết này là bản ghi chép quan sát được viết ra để truyền cảm hứng cho các lập trình viên mới bắt đầu hoặc những ai muốn phát triển hơn nữa

Hãy đọc tài liệu tham khảo trước

  • Thay vì tìm Stack Overflow hay LLM trước, điều quan trọng là hình thành thói quen đọc tài liệu chính thức trước tiên
  • Tài liệu chính thức của Apache, Python, TOML... thực sự được viết khá tốt
  • Thói quen học trực tiếp từ nguồn sẽ mang lại lợi ích lớn về lâu dài

Hãy hiểu công cụ thật sâu

  • Biết cách “dùng” công cụ và “hiểu” nó là hai cấp độ hoàn toàn khác nhau
  • Người thật sự hiểu công cụ có thể giải thích từng cấu hình một
  • Để hiểu rõ, cần nắm được đầy đủ về công cụ, bao gồm:
    • Lịch sử (vì sao nó được tạo ra)
    • Hiện tại (ai đang duy trì nó)
    • Giới hạn (khi nào nó không phù hợp)
    • Hệ sinh thái (các công cụ, thư viện xung quanh...)
  • Nếu dùng Kafka làm công cụ chủ lực, bạn cần biết về nó nhiều hơn mức đọc lướt trên Reddit

Hãy đọc kỹ thông báo lỗi

  • Nếu quan sát thật kỹ thông báo lỗi, bạn sẽ thấy trong đó có manh mối
  • Những lập trình viên giỏi nhất có thể suy luận vấn đề chỉ từ một lượng thông tin rất ít
  • 80% vấn đề có thể được giải quyết chỉ bằng việc đọc kỹ thông báo lỗi
Quảng cáo

Hãy biết chia nhỏ vấn đề

  • Ai rồi cũng có lúc bị mắc kẹt, và chỉ khi biết chia nhỏ vấn đề thì mới có thể giải được
  • Người có nhiều kinh nghiệm hoặc khả năng giải quyết vấn đề tốt thường chia nhỏ rất dễ dàng
  • Công việc cốt lõi của lập trình viên, rốt cuộc, là biến một vấn đề lớn thành nhiều vấn đề nhỏ
  • Nếu giải từng vấn đề đơn giản một cách tuần tự, toàn bộ vấn đề cũng sẽ được giải quyết

Hãy làm việc với mã nguồn mà không sợ hãi

  • Những lập trình viên giỏi nhất không ngại đọc mã nguồn
  • Họ không nói những câu như “đó không phải lĩnh vực của tôi” mà cứ thử và học
  • Ngay cả với đoạn mã lần đầu tiếp xúc, họ cũng thường nhanh chóng trở thành người hiểu rõ nhất trong nhóm

Hãy luôn giúp đỡ người khác

  • Một lập trình viên vẫn sẵn sàng giúp đỡ dù đang bận là một đồng đội tốt và cũng là một chuyên gia xuất sắc
  • Sự tò mò và tinh thần hợp tác là phẩm chất thiết yếu của một lập trình viên giỏi

Hãy viết

  • Những lập trình viên xuất sắc nói tốt và cũng biết diễn đạt suy nghĩ bằng văn bản
  • Họ chia sẻ suy nghĩ qua blog, bài nói chuyện, hoạt động mã nguồn mở...
  • Kỹ năng viết có liên hệ trực tiếp với cấu trúc tư duy
  • Mã của người viết tốt thường có cấu trúc, rõ ràng và đôi khi còn sắc sảo

Đừng ngừng học hỏi

  • Người không ngừng học bất kể tuổi tác mới là lập trình viên thực sự xuất sắc
  • Họ không ngần ngại thử công cụ hay ngôn ngữ mới
  • Họ không mù quáng chạy theo công nghệ mới mà tự phân tích ưu nhược điểm
  • Dù còn trẻ, nếu rơi vào định kiến cố hữu thì sự phát triển cũng sẽ dừng lại

Đừng quá bận tâm đến vị thế

  • Một lập trình viên giỏi sẵn sàng học hỏi từ bất kỳ ai, bất kể chức danh
  • Họ giữ thái độ rằng ngay cả người mới vào nghề cũng có điều để mình học
  • Họ tìm cảm hứng từ những cuộc trò chuyện với những người có góc nhìn mới
Quảng cáo

Hãy xây dựng danh tiếng

  • Năng lực là quan trọng, nhưng việc để người khác biết đến năng lực đó cũng quan trọng không kém
  • Danh tiếng là công cụ để mở rộng tầm ảnh hưởng
  • Có thể xây dựng danh tiếng bằng những cách như:
    • Tự tay tạo ra hoặc triển khai những dịch vụ quan trọng
    • Phát triển những công cụ được biết đến rộng rãi
    • Đóng góp cho các dự án mã nguồn mở nổi tiếng
    • Viết những cuốn sách thường xuyên được trích dẫn
  • Danh tiếng không thể xây trong một sớm một chiều, mà cần nỗ lực bền bỉ và thời gian

Hãy có sự kiên nhẫn

  • Cần có sự kiên nhẫn với cả con người lẫn máy tính
  • Người xung quanh không phải kẻ ngốc, chỉ là họ thiếu thông tin mà thôi
  • Nếu thiếu kiên nhẫn, bạn sẽ dễ tích tụ bất mãn và khó cộng tác
  • Muốn giải quyết vấn đề khó, cần có sự tập trung và bền bỉ

Đừng đổ lỗi cho máy tính

  • Những lập trình viên giỏi nhất tuyệt đối không đổ lỗi cho hệ thống hay các yếu tố bên ngoài
  • Những vấn đề trông có vẻ ngẫu nhiên thực ra đều có lý do logic
  • Điều quan trọng là thái độ đào sâu đến cùng để tìm ra nguyên nhân

Hãy biết nói “tôi không biết”

  • Đã có lúc tôi cố ý chờ đợi khoảnh khắc ứng viên nói “tôi không biết” trong buổi phỏng vấn
  • Điều quan trọng không phải là câu trả lời, mà là thái độ
  • Những ứng viên tốt nhất sẽ thừa nhận mình không biết rồi bắt đầu suy luận
  • Thái độ thừa nhận không biết cho thấy khả năng học hỏi
  • Người nói dối hoặc giả vờ biết sẽ gây ảnh hưởng tiêu cực đến cả đội
Quảng cáo

Đừng đoán mò

  • Giống như triết lý của PEP 20, khi còn mơ hồ thì tuyệt đối đừng đoán
  • Rủi ro của việc đoán:
    • Nếu sai thì sinh ra bug
    • Ngay cả khi đúng, bạn vẫn có thể tin vào một tiền đề sai và gây ra vấn đề về sau
  • Nếu chưa chắc chắn, hãy:
    • Hỏi
    • Đọc tài liệu
    • Dùng công cụ debug
    • Tìm bằng chứng

Hãy giữ mọi thứ đơn giản

  • Người thông minh viết mã thông minh, còn người xuất sắc viết mã đơn giản
  • Mã đơn giản có lợi hơn rất nhiều cho việc bảo trì
  • Chỉ khi biết phân biệt lúc nào cần phức tạp và lúc nào không thì mới là năng lực thực sự

Suy nghĩ kết lại

  • Bài viết này không phải là một checklist, và kỹ nghệ phần mềm giỏi không phải là một cuộc thi
  • Tuy vậy, đừng tự lừa dối bản thân rằng bạn có thể bỏ qua những phần việc khó
  • Không có đường tắt nào để trở thành một lập trình viên xuất sắc

19 bình luận

 
dduha 2025-04-24

Cảm ơn bạn vì bài viết rất hay.!!

 
openman 2025-04-17

Tôi thấy được an ủi bởi câu nói rằng bài viết này không phải là một danh sách kiểm tra, và được tiếp thêm can đảm bởi câu nói rằng không có đường tắt.

 
geekbini 2025-04-13

Nếu hiểu dự án của công ty,
thì dù trở thành lập trình viên senior ở bất kỳ lĩnh vực nào
dù lĩnh vực đó là firmware, app hay web,
có vẻ bạn sẽ đạt đến mức có thể debug để tìm ra vấn đề đã phát sinh như thế nào
chỉ bằng cách xem log debug của web, app hoặc firmware.

 
softer 2025-04-11

Tôi nhớ lại hành vi mà mình đã suy đoán trong buổi phỏng vấn.

 
wogns3623 2025-04-11

Cá nhân tôi cũng xem trọng việc "luôn suy nghĩ mình đang tạo ra thứ gì".

 
wogns3623 2025-04-13

Có vẻ như có một thuật ngữ hay là Critical Thinking.

 
lighteach 2025-04-10

Điều này thực sự đã giúp ích rất nhiều. Cảm ơn bạn vì bài viết hay.

 
kylian 2025-04-10

Vậy thì cứ bảo LLM đọc tài liệu chính thức là được nhỉ!

 
dudlf016 2025-04-10

RTFM: Hãy đọc tài liệu chính thức đi.

 
kandk 2025-04-10

Dù nói không phải là checklist, nhưng có lẽ tôi nên lấy nó làm checklist cho mình.

 
haejuk99 2025-04-10

Tôi rất đồng cảm với ý kiến rằng nhất định phải đọc tài liệu chính thức.

 
aer0700 2025-04-10

Khi mới dạy lập trình, tôi cảm thấy tố chất làm lập trình viên của một người lần đầu bộc lộ ở chỗ người đó có thể đọc kỹ thông báo lỗi hay không.

 
postinsight 2025-04-19

.... Những kẻ không có nhận thức cơ bản để thừa nhận rằng lỗi và bug luôn luôn tồn tại thì chính là lừa đảo.

 
roxie 2025-05-05

Câu văn khó hiểu quá..

 
postinsight 2025-04-19

Trên web thì vậy.

 
coremaker 2025-04-10

Không phải tất cả, nhưng hầu hết đều là những điểm khiến tôi thấy đồng cảm.

 
GN⁺ 2025-04-10
Ý kiến trên Hacker News
  • Điều quan trọng nhất trong công việc là không suy đoán

    • Đã rèn luyện khả năng giải quyết vấn đề trong sản xuất chất bán dẫn, nơi cái giá của những giả định sai lầm là rất lớn
    • Luôn phải hiểu được nguyên nhân gốc rễ 100%
    • Lý do tránh các tech stack bất thường là vì chúng cản trở việc phân tích nguyên nhân gốc rễ
    • Giải quyết vấn đề một cách chính xác là cách nhanh nhất để xây dựng danh tiếng
  • Khi tiếp cận điều mới, thích đoán thử một chút trước khi đọc sâu tài liệu tham chiếu

    • Khi học ngôn ngữ hay API mới, sẽ thử đoán thông qua tutorial rồi mới đọc tài liệu tham chiếu
    • Ưu tiên các ngôn ngữ và IDE hỗ trợ những tính năng như Intellisense
  • Tốt hơn là tự tham chiếu trực tiếp source thay vì phụ thuộc vào Stack Overflow hay LLM

    • Ban đầu sẽ khó như đọc sách toán, nhưng theo thời gian sẽ có thể hiểu được
    • docs.rs của Rust crates, hoogle của Haskell, C++ reference đều là những tài liệu tham chiếu tuyệt vời
  • Những lập trình viên giỏi nhất giao tiếp và học hỏi từ mọi tầng lớp

    • Người mới mang đến góc nhìn mới mẻ, và những rào cản trong quá khứ có thể đã không còn nữa
    • Cần định kỳ kiểm tra lý do tồn tại của các quy tắc
  • Nếu biết tận dụng Stack Overflow tốt thì sẽ rất hữu ích

    • LLM hữu ích cho phân tích sự kiện thời gian thực hay tự động hóa, nhưng không thể thay thế lập trình viên
    • Sau khi hiểu chủ đề thông qua LLM thì nên tham khảo tài liệu chính thức
  • Những lập trình viên xuất sắc nhất vẫn có thể đạt thành tích nổi bật dù không có nền tảng CS

    • Có những trường hợp người không học đúng chuyên ngành đã học lập trình và phát triển rất nhanh
  • Ngoài lập trình, việc giao tiếp với domain business cũng rất quan trọng

    • Cần cân nhắc nhiều yếu tố ngoài bản thân việc lập trình
  • Đọc và hiểu thông báo lỗi giúp ích rất nhiều cho việc giải quyết vấn đề

    • Khi dùng asdf để quản lý phiên bản Python, Go, NodeJS, có thể giải quyết vấn đề thông qua thông báo lỗi
 
postinsight 2025-04-19

asdf là gì? Cần phải xem cảnh báo.

 
postinsight 2025-04-19

Ừm, tôi lại thấy thái độ không nhất quyết phải trở thành người giỏi nhất tuyệt đối có lẽ tốt hơn. Nào là viết lách... nào là giúp đỡ... nhưng hễ kiểu người như vậy thì...