Tôi là người mới. Tôi có thể trực tiếp bắt đầu học C ++ 11 không? hoặc tôi phải học C ++ cũ? [đóng cửa]


36

Tôi là người mới bắt đầu và chỉ có ít kiến ​​thức về lập trình.

Sẽ tốt hơn nếu tôi trực tiếp học C ++ từ những cuốn sách bao gồm C ++ 11 mới hay tôi nên học qua những cuốn sách C ++ cũ tốt nhất?

Tôi có nên có ít kiến ​​thức về C ++ trước khi học C ++ 11 không? hoặc tôi có thể bắt đầu trực tiếp từ đó?

Nó có gây ra vấn đề gì không nếu tôi trực tiếp bắt đầu từ C ++ 11? Nếu không, sau đó đề xuất một số sách về C ++ 11.


18
Tại sao những điểm tiêu cực? Câu hỏi này đã được trả lời chưa? Không phải người mới được phép đặt câu hỏi? Hoes có ai đó tìm kiếm trong vấn đề này? Tôi nghĩ một trong những cách tốt nhất là hỏi những người có nhiều kinh nghiệm hơn. +1, vì người mới cũng xứng đáng được hướng dẫn
adosaiguas

12
@Simon điều này nghe với tôi như một câu hỏi khái niệm về phát triển phần mềm: Tôi phải bắt đầu từ đâu? Và làm thế nào để bạn biết anh ta không phải là một lập trình viên chuyên nghiệp? ;)
adosaiguas

4
@MSalters Nói về sách; Tăng tốc C ++ là một cuốn sách tuyệt vời, mặc dù có một chút đơn giản hóa. Barbara E. Moo là một nhà văn tuyệt vời và ảnh hưởng của cô đối với cuốn sách dễ dàng được ghi nhận. Nhưng cuốn sách trong câu hỏi thực sự "cũ". Tuy nhiên, không phải tất cả hy vọng đã bị mất - có một cuốn sách được đánh giá cao có tên C ++ Primer của Lippman , LajoieBarbara E. Moo , phiên bản thứ năm đã được xuất bản trong tháng này (tháng 8 năm 2012) và từ vài chương đầu tiên tôi đã đọc từ tôi sao chép, đây là một cuốn sách tuyệt vời bao gồm C ++ 11. Ảnh hưởng của Moo là một lần nữa. Cô ấy là một nữ thần khi viết về kỹ thuật.
zxcdw

2
@Simon Programmers — Stack Exchange is a site for professional programmers...Trong trường hợp đó, bạn có phiền khi hướng dẫn tôi đến trang dành cho lập trình viên mới bắt đầu không? Tôi cũng là một người mới viết mã và tôi sẽ có khá nhiều câu hỏi cơ bản ...
Jeyekomon

2
Tôi nghĩ rằng câu hỏi này rõ ràng lạc đề do Câu hỏi thường gặp (có thể lúc đó nó không được hỏi trước). Nó hỏi "ngôn ngữ nào (phiên bản) tôi nên chọn tiếp theo", đó là về lời khuyên giáo dục và nó yêu cầu các nguồn lực ngoại cỡ - ba trong số các lý do đóng tiêu chuẩn.
Doc Brown

Câu trả lời:


38

Có rất nhiều cải tiến về khả năng sử dụng giúp C ++ 11 dễ hiểu hơn đối với người mới bắt đầu, đặc biệt là một người có kinh nghiệm trong các ngôn ngữ khác với các tính năng đó. Những thay đổi khác trong C ++ 11 chỉ được người dùng nâng cao quan tâm, do đó bạn có thể bị choáng ngợp nếu bạn chọn một cuốn sách được thiết kế để chủ yếu dạy về sự khác biệt. Hãy chắc chắn rằng bất kỳ cuốn sách bạn nhận được được thiết kế cho người mới bắt đầu hoàn thành C ++.

