2010-08-13 61 views
6

Các bạn, tôi cần tìm một trang web tốt như codingbat để "tìm hiểu lại" C++. Tôi đã học nó ở trường nhưng sau đó tôi chưa bao giờ sử dụng nó một cách nghiêm túc. Tôi không tìm kiếm một cái gì đó như Project Euler vì nó tập trung vào các vấn đề toán học. Tôi cần một cái gì đó thực sự tập trung vào C++ nguyên tắc, chacteristics và các công cụ.trang web giống như mã hóa cho C++

+0

thanx cho liên kết. Tôi đã học được Python và Java, và nó sẽ rất tốt để loại bỏ một chút bụi và rỉ sét. –

Trả lời

11

Tôi không nghĩ rằng một trang web như vậy tồn tại và tôi nghi ngờ nó sẽ bao giờ. Lý do là C++ là rất lớn - và tôi có nghĩa là reeaallllyyy rất lớn.
Khi bạn bắt đầu viết mã C++ một cách chuyên nghiệp (nghĩa là 40 giờ mỗi tuần) và mất 1 hoặc 2 giờ để học các công cụ mới về C++ mỗi ngày (tức là 5-10 giờ mỗi tuần), đọc sách và bài viết, bạn sẽ cần vài tháng, nếu không phải năm, để trở thành một lập trình viên C++ chuyên nghiệp thực sự - không thể giả định công việc của bạn không yêu cầu bạn học bất kỳ API của bên thứ ba nào, công cụ mới, công nghệ và điều gì sẽ khiến bạn mất tập trung C++.
Trong nhiều năm, tôi đã dạy C++ cho những sinh viên đã có một năm tiếp xúc với Java. Trong 4-5 tháng, 12-15 bài giảng, và ít nhất hai lần thời gian đó trong phòng thí nghiệm, tôi đã cố gắng kéo chúng từ "Xin chào, thế giới!" tất cả các cách để giới thiệu ngắn về lập trình meta mẫu. Tất cả mọi người biết tất cả các khu vực được bao phủ bởi khoảng đó sẽ cho bạn biết rằng, sau này, họ vẫn sẽ là người mới đẫm máu.
(Heck, tôi đang sử dụng C++ trong> 15 năm, kiếm tiền bằng cách viết mã C++> 10 năm, và vẫn tìm hiểu nội dung mới gần như hàng tuần. theo tiêu chuẩn mới, đã được "chỉ quanh góc" trong nhiều năm).

Do kích thước tuyệt đối của lãnh thổ để trang trải để tìm hiểu C++, và cũng do thực tế là C++ đủ lớn để lập trình viên có thể được phân loại thành nhiều thế hệ khi nói đến thành ngữ tiêu chuẩn nào và "tốt nhất "thực hành mà họ đã học được, và cuối cùng bởi vì (một lần nữa do sự vô cùng đáng kinh ngạc của nó) các kỹ thuật mới liên tục được phát hiện và phát triển (lập trình meta mẫu, bây giờ là một tính năng rất quan trọng của C++, là một vụ tai nạn không ai đã lên kế hoạch), cộng đồng C++ ý kiến ​​về thành ngữ và thực hành không phải là nhỏ gọn như, nói, cộng đồng Java, và khó có thể được truyền đạt như một bộ vài chục quy tắc mà không làm dấy lên các cuộc thảo luận nóng.
(Tôi nghĩ thực tế là có rất khác nhau rất tốt và đề nghị Best Practices sách niêm yết vài chục quy tắc của ngón tay cái mỗi, và thực tế là một số trong số họ quản lý để sau này có được một bổ sung More Best Practices cuốn sách theo nghĩa đen, nói về khối lượng này.)

Bạn sẽ tìm thấy nhiều lập trình viên chuyên nghiệp C++, người vui vẻ chỉ sử dụng 30% những gì C++ cung cấp. Ví dụ, nhiều người sử dụng nó giống như một ngôn ngữ OO, thiếu các mẫu (có thể ngoại trừ STL), các ngoại lệ và các công cụ rất hữu ích khác. Nhưng C++ là ngôn ngữ đa mô hình.Nó hỗ trợ lập trình hướng đối tượng cũng như lập trình chung, lập trình generative, rất nhiều công cụ lập trình hàm, và khá một vài mô hình khác. Và nó trở nên mạnh mẽ nhất nơi những mô hình đó được kết hợp.


Vì vậy, lời khuyên của tôi là gì?

Hãy xem The Definitive C++ Book Guide and List.

Trước tiên hãy chọn từ sách của người mới bắt đầu. Vì bạn nói bạn đã có tiếp xúc với C++, tôi khuyên bạn nên Tăng tốc C++ bởi Andrew Koenig và Barbara Moo. Đó là một giới thiệu tuyệt vời mà không thể được ca ngợi đủ cho cách nó thay đổi dạy C++, nhưng nó đi kèm với một đường cong học tập khá dốc. Ngoài ra, với 250 trang, nó thực sự chỉ là một phần giới thiệu ngắn.
Một giải pháp thay thế có thể là số C++ Primer của Stanley Lippman (trong đó 1000 trang, bao gồm cùng một chi tiết) hoặc Suy nghĩ trong C++ (mà tôi không biết) hoặc cổ điển của Bjarne Stroustrup Ngôn ngữ lập trình C++ (cũng 1k trang) hoặc cuốn sách mới nhất của mình, Lập trình - Nguyên tắc và thực hành Sử dụng C++ (mà tôi chưa xem xét).
Những cuốn sách này có đủ công việc để giúp bạn bận rộn trong một thời gian. Thêm một số của riêng bạn vào đó và bạn có thể bận rộn học tập trong nhiều tháng.

