Search…

Vì Sao Sinh Viên Ngành Khoa Học Máy Tính Học C++ Như 1 Ngôn Ngữ Chính?

08/08/20207 min read
Vì sao sinh viên ngành Khoa Học Máy Tính nên xem và học C++ như một ngôn ngữ chính.

Tại sao nên bắt đầu với C/C++?

C và C++ là ngôn ngữ khó để có thể làm chủ được, nó khó là vì nó kích thích trí óc chúng ta phải liên tục suy nghĩ, không ngừng tư duy, sáng tạo và điều này dành cho những người thật sự thích thử thách. Nói vậy không có nghĩa rằng C#, Java hay Python là dễ hơn, nhưng nếu phải so sánh thì thật sự chúng dễ hơn C++ khá nhiều.

Nhiều ngôn ngữ khác cung cấp tính năng cho phép lập trình viên tập trung vào giải quyết vấn đề thay vì tập trung vào lập trình (Thật ra C++ cũng có hỗ trợ tốt điều đó). Trong C#, Java lập trình viên không phải quan tâm tới việc quản lý bộ nhớ, JavaScript thì thoải mái sử dụng biến mà không cần quan tâm kiểu dữ liệu: "chỉ cần lưu trữ giá trị vào biến".

Với các ngôn ngữ có mức độ trừu tượng cao như C#, Java hay Python cho phép lập trình viên giải quyết vấn đề của họ nhanh hơn rất nhiều và làm cho các lập trình viên "biết ít hơn về lập trình, tạo được nhiều tính năng hơn và kiếm tiền nhiều hơn". Chỉ còn 1 vấn đề cần giải quyết đó là "hiệu suất" của chương trình. Theo quan điểm này thì khó khăn cốt lõi nằm ở vấn đề và ngôn ngữ chỉ là công cụ. Nó phải phục vụ lập trình viên thay vì làm họ đau khổ.

Sự khác biệt giữa C/C++ và phần còn lại

Thử đặt 1 câu hỏi, điều gì làm một lập trình viên trở thành một lập trình viên thật thụ? Anh ta "nghiên cứu" C#, Java, Python hay JavaScript thì đã là 1 lập trình viên? Chắc chắn đấy KHÔNG PHẢI là một lập trình viên! Chính xác chỉ là 1 người dùng cuối "hơi biết lập trình". Tại sao vậy? Alice là một luật sư, cô ấy giỏi máy tính, có thể cài đặt phần mềm, thiết lập kết nối mạng, phân biệt được WiFi với Dữ liệu di động nhưng cô ấy không biết lập trình. Alice biết về các hệ điều hành khác nhau cho máy tính để bàn và thiết bị di động. Cô thậm chí còn sử dụng hai hệ điều hành, một OS X cài trên MacBook và một Windows cài trên máy bàn. Cô ấy biết những ứng dụng trên Mac không thể cài cho Windows. Alice sử dụng một số phần cứng để làm chủ một số phần mềm đặc biệt dành cho luật sư. Để thành thạo phần mềm này Alice đăng ký các lớp học "SupaLoya2012-Ultimate", cô đã học được các truy vấn (query) khá khó để lấy dữ liệu từ tòa, học được giao thức (protocol) để sử dụng SupaLoya2012-Ultimate, học được thứ tự các nút và mục menu để nhấp để có được kết quả mong muốn. Alice chắc chắn không phải là lập trình viên, có thể nói rằng Alice là người biết cách làm việc trên máy tính tốt hơn nhiều người khác và cô ấy biết một số phần mềm khó dùng, giao thức, truy vấn dữ liệu...

Và Bob, Bob yêu thích máy tính, anh ta xem quá nhiều phim về hacker, lập trình viên, khởi nghiệp. Bob giỏi thao tác với máy tính như Alice, mặc dù Bob không biết SupaLoya2012-Ultimate nhưng anh ta biết JavaScript, Bob học rất nhiều về nó, tuy không dùng Promises nhưng có thể xài Ajax. Vì vậy anh ấy có thể code một số thứ dùng cho công việc. Bob nghĩ rằng mình một lập trình viên nhưng Bob thậm chí không biết địa chỉ bộ nhớ, máy ảo, JIT, quan hệ "is-a" / "has-a" là gì? Bob sử dụng i++ thay vì ++i và không biết được sự khác nhau giữa chúng? Thế thì Bob có gì khác với Alice không? Alice có thể học JavaScript, "các truy vấn khó" để "request" một cái gì đó và cô ta sẽ dần dần nghĩ giống Bob, tự phong mình là một lập trình viên nhưng Alice khá khiêm tốn nên điều đó sẽ không xảy ra.

