談談一些學習心得

allentofight發表於2020-02-22

最近不少讀者加我探討了一些演算法,Java 或如何看書等學習方面的困惑,我覺得這些都挺有共性的,所以就想著結合自己的經歷來談談有關學習的一些話題,希望能給讀者一些啟發。

提升自己的起點

先簡單介紹我自己,我大學是雙非普通一本,非科班出身,目前在某獨角獸公司擔任技術專家職位,相信大多數人的出身和我一樣,普通院線畢業,想渴望著能一步步走上技術專家乃至更高階別的職位,那既然是普通院校畢業,與那些 985 院校科班出身的同學相比本身就有天然的劣勢,所以我們就更要提升自己的起點了。

何謂提升自己的起點,比如對於技術人員來說搜尋資料就應該用 Google, 而不是百度,查不到就去 Stackoverflow 提問,大部分資料用英文都能搜到,日積月累,你的英文水平就算再蹩腳也能完成華麗蛻變,為什麼要強調英文水平呢,現在移動網際網路時代,各大主流平臺 iOS, Android,甚至一些領先的框架如 Flutter 等全是國外出的,第一手資料全是英文的,所以如何用英文查資料,無壓力讀取英文官方文件這是技術人的基本素質,再者就算是翻譯難免也有瑕疵,所以一定要持續提升自己的英文水平,堅決用 Google!

再比如大多數人學習可能主要通過各種部落格來學,這樣確實可以學到不少東西,但是部落格的問題是各種知識點比較散,而且多數是作者對知識的提煉和總結總結,總結的過程中可能省略了很多知識點,也漏掉了書中的一些精華,所以如果要提升自己,系統地構建自己的知識體系,一定要看書!看書確實是一件很費力地事,但長期來看,對你知識體系的構建大有裨益!看書一定要看好書,怎麼去找好書呢,推薦大家看看圖靈社群(www.ituring.com.cn/ ) 很多書都很經典,也可以去豆瓣上搜搜那些高分書籍,看看底下的評論到底好在哪,買東西我們都會貨比三家,更何況一本好書對你的成長大有裨益,所以值得你多花點心思來挑本好書!另外值得一提的是一開始很多人入門可能摸不著門道,這時候看視訊快速入門是沒問題的,但後期一定要回歸到書本的學習中來!看書是實現知識技能充分必要條件!

再舉個我自己的例子吧,目前我一直在運營著公號,堅持原創!一週至少發一篇精品文章,其實我也可以多多轉載下別人的文章多吸點粉,但我沒有這樣做,轉載只需要五分鐘,確實方便,但對我個人寫作能力地提升沒有任何幫助!所以我一直堅持著原創,努力地寫文章,這樣雖然很苦,但對自己寫作能力的提升,邏輯思維的構建長遠來看幫助很大!這就叫提升自己的起點。

提升自己的起點會帶來什麼效果,這裡給大家介紹一下複利曲線

談談一些學習心得

前期的增長勢頭非常慢,但日積月累,到達某個拐點之後,增長就如火箭上升一般,勢不可擋,就像我另一個做公號的朋友 cxuan 一樣,前面幾十篇文章無人問津,最近寫得幾篇文章帶來的粉絲量突然爆發,其實也是因為之前的幾十篇文章給他帶來了足夠強的寫作能力,奠定了強大的寫作基礎,所以現在就像上面的後期的複利曲線一樣,勢不可擋。所以堅持提升自己的起點長期來看一定能給自己帶來足夠強的複利!

底層能力很重要

什麼是底層能力,演算法,資料結構,作業系統這些就屬於底層能力,這些為什麼重要,這些是上層語言,工具的根基!這些屬於心法,內功,學好之後對你後期勢能的爆發大有裨益!內功很重要,工具不重要!不少人誤把工具用得熟練程式當作自己資本,甚至在 V 站上看到一個人對剛入職的同事不會用 git 而大加吐嘈,這是大錯特錯的,工具為什麼不重要,想想楊過在武功大成後用玄鐵重劍和木劍對他來說差別大嗎,對於一個內功深厚的人來說,工具的掌握只要稍微看下文件,Google 一下即可掌握,信手拈來!內功決定程式設計師的上限,而工具的掌握甚至連下限都不算,內功最重要。

再舉一個和大家工作息息相關的例子,曾經一個人來我司面試,我面了之後覺得不錯,但上司面試之後覺得人不夠聰明,所謂不夠聰明指的是給出一道相關設計題,在多方引導下仍然沒有思路,所以最後沒拿到 offer,所以大廠為什麼喜歡考慮演算法,我在之前的文章裡也說過了,其實就是考你的構建模型,修改模型的能力,這樣是判斷一個人是否聰明的重要標準,所以掌握演算法這些底層能力十分重要,演算法的學習很枯燥。學習演算法最好先掌握理論,掌握之後再去 leetcode 上多刷下題,學習演算法理論建議大家可以學學極客時間上王爭老師的「資料結構與演算法」教程,對每個點講得都很透徹!再結合吳師兄的動畫題解與自己的多加練習,相信大家掌握演算法不成問題。

多讀原始碼

