kiến thức Hướng dẫn lập trình C/C++ từ 0 đến viết được phần mềm để đi xin việc.

cs_50i

bố Bơ
xin chào các fen. Tôi vốn mong muốn chia sẻ về C/C++ thông qua dịch tài liệu, cơ mà gặp khó trong việc xin được sự đồng ý của tác giả. Chính vì thế, tôi trực tiếp viết hướng dẫn theo kinh nghiệm của mình. Mong các thím ủng hộ

Giới thiệu sơ qua bản thân: Tôi học toán tin, đi làm Embedded System ...10 năm làm dev lấm lem. Tôi nghĩ chắc kiến thức vừa đủ để làm hướng dẫn.

Vừa đi làm, vừa có nhiều việc gia đình nhưng tôi sẽ cố gắng 1 tuần post 2 bài hướng dẫn.
 
Bài 1: Chiến lược học C/C++

C/C++ là một ngôn ngữ cực kỳ khó học với người mới chưa biết gì về máy tính và lập trình. Nghĩa là chỉ dừng lại biết cài win, cài phần mềm thì việc bắt tay ngay vào học C/C++ là cách đang hút cần mà không rõ mình hút quá liều. Nhẹ là bồng bềnh đếch rõ đầu đang đọc cái gì. Nặng thì tẩu hỏa nhập ma, đi đâu cũng lải nhải các khẩu pháp C/C++ mà éo thể viết ra một script nào.

Vì thế, kinh nghiệm của tôi là đối với những ai bắt đầu với C/C++ từ con số 0 hãy nên vạch ra một lộ trình rõ ràng. Tôi đề xuất lộ trình như thế này:

  • Học kiến trúc máy tính đầu tiên cái đã
  • Học kiến trúc hệ điều hành là cái thứ hai.
  • Tiếp đến học và nắm cơ bản về mã giả (pseudocode).
  • Học cơ bản về C
  • Tiếp đến học đến trình biên dịch
  • Tới đây thì học đến C++ syntax

Ok xong 5 cái đầu dòng kia bạn tiếp tục:

với C++ thì lại phải tách ra:

Xem C++ như một ngôn ngữ đa mô hình, học từng mô hình.

1. Lập trình C++ theo mô hình thủ tục + giải thuật và cấu trúc dữ liệu
2. Lập trình C++ theo mô hình hướng đối tượng.
3. Lập trình C++ theo mô hình functional.
4. Lập trình C++ theo mô hình gọi thư viện.
5. Học fix bug và unit test C++

Nghĩa là với 1 bài toán bạn hoàn toàn thành thạo sử dụng một trong 4 mô hình kia đều giải quyết được.

Dần dần kỹ năng của bạn sẽ thuần thục và tự biết cách nhận biết nên áp dụng phương pháp nào là tối ưu nhất cho bài toán. Cả một project lớn đến nhỏ, bạn sẽ biết kết hợp 4 mô hình kia với nhau để phần mềm đạt hiệu quả cao.
 
Last edited:
  • Học kiến trúc máy tính đầu tiên cái đã
  • Học kiến trúc hệ điều hành là cái thứ hai.
  • Tiếp đến học và nắm cơ bản về mã giả (pseudocode).

Đây là những thứ cơ bản mà nếu bước chân vào công việc lập trình chuyên nghiệp đều bắt buộc phải biết ko riêng gì C/C++.

Cá nhân tôi vẫn thích sử dụng C/C++ làm ngôn ngữ lập trình đầu tiên để dạy cho sv CNTT vì nó phản ánh hết 3 thứ cơ bản đc học trên kia.

Còn viết phần mềm bằng C/C++ để xin việc thì thớt nên nói rõ dạng phần mềm nào, có thể là làm video, audio, embedded, game.. chứ ở thời đại ngày nay đa số các phần mềm quản lý CRUD đã ko còn viết bằng C/C++ nữa rồi.
 
Đây là những thứ cơ bản mà nếu bước chân vào công việc lập trình chuyên nghiệp đều bắt buộc phải biết ko riêng gì C/C++.

Cá nhân tôi vẫn thích sử dụng C/C++ làm ngôn ngữ lập trình đầu tiên để dạy cho sv CNTT vì nó phản ánh hết 3 thứ cơ bản đc học trên kia.

Còn viết phần mềm bằng C/C++ để xin việc thì thớt nên nói rõ dạng phần mềm nào, có thể là làm video, audio, embedded, game.. chứ ở thời đại ngày nay đa số các phần mềm quản lý CRUD đã ko còn viết bằng C/C++ nữa rồi.
à mình đang viết hướng dẫn theo đúng lộ trình đề ra, sau khi hoàn tất đến mục hướng dẫn học C, thì mình sẽ giới thiệu đến các dạng phần mềm đi xin việc mà nhà tuyển dụng quan tâm.
 
Cháu rất hóng chờ series dạy C/C++ của bác ạ, cháu cũng là một newbie đang học C++ được vài tháng (NNLT đầu tiên). Về series cháu có những câu hỏi sau ạ:
  • Học kiến trúc máy tính đầu tiên cái đã
  • Học kiến trúc hệ điều hành là cái thứ hai.
  • Tiếp đến học và nắm cơ bản về mã giả (pseudocode).
  • Học cơ bản về C
  • Tiếp đến học đến trình biên dịch
  • Tới đây thì học đến C++ syntax
Với ba mục đầu, cháu tin rằng nó quan trọng vì C++ là một ngôn ngữ khó, nó bắt mình quản lí memory rất nhiều, vì vậy cháu nghĩ rằng học 3 cái đầu sẽ tạo được nền tảng cơ bản để hiểu rõ hơn về NNLT/ cách một chương trình hoạt động (nạp vào memory, CPU execute mã, ...). Nhưng Title bác viết là hướng dẫn lập trình C/C++, vậy thì không biết bác có dạy 3 mục đầu không, hay là sẽ recommend sách/video để học ạ?
Mục thứ 4 "Học cơ bản về C". Cháu thấy rằng quan điểm về việc học C++ thì phải học C trước hay không khá tranh cãi, nhưng theo cháu có nghe nói C++ bây giờ ngày càng tách xa khỏi C rồi ạ. Vậy nên cháu nghĩ học thẳng vào C++ thì sẽ nhanh hơn ạ.
Mục thứ 5: Học trình biên dịch thì cho cháu hỏi là học sử dụng trình biên dịch như Visual Studio, g++ hay là học về gì ạ?
Cháu mong muốn là bác có thể viết Tutorial theo "style" kiểu dạng như có introduction, tức là bác sẽ giới thiệu vấn đề gặp phải --> Để giải quyết đề đó phải làm như thế nào (chi tiết hơn thì có thể là newbie làm như nào, người đã có kinh nghiệm làm như nào, và tại sao làm như vậy lại tốt hơn). Ngoài ra C++ là một ngôn ngữ có nhiều "bẫy", đôi khi nhìn vậy mà không phải vậy, dẫn đến việc không hiểu sao nó chạy như vậy. Nếu có thể bác hãy nhắc tới những lỗi sai thường gặp/bẫy của C++ được không ạ? Tất nhiên là bác cũng có thể có style viết riêng của bác rồi ạ.
Cháu cảm ơn
 
Cháu rất hóng chờ series dạy C/C++ của bác ạ, cháu cũng là một newbie đang học C++ được vài tháng (NNLT đầu tiên). Về series cháu có những câu hỏi sau ạ:

Với ba mục đầu, cháu tin rằng nó quan trọng vì C++ là một ngôn ngữ khó, nó bắt mình quản lí memory rất nhiều, vì vậy cháu nghĩ rằng học 3 cái đầu sẽ tạo được nền tảng cơ bản để hiểu rõ hơn về NNLT/ cách một chương trình hoạt động (nạp vào memory, CPU execute mã, ...). Nhưng Title bác viết là hướng dẫn lập trình C/C++, vậy thì không biết bác có dạy 3 mục đầu không, hay là sẽ recommend sách/video để học ạ?
Mục thứ 4 "Học cơ bản về C". Cháu thấy rằng quan điểm về việc học C++ thì phải học C trước hay không khá tranh cãi, nhưng theo cháu có nghe nói C++ bây giờ ngày càng tách xa khỏi C rồi ạ. Vậy nên cháu nghĩ học thẳng vào C++ thì sẽ nhanh hơn ạ.
Mục thứ 5: Học trình biên dịch thì cho cháu hỏi là học sử dụng trình biên dịch như Visual Studio, g++ hay là học về gì ạ?
Cháu mong muốn là bác có thể viết Tutorial theo "style" kiểu dạng như có introduction, tức là bác sẽ giới thiệu vấn đề gặp phải --> Để giải quyết đề đó phải làm như thế nào (chi tiết hơn thì có thể là newbie làm như nào, người đã có kinh nghiệm làm như nào, và tại sao làm như vậy lại tốt hơn). Ngoài ra C++ là một ngôn ngữ có nhiều "bẫy", đôi khi nhìn vậy mà không phải vậy, dẫn đến việc không hiểu sao nó chạy như vậy. Nếu có thể bác hãy nhắc tới những lỗi sai thường gặp/bẫy của C++ được không ạ? Tất nhiên là bác cũng có thể có style viết riêng của bác rồi ạ.
Cháu cảm ơn
1. Đến ngay như tác giả của C++ ông Bjarne Stroustrup chưa khẳng định C++ tách hoàn toàn khỏi C nên chúng ta chẳng có lý do nào nói C/C++ là hai ngôn ngữ độc lập hoàn toàn khỏi nhau. Việc tiếp cận C trước C++ theo như kinh nghiệm của tôi thì nó sẽ tốt hơn để hoàn thiện khám phá về chiều sâu của hệ thống máy tính ví dụ hệ máy tính Unix, đặc biệt là Linux. Còn học thẳng C++ luôn thì cũng sẽ không nhanh hơn việc học cả C khi học C++.

2. Tôi đang theo dõi topic này hàng ngày. Nếu như có nhiều hơn 10 bạn mong muốn học về 3 mục đầu thì tôi sẽ viết còn lại thì sẽ viết luôn vào C. Ít người quan tâm quá mình viết ra cũng thừa. Vì có thể phần đông đã có kiến thức hoặc có đủ tài liệu để học 3 mục trên.

3. Tôi sẽ viết theo style dẫn các bạn hiểu được bản chất vấn đề. Hướng dẫn tự tư duy khi gặp các bài toán khác nhau.

4. Cái hay của C++ chính là nó sẽ phơi bày bẫy khi người viết nó là dev yếu kém và cẩu thả. Những cái bẫy này đến từ con người, k phải đến từ C++. Nó là ngôn ngữ của sự chặt chẽ, yêu cầu phải tỷ mỉ. Hầu như viết uni-test C++ tốt thì ít khi nào gặp phải bẫy lắm.
 
1. Đến ngay như tác giả của C++ ông Bjarne Stroustrup chưa khẳng định C++ tách hoàn toàn khỏi C nên chúng ta chẳng có lý do nào nói C/C++ là hai ngôn ngữ độc lập hoàn toàn khỏi nhau. Việc tiếp cận C trước C++ theo như kinh nghiệm của tôi thì nó sẽ tốt hơn để hoàn thiện khám phá về chiều sâu của hệ thống máy tính ví dụ hệ máy tính Unix, đặc biệt là Linux. Còn học thẳng C++ luôn thì cũng sẽ không nhanh hơn việc học cả C khi học C++.

2. Tôi đang theo dõi topic này hàng ngày. Nếu như có nhiều hơn 10 bạn mong muốn học về 3 mục đầu thì tôi sẽ viết còn lại thì sẽ viết luôn vào C. Ít người quan tâm quá mình viết ra cũng thừa. Vì có thể phần đông đã có kiến thức hoặc có đủ tài liệu để học 3 mục trên.

3. Tôi sẽ viết theo style dẫn các bạn hiểu được bản chất vấn đề. Hướng dẫn tự tư duy khi gặp các bài toán khác nhau.

4. Cái hay của C++ chính là nó sẽ phơi bày bẫy khi người viết nó là dev yếu kém và cẩu thả. Những cái bẫy này đến từ con người, k phải đến từ C++. Nó là ngôn ngữ của sự chặt chẽ, yêu cầu phải tỷ mỉ. Hầu như viết uni-test C++ tốt thì ít khi nào gặp phải bẫy lắm.
https://www.stroustrup.com/bs_faq.html#C-slash
Cụ Stroustrup có nói thế đâu bác. :)
 
1. Đến ngay như tác giả của C++ ông Bjarne Stroustrup chưa khẳng định C++ tách hoàn toàn khỏi C nên chúng ta chẳng có lý do nào nói C/C++ là hai ngôn ngữ độc lập hoàn toàn khỏi nhau. Việc tiếp cận C trước C++ theo như kinh nghiệm của tôi thì nó sẽ tốt hơn để hoàn thiện khám phá về chiều sâu của hệ thống máy tính ví dụ hệ máy tính Unix, đặc biệt là Linux. Còn học thẳng C++ luôn thì cũng sẽ không nhanh hơn việc học cả C khi học C++.

2. Tôi đang theo dõi topic này hàng ngày. Nếu như có nhiều hơn 10 bạn mong muốn học về 3 mục đầu thì tôi sẽ viết còn lại thì sẽ viết luôn vào C. Ít người quan tâm quá mình viết ra cũng thừa. Vì có thể phần đông đã có kiến thức hoặc có đủ tài liệu để học 3 mục trên.

3. Tôi sẽ viết theo style dẫn các bạn hiểu được bản chất vấn đề. Hướng dẫn tự tư duy khi gặp các bài toán khác nhau.

4. Cái hay của C++ chính là nó sẽ phơi bày bẫy khi người viết nó là dev yếu kém và cẩu thả. Những cái bẫy này đến từ con người, k phải đến từ C++. Nó là ngôn ngữ của sự chặt chẽ, yêu cầu phải tỷ mỉ. Hầu như viết uni-test C++ tốt thì ít khi nào gặp phải bẫy lắm.

Vote anh viết sâu về 3 mục đầu.
 
https://www.stroustrup.com/bs_faq.html#C-slash
Cụ Stroustrup có nói thế đâu bác. :)
Bởi vì cụ chứ bao giờ khẳng định nên coi như ai nghĩ nó là riêng ra hay dính với nhau đều là do góc nhìn mỗi người, cách lập trình của từng người. Chốt lại thì cũng phải chờ tác giả đăng đàng rõ ràng nói. "C là ngôn ngữ riêng và chẳng liên quan gì C++ cả". Lúc ấy thì mặc định C++ chẳng liên quan gì C. Tách biệt hoàn toàn

còn lại cụ bảo thế này:
"Contrary to repeated rumors, I was never told that I had to use C; nor was I ever told not to use C. In fact, the first C++ manual grew from troff source of the C manual that Dennis gave me. Many new languages were designed at Bell labs; in "Research" at least, there were no rules enforcing language bigotry."

Cũng chỉ thể hiểu rằng C và C++ là tương thích. Không nhập vào cũng chẳng tách ra, 1 dự án thì viết chung cả C và C++ đều ổn.
 
Last edited:
cắm mắt
6PZcHGD.png
 
Back
Top