Điều đó đang được nói, cuối cùng có lẽ bạn sẽ phải học theo cách cũ, vì có rất nhiều mã hiện có và thậm chí mã C ++ 11 mới sẽ chứa cách làm cũ nếu lập trình viên chọn. Tôi viết C ++ để kiếm sống và công ty của tôi thậm chí còn chưa đủ để đánh giá các trình biên dịch tương thích với C ++ 11, chứ chưa nói đến việc sử dụng một trình biên dịch trong sản xuất.


tôi học từ c ++ primer phiên bản thứ 4. cuốn sách tốt để bắt đầu với ??
Dhananjay

1
Nó nhận được đánh giá tốt và có vẻ ở mức phù hợp, nhưng tôi đã không xem sách C ++ cho người mới bắt đầu trong một thời gian dài , vì vậy tôi không phải là người tốt nhất để hỏi. Tuy nhiên, tôi nghĩ rằng bạn sẽ cần phiên bản thứ 5 nếu bạn muốn bảo hiểm C ++ 11.
Karl Bielefeldt

ok và yah tôi biết rằng phiên bản thứ 5 bao gồm c ++ 11.
Dhananjay

10

Bạn không cần sử dụng C ++ cũ để bắt đầu sử dụng C ++ 11, có những tính năng mới trong C ++ 11 nhưng có sử dụng là tùy chọn. Biết cách sử dụng các tính năng của C ++ 11 có thể là một lợi thế, chắc chắn sẽ không phải là bất lợi khi làm việc với các cơ sở mã kế thừa (trước 11) một khi bạn biết các đặc điểm riêng của các phiên bản cũ.

Học C ++ sẽ là một nơi tốt để bắt đầu học và Phụ lục B sẽ dạy cho bạn các tính năng của C ++ 11 sau khi bạn đã học những điều cơ bản.

Tôi có thể thấy lý do tại sao một số người đã đề xuất Java / CSharp, v.v. như các ngôn ngữ thay thế dễ dàng hơn nhưng tôi đã học được một chút về C ++ trước khi chuyển sang CSharp và tôi không phải là một lập trình viên tồi hơn vì nó, vì kỹ năng lập trình ngược lại đi sâu hơn nhiều so với ngôn ngữ cú pháp / chức năng và với nền tảng vững chắc trong C ++, bạn có thể học bất kỳ ngôn ngữ OOP bắt buộc nào khác một cách dễ dàng.


8

Khó mà nói ra được.

C ++ cũ là một bãi mìn, và thật tuyệt khi học cách điều hướng một con thú như vậy. Nó cũng sẽ làm cho bạn hiểu lý do tại sao mọi thứ được thực hiện như thế nào, và ý nghĩa của các cấu trúc khác nhau là gì.

Một lần nữa, C ++ cũ không phải là thứ bạn muốn khi bạn viết mã.

Nhưng sau đó, một lần nữa, C ++ cũ là thứ mà rất nhiều ngành công nghiệp sẽ phát triển trong 20 năm nữa.

Tôi yêu C ++ 11, nhưng hiện tại nó chỉ có thể sử dụng được trong các công ty mới thành lập. Không phải trong các cơ sở mã di sản lớn. Và nhảy thẳng vào C ++ 11 có thể khiến bạn có những kỹ năng chưa được phát triển trong các phần C ++ khó chịu. Điều này sẽ gây tác dụng ngược khi một số C ++ 11 nâng cao tạo ra rò rỉ hoặc gặp sự cố vì nó được sử dụng theo cách cú pháp chính xác, nhưng không chính xác về mặt logic.


Tại sao các bộ phận chính của ngành công nghiệp không cập nhật trình biên dịch, bên cạnh trường hệ thống nhúng thích hợp? Rủi ro (ngay cả với các bài kiểm tra đơn vị)? Bảo thủ?
TheLQ

1
@TheLQ: Tôi đoán ... Nhưng khi tôi nghĩ tôi sẽ làm gì nếu tôi là một ông chủ, rất có khả năng tôi sẽ làm điều tương tự. Trừ khi có một số tiết kiệm chi phí đáng chú ý so với chi phí di chuyển.
Coder

