Tối giản việc đọc tin nổi bật, comment chất lượng nhiều reaction trên voz cho các fen bận rộn.

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

@luiz Joined: 03/2014
#1
Ưng 3

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

lu…
luiz

03/2014

@luiz 03/2014
#2
Ưng 5
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++

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


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

+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

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


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


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

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


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


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

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


------------------------------------------------------------------------
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

zz…
zzchaolegionzz

@zzchaolegionzz
#10
Ưng 15
Vàng quan điểm
Đ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++.

da…
dangson

10/2011

@dangson 10/2011
#11
Ưng 8
Vàng quan điểm
c++ đến giờ vẫn không thông não được pointer
Đơn giản mà.

fl…
flowerfx2

05/2011

@flowerfx2 05/2011
#100
Ưng 7
Vâng những cái anh nhắc là những project của cá nhân hay là những ông lớn vậy. Anh có vấn đề về đọc hiểu chăng? Những cái anh nói thì tất cả mọi ng ở đây đều biết cả. Xin hỏi anh làm 8 năm với c++ a đã có cái project để đời nào chưa hay chỉ biết mỗi gọi std lib vào chạy. Người ta h ko học c++ vì khó kiếm tiền nhanh, ít việc chứ ko phải do nó khó như a thủ dâm đâu.

via theNEXTvoz for iPhone
ng ta kok học đó là do a kok học thôi, các trường đh lớn ở Việt Nam đều phải học c++ 2 năm đâu (bk, khtn, đh cntt) đó là lý do tại sao sv các trường đó ra đều chất lượng hơn ở trường khác do họ dc học cái gốc , ở thế giới cũng vậy thôi , mấy thằng làm cái ngọn mà kok chịu hiểu cái gốc thì muôn đời không khá dc như mấy a đi chê c++ ấy , tôi làm 8 năm giờ chuyển qua viết thư viện cho khách hàng doanh nghiệp rồi chứ kok còn ngồi lọ mọ mấy dòng code vô nghĩa như mấy a nhé, kiếm tiền nhanh nhưng dễ đổ vỡ thì mới a cứ bu theo trend, còn đã scale bự ra thì kiểu nào cũng phải implement c++ vào trong đó, mà như a đã ghét c++ rồi thì tôi chỉ nói vậy thôi, còn nhờ làm c++ mà tôi mua dc 2 cái nhà sg, 1 con oto dưới quê... , tiền từ quảng cáo trên app cứ đổ về đều đều hàng tháng , so ra thì chả hơn dc ai nhưng với thằng xuất thân nghèo nàn như tôi vậy giờ là ấm thân rồi, nói ra cũng kok phải cuồng c++ vì tôi làm nhiều vẫn là java , obj, c# và golang, nhưng mà cần xử lý logic mức độ cao thì tôi vẫn viết c++ rồi build ra lib cho mấy ngôn ngữ trên gọi qua thôi

fl…
flowerfx2

05/2011

@flowerfx2 05/2011
#104
Ưng 4
Sau tiết mục thủ dâm ngôn ngữ là tiết mục khoe của và xỉ nhục techstack khác. À kinh quá như anh nói thì nếu tôi cũng biết kha khá Assembly thì chứng tỏ những người chỉ biết phần "gần ngọn" là C++ như anh thì cũng muôn đời chả khá nổi và a cũng chỉ viết những dòng code vô nghĩa thôi nhỉ.
thôi a xàm lol quá, lúc đầu a chắc nịch bảo méo ai học c++ tôi phản biện lại thì quay ra bảo tôi xỉ nhục techstack khác, rồi mang assemply vào đéo biết để chứng minh cái quần què gì nữa, thôi thôi mời a cút , thớt này tiêu đề rõ ràng là để a e chia sẽ c++ , anh ở đâu đâu lao vào chê bai ngu dốt thì mời a cút xéo, thích thì tự tạo thớt riêng mà nói, thứ vô học

