54 điểm bởi GN⁺ 2025-03-11 | 9 bình luận | Chia sẻ qua WhatsApp
  • Nhiều kỹ sư phần mềm làm việc mà không có đam mê với phần mềm
    • Họ làm việc chỉ để nhận mức lương tốt, nhưng thiếu đam mê thì cuối cùng hiệu suất sẽ giảm sút
    • Nếu chỉ mắc kẹt với công nghệ cũ và những niềm tin sai lầm mà không học hỏi, bạn sẽ không thể phát triển
  • Những yếu tố cần thiết để trở thành một kỹ sư giỏi
    • Cần hiểu bản chất của kỹ thuật và tích lũy kiến thức chuyên sâu
    • Cần liên tục học hỏi và tiếp cận một cách phản biện với công nghệ mới
    • Cần có thói quen áp dụng và cải thiện những gì đã học trong thực tế

# Điều gì tạo nên một kỹ sư giỏi

  • Định nghĩa về kỹ sư

    "Người áp dụng các nguyên lý khoa học để phân tích vấn đề và giải quyết chúng thông qua thiết kế, viết mã, chế tạo, sáng tạo..., từ đó làm cho thế giới trở nên tốt đẹp hơn"

  • Năng lực cần có đối với kỹ sư phần mềm
    • Phải hiểu nguyên lý máy tính hoạt động như thế nào
    • Cần hiểu sâu về cách phần cứng và phần mềm tương tác với nhau
    • Không chỉ dựa vào ngôn ngữ hay công nghệ đã được trừu tượng hóa mà phải học từ nền tảng

Hiểu biết sâu về miền lĩnh vực

  • Cần có sự hiểu biết vững chắc về các nguyên lý nền tảng
    • Kỹ sư cơ khí → đặc tính vật liệu và kiến thức ứng dụng của chúng
    • Kỹ sư phần mềm → hiểu nguyên lý hoạt động của bộ nhớ và CPU
    Quảng cáo
  • Phải học từ các nguyên lý cơ bản
    • Bắt buộc phải hiểu sâu các khái niệm cơ bản như HTTP, cấu trúc bộ nhớ, cách hệ thống vận hành
    • Đừng bắt đầu từ tầng cao hơn mà hãy xây dựng từ nền tảng

Học tập liên tục

  • Phải liên tục học hỏi công nghệ mới nhất và các xu hướng phát triển
  • Phải phân tích một cách phản biện các ưu điểm và nhược điểm của công nghệ mới
  • Đào sâu hơn vào những chủ đề mới phát hiện trong quá trình học
    • Giống như khi học toán rồi mở rộng sang các chủ đề chi tiết hơn, cần mở rộng chiều sâu của việc học

Hiểu giới hạn và vấn đề của công nghệ

  • Phải hiểu rõ ưu và nhược điểm của công cụ hay ngôn ngữ
  • Cần cảnh giác với thái độ tôn thờ quá mức một ngôn ngữ hay công cụ cụ thể
  • Điều quan trọng là chọn công cụ tối ưu phù hợp với dự án

Áp dụng kiến thức vào thực tế

  • Chỉ biết lý thuyết thì không có ý nghĩa
    • Phải áp dụng những gì đã học vào các dự án thực tế
    • Cần dùng nó để giải quyết vấn đề hoặc chứng minh khái niệm
  • Ví dụ về áp dụng thực tế
    • Xây dựng nguyên mẫu nhỏ
    • Giải quyết những vấn đề phát sinh trong đời sống hằng ngày
    • Giải thích và dạy lại những gì đã học cho người khác

# Cách trở thành một kỹ sư tốt hơn

Rèn luyện tư duy phản biện

  • Tư duy phản biện là yếu tố cốt lõi của kỹ thuật
    • Đây là điều thiết yếu để hiểu và chất vấn các khái niệm cùng tác động của chúng
    • Thiếu tư duy phản biện hoặc xem nhẹ nó sẽ dẫn đến kém hiệu quả và gia tăng độ phức tạp
    Quảng cáo
  • Tăng cường năng lực tư duy phản biện
    • Khi tiếp cận khái niệm mới, đừng chấp nhận vô điều kiện mà hãy xem xét tính hiệu quả và tính hợp lý của nó
    • Cần phân tích logic ưu, nhược điểm và các phương án thay thế của một cách tiếp cận cụ thể
  • Tài liệu học về tư duy phản biện: tham khảo Critical Thinking