要掌握好一個框架,學習它的底層原理,讀原始碼是必不可少的,這樣才能在面對多個框架的選型時根據框架的優劣性做出取捨,同時多讀框架的原始碼你還會對它底層的思想有更深刻的理解,能夠做到知其然,更能知其所以然,舉個簡單地例子,在 Java 中有一個 Arrays.sort 的方法可以對陣列進行排序,一開始我以為是個簡單地快排,讀它的原始碼之後才發現它雖然是用的快排,不過它用的是 dual-pivot 快排,這就讓我產生了深厚的興趣, 後來瞭解到這個 dual-pivot 快排比經典快排節省了 12% 的元素掃描,掃描元素的個數這種新的演算法把記憶體的流量的因素考慮進去,比較適應新時代。看到一種框架可以不斷地引出新的知識點,深挖這些新知識點,這樣框架的優劣性也就吃透了。

曾經做 iOS 的時候國內優酷就有一個大神 ibireme 通讀各類框架原始碼然後設計了 YYKit 等框架,引起轟動!甚至引來 Facebook 挖角,所以通讀框架原始碼對於提升自己的能力非常有效!那怎麼讀一個框架原始碼呢,這又是一個大的話題,後面我會結合 HttpClient 的原始碼閱讀來談談我的一些心得體會

以教為學

學完了某些知識點,怎麼確定自己就掌握它了呢,可以試著把這些知識點寫成部落格,在寫部落格的過程中要反覆思考這些知識點怎麼讓小白也看得懂,如果寫出來之後小白也看懂了,那麼基本可以肯定這些知識點可以算掌握了,同時在寫部落格的過程中,如果有問題,讀者說不定也會幫你指出來,這樣對自己知識的盲點是個很好的補充,寫部落格最好的時間是十年前,其次是現在!強烈建議讀者現在都開始寫部落格,一方面是對自己知識體系的一個梳理,另一方面也能與讀者探討,一舉兩得!

再談 Java 學習

由於我的主業是 Java ,所以也有不少人來和我交流 Java 的學習,這裡推薦幾本書吧

新手必備 1、《Java 核心技術:卷 1 基礎知識》 對於新手來說非常友好的一本技術書,也是 Sun 公司的官方用書,對 Java 的基礎有深入剖析,初學者必讀! 2、《Head first Java》 Head first 公司出品的書都非常耐讀, 這本書對 Java 的各種基本概念的講解非常到位,清晰易懂!推薦閱讀英文版哦,如果你英文不好,更要閱讀這本書了,還記得我們上文提得:請提升自己的起點嗎,剛好可以通過讀取這本書要慢慢地養成讀取英文書的習慣,技術書籍其實英文並不是很難,要多讀讀,養成讀取英文版書籍的習慣

進階 1、《深入理解 Java 虛擬機器》 要進階一定要對垃圾回收原理, JVM 調優,位元組碼,Java 執行緒模型有較清晰地認識,這本書可以說是這些補齊這些知識點的不二之選!精典書籍,誰看誰知道! 2、《Effective Java》 這樣書對如何寫好 Java 總結了很多有用的知識點,也是精典書籍了,必看 3、 《Java程式設計思想》 這本書可以說是 Java 程式設計的聖經了,要學好 Java 就繞不開本書,豆瓣評分 9.1 分,也是必看書籍,不過不推薦小白一開始就看這本書,建議還是先看完上述所說的新手必備書籍後並且閱讀一些框架的原始碼或工作過一段時間後再看,對裡面的知識點體會會更深

暫時就推薦這麼多吧,其還有一些像《Java併發程式設計實戰》,netty 等書籍等進階到一定階段後其實也可以看看,不過這些都是後話了,大家啃完上面的幾本書對於再去學其他書問題不大。

身為 Java 後端開發,只瞭解 Java 就夠了嗎, 至少你要對網路知識,MySql 這些也要做一定的瞭解吧,所以 《TCP/IP 詳解》《高效能 Mysql》也是你進階的不二書籍,至少要對 TCP 的慢啟動,擁塞機制有所瞭解,要對索引,如何優化 Mysql 效能有一定的瞭解吧。可以先對後端工程師應該具備哪些能力畫出一個技能樹(如下圖),然後再對這個技能樹上的每個點再各個擊破!

談談一些學習心得

再談學習

前面說了多次看書的好處,這裡也推薦大家學習一下極客時間的教程,我基本上每出一個教程必買,有人會說,你看得過來嗎,其實我們都陷入了一個誤區,買這些教程一定要看完嗎,其實只要它的的某個知識點能幫助到你,你就賺了!能完整地看完當然更好,但如果暫時沒時間,可以利用碎片化時間選擇對自己有幫助的點先學習啊,只要某個點對你有啟發,你就賺了!很多面不都是由這些點一個個組成的嗎,將這些點串聯起來,這樣就能逐步構建自己的知識體系和學習框架。

談談一些學習心得

最後

前面談了很多學習方面的一些個人體會,這只是我個人的一些學習感悟,希望對大家有幫助,最後歡迎大家關注我公號一起討論交流哦

談談一些學習心得

相關文章