1
@TheLQ: Phải mất các cơ sở mã để chuyển sang phiên bản mới hơn của trình biên dịch. Rất hiếm khi một dự án sẽ điều chỉnh một phiên bản trình biên dịch mới willy nilly. Một dự án mới có nhiều khả năng sử dụng trình biên dịch mới (miễn là nó không tương tác với mã cũ).
Martin York

1
@Coder: Điều gì làm cho C ++ 11 khác với C ++ 03 khi học nó sẽ không dịch trực tiếp sang C ++ 03. Có một vài tính năng mới giúp mọi thứ dễ viết hơn nhưng không có gì ngăn cản bạn bước vào những bãi mìn đó.
Martin York

1
@TheLQ: vâng, về cơ bản đó là các quy trình nhưng bạn đã quên kiểm tra tích hợp (phần phức tạp nhất. Không phải tất cả các ứng dụng đều độc lập (tôi không nói rằng đây là thiểu số)). Bạn cần xác minh rằng tất cả mã của bạn hoạt động và tương tác chính xác (không chỉ với mã của bạn mà còn với mã khách hàng). Đây là một quá trình của tháng nếu không phải là thử nghiệm và xác nhận. Nếu một số khách hàng của bạn không chuyển sang C ++ 11 thì bạn có thể cần duy trì cả hai phiên bản trên một số hệ thống (may mắn là gcc rất tốt với khả năng tương thích ngược nhưng không phải tất cả các nhà cung cấp trình biên dịch C ++).
Martin York

8

Mặc dù có nhiều cải tiến trong C++11, C++vẫn không phải là một ngôn ngữ dễ dàng. Java, mặc dù không dễ như một số người nghĩ, vẫn là một ngôn ngữ dễ hơn với hiệu suất rất tốt (thường nhanh như C++) và cung cấp các IDE tốt hơn (có thể Visual C++tốt như các IDE Java hiện tại nhưng không may mắn ở đây trên Linux), rất nhiều thư viện tiêu chuẩn toàn diện hơn (JDK), nhiều thư viện hơn (ví dụ Hibernate , Spring , JEE , Lucene , v.v.) và không bị rò rỉ bộ nhớ (tốt, hầu như không có - bạn vẫn có thể xây dựng rò rỉ bộ nhớ trong Java nhưng khó thực hiện hơn hơn trong C++). Công bằng mà nói, với hiện đại C++11, sẽ dễ dàng hơn nhiều để tránh những ký ức về bộ nhớ.

C ++ 11 có nhiều tính năng thú vị như lambdas, từ khóa tự động, di chuyển ngữ nghĩa và nhiều hơn nữa. Nó chắc chắn là một ngôn ngữ tốt hơn nhiều so với C++98. Xem tổng quan này của Herb Sutter về các tính năng mới trong C++11: Các yếu tố của C++Phong cách hiện đại .

Tóm lại, tôi nghĩ mọi người nên học ít nhất một số C++. Nếu bạn đã được lập trình trong Java, Scala, Rubyhoặc Pythontrong thập kỷ qua và không bao giờ chạm vào Choặc C++, bây giờ với C++11tôi nghĩ rằng đó là thời gian để học C++11và nâng cao kỹ năng lập trình của bạn trong khi làm như vậy.

Tôi có thể sẽ không sử dụng C++nhiều trong công việc trong những năm tới và khi tôi cần một ngôn ngữ mạnh hơn Java, tôi có thể sẽ tìm đến Scala, nhưng tôi sẽ xem xét kỹ hơn C++11và cố gắng tìm hiểu và hiểu các tính năng mới, đặc biệt là những người về đa luồng và đồng thời.

Hãy nhớ rằng: Nó luôn giúp học một ngôn ngữ lập trình mới ngay cả khi bạn không có kế hoạch sử dụng nó trong sản xuất.