Đọc nhiều sách hơn

  • Đọc sách là một cách hiệu quả để tiếp thu tri thức
    • Có nhiều đầu sách về các chủ đề đa dạng liên quan đến kỹ thuật phần mềm
    • Đừng chỉ tiếp nhận nội dung trong sách một cách thụ động mà hãy tiếp cận một cách phản biện
  • Ví dụ về các câu hỏi để đọc một cách phản biện
    • "Cách tiếp cận này có vấn đề gì không?"
    • "Có cách nào tốt hơn không?"
    • "Nếu là mình làm khác đi thì sẽ làm thế nào?"
    • "Những gì cuốn sách này giải thích có thực sự đúng không?"
  • Hình thành thói quen ghi chú
    • Sắp xếp và ghi lại những gì đã học cùng suy nghĩ của bản thân
    • Nếu có chủ đề chưa biết được nhắc tới thì tìm hiểu thêm
    • Đề xuất dùng Obsidian làm công cụ ghi chú (có thể chọn theo sở thích cá nhân)
  • Danh sách đọc đề xuất

Áp dụng kiến thức đã học vào dự án

  • Kết nối từ lý thuyết đến thực hành
    • Chỉ khi áp dụng những gì đã học vào dự án thực tế thì việc học mới thực sự trọn vẹn
    • Có thể đạt được sự hiểu biết sâu sắc hơn khi tự mình hiện thực hóa khái niệm
    • Dù chỉ là dự án nhỏ hay nguyên mẫu, điều quan trọng là phải tự tay tạo ra nó
    Quảng cáo
  • Lợi ích thu được trong quá trình áp dụng thực tế
    • Bạn sẽ đối mặt với những vấn đề thực tế mà lý thuyết không cho thấy
    • Có thể cụ thể hóa và cải thiện kiến thức trong quá trình giải quyết vấn đề
    • Năng lực giải quyết vấn đề và tư duy logic được củng cố
  • Cách áp dụng những gì đã học
  • Xây dựng nguyên mẫu nhỏ
    • Sau khi học một framework, ngôn ngữ hay khái niệm mới, hãy thử một dự án nhỏ
    • Ví dụ: sau khi học về đánh chỉ mục cơ sở dữ liệu, hiện thực một hệ thống tìm kiếm đơn giản và so sánh hiệu năng
    • Giải quyết vấn đề thực tế
      • Thử giải quyết những vấn đề nhỏ phát sinh trong cuộc sống hoặc công việc
      • Ví dụ: tự động hóa công việc thủ công lặp đi lặp lại, cải thiện vấn đề suy giảm hiệu năng
    • Dạy lại những gì đã học
      • Củng cố mức độ hiểu bằng cách giải thích cho người khác những gì đã học
      • Viết blog, viết thread trên Twitter hoặc thảo luận với đồng nghiệp
      • Trong quá trình giảng giải, bạn có thể khám phá ra những góc nhìn mới
  • Nếu liên tục áp dụng kiến thức thì sự hiểu biết lý thuyết sẽ chuyển hóa thành năng lực thực chiến, giúp bạn phát triển thành một kỹ sư giỏi hơn

Đánh giá và cải thiện mã của chính mình

  • Tự phê bình là thói quen cốt lõi của một kỹ sư xuất sắc
    • Nhiều kỹ sư mắc sai lầm khi cho rằng chỉ cần mã chạy được là "đủ tốt"
    • Nhưng kỹ sư thực thụ nhận thức rằng luôn luôn còn chỗ để cải thiện
  • Mục tiêu của việc tự đánh giá
    • Không cần quá khắt khe với bản thân
    • Điều cốt lõi là tìm kiếm cơ hội để cải thiện liên tục
    • Đừng hài lòng chỉ với việc làm cho mã chạy được; hãy tìm cách cải thiện hiệu năng, khả năng bảo trì và tính dễ đọc
  • Tác động của việc tự đánh giá liên tục
    • Chất lượng mã được cải thiện dần theo thời gian
    • Năng lực giải quyết vấn đề được tăng cường thông qua tự phê bình
    • Có thể không ngừng phát triển kiến thức và năng lực của bản thân