pe…
pepguard-violon

@pepguard-violon
#139
Ưng 4
cái lập trình căn bản học từ khai báo, xong qua rẽ nhánh else if, switch case, rồi qua phần vòng lặp, tới function, array, struct rồi qua phần nâng cao hơn tí là pointer, linked list... là xong mẹ rồi.
cao cấp hơn tí học qua bên lý thuyết đồ thị, học mấy cái bài toán đồ thị, dfs, bfs, ... là xong luôn.

mất cỡ 3 tháng tự học, là đảm bảo cứng, nhưng học đàng hoàng, mới được.

còn để đi làm dc việc, thì phải nhảy vào làm cái gì đó.

ke…
kevin.leptons

@kevin.leptons
#241
Ưng 4
hãy bắt đầu bằng tiếng anh, quản lý tài chính cá nhân và thuật toán. những cái khác đều là phù du .
bắt đầu bằng c++ thì cũng kết thúc bằng c++ luôn nhé, cái đống c++ không phải để học mà để làm

Ad…
Adidas Phật

@Adidas Phật
#473
Ưng 4
Không bắt buộc, nhưng nó là thứ giúp lập môn lập trình tốt nhất (theo mình thấy thế).

a_…
a_anhhungxadieu

11/2020

@a_anhhungxadieu 11/2020
#474
Ưng 5
Ko biết giờ các trường đh hay trường cấp 3 đú trend hay j mà dạy Python lun nhỉ? Thấy 1 cái bất lợi là Python k có khai báo kiểu dữ liệu và k có dấu đóng mở ngoặc. Nếu đứng ở 1 đứa beginner tay ngang hay 1 đứa học sinh cấp 3 thì cảm thấy học Python dễ và nhanh đấy. Nhưng sẽ khó và lâu khi chuyển sag mấy ngôn ngữ strong type

Sent from Vsmart Active 3 using vozFApp

br…
bribnt

02/2013

@bribnt 02/2013
#475
Ưng 7
C++ thì không nhất thiết nhưng C thì phải biết.
Vì tất cả các hệ điều hành bây giờ đều viết bằng C, các thư viện cơ bản nhất cũng là C. Dù có dùng ngôn ngữ bậc cao cỡ nào thì bên dưới vẫn giao tiếp với hệ điều hành, phần cứng bằng ABI của C hết.
Biết thì sẽ dễ debug, xử lý sự cố hơn.

Cụ…
Cụ Dumbledore

@Cụ Dumbledore
#480
Ưng 5
Mình là người tay ngang, cảm giác khi đụng tới C là chán, không phải vì nó khó. Khó thì ngôn ngữ gì nó cũng khó. Điểm quan trọng là nếu tự học thì người học khó có thể xây dựng được cái gì hoàn chỉnh. Nghe anh em nói C quan trọng vậy thì sau khi làm project ổn ổn mình đá qua học cơ bản C, mục đích để học thuật toán.
Học C thì rộng lắm, nhưng nếu anh muốn học về những điều cơ bản thì course này rất bổ ích. Quan trọng là nó còn vui nữa:
https://cs50.harvard.edu/x/2021/

we…
welcometrue

