以我的體會,弄懂了散離數學之后,我的編程能力就開始突飛猛進了。如果發現看數據結構看不下去,請自學一下離散數學。
CS專業的能力不在于編程能力源碼,而是在于計算機科學本身的理論。如果僅僅是為了做一個coder,那就白費了四年的專業課程了。
數字邏輯、計算機組成原理、微機接口、計算機體系結構、操作系統。
如果只談狹義的編程,以上專業完全用不上。這就難怪現在的coder整天只跑去寫js和php。現在能定制Android的人為什么能吃香?能編譯和優化內核的人為什么能超越99%的程序員?為什么現在很火的如機器人、無人機等領域急需要軟硬雙修的人做系統設計師?如果沒有弄懂以上專業,連門都摸不到。
離散數學、數據結構、算法分析、編譯原理、數據庫原理。
上述五門課是寫好程序的重要基礎理論。如果發現自己的程序怎么寫也寫不好,原因就是理論不過關。對著別人的開源項目,照貓畫虎也許能改出不錯的代碼,但人家為什么要這樣設計,這樣的代碼結構為什么會很優秀,優秀在哪里。就說各種數據的關系,人家高手設計的數據表關系清晰,不會有冗余,而專業不過關的孩子,可能同樣的數據在程序中有N份,更新起來不僅慢源碼,而且常常因為訪問沖突導致程序死掉。
計算機科學專業之所以稱為計算機相關諸多專業設置中的“科班”,原因就是在于它的系統性,它是專門研究“計算機”本身的,而編程能力僅僅是其中之一。對于科班出身的程序員,完全不用擔心要學習一個全新的編程語言,完全不用擔心接觸一個全新的系統平臺。以上十門課程就是萬變不離其宗的“宗”。所有的API都可以查手冊,所有的平臺技術和缺陷都可以通過網絡加以學習,但唯獨系統分析和設計能力是沒辦法的。想要有精巧高效的設計,沒有對計算機硬件系統和軟件系統的原理有深刻的理解,是完全做不出來的。
像計算機圖形學、網絡技術等則屬于細分專業,應用面較窄,屬于那種用到才學也不遲的專業,相對而言不太會影響對計算機系統的理解,因此可以稍微放低一點優先級。
而對于軟件工程這一課程,這門課程跟個人的編程能力沒有什么關系。可能大多數程序員不會覺得有什么意思。對于沒有在大型團隊中有過經歷的講師,能講好這一課程是有困難的,更不用說學生了。至于我當年學這門課程的時候,是一直心里犯嘀咕的,有很多問題是直到進入了企業,接觸了CMM才得到解決。
計算機科學本身帶了”計算“兩字,如果往深處研究,其實一切都離不開數學。往往有很多應用的問題,到了最后都歸結為抽象建模的問題,數學模型有了,算法也就有了。所以如果發現某些人的程序特別簡潔,可能要研究一下人家的數學水平是不是比較高。這也是回應本文前面的答案:數學很重要,想要程序寫得好,請學一下離散數學。