1

Hãy hít thở sâu và đọc bài viết này của Peter Norvig.

Bạn đã đọc nó chưa? Ok, nếu bạn là người mới bắt đầu, bạn cần bắt đầu trong các bước nhỏ. - ngôn ngữ chính ở đây - có thể đến sau, kiểm tra Coursera hoặc Udacity cho một số khóa học giới thiệu khoa học máy tính mới bắt đầu.

Hoàn thành điều đó, tôi sẽ khuyên bạn nên làm việc chậm chạp thông qua ngôn ngữ lập trình C của K & R nếu bạn được đặt trên ngôn ngữ 'C'.

Làm việc trên cơ sở, phần còn lại sẽ đến trong thời gian.


10
Tôi không thấy đây là câu trả lời cho câu hỏi được hỏi. C thậm chí không giống ngôn ngữ với C ++.
vartec

1
Nhưng C ++ dựa trên C và phần lớn tương thích ngược: phần lớn cú pháp C hiện đại có thể áp dụng trực tiếp cho C ++. Vì C đơn giản hơn bất kỳ phiên bản nào của C ++, việc học C trước tiên mang đến cho bạn một nền giáo dục mạch lạc tốt đẹp về cú pháp và ngữ nghĩa cơ bản của C ++ - và giúp giải thích một số mụn cóc không thể hiểu được trên ngôn ngữ lớn hơn ...
sắp diễn ra vào

2
@asingstorm Điều đầu tiên mà một lập trình viên C nên làm là bỏ qua hầu hết mọi thứ anh ta biết về C, và sau đó bắt đầu học C ++. Có những khác biệt tinh tế có thể cắn bạn.
Bовић

1
Cộng với mã C ++ hiện đại thành ngữ không vay mượn nhiều từ C ngoài cú pháp. Không giống như chúng ta vẫn đang sử dụng chuỗi C và malloc / miễn phí nữa. Là người mới bắt đầu hoàn thiện ngôn ngữ, bạn nên chọn một cuốn sách như C ++ Primer phiên bản 5, Tăng tốc C ++, v.v. thay vì tập trung vào C.
bstamour

1

Những cuốn sách giới thiệu gần đây về C ++ cũng đang ngày càng bao trùm C ++ 11. Tôi đã đọc Sam's Dạy cho mình C ++ sau khi làm việc với các ngôn ngữ theo kịch bản nhưng không phải C / C ++ trong gần mười năm và thấy nó thực sự hữu ích. Tôi rất nhanh chóng trở thành người giao tiếp trong các ý tưởng trung tâm của C ++ (bao gồm rất nhiều STL) và nhận thức được rất nhiều chi tiết khác biệt trong C ++ 11.

Như một số áp phích khác đã đề cập, C ++ 11 về nhiều mặt dễ dàng hơn so với các tiêu chuẩn cũ hơn với các bổ sung kiểu kịch bản auto, for(int &i : m_vector){}v.v. Vì vậy, nếu "kiến thức nhỏ" của bạn đến từ các ngôn ngữ như Python hoặc Matlab, bạn sẽ tìm thấy C ++ 11 hơi "tự nhiên" hơn các tiêu chuẩn trước đó.

Tôi cũng sẽ chỉ ra rằng đến bây giờ, khả năng tương thích trình biên dịch cho C ++ 11 đã gần như hoàn tất nên việc có mã "quá cập nhật để biên dịch" không còn là vấn đề nữa.

Tóm lại, làm điều đó.


-1

Khi tôi còn ở đây, C được coi là điều kiện tiên quyết của C ++, đặc biệt là đối với những người mới bắt đầu lập trình. Bởi vì bạn phải tìm ra một ngôn ngữ làm gì và tại sao nó được thiết kế như vậy. C có vô số ý tưởng tuyệt vời và đầy đủ về ngôn ngữ lập trình, sẽ không bao giờ lỗi thời. Vì vậy, tôi tin rằng đây là sự khởi đầu tốt nhất.