Quảng cáo

# Danh sách đề xuất cho kỹ sư phần mềm

Sách đề xuất

  • Designing Data-Intensive Applications – Thiết kế ứng dụng hướng dữ liệu
  • Introduction to Algorithms – (bản tiếng Hàn cũng có tiêu đề bằng tiếng Anh)
  • Writing a C Compiler
  • Essential Maths for Data Science – Toán học thiết yếu cho khoa học dữ liệu
  • Elements of Information Theory

Dự án đề xuất

  • Compiler - thử viết compiler cho ngôn ngữ bạn chọn, tham khảo LLVM hoặc JVM
  • Emulator - viết emulator cho một CPU đơn giản (ví dụ: 8086)
  • Rendering engine / game engine - viết chương trình đồ họa bằng OpenGL hoặc Vulkan
  • Viết memory viewer và editor - viết chương trình tương tác với bộ nhớ của chương trình khác
  • Viết HTTP server - viết HTTP server bằng ngôn ngữ cấp thấp
  • Hãy tránh làm website hoặc dự án quá đơn giản. Hiệu quả học tập có thể thấp. Hãy chọn một trong các dự án được nhắc ở trên, nghiên cứu chủ đề rồi tự mình hiện thực hóa

Kết luận

  • Trở thành một kỹ sư giỏi không có nghĩa là biết nhiều ngôn ngữ lập trình
  • Hiểu sâu các nguyên lý nền tảng + tư duy phản biện + áp dụng thực tế là cốt lõi
  • Cần có thái độ học hỏi, áp dụng và cải thiện không ngừng
  • Kỹ thuật là một hành trình không có điểm kết, và thái độ muốn trưởng thành là điều quan trọng

Kết luận

  • Bản chất của việc trở thành một kỹ sư giỏi
    • Đó không phải là biết nhiều ngôn ngữ lập trình nhất, thành thạo framework mới nhất hay chạy theo công nghệ mới
    • Điều cốt lõi là hiểu sâu các nguyên lý nền tảng của kỹ thuật
    • Phải áp dụng kiến thức đã học vào dự án thực tế, tư duy phản biệnkhông ngừng phát triển
  • Đặc điểm của kỹ sư hàng đầu
    • Không ngừng học hỏi và tiếp thu tri thức mới
    • Liên tục nghi ngờ những giả định của chính mình và tìm cách cải thiện
    • Áp dụng điều đã học để giải quyết vấn đề thực tế, hợp tác với đồng nghiệp và cùng phát triển
  • Kỹ thuật là hành trình cả đời
    • Cần có sự tò mò (curiosity), tính kỷ luật (discipline)ý chí phát triển
    • Nếu thực hành những nguyên tắc này, bạn có thể vượt xa một kỹ sư giỏi để trở thành một kỹ sư vĩ đại

9 bình luận

 
gurugio 2025-03-11

Tôi cũng từng đóng góp cho mảng quản lý bộ nhớ của Linux kernel và nghĩ rằng mình hiểu ở mức độ nào đó về cách các cơ chế cấp thấp hoạt động, nhưng rồi khi nhìn lại việc cuối cùng mình đang làm những công việc ngoài ý muốn và khá xa phát triển phần mềm, tôi lại thấy rằng có lẽ phải hành động ngược với bài viết này thì mới trở thành một kỹ sư thành công.

  • Theo đuổi công nghệ mới thật nhanh
  • Nghĩ đến thị trường hơn là sự tò mò cá nhân
  • Giỏi tự quảng bá bản thân hơn là tự phê bình
  • Thay vì đam mê/sự phát triển, hãy tập trung vào coding test
    Khi trở về nước, tôi nhận ra thị trường ở Hàn Quốc quá nhỏ và cạnh tranh quá khốc liệt, nên có rất ít công ty hay vị trí cho phép tập trung vào phát triển. Vì ai cũng tranh giành những chỗ ít ỏi đó, rốt cuộc có vẻ phải tập trung vào những thứ dễ gây chú ý thì mới có thể làm được công việc phát triển mà mình thực sự muốn.
 
malcomjj 2025-03-15

