狂補計算機基礎知識,讓我上了癮_風聞
越国居民-2021-02-28 22:46
掘金的小夥伴們,大家好,我是沉默王二。最近我在狂補計算機基礎知識,感覺有點上癮!以前覺得很枯燥的知識,現在竟然有點香!不知道為什麼。
我算是科班出身,大學的專業就是計算機網絡,不過老實説,在實際的開發中,大學的很多課程,要麼“用處”不大,要麼可以換個方式,更高效的學習。
其中的原因,一方面是實際開發更關注知識的“實用”,另外一方面,大學的教學確實和產業有些脱鈎。所以我就從實際應用的角度出發,重新來梳理一下計算機基礎方面的知識。
01、數據結構
毫無疑問,數據結構對一名程序員來説非常重要,還是那句話程序=數據結構+算法,這種説法無論放在什麼時候都是成立的。
大部分的數據結構課程,關注的重點都在如何從數學上實現一個數據結構,但在實際開發中,大部分主流語言都已經內置了常見的數據結構,比如説 Java。也就是説,對於大部分程序員來説,實際開發中,很難有需求要從零開始實現一個數據結構。因此我們只需要做到下面幾點。
1、熟悉常見數據結構的概念,比如説數組、堆棧、鏈表、哈希表等。
2、瞭解常用數據結構之間的差異,比如説 ArrayList 和 LinkedList,我在之前的文章中有詳細説明過,可以點擊鏈接去查看下。
3、關注常用數據結構的外圍算法,比如説如何對 List 和 Map 進行查找。
4、關注數據結構使用中容易出錯的地方,比如説線程是否安全等。
…
B 站上浙江大學的一個數據結構的課還不錯,很系統很經典,適合小白入門。
視頻地址如下。
02、算法
以我接觸的領域來説,大部分普通的業務系統都不會涉及到太複雜的算法,因此我沒有在算法上投入過多時間。
但如果你在一些特殊的領域,如果算法跟不上,可以説是“寸步難行”,比如説圖形處理領域,無論是圖像的變化還是增強,無一例外都要用到矩陣變換,因此就必然涉及到線性代數的內容,再往深處學的話,必然會牽扯出更多的知識。
所以學習算法要視情況而定,如果想走算法崗,那麼《算法第4版》、《算法導論》、《數學之美》、《編程珠璣》、《劍指offer》這些書都要耐着性子啃一啃。電子書可以在下面這個 GitHub 倉庫上找得到。
順帶再推薦一份阿里大佬的算法刷題筆記吧,在 GitHub 上已經有 13.3k 的 star 了。裏面的每道題都寫了解題思路,是通過 GO 語言實現的,每道題都 runtime beats 100% 了。
在線閲讀地址如下所示:
03、設計模式
我認為設計模式是初中級程序員邁向高級程序員的必經之路。有不少程序員,前期衝勁十足,但後繼乏力,都是吃了設計模式的虧。
在工作的前幾年,大部分程序員都處於熟悉編程語言的階段,也就是處於“技”的階段,隨後就要進入“術”的階段了。在編程領域,“術”的典型代表就是“設計模式”。
我自己推薦的一本書是《設計模式之禪》,代碼是用 Java 實現的,讀起來比較輕鬆,也更符合國內程序員的閲讀習慣。
另外就是我上次推薦的 Refactoring Guru 網站,裏面附帶的圖片非常精美,閲讀起來的視覺效果會比較豐富。
在線閲讀地址如下所示:
離線版可以通過下面這個鏈接下載(無套路,不需要解壓密碼):
04、軟件工程
實現一個軟件系統的過程,不僅只有編碼,還涉及到項目安排,團隊協調等一系列非技術因素,如果想從一名程序員走向管理崗,成為 team leader 或者開發經理,軟件工程方面的知識就必須得跟得上。
這裏我推薦幾本不錯的經典書,其中有一本鄒欣老師的書,他剛出任 CSDN 副總裁,希望 CSDN 能在他的入駐後變得更好一些。他這本書的書名叫做《構建之法》,我看過,還是很不錯的。
另外還有兩本必讀,就是《人月神話》和《人件》,雖然有了歲月的痕跡,但依然值得深讀。當然,關於軟件工程,最好的學習方法是觀察,觀察你所在的團隊是如何處理工程問題的,然後思考,最終形成自己的方法觀。
電子書可以在下面這個 GitHub 倉庫上找得到。
05、架構 & 設計
要想寫出一個好而美的程序,需要經過三個階段。
第一階段,有紮實的基本功,簡單點説,就是要做到語法熟練、框架熟練,成為一名能夠完成開發任務的“碼農”。
第二階段,從“碼農”到“工程師”,在局部上,不僅要能夠實現功能,還能關注功能之外的維度,比如健壯性、低耦合、可擴展等指標。
第三階段,從“工程師”到“架構師”,不僅在局部上追求一個模塊的好壞,而且還要從整個系統層面去掌控,合理安排資源的優先級,保證整個系統不會出現腐敗等等。
要想成為一名優秀的架構師,除了自身的努力,也需要一點點運氣,但靠讀書可能不夠,但這些經典書籍還是要閲讀的,能給日常的工作帶來巨大的幫助。
《代碼大全》《重構:改善既有代碼的設計》《設計原本》《大型網站技術架構核心原理與案例分析》
電子書可以在下面這個 GitHub 倉庫上找得到。
最後
技術這條道路並不好走,不僅要學習很多新技術、新框架,還要及時補充必要的計算機基礎知識,底子硬的同時還要學會擁抱變化。
學習的過程,就好像登山一樣,大概有 80% 的人在這個過程中會掉隊。那麼請相信我,只要目標明確,努力加上堅持,再加上一點點好運氣,你就能登頂!