Dont trust a programmer who knows C

3 min read

https://analyticsindiamag.com/dont-trust-a-programmer-who-knows-c/

Quan sát của bạn về việc C++ là một ngôn ngữ “hai đỉnh” rất chính xác và nó làm nổi bật một động lực thú vị trong cộng đồng C++. Hãy cùng phân tích sâu hơn và khám phá lý do tại sao điều này xảy ra, cách nó thể hiện, và ý nghĩa của nó đối với việc phỏng vấn và đánh giá các lập trình viên C++.


1. Hai Đỉnh Của Sự Thành Thạo C++

  • Đỉnh Đầu Tiên (Trước Thung Lũng):
    Các lập trình viên ở giai đoạn này thường đến từ C hoặc các ngôn ngữ đơn giản hơn. Họ học những kiến thức cơ bản của C++ (ví dụ: lớp, kế thừa, sử dụng STL cơ bản) và cảm thấy tự tin vì họ có thể viết mã chức năng. Họ thậm chí có thể nói những điều như:
    • “C++ chỉ là C với các lớp.”
    • “Tôi biết C++ vì tôi đã sử dụng nó nhiều năm.”
    • “Nó không phức tạp lắm; tôi có thể làm mọi thứ tôi cần.”
      Những lập trình viên này thường không nhận thức được chiều sâu và sự phức tạp của C++ hiện đại (ví dụ: template, move semantics, RAII, SFINAE, constexpr, v.v.).
  • Đỉnh Thứ Hai (Sau Thung Lũng):
    Các lập trình viên đã trải qua “thung lũng thất vọng” có hiểu biết sâu sắc hơn nhiều về C++. Họ đã gặp phải những điểm kỳ lạ, cạm bẫy và các tính năng nâng cao của ngôn ngữ. Họ có thể nói những điều như:
    • “C++ là một con quái vật; nó cực kỳ mạnh mẽ nhưng cũng cực kỳ phức tạp.”
    • “Tôi yêu C++, nhưng tôi ghét việc dễ dàng tự làm hại bản thân với nó.”
    • “Tôi đã dành nhiều năm để học C++, và tôi vẫn khám phá ra những điều mới.”
      Những lập trình viên này có nhiều khả năng đánh giá cao các sắc thái của ngôn ngữ và hệ sinh thái của nó.

2. Tại Sao Điều Này Xảy Ra?

  • Sự Phát Triển Của C++:
    C++ đã phát triển đáng kể qua nhiều thập kỷ, từ “C với các lớp” thành một ngôn ngữ đa mẫu hình hiện đại với các tính năng như template, lambda và lập trình meta. Sự tiến hóa này tạo ra một đường cong học tập dốc.
  • Khả Năng Tiếp Cận Của Đỉnh Đầu Tiên:
    Những kiến thức cơ bản của C++ (ví dụ: cú pháp, lớp và OOP cơ bản) tương đối dễ nắm bắt, đặc biệt là đối với các lập trình viên có nền tảng C. Điều này tạo ra cảm giác thành thạo sai lầm.
  • Chiều Sâu Của Đỉnh Thứ Hai:
    Để thực sự làm chủ C++, bạn cần hiểu các tính năng nâng cao, thành ngữ và các phương pháp hay nhất (ví dụ: RAII, quy tắc năm, SFINAE, constexpr, v.v.). Điều này đòi hỏi nhiều thời gian và công sức.

3. Cách Phân Biệt Lập Trình Viên Trước và Sau Thung Lũng

Trong một cuộc phỏng vấn, bạn có thể sử dụng các chiến lược sau để phân biệt giữa hai nhóm:

  • Hỏi Về Độ Phức Tạp Của Ngôn Ngữ:
    Như bạn đã đề cập, chỉ cần đề cập đến sự phức tạp của C++ có thể tiết lộ nhiều điều. Các lập trình viên trước thung lũng sẽ giảm nhẹ nó, trong khi các lập trình viên sau thung lũng sẽ có những phàn nàn hoặc ví dụ cụ thể.
  • Đi Sâu Vào Các Chủ Đề Nâng Cao: Hỏi về các chủ đề như:
    • Move semantics và tham chiếu rvalue.
    • Lập trình meta và SFINAE.
    • RAII và smart pointers.
    • Quy tắc năm/quy tắc không.
    • constexpr và lập trình thời gian biên dịch.
      Các lập trình viên trước thung lũng sẽ gặp khó khăn với các chủ đề này, trong khi các lập trình viên sau thung lũng sẽ có những hiểu biết chi tiết.
  • Thảo Luận Về Các Thách Thức Trong Thực Tế:
    Hỏi về các thách thức cụ thể mà họ đã gặp phải với C++ (ví dụ: gỡ lỗi lỗi template, quản lý bộ nhớ, v.v.).

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *