thảo luận [C++] Thớt bàn luận, hỏi đáp thắc mắc về C++

luiz

Đã tốn tiền
Hello các thím :):):)

Mạn phép lập thread C++ để các thím trong ngành cùng vào chia sẻ kinh nghiệm, tài liệu học tập cho các newbie mới theo, chia sẻ hướng đi cho các lập trình viên C++ :smile: và cùng giúp nhau phát triển trên con đường sự nghiệp còn lắm chông gai :byebye::byebye::byebye:

Lời MOD: Blog này chia sẻ khá đầy đủ kiến thức về C++, cả áp dụng design pattern trong C++ cũng có đủ hết
https://cppdeveloper.com/
Data Structures & Algorithms với C++
https://vallicon.com/
 
Em trichs lại post cũ cho thím nào chưa đọc.

guide line dưới là do em tự tổng hợp cho các thím nào đang muốn và sẽ theo hướng C++
surrender.gif
surrender.gif

các thím có kiinh nghiệm gì cứ share, em sẽ update lên để các thím khác tiện theo dõi
nosebleed.gif
nosebleed.gif


1: Hệ điều hành
Windown hoặc Linux, windown thì quá quen thuộc rồi em nói qua về Linux
Linux: cái này các thím tìm hiểu qua cho biết, sau dùng nhiều ắt sẽ quen
+kiến thức về nhân linux (kernel, shell,...)
+quản lý, phân, cấp quyền các kiểu
+command line trong linux
+nên dành thêm thơi gian hoc lập trình shell, sau dùng khá nhiều

2. Cấu trúc dữ liệu và giải thuật
cái này rất quan trọng, các thím nên dành nhiều thời gian cho phần này để hiểu sâu hơn về lập trình. Học thật kỹ vào, khi nắm chắc phần này rồi thì em nghĩ học các phần khác không thành vấn đề, và sẽ học nhanh hơn
burn_joss_stick.gif
burn_joss_stick.gif

+cấu trúc dữ liệu cơ sở (struct, class, basic dât type)
+cấu trúc list, stack, queue, hash, tree, map, ....
+thuật toán: sắp xếp, đệ quy, quy hoạch động, DFS, BFS, backtracking,...
+duyệt đồ thị, cây nhị phân,...
+đánh giá độ phức tạp của thuật toán

phần này em hay lên SPOJ luyện, trang này khá ok và nhiều bài, chia làm nhiều dạng, có test case có commit code các kiểu cho các thím
feel_good.gif

nói chung các thím phải kiên trì, bài trên này cũng khá khó nhằn
brick.png


3. C++
các khái niệm về hướng đối tượng (class, object, inheritance, interface, astract, ..). cấu trúc dự liệu cơ bản: con trỏ, struct, linklist,...
nói chung C++ có khá nhiều cái để học và có rất nhiều nguồn để học, em hay lên learncpp.com xem theo guide line
à quên các thím nên học design pattern nữa, trong các dự án thực tế luôn luôn dùng các pattern này
nosebleed.gif
nosebleed.gif


4. Framework
C++ có hai framework support lập trình giao diện mạnh mẽ là MFC của microshop và Qt open source. tùy các thím muốn theo hướng nào thì học framework ý. nói chung cũng không khó để tiếp cận, cứ làm thì quen thôi
sexy_girl.gif
sexy_girl.gif

Giờ em thấy theo hướng QT có vẻ nhiều hơn, các thím có thể làm nhúng hoặc app đều được
brick.png
brick.png


Chia sẻ của em khá là cơ bản, các thím trong nghành có nhiều kinh nghiệm thì chia sẻ thêm cho mọi người với
go.gif
go.gif


Mà em khuyên các thím muốn tay ngang sang lập trình thì cứ dành thời gian học mấy cái em bảo, nếu thấy ok thì chuyển, không là vỡ mặt đấy
brick.png

lập trình không ngon như bọn trung tâm dạy lập trình trên mangh\j quảng cáo đâu, dạo này lươt FB hay gặp mấy bọn trung tâm quảng cáo "nếu bạn lương thấp hãy chuyển sang lập trinh, chỉ với khóa học 6 tháng blablalbalbal ..." nghe chuối đéo chịu được
sexy_girl.gif
sexy_girl.gif


------------------------------------------------------------------------
posted by FinalDevil
Mấy cái thím list ra thì chủ yếu là dành cho bất cứ lập trình viên nào chứ cũng không hẳn là dành cho C++ developer.

Mình chỉ trích ra một ý chỗ bạn nói là map, tree... C++ có map và unorered_map, thì khi sử dụng cũng nên biết là map dùng red-black tree, không hash key, còn unordered_map sẽ sử dụng hash nên key cần phải hash ra. Biết khi nào sử dụng map, unordered_map cũng sẽ mang lại tối ưu rõ rệt.

Nếu muốn nhấn mạnh C++ thì phải nói đến những thứ như là preprocessor, compiler, loader, linker, STL, GSL, Boost, profiling application, debuging, optimization, memory model, RAII...

C++ không chỉ có mỗi OOP, mà nó còn là procedural, functional, generic, template meta programming. Hay còn gọi là ngôn ngữ đa mô hình. Biết cách sử dụng mỗi mô hình khác nhau thậm chí là trong một project thì sẽ mang lại hiệu quả rất cao. Không hẳn OOP khi nào cũng là tốt nhất.

Học C++ cũng phải nắm được những idioms/pattern riêng mà chỉ C++ mới có, như là Pointer to Implementation, CRTP, SFINAE, Traits...

Và cái quan trọng nhất vẫn là vận dụng một cách linh hoạt những hiểu biết của mình vào các bài toán thực tế.

------------------------------------------------------------------------
posted by bribnt
Bên trong C++ có đến 4 ngôn ngữ lập trình khác nhau: C++ "thường", Template metaprogramming, constant expression và macro. TMP thì là functional rồi.
C++ "thường" nếu học cơ bản thì thấy dễ cũng bình thường vì nó giống nhiều ngôn ngữ khác. Functional khó vì kiểu tư duy nó khác. Search "imperative programming" và "declarative programming" để biết thêm chi tiết.


Mà C++ là multiparadigm, thích functional thì có thể dùng Boost Phoenix nó cho viết code y như functional. https://www.boost.org/doc/libs/1_72_...tml/index.html
 
Last edited:
E đọc cuốn này vẫn ko thông, chắc do ngu muội
Quyển kỹ thuật lập trình C giờ đổi bìa rồi à, hình bìa lấy của người ta. Mà đọc quyển C này không thông là phải rồi, dành cho SV chuyên ngành tham khảo thôi. Mình cũng có 1 quyển mua hồi xưa, đọc chán quá đi thôi :D

1588094580061.png
 
C++ bao la vl, bơi mãi không thấy bờ đâu. Template, multithread, STL, lại thêm ver 14, 17 đọc code như python :spiderman:
 
t không học c++ nhưng có coi qua thì không phải pointer chỉ đơn giản là 1 biến chứa địa chỉ của 1 biến khác trong bộ nhớ thay vì chứa giá trị như bình thường thôi mà nhỉ
Coi qua thì thấy nó dễ, sử dụng nó mới thấy khó. Đặc biệt là lỗi quên giải phóng bộ nhớ sau khi sử dụng và lỗi cập nhật dữ liệu vào vùng nhớ đã giải phóng. Khi có những lỗi này thì chương trình vẫn được biên dịch bình thường, chạy mới tràn bộ nhớ và lỗi tùm lum ra. Chương trình nhỏ không nói, chương trình lớn thì ốm luôn vì trình biên dịch không bắt lỗi.
 