Và sau khi có một số quan điểm cơ bản liên quan đến các công cụ lập trình, bạn có thể phải chọn những gì sẽ được thực hiện như là bước tiếp theo, có nghĩa là, chọn một ngôn ngữ để học sâu nhất có thể. Cho dù bạn có học sâu đến đâu, nó thường có thể quyết định mức độ sâu của bạn đối với bất kỳ ngôn ngữ nào khác, điều đó có nghĩa là, cho dù bạn đã học bao nhiêu ngôn ngữ, thì ngôn ngữ sâu nhất sẽ luôn là ngôn ngữ đầu tiên bạn đào được. Đối với tôi, tôi đã thực hiện nghiên cứu về Java và tự mình thực hiện một số mô hình Java để hiểu rõ hơn về chức năng hạt nhân của nó.

Sau đó, bạn có thể học bất cứ điều gì bạn muốn, bởi vì bạn hoàn toàn hiểu về công nghệ của ngôn ngữ lập trình. Tôi đã bắt đầu học C #, Go, Python thậm chí Scala và đã thực hiện nhiều dự án để giải trí / làm việc. Hồ sơ cá nhân là 3 tháng kể từ khi bắt đầu học một ngôn ngữ để trở thành người đứng đầu 1.0 của một dự án đang phát triển.

Trong trường hợp của tôi, đã hơn 15 năm kể từ chương trình đầu tiên của tôi và tôi thậm chí không thể nhớ nó là gì. Tôi tin rằng nếu bạn làm việc đủ chăm chỉ, bạn chắc chắn sẽ trở nên tốt hơn và nhanh hơn tôi.


điều này không trả lời câu hỏi được hỏi
gnat

Hoàn toàn xin lỗi. Chỉ muốn nói, không. Không quan trọng bạn muốn học gì cuối cùng, chỉ có nền tảng của ngôn ngữ lập trình mới có thể quyết định mức độ bạn có thể đào sâu trong lĩnh vực này. Đồng thời, bạn phải dành nhiều thời gian hơn cho nó hơn là một cú đánh nhanh.
WinstonWu

-2

Là người mới bắt đầu, tôi nghĩ trước tiên bạn phải trải qua các khái niệm C ++ vì C ++ 11 và tất cả giống như một phiên bản mới nhưng C và C ++ là cơ bản cho bất kỳ loại phát triển nào. Khi bạn đã học C ++, hầu hết các khái niệm sẽ tự động bị xóa.


1
Chào mừng đến với lập trình viên! Tôi không chắc câu trả lời của bạn bổ sung nhiều cho câu hỏi này; và về mặt ngữ pháp nói một chút lộn xộn. Tôi đang gặp khó khăn khi làm theo những gì bạn đang cố gắng nói. Bạn có thể mở rộng câu trả lời của mình không, có lẽ thêm các ví dụ về lý do tại sao C ++ 11 khác nhau nhiều đến mức việc học C và các phiên bản trước đó của tiêu chuẩn C ++ là tốt hơn?
Martijn Pieters

-3

C ++ là một ngôn ngữ thực sự tuyệt vời và mạnh mẽ. Tuy nhiên nó cũng đặt rất nhiều trách nhiệm lên lập trình viên.

Nếu bạn hoàn toàn mới với lập trình, hãy làm cho cuộc sống dễ dàng hơn cho chính mình và bắt đầu với C #. Cú pháp của nó dựa trên C ++, nhưng việc xử lý lỗi thân thiện hơn với người mới bắt đầu trong việc hỗ trợ bạn khi gặp sự cố.