@welcometrue
#499
Ưng 10
Vàng quan điểm
Tôi thì vẫn giữ quan điểm ngôn ngữ lập trình thì vẫn là ngôn ngữ lập trình, thấy hợp cái gì, đi hướng nào, thì là quan điểm mỗi người. Tôn trọng lẫn nhau thôi.
Tôi xuất thân dùng C++, biết thêm chút Assembly và cả FORTRAN, nhưng hai năm nay thì toàn dùng Python là chủ yếu (dù lâu lâu vẫn đụng vào C++). Vì cái task của tôi chủ yếu liên quan tới mấy cái Data Science/Computer Vision/Machine Learning.
Ba cái này cực kì nặng ở chỗ phát triển ra giải thuật mới. Giải thuật ở đây không chỉ là ở mức iterate rồi matrix manipulation như hồi cấp 3 với C++, mà phức tạp hơn, ít sách vở đề cập hơn (vì đi hướng research mà), debug khó khăn hơn. Việc sử dụng Python + những thư viện warper C++/Fortran thì tốc độ execution không là vấn đề lớn nữa. Và việc mặt code dễ dàng và intuitive hơn giúp tôi làm việc nhanh hơn rất nhiều. Cũng giống như hồi ĐH, học môn phương pháp tính có cả 3, 4 phuơng pháp tính nghịch đảo ma trận (tôi còn nhớ mỗi Gaussian vì dễ implementation nhất và chạy cũng khá nhanh), mà giờ ra ngoài làm thì toàn dùng np.inverse cho nhanh (về mặt code) để tập trung cho mấy cái hướng mới
Tôi từng gặp một cu C++ master race (mà không học tới nơi tới chốn), đòi solo code ma trận Python với tôi. Nó iterate bằng for loop và kết quả là chậm hơn 4 lần so với tôi dùng Numpy, dù tôi thừa biết (và có dùng) chắc chắn dùng eigen trong C++ sẽ nhanh hơn.
Nên không ngôn ngữ nào master race hơn ngôn ngữ nào hết. Quan trọng là phải NẮM RÕ. Như ví dụ trên, học C++ mà không rõ eigen, boost thì thôi dẹp học Python luôn đi. Còn việc C++ bắt buộc phải học thì nó cũng là một ý kiến tốt thôi. Học thừa hơn thiếu. Học C++ giúp hiểu hơn cách máy tính hoạt động, tạo ra lối suy nghĩ OOP, Static variables và luôn tìm mọi cách để tối ưu code , ba cái này luôn cần ở mọi ngôn ngữ. Chưa kể C++ có thể dùng được để làm việc luôn (hơn hẳn Pascal cũ). Với những người học công nghệ thông tin, mới chập chững bắt đầu, thì tốt nhất vẫn là học cái thứ general nhất, dù nó là bậc thấp đi chăng nữa Sau này có định hướng thì quên bớt cũng được

a3…
a3.phantom.vn

@a3.phantom.vn
#508
Ưng 5
ý mình hỏi không nhất thiết là sinh viên, miễn là người học lập trình thì việc học C có bắt buộc. Nhiều ông comment tư vấn nói như kiểu không học C là không có gốc nên mình mới thắc mắc. Người làm web, làm app mà không học C thì có bị hỏng kiến thức gì hay ảnh hưởng gì tới nghề nghiệp hay không ?. Lập trình thì hàng chục ngôn ngữ, hàng trăm thứ phải học, không thể ôm đồm học hết được. Có những thứ bắt buộc phải học như html, css, js, csdl, thuật toán. C có nằm trong nhóm bắt buộc hay không ?
  • Nếu thứ bạn muốn học là cách máy tính hoạt động ở một mức sát hơn so với các ngôn ngữ khác -> nên học
Ví dụ những kiến thức về pointer hay cách C biểu diễn string sẽ giúp biết sát hơn cách máy tính biểu diễn các thứ này. Dùng ngôn ngữ "bậc cao hơn" C thì chỉ việc xài biến, xài class string có sẵn
Tuy nhiên như đã nói ở cmt trước, những thứ này thuộc kiến thức nền tảng của computer science, do đó, nếu học bài bản thì chắc chắn phải học qua. Như vậy nó chả liên quan đến học C hay không

  • Nếu bạn muốn học sâu về C/C++ để làm những công việc mà C/C++ làm tốt hơn các ngôn ngữ khác -> thứ mà mấy ông ở trên đang cãi nhau

Làm web, làm app mà biết kiến thức cơ sở về computer architecture, operating systems,... thì biết C hay không không quan trọng.

rf…
rfcclub2011