Sau đó từ từ làm việc theo cách của bạn trong danh sách.

Các tiếp theo chuẩn C++, bây giờ nói chung dự kiến ​​trong năm 2011, sẽ bổ sung thêm một vài khái niệm khó khăn về ngôn ngữ (như tài liệu tham khảo rvalue) và một tiêu chuẩn thư viện mở rộng bao la. (Bản nháp hiện tại có gần như gấp đôi số trang làm trang cuối cùng). Thật không may, vì tiêu chuẩn chưa được hoàn thành nên không có sách nào dạy nó. Đó là tất cả trải rộng trong các bài báo và trong các cuộc thảo luận trực tuyến (mặc dù Wikipedia có a pretty good article about it), và tất cả đều dành cho người lập trình C++ thông thạo, không dành cho người mới sử dụng C++. Đó là, không may, không phải là một văn bản duy nhất ra có giảng dạy C++ 1x để C++ newbies Và tôi sợ nó có thể mất nhiều năm trước khi bạn có thể làm cho bạn lựa chọn giữa một số sách được đề nghị làm điều này.

Và đừng quên C++ FAQ, một bộ sưu tập trực tuyến khá tốt (và rất dễ đọc) về các phương pháp hay nhất (và lý do của chúng), mặc dù nó không có nghĩa là văn bản giới thiệu.

+0

+1 cho C++ Câu hỏi thường gặp, đây là danh sách bồi dưỡng tuyệt vời của gotchas. – Brian

+2

C++ rất phức tạp, vâng, nhưng tại sao các lập trình viên C++ thông thường phải hiểu nhiều hơn, ví dụ: metaprogramming mẫu? Bạn có thể chỉ ra một ví dụ trong đó lập trình meta mẫu cho phép các nhà phát triển làm điều gì đó mà các phương tiện khác không thể thực hiện được không? Để phát triển ứng dụng thông thường, người ta không cần phải biết toàn bộ tiêu chuẩn C++. Nó là đủ để biết những cạm bẫy của ngôn ngữ (mà, trong chính nó, là khá nhiều để hiểu), và các thư viện cơ bản hiện tại được sử dụng cho dự án. – Schedler

+0

@Schedler: "Bạn có thể chỉ ra một ví dụ trong đó lập trình meta mẫu cho phép [...] thực hiện điều gì đó không thể thực hiện được bằng các phương tiện khác không?" Thực hiện các thuật toán tại thời gian biên dịch có nghĩa là, nếu không thất bại trên máy của nhà phát triển, nó sẽ không thất bại trên của khách hàng hoặc. Nếu bạn đang tạo một ứng dụng được cài đặt trên vài triệu máy tính để bàn khác nhau, điều này khó có thể được đánh giá cao đủ và có giá trị gần như bất kỳ nỗ lực nào. Tất nhiên, điều này vẫn không có nghĩa là mọi người đều có thể làm TMP. Nhưng nếu bạn đang xử lý C++ như một ngôn ngữ OO, bạn đang thiếu rất nhiều. C++ là một ... – sbi

3

Không thể thay thế cho thực hành.

Tìm chương trình bạn muốn trên máy của bạn (có thể đơn giản như thứ gì đó đếm số dòng trong một dự án) và viết nó trong C++.

Tôi muốn tôi có thể nói với bạn rằng tôi có một tài nguyên tuyệt vời cho bạn thấy mọi thủ thuật C++ trong sách, nhưng sự thật được thông báo, bạn là tài nguyên đó.

Thực hành. Tìm hiểu từ những sai lầm của riêng bạn. Bạn là giáo viên giỏi nhất của bạn.

+0

Và lời khuyên đó khác với trang web liên quan đến câu hỏi như thế nào, chính xác là điều gì, chỉ có nó đã chọn một tập hợp các ví dụ mà, có lẽ, được coi là tốt cho việc học một ngôn ngữ? – sbi

+0

@sbi - Như bạn đã đề cập trong câu trả lời, bạn vẫn đang học những thứ mới mỗi tuần. Có một trang web nào dạy bạn những thứ đó hay bạn học nó vì * bạn * muốn học nó? Bài đăng của bạn minh họa quan điểm của tôi - bạn là giáo viên giỏi nhất của bạn. – riwalk

+0

Ngày nay, tôi chủ yếu học qua các cuộc thảo luận và câu trả lời của người khác ở những nơi như SO. – sbi

1

Thẩm phán trực tuyến Sphere có vẻ như nó sẽ hoạt động với C++ (và một loạt các ngôn ngữ khác). Nó không đơn giản như CodingBat, nhưng sẽ có nhiều vấn đề phức tạp hơn.

Các vấn đề liên quan