2010-08-13 58 views
6

夥計們,我需要找到一個像codingbat這樣的好網站來「再次學習」C++。我在學校學到了它,但我從來沒有認真對待過。我不在尋找類似於歐拉計劃的東西,因爲它專注於數學問題。我需要真正關注C++原理,特性和工具。C++編碼類似網站

+0

thanx爲鏈接。我已經學習了Python和Java,它將很好地去除一些灰塵和鏽蝕。 – 2010-08-23 13:04:40

回答

11

我不認爲這樣的網站存在,我懷疑它永遠會。原因在於C++是巨大的 - 我的意思是reeaallllyyy巨大。
當你開始專業編寫C++代碼(即每週40小時),並花1或2小時學習有關C++ 每天(即每週5-10小時)的新內容時,閱讀書籍和文章, 如果不是幾年,你將需要幾個月的時間才能成爲一名真正的專業C++程序員 - 假如你的工作不需要你學習任何第三方API,新工具,新技術以及什麼都不會讓你從學習中分心C++。
幾年來,我已經爲已經接觸Java一年的學生教授C++。在4-5個月,12-15次講座中,至少在實驗室中兩次,我已經設法從「你好,世界!一直到模板元編程的簡短介紹。每個知道該範圍內所有區域的人都會告訴你,在此之後,他們仍然是血腥的新手。 (哎呀,我使用C++的時間超過15年,賺取我的錢編寫C++代碼> 10年,,並且仍然幾乎每週都會學到新的東西。這甚至沒有考慮到大量的東西傾倒在我們身上按照新的標準,這個標準已經「幾年了」)。

由於爲了學習C++而需要覆蓋的領域非常龐大,而且由於C++已經足夠陳舊,所以在涉及到哪些標準習慣用法和「最佳」方面,它的程序員可以分爲幾代「他們瞭解到的做法,最後是因爲(再一次由於其難以置信的龐大性),新技術不斷被發現和發展(模板元編程,現在是C++的一個非常重要的特性,是沒有人計劃的事故),C++社區成語和實踐方面的意見並不像Java社區那樣緊湊,並且很難作爲一套幾十條規則進行溝通而不會引起激烈的討論。
(我認爲的事實,有幾種不同非常好,推薦最佳實踐書列出每個拇指幾十規則,而事實上,他們中的一些管理,以後來獲得補充更多最佳實踐書,字面意思是關於這一點。)

你會發現很多專業的C++程序員只喜歡使用C++提供的30%。例如,許多人只是將它用作OO語言,錯過了模板(可能除了STL),例外和其他非常有用的東西。但是C++是一個多範例語言。它支持面向對象編程以及通用編程,生成式編程,大量函數式編程以及其他一些範例。在這些範例相結合的地方,它變得最強大。


那麼我的建議是什麼?

看看The Definitive C++ Book Guide and List

首先讓你從初學者的書中挑選。既然你說你已經接觸過C++,我推薦使用Andrew Koenig和Barbara Moo的C++。這是一個很好的介紹,對於改變教學C++的方式來說,這個介紹不夠好,但它的學習曲線非常陡峭。另外,有250頁,這只是一個簡短的介紹。
到另一種做法可能是要麼大師Stanley Lippman的C++入門(其中,在1000頁,詳細地討論了同地)或布魯斯Eckel的思考在C++(我不知道)或Bjarne的Stroustrup的經典The C++ Programming Language(also 1k pages)or his latest book,Programming - Principles and Practice Using C++(我還沒有看過)。
這些書有足夠的任務,讓你忙一會兒。添加一些你自己的東西,你可以忙着學習幾個月。

然後慢慢地沿着清單走下去。

下一個C++標準,目前普遍預計,2011年將增加一些具有挑戰性的概念的語言(如右值引用)和一個大大擴展了標準庫。 (目前的草案有幾乎是最後一頁的的兩倍)。不幸的是,由於該標準尚未完成,因此沒有任何書籍可以教授它。這一切都在文章和在線討論(儘管維基百科有a pretty good article about it)和這一切都意味着流利的C++程序員,而不是C++新手。不幸的是,沒有一篇文章將C++ 1x教給C++新手。恐怕需要幾年時間才能在幾本推薦的書籍中選擇。

別忘了C++ FAQ,這是一個非常好的(也是非常可讀的)最佳實踐(及其理性)的在線集合,儘管它絕不是介紹性文本。

+0

+1 for C++ FAQ,這是一個很好的複習列表。 – Brian 2010-08-13 20:12:58

+2

C++很複雜,但是爲什麼「常規」的C++程序員應該熟練掌握模板元編程?你能否指出一個例子,模板元編程使開發人員能夠做其他方法無法做到的事情? 對於常規應用程序開發,不需要知道整個C++標準。瞭解語言的陷阱就足以瞭解它(這本身就非常重要),以及目前用於該項目的基本庫。 – Schedler 2010-08-13 22:37:13

+0

@Schedler:「你能否指出一個例子,模板元編程使得能夠做其他方法無法做到的事情?」在編譯時執行算法意味着,如果在開發者的機器上沒有失敗,它也不會在客戶端上失敗。如果你製作的應用程序要安裝在幾百萬臺臺式機上,那麼這個應用程序的價值幾乎不可估量,幾乎是值得的。當然,這並不意味着每個人都必須能夠做TMP。但是,如果您將C++視爲面向對象的語言,那麼您就錯失了很多。 C++是一個... – sbi 2010-08-14 10:09:03

3

實踐中沒有替代品。

在你的機器上找到你想要的程序(也許和計算項目中行數的東西一樣簡單),然後用C++編寫。

我希望我能告訴你,我有一個很棒的資源,可以告訴你書中的每一個C++技巧,但事實會被告知,你是那個資源

練習。從自己的錯誤中學習。你是你最好的老師。

+0

這個建議與問題中鏈接的網站有什麼不同呢?確切地說,只有它已經選擇了一套可能被認爲對學習語言有好處的例子呢? – sbi 2010-08-13 20:06:24

+0

@sbi - 正如您在答案中提到的,您每週仍在學習新東西。有沒有一個網站教你的東西,或者你是否在學習它,因爲*你*想要學習它?你的文章體現了我的觀點 - 你是你最好的老師。 – riwalk 2010-08-16 15:45:56

+0

現在我主要通過討論和其他人在SO等地方的答案來學習。 – sbi 2010-08-16 18:40:27

1

Sphere Online Judge看起來好像可以和C++一起工作(還有其他一些語言)。它不像CodingBat那麼簡單,但會有更復雜的問題。