Nội dung chính
C++ là gì? C++ là một trong những ngôn ngữ nổi tiếng và được sử dụng nhiều nhất trong giới lập trình viên, hầu hết tất cả những sản phẩm bạn đang sử dụng mỗi ngày đều được lập trình bởi C++. Bài viết sau đây sẽ giúp bạn hiểu một cách tổng quan và dễ dàng về ngôn ngữ lập trình C++ cũng như cách để bạn bắt đầu học ngôn ngữ này.
Bài viết phù hợp với:
- Những người chưa có kiến thức lập trình nói chung và muốn bắt đầu học lập trình C++.
- Những người đã có kiến thức lập trình ở những ngôn ngữ khác, đặc biệt là C, và muốn tìm hiểu đầy đủ nhất về C++.
Đọc bài viết sau để nắm rõ kiến thức về:
- Tổng quan C++ là gì và cách đọc hiểu cú pháp C++ cơ bản;
- Sự khác nhau và sự thiếu tương thích giữa C và C++;
- Những người chưa có kinh nghiệm lập trình nên bắt đầu học C++ như thế nào;
- Mức độ phổ biến của C++ ở thế giới và Việt Nam.
Trong bài viết cũng bao gồm những danh sách thú vị về C++ bạn nên lưu lại:
- Danh sách C++ compiler miễn phí;
- Danh sách tài liệu C++ nên tham khảo (cả sách giấy và khóa học trực tuyến).
Bài viết sử dụng nhiều kiến thức được chia sẻ bởi:
- Bjarne Stroustrup – Nhà khoa học máy tính người Đan Mạch, nổi tiếng nhất với việc phát minh và phát triển ngôn ngữ lập trình C++, hay nói cách khác chính là “cha đẻ” của C++. Ông cũng là tác giả trực tiếp của nhiều đầu sách về C++ từ cơ bản đến nâng cao.
- Marshall P. Cline – Chủ tịch Công ty MT Systems, chuyên phát triển các hệ thống hướng đối tượng cho các tập đoàn lớn và tác giả của cuốn sách “C++ FAQs” (1995). Ông cũng dành nhiều thời gian để trả lời câu hỏi về C++ và bổ sung kiến thức cho cộng đồng C++ qua Super FAQ.
C++ là gì?
Được ra mắt vào năm 1985, C++ là ngôn ngữ lập trình đa năng thiên về lập trình hệ thống. C++ có thể thực hiện cả lập trình bậc thấp và bậc cao, nên C++ được coi là ngôn ngữ bậc trung.
Bjarne Stroustrup – nhà khoa học máy tính và là tác giả ngôn ngữ lập trình C++, chia sẻ về những tính năng của C++ một cách khái quát:
- Tương tự ngôn ngữ lập trình C nhưng tốt hơn.
- Hỗ trợ trừu tượng hóa dữ liệu.
- Hỗ trợ lập trình hướng đối tượng.
- Hỗ trợ lập trình tổng quát.
6 ứng dụng phổ biến của C++
Là một ngôn ngữ lập trình tổng quát, C++ được sử dụng với nhiều mục đích như phát triển trình duyệt, hệ điều hành và ứng dụng, cũng như lập trình trong trò chơi, công nghệ phần mềm, cấu trúc dữ liệu, v.v. Vậy thì những ứng dụng, lĩnh vực phổ biến của C++ là gì?
Các hệ điều hành:
C++ đóng vai trò quan trọng trong việc phát triển các hệ điều hành nổi tiếng, từ MacOS và Windows cho đến các hệ điều hành di động như iOS.
Nhìn chung, yêu cầu quan trọng nhất đối với một hệ điều hành là chúng cần phải nhanh và hiệu quả trong việc quản lý tài nguyên hệ thống. Với khả năng lập trình bậc thấp (gần với code máy) của C++, các developer có thể cấu trúc code của họ để làm cho các chi tiết nhỏ nhất của hệ điều hành trở nên nhanh và tiết kiệm năng lượng.
Ngoài ra, hầu hết các phần mềm của Microsoft như Windows, Microsoft Office, IDE Visual Studio và Internet Explorer cũng được viết bằng C++.
Game:
Nhờ khả năng quản lý bộ nhớ, cung cấp nhiều quyền kiểm soát, tính linh hoạt nổi bật, ngôn ngữ lập trình C++ phù hợp với việc tối ưu hóa tài nguyên trò chơi. C++ có một lượng lớn thư viện hỗ trợ phát triển trò chơi, giúp các nhà phát triển trò chơi dễ dàng xây dựng các trò chơi có hiệu suất cao.
Chưa kể, C++ còn tương thích với các công cụ phát triển game phổ biến như Unity và Unreal Engine.
Ứng dụng giao diện đồ họa người dùng (GUI):
C++ cũng được sử dụng để phát triển các ứng dụng desktop và giao diện đồ họa người dùng. Hầu hết các ứng dụng của Adobe như Photoshop, Illustrator, v.v. đều được phát triển bằng C++.
Trình duyệt web:
C++ chính là ngôn ngữ được dùng để viết nên hai trình duyệt nổi tiếng là Google Chrome và Mozilla Firefox. Mozilla có một ứng dụng khác cũng được viết bằng C++, đó là ứng dụng email Mozilla Thunderbird.
Trong quy trình phát triển một trình duyệt web, C++ có thể đóng vai trò xây dựng hoàn toàn trình duyệt đó, Chrome là một ví dụ, và với một số trình duyệt khác, C++ được dùng để viết những ứng dụng như một hệ thống tệp, bản đồ làm giảm quá trình xử lý dữ liệu cụm lớn.
Hệ thống nhúng:
Đối với nhiều hệ thống nhúng, C hoặc C++ sẽ là lựa chọn tốt nhất. Một phần là do chúng là ngôn ngữ được “biên dịch” và cực kỳ hiệu quả. Khi dùng các ngôn ngữ đã được biên dịch, máy (hoặc thiết bị nhúng) sẽ trực tiếp tiến hành dịch code, có nghĩa là ngôn ngữ này nhanh và ổn định.
Các thiết bị có bộ nhớ hoặc nguồn tối thiểu thường sẽ cần mức độ hiệu suất như vậy. Vì vậy, các lập trình viên thường sử dụng C++ trong các thiết bị đó. C++ thường được sử dụng trong các bộ vi điều khiển và trong các thiết bị nhúng có sử dụng hệ điều hành.
Nhiều hệ thống nhúng yêu cầu chương trình thân thiện với phần cứng hơn như đồng hồ thông minh, hệ thống thiết bị y tế, v.v., đều được phát triển bằng C++.
Ứng dụng ngân hàng:
Hầu hết các ứng dụng ngân hàng đều yêu cầu hiệu suất đồng thời, đa luồng, và cao nên C++ là lựa chọn ngôn ngữ lập trình mặc định. Không chỉ ngân hàng mà các tổ chức tài chính và fintech cũng sử dụng C++ trong nhiều năm để phát triển phần mềm, hệ điều hành và các sản phẩm khác của họ.
Infosys Finacle là một ứng dụng ngân hàng phổ biến được phát triển bằng C++.
6 ưu điểm của ngôn ngữ lập trình C++
Hướng đối tượng:
Một trong những ưu điểm lớn nhất của C++ là tính năng lập trình hướng đối tượng bao gồm các khái niệm như lớp, kế thừa, đa hình, trừu tượng hóa dữ liệu và tính đóng gói cho phép khả năng tái sử dụng code và làm cho phần mềm đó trở nên đáng tin cậy hơn. Tính hướng đối tượng cũng là điểm khác biệt lớn nhất giữa C và C++.
Không chỉ vậy, C++ còn giúp chúng ta giải quyết các vấn đề trong thế giới thực bằng cách xem dữ liệu là một đối tượng.
Tính năng này đã tạo ra nhiều triển vọng việc làm và công nghệ mới. Một sự thật thú vị mà ITviec muốn chia sẻ với bạn rằng C++ được tạo ra bằng cách kết hợp các tính năng không chỉ từ C mà cả Simula 67 – ngôn ngữ lập trình hướng đối tượng đầu tiên.
Tốc độ:
Nếu tốc độ là một chỉ số quan trọng đối với bạn, C++ là lựa chọn ưu tiên nhất. Theo GeeksforGeeks, C++ thuộc top đầu những ngôn ngữ lập trình nhanh nhất hiện nay. Thời gian biên dịch và thực thi chương trình C++ nhanh hơn nhiều so với hầu hết các ngôn ngữ lập trình đa năng.
Thích hợp cho các dự án lớn:
Ngôn ngữ lập trình C++ phù hợp với các dự án lớn. Nhiều dự án, bao gồm trình biên dịch, hệ thống lưu trữ đám mây, cơ sở dữ liệu, phát triển trò chơi, thiết kế đồ họa, v.v., được xây dựng bằng C++.
Những dự án hình ảnh 3D thường yêu cầu kiểm soát lượng dữ liệu khổng lồ một cách hiệu quả và C++ là một trong những lựa chọn tốt nhất.
Ngoài ra, nhiều ứng dụng và phần mềm mà bạn sử dụng thường xuyên trong cuộc sống hàng ngày đều được phát triển bằng C++. Ví dụ: Spotify, Youtube, Amazon,…
Tính linh hoạt:
Bản chất linh hoạt và khả năng thích ứng cao là một trong nhiều lý do vì sao C++ vẫn là ngôn ngữ lập trình phổ biến nhất dù có “tuổi đời” gần 40 năm. Vì đã được sử dụng nhiều trong suốt 40 năm qua, C++ có khả năng tương thích với nhiều ngôn ngữ lập trình khác cũng như nhiều ngành nghề, lĩnh vực hoạt động.
Cộng đồng C++ hỗ trợ rộng lớn:
C++ là một ngôn ngữ lâu đời và đang được hầu hết các lập trình viên trên toàn cầu nghiên cứu, phát triển và sử dụng nên C++ có cộng đồng hỗ trợ lớn và nhiệt tình. Cộng đồng rộng lớn cũng đồng nghĩa có rất nhiều lập trình viên và chuyên gia trên các nền tảng khác nhau đang tạo tài nguyên cho C++.
Đây là lợi ích rất lớn với những ai đang học C++ hoặc cần bất kỳ sự hướng dẫn, trợ giúp nào trong quá trình học và làm việc.
Thân thiện với phần cứng:
C++ thân thiện với phần cứng hơn hầu hết các ngôn ngữ lập trình tổng quát do C++ có cả các tính năng của ngôn ngữ bậc cao và bậc thấp.
Điều này làm cho C++ rất hữu ích trong những lĩnh vực mà phần cứng và phần mềm được kết hợp chặt chẽ với nhau và cần hỗ trợ phần mềm ở cấp thấp như đồng hồ thông minh, hệ thống GPS, máy nghe nhạc mp3,…
10+ C++ compiler miễn phí
Nói về C++ compiler thì điểm mạnh là trên thị trường có rất nhiều C++ compiler, và đó cũng chính là điểm yếu khi tìm hiểu về C++ compiler. Vậy thì bí quyết để chọn lựa C++ compiler phù hợp là gì?
Theo “cha đẻ” của C++, Bjarne Stroustrup, tiêu chí lớn nhất để chọn C++ compiler là luôn tuân thủ tiêu chuẩn: “Tránh bất kỳ trình biên dịch nào không gần với tiêu chuẩn ISO hoặc không hỗ trợ triển khai thư viện chuẩn.”
Cũng theo ông cập nhật, sau đây là 10+ C++ compiler miễn phí bạn có thể cân nhắc:
- Apple C++
- Bloodshed Dev-C++
- Clang C++
- Cygwin (GNU C++)
- Mentor Graphics – Lite edition
- MINGW – “Minimalist GNU for Windows”
- GNU CC source
- IBM C++
- Intel C++
- Microsoft Visual C++.
- Oracle C++.
Cú pháp C++ mẫu
Chương trình Hello World là một chương trình cơ bản đơn giản nhất của mọi ngôn ngữ lập trình. Sau đây là chương trình Hello World của C++ để bạn tham khảo:
#include <iostream> using namespace std; int main() { cout << “Hello World!”; return 0; } |
Theo W3School, cú pháp C++ có thể được giải thích như sau:
- Dòng 1: #include <iostream> là thư viện tệp tiêu đề cho phép làm việc với các đối tượng đầu vào và đầu ra, chẳng hạn như cout (được sử dụng trong dòng 5). Các tệp tiêu đề thêm chức năng cho các chương trình C++.
- Dòng 2: Sử dụng namespace std có nghĩa là chúng ta có thể sử dụng tên cho các đối tượng và biến từ thư viện chuẩn.
Thư viện chuẩn là gì? Thư viện chuẩn, hay standard library, là tập hợp các thành phần (component) có thể tái sử dụng bởi nhiều chương trình khác nhau. Một số thư viện chuẩn C++ bạn có thể lưu lại: list, map, deque, vector, algorithm, iterator, string, regex, fstream, iostream, exception
- Dòng 3: Đây là một dòng trống. Thật ra thì C++ không chú ý đến các khoảng trắng nhưng chúng sẽ giúp code của bạn dễ đọc hơn.
- Dòng 4: int main() chính là hàm main. Đây cũng là một dòng luôn xuất hiện trong các chương trình C++. Bất kỳ dòng code nào trong dấu ngoặc nhọn {} đều sẽ được thực thi.
- Dòng 5: cout (phát âm là “see out”) là một đối tượng được sử dụng cùng với toán tử chèn vào luồng (<<) để xuất/in văn bản. Trong ví dụ này, văn bản sẽ xuất ra là “Hello World!”.
- Dòng 6: return 0 kết thúc hàm main.
- Dòng 7: Đừng quên đóng dấu ngoặc nhọn } để thực sự kết thúc hàm main.
Một vài lưu ý cơ bản khi lập trình C++:
- Đừng quá lo lắng nếu như bạn chưa hiểu cách dùng và cách hoạt động của #include <iostream> và namespace std. Hãy cứ nghĩ như đây là một phần (gần như) luôn xuất hiện ở mọi chương trình C++.
- Mọi câu lệnh C++ đều kết thúc bằng dấu chấm phẩy ;
- Phần thân của int main() cũng có thể được viết như sau:
- int main () { cout << “Hello World! “; return 0; }
- Bởi vì trình biên dịch sẽ bỏ qua khoảng trắng. Tuy nhiên, tách dòng sẽ giúp code dễ đọc hơn.
So sánh C và C++
Theo tác giả của C++, C++ là “hậu duệ” trực tiếp của ngôn ngữ lập trình C. Có thể thấy, hai ngôn ngữ này có mối quan hệ thân thiết nhưng cũng có nhiều điểm khác biệt. Dưới đây là những chia sẻ của Bjarne Stroustrup khi được hỏi về sự khác biệt giữa C và C++ cũng như sự tương thích của hai ngôn ngữ lập trình này:
Sự khác biệt giữa C và C++ là gì?
C++ cung cấp tính năng kiểm tra kiểu mạnh hơn C và hỗ trợ trực tiếp nhiều kiểu lập trình hơn C. Bjarne Stroustrup cũng chia sẻ thêm rằng người dùng có thể hiểu C++ là “một C tốt hơn” theo nghĩa là C++ hỗ trợ các kiểu lập trình được thực hiện bằng C với khả năng kiểm tra kiểu tốt hơn và hỗ trợ nhiều ký hiệu hơn (giữ nguyên hiệu suất).
Sau đây là bảng so sánh giữa C và C++ do chính Bjarne Stroustrup tổng hợp:
C | C++ |
C là ngôn ngữ lập trình thủ tục | C++ là ngôn ngữ lập trình hướng đối tượng |
Dữ liệu không được bảo mật với C | Dữ liệu được bảo mật với C++ |
C dùng phương pháp tiếp cận Top Down | C++ dùng phương pháp tiếp cận Bottom Up |
Với C, bạn không thể cho hai hàm có cùng một tên | Với nạp chồng hàm (function overloading) trong C++, bạn có thể đưa cùng một tên cho 2 hoặc nhiều hàm |
scanf() và printf() được dùng riêng biệt để viết và đọc dữ liệu | cin và cout được dùng riêng biệt để viết và đọc dữ liệu |
C dùng tệp tiêu đề “stdio.h” cho phép toán đầu vào và đầu ra | C++ sử dụng tệp tiêu đề “iostream.h” cho phép toán đầu vào và đầu ra |
C không có hàm tạo (constructors) và hàm hủy (destructor) | C++ cung cấp hàm tạo (constructors) và hàm hủy (destructor) |
Hàm nội tuyến (inline function) có thể được dùng ở mức mã nguồn bằng cách sử dụng các macro | Hàm nội tuyến được hỗ trợ bởi C++ |
C có phải là tập con của C++?
Nếu xét theo nguyên tắc toán học một cách nghiêm túc, C không phải là tập con của C++. Bằng chứng là có nhiều phần mềm theo chuẩn C nhưng lại không đạt chuẩn C++ và có những cách viết code mang ý nghĩa khác nhau trong ngôn ngữ C và C++. Tương tự như vậy, C++ giới thiệu nhiều tính năng không có trong C và trong thực tế, hầu hết tất cả code được viết bằng C++ đều không tương thích với ngôn ngữ C.
Tuy nhiên, C++ hỗ trợ mọi kỹ thuật lập trình mà C hỗ trợ. Điều này có nghĩa, mọi chương trình C đều có thể gần như được viết giống cách với C++, với cùng thời gian chạy và hiệu quả về mặt kích thước.
Sự thiếu tương thích giữa C và C++ là gì? Sau đây là ví dụ về vấn đề thiếu tương thích giữa C và C++:
int main() { double sq2 = sqrt(2); /* Không phải C++: gọi hàm chưa khai báo */ int s = sizeof(‘a’); /* khác: 1 trong C++ sizeof(int) trong C */ } |
Gọi hàm chưa khai báo là cách lập trình C khá tệ và không hợp lệ với C++. Chính vì thế, truyền đối số cho một hàm bằng cách sử dụng khai báo không liệt kê các loại đối số:
void f(); /* không nhắc đến loại đối số */ void g() { f(2); /* lập trình C tệ. Không phải C++ */ } |
Trong C, con trỏ void (void*) có thể được chuyển đổi ngầm định thành bất kỳ loại con trỏ nào và việc cấp phát lưu trữ miễn phí thường được thực hiện bằng cách sử dụng malloc() nhưng không có cách nào kiểm tra xem có “đủ” bộ nhớ được yêu cầu hay không:
void* malloc(size_t); void f(int n) { int* p = malloc(n*sizeof(char)); /* không phải C++. Trong C++, phân bổ dùng ‘new’ */ char c; void* pv = &c; int* pi = pv; /* chuyển đổi ngầm định của void* thành int*. Không phải trong C++ */ } |
Khi chuyển đổi từ C thành C++, hãy lưu ý rằng C++ có nhiều từ khóa hơn C:
int class = 2; /* ổn với C. Lỗi cú pháp với C++ */ int virtual = 3; /* ổn với C. Lỗi cú pháp với C++ */ |
C và C++ có thể được hợp nhất thành một ngôn ngữ duy nhất không?
Để C và C++ có thể hợp nhất thành một ngôn ngữ duy nhất, những vấn đề không tương thích giữa C và C++ cần phải được loại bỏ một cách có hệ thống và hoàn toàn, cũng như ngăn chặn sự phát triển của những sự không tương thích mới xuất hiện trong tương lai. Tuy nhiên, vấn đề này có khả thi hay không lại là một câu chuyện khác.
Theo đó, Bjarne Stroustrup chia sẻ rằng:
“Sự thiếu tương thích giữa C và C++ không mang lại lợi ích nào cho cộng đồng trên diện rộng, thậm chí còn mang đến những vấn đề nghiêm trọng đến số đông cộng đồng lập trình viên C/C++. Sự thiếu tương thích này có thể được loại bỏ, với rất nhiều khó khăn.
Tôi tưởng tượng rằng nếu sự không tương thích này mất đi (bằng cách thay đổi cả C và C++), thật ra chúng vẫn sẽ được gọi là C và C++, nhưng lúc đó thì C sẽ thực sự trở thành tập con của C++.”
Trong mối tương quan này, một điểm thú vị là các công cụ phát triển cho hai ngôn ngữ này (chẳng hạn như IDE và trình biên dịch) thường được tích hợp vào thành một sản phẩm duy nhất, và lập trình viên có thể chỉ định C hoặc C++ làm ngôn ngữ nguồn của họ.
Những lưu ý cần biết trước khi học lập trình C++ là gì?
Có thể học C++ khi không biết lập trình C không?
Bạn có thể học C++ khi không biết lập trình C.
Như đã chia sẻ ở mục trước, tuy có nhiều điểm chung về mặt cú pháp nhưng C và C++ là hai ngôn ngữ lập trình khác nhau. Bạn không cần phải học C trước khi học C++.
Học C++ mất bao lâu?
Thời gian học C++ còn tùy thuộc vào nhiều yếu tố. Nếu bạn đã một lập trình viên C, bạn có thể học các kiến thức C++ cơ bản đủ để lập trình C/C++ trong một ngày. Nếu bạn đã có kiến thức về lập trình và bạn có một mục đích học lập trình C++ cụ thể, ví dụ như để xây dựng hệ thống với C++, bạn có thể chỉ cần học một khóa ngắn hạn đúng với mục đích đó.
Còn nếu bạn là người mới, chưa biết gì về lập trình, thông thường các trường đại học sẽ dạy đầy đủ các kiến thức từ nền tảng C++ và các kỹ thuật lập trình hỗ trợ (nhất là lập trình hướng đối tượng và lập trình tổng quát) trong vòng từ 1 đến 2 năm học.
Cũng trong chủ đề về thời gian học C++, Marshall P. Cline – Chủ tịch Công ty MT Systems, chuyên phát triển các hệ thống hướng đối tượng cho các tập đoàn lớn và tác giả của cuốn sách “C++ FAQs” (1995), cho rằng:
“Các công ty bán khóa học có thể dạy bạn các khóa học ngắn hạn mà ở đó, kiến thức cho cả một học kỳ ở đại học được nén chỉ còn bằng thời gian một tuần làm việc 40 giờ. Nhưng bất kể bạn được đào tạo ở đâu, hãy đảm bảo rằng bạn được thực hành ở khóa học đó, vì đa phần cách học tốt nhất là nên đi kèm các dự án thực tế. Nhưng ngay cả khi bạn đã hoàn thành các khóa học ngắn hạn, bạn vẫn chưa sẵn sàng đâu.
Bạn phải mất 6-12 tháng để thành thạo C++, nhất là khi bạn chưa từng lập trình hướng đối tượng hoặc lập trình tổng quát trước đây. Những ai có cơ hội học tập trực tiếp từ một chuyên gia thì sẽ mất ít thời gian hơn. Và để có thể trở thành chuyên gia C++, bạn phải mất khoảng 3 năm.”
Nên chuẩn bị gì khi bắt đầu học C++?
Việc bạn nên bắt đầu học C++ như thế nào còn phụ thuộc rất nhiều vào kiến thức sẵn có và lý do học của bạn.
Nếu bạn là người mới lập trình, bạn nên tìm một lập trình viên có kinh nghiệm để “kèm” bạn. Vì như thế, bạn sẽ tiết kiệm thời gian chật vật, cũng như không quá thất vọng, với những vấn đề khó tránh khỏi về khái niệm ngôn ngữ và các vấn đề thực tế khi triển khai.
Tiếp theo, bạn sẽ cần một cuốn “sách giáo khoa” để học C++, kể cả khi kỹ thuật mà bạn muốn học có nhiều documentation trực tuyến.
Lý do là vì bạn là một người mới, bạn cần hiểu rõ ngọn ngành về cách mọi thứ diễn ra và những gì bạn có thể mong đợi, hoặc không mong đợi, ở một ngôn ngữ lập trình và sách chính là nơi cung cấp nguồn kiến thức toàn diện đó. Bạn nên bắt đầu bằng cách học về các khái niệm và kỹ thuật lập trình nói chung trước khi học chi tiết về kỹ thuật code.
Sau khi đã hiểu về lập trình nói chung, bạn có thể học sâu hơn về C++ thông qua documentation của thư viện với ví dụ về cách viết code.
Tóm tắt về học lập trình C++:
Tóm tắt lại, có hai điều bạn chuẩn bị để bắt đầu học C++:
- Chuẩn bị 2 cuốn sách: Một cuốn sách về những gì nên làm theo mặt kỹ thuật, một cuốn sách về những gì nên làm theo mặt đạo đức.
- Có một người lập trình viên kinh nghiệm để kèm bạn học, giải đáp thắc mắc và hướng dẫn bạn thực hành.
Theo đó, có hai điều bạn không cần phải chuẩn bị để bắt đầu học C++:
- Bạn không cần phải học ngôn ngữ lập trình C.
- Cũng như vậy, bạn cũng không cần phải học Objective-C.
Tài liệu lập trình C++ nên đọc
Theo lời chia sẻ của Bjarne Stroustrup, bạn nên có một cuốn sách tốt để bắt đầu học C++, sau đây là danh sách những cuốn sách do chính Bjarne Stroustrup biên soạn với cấp độ cho người mới bắt đầu lập trình C++ mà bạn có thể tham khảo:
- Programming — Principles and Practice Using C++ là “cửa ngõ” dẫn đến lập trình C++ dành cho những ai chưa bao giờ lập trình trước đây. Cuốn sách này cũng sẽ hữu ích cho những người đã lập trình ở mức độ vô cùng cơ bản và muốn cải thiện phong cách và kỹ thuật của họ. Đây còn được xem là “sách giáo khoa” về C++ được sử dụng trong lớp học, và cũng phù hợp với mục đích tự học.
- A Tour of C++ là một cuốn sách ngắn, với khoảng 180 trang, hướng dẫn nhanh và tổng quan về C++ là gì một cách tiêu chuẩn (bao gồm cả ngôn ngữ lập trình và thư viện chuẩn) ở mức độ cao vừa phải dành cho những người đã biết C++ hoặc ít nhất là những lập trình viên có kinh nghiệm.
- The C++ Programming Language (Fourth Edition), hay còn gọi là TC++PL4, hoàn chỉnh mô tả về các tính năng của C++, các thành phần thư viện chuẩn cũng như các kỹ thuật lập trình và thiết kế mà C++ hỗ trợ.
Ngoài ra, nếu bạn muốn tìm kiếm một vài khóa học C++ ngắn hạn trực tuyến để có thể dễ dàng theo học phù hợp với thời gian cá nhân, ITviec đã tổng hợp lại 11 khóa học lập trình C++ miễn phí và “chất” nhất từ cơ bản đến nâng cao, được cập nhật mỗi năm, mà bạn có thể đăng ký học ngay hôm nay.
Các câu hỏi C++ thường gặp
Vì sao C++ hỗ trợ các hoạt động có thể được sử dụng để vi phạm các quy tắc về an toàn kiểu tĩnh (thời gian biên dịch)?
Khi được hỏi lý do vì sao C++ lại hỗ trợ các hoạt động có thể được sử dụng để vi phạm các quy tắc về an toàn kiểu tĩnh (thời gian biên dịch), Bjarne Stroustrup trả lời với những lý do sau:
- Để truy cập phần cứng trực tiếp (ví dụ: coi một số nguyên là con trỏ tới (địa chỉ của) thanh ghi thiết bị).
- Để đạt được hiệu suất dung lượng và thời gian chạy tối ưu (ví dụ: quyền truy cập không được kiểm tra vào các phần tử của một mảng và quyền truy cập không được kiểm tra vào một đối tượng thông qua một con trỏ).
- Để tương thích với C.
Theo đó, nếu bạn không cần dùng đến một trong ba tính năng kể trên, ông chia sẻ về các cách tránh unsafe code trong C++:
- Không ép kiểu (casting).
- Không dùng các mảng [] kiểu C ngoài giao diện.
- Tránh void*.
- Tránh kiểu dữ liệu union.
- Nếu bạn nghi ngờ về tính hợp lệ của con trỏ, hãy sử dụng SmartPointer để thay thế.
- Không sử dụng các hàm variadic kiểu … (“kiểu printf”).
- Tránh các macro ngoại trừ #include guard.
Hầu như tất cả code C++ đều có thể tuân theo các quy tắc đơn giản này. Nếu bạn viết code C hoặc code kiểu C trong C++, bạn sẽ không thể tuân theo các quy tắc kể trên.
Mức độ phổ biến của C++ đang giảm dần?
Về vấn đề này, ông Bjarne Stroustrup chia sẻ rằng mức độ sử dụng ngôn ngữ lập trình C++ có thể giảm ở một vài lĩnh vực và tăng ở một vài lĩnh vực khác.
Ông chia sẻ thêm, phần lớn người dùng C++ làm trong lĩnh vực cơ sở hạ tầng, lập trình hệ thống, hệ thống nhúng và các ứng dụng đề cao việc hạn chế tiêu thụ thời gian và/hoặc không gian và/hoặc điện năng. Ông cho rằng ngôn ngữ này vẫn có vị trí vững chắc trong các lĩnh vực cốt lõi truyền thống.
Theo đó, StackOverflow Survey 2022 đã chỉ ra rằng có đến 20,17% lập trình viên chuyên nghiệp trả lời rằng C++ vẫn là ngôn ngữ họ sử dụng và 35% người tham gia khảo sát có mong muốn học C++ trong tương lai. Báo cáo Lương IT 2022 – 2023 do ITviec tiến hành khảo sát cũng cho thấy rằng C++ thuộc top 10 ngôn ngữ lập trình được sử dụng chính tại Việt Nam.
Vào năm 2014, JetBrain đã báo cáo rằng trên thế giới có đến 4.4 triệu lập trình viên C++ và con số này vào Quý I năm 2022 đã tăng lên 5.4 triệu lập trình viên C++, theo SlashData.
Thị trường tuyển dụng việc làm C++ ở Việt Nam?
Vào đầu năm 2023, ITviec đã tiến hành khảo sát xu hướng tuyển dụng IT ở Việt Nam năm 2023 đối với nhà tuyển dụng và kết quả chỉ ra rằng C++ thuộc top 10 những ngôn ngữ lập trình muốn tuyển dụng nhiều nhất trong năm 2023.
Kết hợp với Báo cáo Lương IT 2022 – 2023 do ITviec tiến hành khảo sát, mức lương của lập trình viên C++ phản ánh mức độ sẵn sàng đầu tư của nhà tuyển dụng để tuyển dụng nhân tài IT lập trình C++ như sau:
Số năm kinh nghiệm | Mức lương C++ tương ứng |
Dưới 1 năm | 11 triệu đồng |
Từ 3 năm đến dưới 5 năm | 23 triệu đồng |
Từ 5 năm đến 8 năm | 37 triệu đồng |
Tổng kết
Bài viết kể trên đã cô đọng lại những kiến thức tổng quan và quan trọng nhất về C++ như định nghĩa C++ là gì, tính năng C++, ứng dụng C++, so sánh C và C++, tài liệu lập trình C++, C++ compiler miễn phí,… để bạn có thể hiểu hơn về ngôn ngữ này dễ dàng hơn.
Hẹn gặp bạn ở bài viết Những câu hỏi phỏng vấn C++ thường gặp dành cho những lập trình viên C++ có kinh nghiệm và chuẩn bị tham gia vào buổi phỏng vấn tìm việc nhé!
Bạn thấy bài viết hay và hữu ích? Đừng ngại Share với bạn bè và đồng nghiệp nhé.
Và nhanh tay tham khảo việc làm IT “chất” trên ITviec!