个人学习方法分享
hi,大家好,今天來分享一下,我的一些學習經驗,希望對大家學習有幫助。
我的學習方法
學習計劃
核心思想:把自己像產品一樣打造,就像張一鳴經典語錄:run company as a product
制定目標
首先學習需要明確學習目標,學習之前,要把目標制定下來,一個月,三個月,半年,一年,三年等不同周期目標。
迭代計劃
分解目標,然后建立特定周期的迭代計劃,最終形成多個迭代,?不斷迭代自己。
每天學習安排
每一天時間安排,就像高中一樣,制定出一個時間表,心里有數,用來指導學習,不需要嚴格執行,大致就好,留一些緩沖時間,具體時間安排可以參考番茄工作法,一般每天至少盡量留一個小時給自己充電。
迭代計劃
之前用的一個敏捷開發工具 trello來實現迭代計劃,我設置10天為一個迭代周期,每個月結束后會進行總結復盤,是否達到迭代的目標。
這里tc是指什么,大家可以猜一下?
具體迭代看板:
每個卡片為一個具體任務,可以設置開發時間,設置任務狀態,check list是用來驗收任務-閉環:
trello軟件,在手機和電腦都可以用,是我最喜歡的軟件迭代工具(任務管理,團隊協作工具),知乎評價非常高,同樣可以用來迭代自己。
學習資料
書籍
很多經典書籍(后面有經典書單推薦),經典書籍可以讓我們更容易理解知識的本質,學習作者對技術的理解,和作者進行精神交流,有些章節我都會反復看幾遍,然后敲代碼去實現驗證。
博客網站
大多數知識點都需要上網查看,翻看各種博客網站,主要是看一下該知識點的內涵和外延,看一下別人是怎么理解的,后面有經典博客網站推薦。
極客時間
極客時間課程, 有些很經典,質量很高,我會選我想看的章節, 查缺補漏, 加強理解, 看一下其他大佬對這個知識點是怎么理解的, 有助于加深理解。
總結沉淀
我目前用來記筆記的工具 mindmaster 腦圖 比較好分類, 查找比較方便。之前有用文本記錄比較亂,看個人愛好, 這款軟件支持手機和電腦端同步使用。
比如學習TCP/IP協議后,就需要總結如下:
由于展開太大,這里取TCP節點展示看(由于導出圖片有大小限制,完整版更詳細):
不知不覺中總結很多知識:
這些其實可以算是個人知識財富,希望大家多總結。????????????????????????
????????????????????????????
讀過一些經典書單
1.? 深入理解計算機系統
計算機界的神書,底層開發的圣經,計算機基礎知識神作,建議多讀幾遍。
2.具體數學
計算機科學的神奇書籍,幫你建立計算機獨有數學思維,比如遞歸,組合,動態規劃等。
3. 編譯原理
本書作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界著名的計算機 科學家,他們在計算機科學理論、數據庫等很多領域都做出了杰出貢獻。本書是編譯領域無可替代的經典著作,被廣大計算機專業人士譽為“龍書”。
4 . 計算機程序的構造和解釋
書中使用程序設計語言Lisp的方言Scheme來解釋計算機科學的核心概念,包括抽象、遞歸、解釋器以及元語言抽象。具體而微地由宏觀到微觀給出清楚地輪廓與脈絡。
5 .?The C Programming Language
到今天仍然是C語言入門的首選,書非常簡潔優美,就像C語言本身一樣。
6.??深度探索C++對象模型
C++對象內存模型,從語法上看編譯器實現,學習C++必須要掌握的。
7.??深入理解LINUX內核
如果你想深入學習Linux內核,這本書是個很好選擇。
8.??深入理解LINUX網絡內幕
對Linux網絡子系統有深入分析,如果你要深入學習網絡,這本書是很好的選擇。
9.??UNIX編程藝術
本書主要介紹了Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗,而這些經驗對于理解Linux系統有非常大的益處。
10. 程序員的自我修養
了解程序編譯,連接,庫等程序運行原理,包含windows和linux系統,加強基本功修煉。
11.? 刻意練習
這本書深刻分析刻意練習背后的原理,用科學方法論證如何從新手到大師。
推薦好的博客
1.https://blog.csdn.net/dog250
dog250的文章都比較深刻,屬于網絡進階,可能不太適合入門,建議入門后,再看這里文章,會讓你醍醐灌頂。
2. https://blog.csdn.net/gatieme
操作系統優質博客,可以學習linux 調度相關內核知識;
3.http://www.wowotech.net
蝸窩科技,博客專注分享linux內核知識(偏嵌入式方向), 很多文章都非常精華和透徹,值得內核學習者學習;
4. http://bbs.chinaunix.net/
bbs.chinaunix的內核板塊,第一代內核程序員聚集地,很多大佬在這里分享內核知識,現在應該都是各大公司技術專家或者負責人了。
5.https://coolshell.cn
耗子叔個人技術網站,早期我喜歡的技術blog博主,一個樂于分享技術的大牛,尤其是分享的基礎知識,本人也很喜歡基礎知識;
6. https://blog.codingnow.com/
云風的blog,大多數和游戲相關,可以學習很多高性能編程技巧。
?
7.?C++博客
7.1 https://www.stroustrup.com
Bjarne Stroustrup,不認識的可以去面壁了,沒有他,就沒有我們現在的飯碗。Bjarne Stroustrup是丹麥人,目前任教于TAMU。他的Homepage和他的書籍The C++ Programming Language一樣,都是百科全書級的,如果你認真研究,你也會成為你同事或周圍人的C++之父。
7.2 https://www.fluentcpp.com
博客作者Jonathan Boccara是C++軟件工程負責人、博客作者和作家,專注于如何使代碼具有表現力,頂級C++高手。
7.3 http://scottmeyers.blogspot.com
Scott Meyers,不多介紹,世界上幾乎每個C++程序員都應該知道的名字,暢銷書:Effective C++,?More Effective C++的作者。博客長期更新,就憑Scott Meyers這個名字,就值得一讀。
7.4 http://www.modernescpp.com/index.php
現代C++編程大神,文章主打modern C++,讓你與時俱進;
7.5 http://purecpp.org/
應該是算國內頂級C++社區,舉辦多屆C++大會。博主為C++委員會成員
個人博客 https://www.cnblogs.com/qicosmos,也非常值得C++開發者學習。
8.http://www.yinwang.org/
王垠大佬博客,對編程語言理解深刻,如果還在學習編程語言語法,可以看一下這個博客一些文章;
個人學習經驗總結
此處為個人學習經驗總結,可能不一定適合你,但或許對你有些幫助,希望你取長補短,協助你找到自己的方向。
1. 學習一定要有目標,目標一定要有計劃(排期),計劃一定要有落地執行方案(迭代),迭代一定要有check list(結果驗證),最后根據結果進行復盤總結,這樣才能形成學習的閉環,然后不斷按照這個流程迭代自己,同時整個流程可能也會發現一些問題,比如拖延,比如時間估算不準等,這時候流程也需要不斷調整優化。
2. 學習中,真正困難的地方,是習慣問題,可能存在一些不好的習慣,導致不能專心學習,比如玩手機等,改變自己習慣是一件很困難的事情,如果你已經走投無路,或者你很想完成你的目標,做夢都想,那你必須對自己狠心一點,改掉自己不好習慣,學習的時候最好專注,找個安靜的地方學習,盡量不要被打擾。
3. 學習中,多去和別人交流,很多心中疑惑,很可能別人一句話就讓你悟道解開,和大神交流(可以書本,視頻演講,直播,線下技術講座等等),要學會虛心請教,大神對一些基礎概念的本質理解,會讓人醍醐灌頂,勝讀十年書。
4. 學習要有耐心,很多時候是需要花很多時間去學習一個知識點,一些知識點需要反復來回多看幾遍,要刻意去練習,大腦才會加深影響,慢慢地把各個點串起來,很多時候看代碼就是這樣,需要時間,我會慢慢在大腦中試圖關聯起來,最后才能恍然大悟。
5. 學習最重要就是堅持,這個比任何技能都重要,很多知識是需要花很多時間才能吃透的,而這個過程并不是循序漸進,很可能是某一天靈感爆發,或者悟道,而這個爆發又是你之前慢慢積累結果,所以很多時候,我們可能百思不得其解,很多人中途可能放棄了,覺得太難了,?如果我們非常想完成我們的目標,就要突破這些難點,咬牙堅持,總有一天會撥開迷霧,獲得真知,你會感謝當初堅持下來的你,這個過程是痛并快樂著。
6. 要學會思考,要學會多總結(輸出),對知識的透徹理解,才是我們最終的目標,而不是死記硬背,背概念,這需要我們不斷思考,不斷總結,所謂智慧就是這些思考的成果,這也是社會進步源泉;
7. 要學會分清重點,逐個攻破重點知識,時間有限,需要掌握28定律,了解一個系統,先要明白什么才是它的核心技術,其他只是輔助或者實現細節。
8. 要學會各種搜索技能(google,bing,百度,知乎等),學會查找各種經典資源,包括付費資源(csdn下載,百度文檔,購買課程),有時候不要舍不得,好的資料,猶如武林秘籍,可以助你一臂之力。
總之,要建立自己的知識體系,不斷迭代,查缺補漏, 把其他資源融入到自己計劃中 。
技術思考總結
多年工作經驗和學習經驗,分享一些技術思考,可能不一定準確,但希望對熱愛技術人有一些幫助。
1. 很多開源軟件,其實并不是很難,只要花時間,有耐心啃代碼,都會水落石出,源碼面前,了無秘密,這是進大廠的一個快速路徑。
2. 上層技術都是都是基于底層技術構建,找到底層原子操作,你也可以構建上層應用,比如docker基于Linux三大件(namespace,cgroup,ufs),不管上層應用如何變化,這些技術都不會過時,掌握這些核心技術,會讓你走得更遠,即使是開發應用,也會比其他人做得更好。
3. 計算機基礎知識(內存,CPU,緩存,網絡,文件系統),基礎思想(二分思想,緩存思想, ?面向對象,流水線,批量,遞歸,延后處理等),都非常重要,這些是決定你技術上限,只有深刻理解基礎知識,才能看問題看到本質,才能擁有強悍的實戰能力,才能在技術之路上走得更遠:
一類是解決問題的高手,保證業務可以穩定持續運行,基本功非常扎實,可以解決很多技術難題,最終這類人會成為技術牛人和專家,比如阿里的多隆大神,謝寶友大神,耗子叔-陳皓,Dog250,TK教主,Kevin David Mitnick等;
一類是代碼和軟件設計高手,輸出機器,保證產品可以快速上線,這類人最終會成為架構師或者負責人,比如求伯君,章文嵩,章亦春,張小龍,比爾蓋茨,Ken Thompson,Fabrice Bellard,Linus Torvalds,Jeff Dean等;
4. 學會把大系統分解成子系統,按專項逐個攻破每個子系統,收集子系統相關的資料,吸收他人的精華,有時候勝讀十年書,加快自己成長;每個專家大神,都是從菜鳥過來的,向大佬看齊,快速吸收他們的經驗,總有一天你也會修煉成功。
5. 團隊都需要各種人才,我們不可能樣樣精通,5v5團戰是需要大家一起配合的,一定要找到自己的位置,就算是輔助,也是世界級輔助,照樣讓人刮目相看,比如我在我們團隊,基本上算是疑難問題解決,輔助(各種環境搭建,資源建設,自動化,協助他人解決問題)和攻關隊長,但不是很擅長寫大段代碼(純輸出)。
6. 有一些技術難點,是必現要去攻破的,比如之前在外企的時候,我寫了多年的C++業務框架代碼,一直對模板元編程感到力不從心,后面決心攻破這個問題, 并總結了C++這三座大山:
C++內存管理全景指南
C++模版的本質
C++的面向對象
同時業務框架代碼講究就是代碼和架構設計,對設計能力要求很高,我又重新學習很多設計模式(大話設計模式等):
經典永不過時!重溫設計模式
7. 不設邊界,之前在華為的時候,主要是做無線通信產品(USB上網卡,無線模塊,車載模塊,家庭CPE網關),需要對3G,4G等協議非常熟悉,我是從來沒有搞過,使用是高通modem芯片,這些都是高通專利,一些重要的代碼沒有開放給我們,只能通過查看log和有限資料學習,通過提case和高通技術支持交流(悄悄學習),慢慢熟悉了高通設計,最終我們寫了很多經典文章,比如無線傳輸性能白皮書等;我們開發分兩波人,一波是主協議,屬于上層應用,一波是主驅動,屬于底層架構,我一年后差不多掌握了無線協議開發,包括熟悉理解高通芯片設計,后面主動學習USB協議和驅動相關的,1年半后,我可以一個人包攬從上層到底層全部任務,后面很多項目PL都叫我來主導,每一年幾乎都是優秀員工,但也有很多不足,需要學習。
最后
學習技術,還是要有一點情懷(我知道大部分都是為掙錢,這個很正常),很多時候技術是枯燥無味的,需要長時間做冷板凳,如果內心不喜歡,很可能會非常痛苦,但調通代碼或者找到某個疑難bug的根本原因帶來的快樂,是其他人無法理解的,那種成就感會激勵我們繼續前行,希望大家都能朝著自己的目標努力,終有一天,有所收獲。
想要獲取"經典完整版TCP/IP協議總結PDF",只要三連截圖給我,我發給你。
- END -
看完一鍵三連在看,轉發,點贊
是對文章最大的贊賞,感謝你
推薦閱讀
圖解Linux 內核TCP/IP 協議棧實現|Linux網絡硬核系列
大廠的面試官是如何挑人的?
一個奇葩的網絡問題
如何成為一名大廠的優秀員工?
總結
- 上一篇: Linux网络新技术基石 |eBPF
- 下一篇: TCP/IP协议精华指南pdf发布