Nếu bạn cảm thấy thoải mái với các phương thức, các lớp, kế thừa và muốn phát triển trong một môi trường mà việc quản lý tài nguyên bộ nhớ và hệ thống quan trọng hơn năng suất, thì C ++ là một lựa chọn tốt và tôi sẽ bắt đầu bằng cách học tiêu chuẩn hiện tại. Nghĩ rằng C ++ đòi hỏi bạn phải hiểu bộ nhớ và chủ động quản lý nó. Hãy mắc lỗi ở đây và tất cả những gì bạn nhận được là một lõi bị bỏ hoặc dữ liệu của bạn chứa các byte không có ý nghĩa. Và thường thì điểm mà bạn tìm thấy vấn đề không liên quan đến nguyên nhân thực sự là ở đâu.


1
Nếu một người bắt đầu với C #, anh ta sẽ quen với việc lập trình ở mức cao (OOP, quản lý bộ nhớ tự động) mà không thực sự biết điều gì xảy ra "đằng sau hậu trường". Nếu người đó sau đó chuyển sang C ++, anh ta sẽ thiếu kiến ​​thức quan trọng về C / C ++ (Tôi nghĩ chủ yếu là quản lý bộ nhớ, nhưng còn nhiều hơn nữa). Nó có thể còn gây hiểu lầm hơn nữa do thực tế là C ++ và C # chia sẻ một cú pháp rất giống nhau, nhưng những gì mã thực sự biên dịch thành, thì hoàn toàn khác. Hãy nhớ rằng OP đã nêu rõ mối quan tâm của anh ấy đối với C ++.
Eti

OP cũng tuyên bố họ có ít kiến ​​thức về lập trình. học ngôn ngữ đầu tiên của bạn như C ++ là một thách thức lớn. Tốt hơn nhiều để chọn các trận đánh của bạn và chọn một loạt các trận chiến nhỏ hơn, vì bạn có nhiều khả năng thành công hơn.
Michael Shaw

-6

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

Cá nhân tôi khuyên bạn nên chống lại C ++ như một ngôn ngữ đầu tiên. Nó khó, phức tạp, khó khăn ... đơn giản là mức độ thấp hơn nhiều và "không an toàn" hơn hầu hết các ngôn ngữ lập trình khác.

Tôi khuyên bạn nên chọn c #, java, python hoặc javascript ... và một cuốn sách hay trên đường đi. Bạn sẽ có một thời gian thú vị hơn nhiều với những điều này.


3
Tôi không đồng ý về điều đó như là một khái quát. Đi từ cuộc sống dễ dàng của java / C # / python, v.v. đến một thế giới phức tạp hơn của C và C ++ không phải là điều dễ dàng. Nếu bạn thực sự bắt đầu học ngôn ngữ lập trình, học C và C ++ rất khó, nhưng sẽ mang lại rất nhiều lợi ích. Nếu sau này bạn muốn lập trình trong java, C #, python, v.v. thì việc thay đổi đó dễ dàng hơn rất nhiều so với việc chuyển từ chúng sang C hoặc C ++. Tóm tắt: C / C ++ sẽ khó bắt đầu hơn, nhưng sẽ giúp việc thay đổi sang bất kỳ ngôn ngữ OO nào khác dễ dàng hơn.
martiert

2
C ++ là nền tảng tốt nhất để bắt đầu. Lập trình rất phức tạp và cuối cùng bạn phải làm việc với một phần cứng. C ++ là một cách tuyệt vời để bắt đầu học mà không có cảm giác an toàn sai lầm.
Coder

Câu hỏi của op hoàn toàn dựa vào mục đích của anh ấy / cô ấy với sự phát triển.
Độc lập

1
Tôi không đồng ý với điều này. Học C ++ có một số lợi thế và giúp việc học các ngôn ngữ khác như Java và C # trở nên dễ dàng hơn.
Anthony

2
@Dhananjay: C ++ khó hơn nhiều lần so với java ... Java giống như một chiếc xe đạp trẻ em, một phiên bản cực kỳ đơn giản của C ++. Chiếc thứ hai sẽ là một chiếc xe đạp không rườm rà mà không có phanh. Nếu bạn đã tìm thấy java khó khăn, C ++ sẽ là một nỗi đau. 2 xu của tôi.
dagnelies
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.