Điều quan trọng nhất khi học một ngôn ngữ bất kỳ chứ không riêng gì C++, đó là thực hành, dù con trỏ bỏ mẹ gì, khó hiểu đến đâu mà code 100, 1000 lần thì cũng phải thông thạo. Nhưng sai lầm của đa số người học là chỉ code những bài code mẫu nên không gặp được những bug khó hiểu, mà bug và debug là quá trình giúp dev hiểu sâu hơn về cái mình đang code.
Từ kinh nghiệm thực tiễn mình nghĩ muốn học C++ hiệu quả thì nên code một ứng dụng có tính hữu dụng thực sự, với quy mô nằm trong khả năng coding hiện tại. Ví dụ hồi mới học C++ mình thử viết lại lệnh ls trong linux, nó chạy không ổn lắm nhưng ít nhất mình hiểu được 2 thứ là cơ chế quản lý file của Linux và C++.
 
Coi qua thì thấy nó dễ, sử dụng nó mới thấy khó. Đặc biệt là lỗi quên giải phóng bộ nhớ sau khi sử dụng và lỗi cập nhật dữ liệu vào vùng nhớ đã giải phóng. Khi có những lỗi này thì chương trình vẫn được biên dịch bình thường, chạy mới tràn bộ nhớ và lỗi tùm lum ra. Chương trình nhỏ không nói, chương trình lớn thì ốm luôn vì trình biên dịch không bắt lỗi.
Nếu thím k handle được việc giải phóng bộ nhớ thì thím có thể dùng smart pointer :)
 
Điều quan trọng nhất khi học một ngôn ngữ bất kỳ chứ không riêng gì C++, đó là thực hành, dù con trỏ bỏ mẹ gì, khó hiểu đến đâu mà code 100, 1000 lần thì cũng phải thông thạo. Nhưng sai lầm của đa số người học là chỉ code những bài code mẫu nên không gặp được những bug khó hiểu, mà bug và debug là quá trình giúp dev hiểu sâu hơn về cái mình đang code.
Từ kinh nghiệm thực tiễn mình nghĩ muốn học C++ hiệu quả thì nên code một ứng dụng có tính hữu dụng thực sự, với quy mô nằm trong khả năng coding hiện tại. Ví dụ hồi mới học C++ mình thử viết lại lệnh ls trong linux, nó chạy không ổn lắm nhưng ít nhất mình hiểu được 2 thứ là cơ chế quản lý file của Linux và C++.
Thím nói chuẩn, học ngôn ngữ hay framework nào mà cũng code ra project riêng của mình thì cũng sẽ hiểu sâu và rộng hơn
 
C++ này hàm cơ bản thiếu rất nhiều. Tự làm hàm lấy, nên giỏi toán siêu đẳng code C++ đỡ vất vả hơn. Ngồi mà mò lại toán để làm các hàm mệt thật chứ
 
C++ này hàm cơ bản thiếu rất nhiều. Tự làm hàm lấy, nên giỏi toán siêu đẳng code C++ đỡ vất vả hơn. Ngồi mà mò lại toán để làm các hàm mệt thật chứ
hàm gì thiếu hả maifen. tôi tưởng thư viện bên c++ cũng tương đối đầy đủ chứ đâu hẻo lánh lắm? hay maifen chưa tìm ra thư viện?
 
hàm gì thiếu hả maifen. tôi tưởng thư viện bên c++ cũng tương đối đầy đủ chứ đâu hẻo lánh lắm? hay maifen chưa tìm ra thư viện?
Thật ra thì chắc do tôi quen python nó đa dạng hàm hơn nên chco là C++ nó vậy chứ C++ thư viện hàm đủ dùng
 
Một điều hay nhất ở C++ là bắt buộc dev phải làm thủ công tỉ mỉ ngay khi code vì nó là ngôn ngữ biên dịch luôn cho CPU hiểu và thực thi lệnh. Cũng vì thế mà nó mạnh mẽ hơn python hay java
Một ngôn ngữ nhiều version, mỗi version lại một khác bọt mới. Như lột xác nên dev phải học lại ver mới :d
 
Back
Top