Tôi cũng đồng cảm! Và tôi nghĩ cách hiểu về một kỹ sư "giỏi" được nói ở đây thực sự khác nhau quá nhiều tùy từng người. Có thể hơi cực đoan, nhưng ngay cả khi biết tầm quan trọng của kiến thức nền tảng, tôi vẫn phải tự hỏi liệu một kỹ sư không có giá trị trên thị trường có phải là một kỹ sư giỏi hay không.

 
takesixnotfive 2025-03-12

Thật sự rất đồng cảm,,,
Thật tiếc khi đây không phải là cuộc chơi xem ai nắm bắt và xử lý tốt bản chất vấn đề đến mức nào,
mà lại là cuộc chơi xem ai dùng tốt một ngôn ngữ và những công nghệ nhất định cho hợp với xu hướng hơn,,

 
ethanhur 2025-03-11

Tôi nghĩ ở Hàn Quốc cũng có nhiều kỹ sư giỏi, nhưng bản thân tôi cũng thấy khá tiếc nuối ở nhiều khía cạnh vì quy mô thị trường.

Tôi có cảm giác giá mà những nơi như FuriosaAI thành công thì đã tốt biết mấy.

 
roxie 2025-03-16

FuriosaAI phá sản rồi sao...?

 
yoonda5898 2025-03-11

Cũng thấy hơi đồng cảm nhỉ.. haha
Không biết chỉ thị trường Hàn Quốc mới vậy hay sao...

 
tsboard 2025-03-11

Cách để trở thành một kỹ sư giỏi

Cách đây không lâu, tôi từng có dịp tổ chức một buổi seminar ở công ty cho nhóm học ngôn ngữ Kotlin. Khi thử giải thích theo cách so sánh với ngôn ngữ C++ mà bộ phận chủ yếu sử dụng, tôi nhớ là phản hồi nhận được khá tốt. Bản thân tôi thì hầu như không dùng C++, còn các thành viên trong bộ phận lại là lần đầu tiếp xúc với Kotlin, nhưng có vẻ theo nhiều khía cạnh thì điều đó đã giúp ích cho sự phát triển của tất cả mọi người.

 
GN⁺ 2025-03-11
Ý kiến trên Hacker News
  • Rất thích quan điểm về việc đọc sách. Tôi thường thấy nhiều kỹ sư bỏ lỡ rất nhiều thứ khi họ thích video và các bài viết hời hợt hơn là tài liệu và sách

    • Cũng ngạc nhiên vì có quá nhiều người đặt câu hỏi về những thứ vụn vặt thay vì đọc tài liệu hoặc ít nhất là Google
    • Khả năng tìm kiếm thông tin là một kỹ năng cực kỳ quan trọng
  • Đồng ý với nhiều điểm được nhắc đến trong bài này. Tuy vậy, tôi không chắc việc hiểu sâu các nền tảng như CPU, bộ nhớ, HTTP giúp ích thế nào để trở thành một kỹ sư tốt hơn

    • Phần lớn kỹ sư làm việc ở mức trừu tượng rất cao, và các ngôn ngữ lẫn framework dùng ở tầng đó không cho phép truy cập mức thấp như bộ nhớ
    • Không nên thiếu hiểu biết về những điều cơ bản này, nhưng tôi không thấy rõ ý nghĩa của chúng đối với các ứng dụng thường ngày ngoài phạm vi học thuật
 
sankalpa 2025-03-27

Tôi không biết đến mức nền tảng sâu đến đâu, nhưng tôi đã thấy rằng khi không biết những điều cơ bản thì người ta thật sự tạo ra những kết quả vừa lố bịch vừa khó mà tưởng tượng nổi.
Ví dụ như triển khai theo kiểu đưa toàn bộ bản ghi trong DB vào bộ nhớ rồi tìm kiếm trong bộ nhớ.
Khi số bản ghi ít thì chạy ổn, nhưng khi số bản ghi tăng lên thì vỡ bộ nhớ.
Vì hoàn toàn không hiểu bộ nhớ và DB khác nhau thế nào nên mới viết như vậy.
Đây chỉ là một ví dụ, và lần nào họ cũng triển khai theo những hướng mà thật sự không thể tưởng tượng nổi.
Lập trình viên bình thường(?) thật sự không thể tưởng tượng được.