Vậy lý do tại sao phải học C++ là ngôn ngữ lập trình chính và tìm hiểu nó kỹ lưỡng? Bởi vì, khi học C++ phải:

  • Quan tâm về quản lý bộ nhớ.
  • Phân biệt được trình biên dịch (compiler), trình liên kết (linker) và trình tải (loader).
  • Tìm được cách tối ưu hóa code tốt hơn.
  • Làm quen với meta-programming.
  • Phân biệt thời gian biên dịch (compile-time) và thời gian thực thi (run-time).
  • Thực sự hiểu đa hình (trong hướng đối tượng) ở mức sâu.
  • Hiểu được các thao tác con trỏ, nếu đi sâu sẽ tạo được một nền tảng tốt cho các cấu trúc dữ liệu dạng node (danh sách liên kết, cây, đồ thị...).
  • Hiểu được rằng trình biên dịch sinh code dựa trên nền tảng kiến trúc và hiểu ra rằng có rất nhiều kiến trúc khác ngoài Windows trên x86;
  • Hiểu được có nhiều dạng file thực thi như ELF hoặc PE và nhiều nữa, một lập trình viên nên biết qua những dạng này.
  • Hiểu kích thước của các kiểu dữ liệu.
  • Hiện thực con trỏ hàm để hiểu được callback.
  • Hiểu sâu hơn vào lập trình nói chung.
  • ...

Đấy là 1 trong số những kiến thức mà bất kỳ sinh viên khoa học máy tính nào cũng cần có, ít nhất là để trở thành một lập trình viên giỏi. Kiểm soát được C++ sẽ giúp làm chủ hầu hết các ngôn ngữ lập trình khác.

Một người muốn trở thành 1 lập trình viên giỏi, 1 lập trình viên thực thụ, có trình độ chuyên môn cao để tham gia các dự án lớn? Trên sẽ là lý do vì sao nên chọn C++.

Tương lai của lập trình viên C/C++

Không ai bắt buộc rằng không được phép sử dụng ngôn ngữ khác ngoài C++, không ai giới hạn trong việc lựa chọn các ngôn ngữ khác để giải quyết bài toán đang gặp mà ngôn ngữ đó ra đời để làm điều đó ngoài C++, không ai bắt buộc phải code C++ để làm web, tất cả là lựa chọn của bản thân, nhưng hãy hiểu điều này: JavaScript chạy trên nền tảng được viết bằng C/C++ (ví dụ Chrome V8), .NET Framework CLR (C#) được viết bằng C++, thậm chí Microsoft Windows được viết bằng C/C++. JVM (Java) được viết bằng C++, MongoDB, Redis, trình duyệt web, Linux, MySQL, Adobe Photoshop, Illustrator, Nginx, OS X được viết bằng nhiều ngôn ngữ, nhưng nhiều phần trọng yếu của chúng đều được viết bằng C++, nhiều product của Google (bao gồm cả Google Search), Microsoft Visual Studio, thậm chí chính trình biên dịch của C# được viết bằng C++ (có thể tìm thêm bằng cách dùng Google tìm kiếm về ngôn ngữ này).

Vào buổi bình minh của thế kỷ 21, C++ bị yếu thế. Fan C nói rằng các chương trình C++ có hiệu suất kém hơn so với code được viết bằng C. Các tập đoàn nổi tiếng với ngân sách marketing khổng lồ chào mời các ngôn ngữ hướng đối tượng riêng của họ, cho rằng C++ quá khó sử dụng và ngôn ngữ của họ mới là tương lai. Các trường đại học chọn Java để giảng dạy bởi vì nó đi kèm với một số công cụ miễn phí. Theo sau những hệ lụy này, các công ty khổng lồ cược nhiều ván bài khổng lồ ở phân khúc làm web và hệ điều hành bằng Java hoặc C# hoặc PHP. C++ dường như đang ở trạng thái thoi thóp. Một quãng thời gian thật sự khó chịu cho những ai có niềm tin rằng C++ là một công cụ mạnh mẽ, hữu ích.

Sau đó, một điều buồn cười xảy ra. Tốc độ của vi xử lý dừng tăng tốc, nhưng khối lượng tác vụ vẫn tiếp tục tăng lên. Những công ty khổng lồ này bắt đầu thuê các lập trình viên C++ để giúp họ mở rộng. Chi phí code lại tất cả bằng C++ còn thấp hơn chi phí điện nuôi trung tâm dữ liệu của các công ty đó. Đột nhiên, C++ lại nổi tiếng.

- Trích Kurt Guntheroth (trong cuốn "Optimized C++") -

 

@Medium

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024