如何提高C++編程能力,以及為將來找工作做準備?

非計算機專業,但是課題完全是偏向計算機圖形學。所以大四下開始學習C++/STL,用OpenGL+MFC完成畢設。目前研二剛開學,自學了基礎的數據結構與演算法、計算機圖形學部分知識,可以根據siggraph上的文章實現他們的演算法,自己也完成了導師給的一個項目,正在準備paper,也開始考慮以後找工作的問題了。

現在的困惑是,雖然在做課題的時候,只要演算法搞懂了,編程實現並沒有太大的困難,但是覺得自己的C++代碼寫的很糟,比如在面向對象方面,我只是構建了一個類,很難去寫它們的派生類,代碼復用上做得很糟。還有C++的異常處理這塊也是完全沒有用到。針對現在這種狀況我應該如何提升呢?

最近也在關注招聘信息。關於C++的職位主要有PC客戶端開發、後台開發這些。因為我是非計算機專業的,沒有系統學習過計算機專業的課程,目前只知道C++、演算法以及數據結構必須紮實。其他應該彌補哪些方面的知識?學到什麼程度呢?比如說OS這塊,我對linux完全不懂,不知道應該去鑽研linux還是踏實學習windows,我對編程和鑽研技術都是有興趣的,但還沒有到geek的程度,否則也不會拿捏不定方向了。


http://zhuanlan.zhihu.com/vczh-nichijou/19796639

http://zhuanlan.zhihu.com/vczh-nichijou/19835717


你為什麼一定要代碼復用?你的項目真的需要代碼復用嗎?

「代碼復用「本身也不一定需要基類-子類,因為繼承真正的目的是為了提供運行時多態。你很可能只需要宏、模板,在編譯期定下來。

泛泛來講,對於新手,很可能需要設計模式的概念,但往前再走一步,有的時候又會進入濫用的狀態,為了模式而模式。我不知道你處在那個階段。


目前只知道C++、演算法以及數據結構必須紮實

這三個真紮實了,工作隨你挑。你的困惑其實在於這些並不紮實。

我建議是c++方面, c++ primer / the c++ programming language 二選一,一定看完一本。effective c++, effective STL,

演算法方面, 這個挺合適的,

Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne

coursera上還有課Coursera.org,他們是用java講的,不過代碼改成c++應該不難。

另外你搞圖形圖像處理,如果是模式識別之類的,除了你現在做的事情外,你可以做所有有關大數據的工作,比如搜索引擎,智能廣告,電商推薦等等等等

如果是類似photoshop那樣的圖形處理,那麼你的傅里葉變化,拉普拉斯變化應該會非常熟悉,如果這些熟悉的話,我可以認為線性代數的基本概念和微積分的基本應用已經完全掌握,這樣如果你非要用C++,除了本行之外,還可以去做通信。另外加點統計和概率的知識,你又可以去做上面我說的那些大數據的事情。

最後除非你是天才選手,否則代碼復用(設計模式)這種東西在沒有寫夠十幾萬行代碼,沒有經歷過需求快速變化的折騰下是很難理解的。


本人比較偏向於做Gui,使用C++/Qt

個人給你的建議就是努力做成一個項目,哪怕這個項目很小,你都有可能遇到各種問題(比如會用到演算法的或者資料庫的知識?),遇到問題的時候再去找知識並解決問題,比你不知道學習什麼知識盲目的去看書更有用

學會使用版本控制工具(SVN、Git皆可),每天堅持去寫去完善你的項目,並且在你覺得重要的部分已經每天的最後做好提交,並認真log。

~~~~~~~~~~~~~~~~~~~~~~~~~

項目選擇你最感興趣的,這樣才有幹勁。(遊戲編程?實用工具?app?等等選自己喜歡的)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果,導師放你(比較寬鬆),盡量較早的找個公司實習,會讓你更快的進步。


從你的描述來看,你保持現在這個樣子就是最好的方法,別亂上網聽大牛說怎樣才能做大牛之類的話,你的努力和天賦可以支撐你畢業後很快能找到工作,在工作三四年後一直維持個年薪十二到二十五萬之間的樣子(扣除CPI上漲因素),用某人的話說,這是命,得認


與題主情況非常相似。非計算專業但是博士課題選了個計算機視覺方向的題目,硬著頭皮做了四年多。演算法基礎和模式設計什麼的都是後來抱著書啃完的。期間也有過很多迷茫,懷疑,直到現在也對自己能力特別沒有自信,反正覺得我怎麼這麼理解題主您呢~~~!

覺得自己背景和題主像,所以分享一下心得,非科班技術渣做到這些也是蠻拼的:

1. 維護一個技術博客,至少積極更新github。 (準備好的簡歷都沒投,工作機會都是通過博客得到的,包括某高大上g公司直接通過博客聯繫給面試機會)

2. 讀經典和刷題(不然還能幹什麼。。。)

3. 實習。能進自己的理想公司當然好,但是如果不行,不要拒絕其他可能的機會。(搜搜領英中國區總裁沈博陽簡歷和他之前的一個演講搞,覺得很有立志。)

4. 做完整的個人開發項目,突出專長。題主研究圖形學,這個方向作出的東西都該挺炫酷的,既提升能力又吸引眼球。(今天帶一個小師弟,對學術的真愛,拒了大阿里的offer過來讀博。問他你個機械背景的怎麼過的面試,說之前被系統和網路問題狂虐後,說自己能寫演算法,被安排去問演算法,然後就稀里糊塗的拿到了研發工程師。)


推薦閱讀:

後台linux c/c++大型項目開發中 在windows下 大家一般用什麼工具編輯調試比較順手?
為什麼不給Python 這樣的解釋語言寫一個編譯器?
如何用C++語言開發 tiny Nginx並真正鍛煉C++的使用?
作為軟體在校生,自己如何去找軟體項目並著手去編碼?
用c++寫https客戶端和伺服器大體步驟有哪些?

TAG:演算法 | 編程 | C | 工作 |