備戰C++找工作的學習路徑

1 前言

寫這篇文章,主要是因爲今天有朋友聊到打算從測試轉C++開發。一方面幫助朋友梳理看書路徑,提供一個看書,應聘的方案;另一方面,也是梳理自己思路,以鳥瞰的方式,幫助自己更全面地檢視知識和經驗。

受限於自己專業閱讀量,加上本身沒有達到對編程的狂熱癡迷程度,所以,此處我不會列出很多書,只是描繪C++世界中的一個小國度,並提供一些通往這個國家的路徑。至於其他C++國家的事情,我只是簡單概括一下。

2 夯基礎

1 看書

《C++ primer plus》/ 《C++ primer》
這兩本書基本內容是一樣的,只是有一本是面向初學者,另一本是面向中高級開發人員,即講的深度略有差別。其實具體選哪一本並不重要。因爲作爲初學者,兩本書中的大部分內容你都用不上,或者至少在讀第三遍的時候,才能用上。

初學者應該瞭解,C++有哪些語言特性,有哪些概念,有哪些特有的工具。比如:C++基本類型,如何定義類,while/for/do…while/if…else/switch/const/指針/引用/左值/邏輯運算/加減法運算,文件操作和流概念等等。這些是開發中經常用的重要概念,因爲凡是類C的開發語言,都需要這些。然後,你利用上面這些工具,組裝成一臺可以處理信息的機器——程序。

所以,初學者在看書的同時,需要不斷寫程序,熟悉概念,用法。讓開發場景對應工具,對應開發套路。

2 練習

上午朋友問了我一個Vim的問題,從這個問題中,我想之前碩士導師和領導的一直強調的概念:

先能用,再好用

翻譯過來就是,先讓基本程序的基本功能都跑起來,然後再進行優化,重構。那麼學編程我覺着也應該是這個思路:

1 用IDE迅速讓程序跑起來,產生成就感,增強信心。
2 梳理程序中的各個部分,進行改進。
3 梳理編譯流程、執行流程,更加深入瞭解整個開發涉及的知識。

這樣,學習就變成了一個迭代前進的過程。正反饋也能更好地促進學習,讓自己不斷進步。

3 拓展與提高

1 學習算法

當我們大概知道怎麼用C++程序以後,就可以繼續前進,看算法相關的書。平時開發,看起來用不上什麼算法,其實你時時刻刻都在用算法的思路,分析問題,解決問題。所以我推薦下面這本書:

《算法》Robert Sedgewick著

這本書非常厚,內容也比較少,還特別貴,但是它像講故事一樣,把一些經典算法和數據結構娓娓道來。鑑於這本書性價比較低,我再推薦一本書:

《數據結構》 嚴蔚敏著

在熟悉書中算法的同時,一定要動手寫寫代碼,實現書裏面介紹的算法。一面肯定有一道算法題。

2 應用算法

現在我們掌握了基本的算法理論,我們還要進一步對這些知識應用,解決問題。所以我們就需要刷一刷算法題。現在網上有很多在線提交網站,像杭電ACM,leetcode, 牛客網等等。

邊看算法邊刷題,邊刷題邊學習新的算法知識。

這時,簡單的數據結構,已經無法滿足我們對複雜問題的求解,所以我們就可以利用現有封裝好的庫,使用別人已經實現的基礎算法,作爲基礎工具,實現更高級的算法。推薦學習STL和Boost庫。

4 進一步拓展

上面我們已經熟悉了C++的基礎知識。那麼進一步,我們就要向外擴展,探索更廣闊的領域。這時候,我們就要思考,C++能幹啥。

C++保證了執行效率、開發效率、開發自由度三者的和諧與統一,所以C++通常應用於性能要求較高的場景,比如圖形渲染、底層交互等。

比如,希望進行客戶端開發,那可以瞭解Qt,MFC開發框架。希望進行網絡開發,就可以看看Ngix庫的實現。希望進行圖像處理,可以看看VTK,OpenGL這些。

由於我目前實在做Qt開發,所以推薦下面兩本書。當然,其他書也不錯,看一本就行,入門以後,直接看文檔會更好。

《C++ GUI Qt 4編程(第二版)》 閆鋒欣
和霍亞飛的Qt開發。

5 C++以外的事情

因爲C++不像Java,有一個強大的生態系統,想用什麼工具,都有現成的包提供。很多時候,我們需要了解一些計算機專業相關的知識,比如操作系統、計算機組成原理、計算機網絡這些。所以,我推薦下面兩本書。這兩本書描述了C++的外部環境,而這個環境,與我們平時開發息息相關。

《操作系統》 湯小丹
《計算機組成原理》 唐朔飛

同時,如果使用的是Linux開發環境,爲了快速入門,我推薦下面這本書。這本書也是又厚、又貴,知識量也比較大。所以,一方面,這本書要多讀幾遍,還要將不同知識點進行分類,把Linux中的各個組件,和湯小丹的書對應上,達到融匯貫通的效果。這本書比較好的一點,是全書給出比較單一的實現,不會像APUE,把各種實現和不確定都說出來。有時候不知道比知道可能更好。不知道,心緒不會被打亂,知道了,很可能會浪費大量時間,抓不住重點。

《Linux程序設計》 Neil Matthew著

6 最後

我說下具體的讀書策略:

《C++ primer》 -> 《算法》(刷題)《程序員面試指南》 -> 《Qt開發》 -> 《Linux編程》,《操作系統》,《計算機網絡》,《計算機組成原理》

上面這幾本書雖然大致有先後順序,但不是非要只有看完第一本,纔看第二本。也不是非要看完書中前面的內容,纔開始看後面的內容。我們要學會在掌握一些知識的情況下,不斷勇敢取探索相關內容。一點一點將知識積累起來,然後再進行整合,形成自己的內在智慧。

另外需要注意,工程類的書籍,從來不是一蹴而就地看完一遍,就可以落灰,等着賣廢品。而是需要不斷翻閱,強化,精煉知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章