03/2013

@rfcclub2011 03/2013
#521
Ưng 5
Nên học C++14 trở lên càng tốt. C++20 bỏ mẹ nó file .h , dùng mỗi file module thật là sung sướng cuộc đời. Code thì chỉ 1 câu "nếu mày có thể không dùng con trỏ thì đừng có dùng".
Mà Javascript năm rồi bị Typescript bật bãi rồi, Typescript là Javascript có type gần giống bọn C-style language như Java, C++ nên càng nên học C++.

Mà học Pascal hay Typescript thì bắc qua bọn như Go, Rust, Swift, Kotlin dễ ẹt.

Ni…
Nipin

03/2018

@Nipin 03/2018
#529
Ưng 4
cho bạn nào còn thắc mắc là python dùng utf32 ngon choét phục vụ hết tính năng rồi tại sao người ta không theo lại dùng utf8, thì các bạn nên đọc thêm về unicode.

thư viện string của các bạn không unicode aware thì dù mỗi char 4 bytes lúc reverse string vẫn sai sml nhé, bởi vì tồn tại cái gọi là unicode character composition.

p/s: google ra python với unicode thiếu gì, trình độ phải rẻ rách tới mức nào mới không rõ mấy vụ này:

https://changelog.complete.org/archives/9938-the-python-unicode-mess

Ka…
Kaldr

@Kaldr
#567
Ưng 4
C nhìn chung khá đơn giản, syntax ít, học chay tí là hết, khó là nó phụ thuộc platform, ví dụ C trên linux khác hẳn C trên window, làm trên linux thì chủ yếu phải hiểu cách hoạt động của linux, biết dung programing interface. C++ lại câu chuyện khác, cực kỳ phức tạp, việc làm C và C++ cũng ko liên quan nhau nhiều, ko phải yêu cầu công việc thì bỏ đi, đừng học C++.
Chủ thớt hoc mấy cái syntax cơ bản của C rồi thì chọn platform(OS) để học tiếp, nên chọn linux, cày quyển này là ổn https://www.goodreads.com/book/show/7672214-the-linux-programming-interface có bài tập cuối mỗi chương
Và tốt nhất là kiếm chỗ thực tập/làm thêm sớm, đi làm rồi mới biết cần cải thiện cái gì

Ar…
Aristides

@Aristides
#723
Gạch 4
Ngược dòng
Mọi người ơi, không biết cái linked list này bị lỗi chỗ nào mà biên dịch thành công, runtime thành công mà bảng console lại không hiện số là sao?
C++:
#include<iostream>
template<class X>
struct Node
{
    Node<X>* next;
    X value;
    Node()
    {
        next = nullptr;
        value = 0;
    }
    Node(X val)
    {
        next = nullptr;
        value = val;
    }
    Node(X val, Node *nextnode)
    {
        next = nextnode;
        value = val;
    }
};
/*****************************************************/
template<class Y>
class LinkedList
{
private:
    Node<Y> *head;
    unsigned int size;
public:
    LinkedList()
    {
        head = nullptr;
        size = 0;
    }
    void push(Y val)
    {
        if (size == 0)
        {
            head = new Node<Y>(val);
            size++;
            return;
        }
        Node<Y> *dummy = new Node<Y>();
        dummy->next = head;
        while (head != nullptr)
        {
            head = head->next;
        }
        head = new Node<Y>(val);
        head = dummy->next;
        size++;
    }
    unsigned int length()
    {
        return size;
    }
};
int main()
{
    int n = 10;
    std::cout << "[ ";
    LinkedList<int> ListNode;
    for (int i = 1; i <= n; i++)
    {
        ListNode.push(i);
        std::cout << ", ";
    }
    std::cout << "]" << endl;
    std::cout << "Size: " << ListNode.length() << std::endl;
    return 0;
}
/* Output:
*
*  [ , , , , , , , , , ]
*  Size: 10
*
*/