編程筆記丨程序員如何持續吸取知識?教你提高99%的學習效率!

在軟技能的知識體系中,對於咱們程序員來講最重要的莫過於學習方法了。咱們應該如何釋放本身的內在潛力去像海綿同樣地吸取知識呢?在本篇文章中咱們將深刻探討如何成爲一個頂尖的學習者。前端

1、如何成爲一個高段位的學習者?

一、建構式的學習模式

對問題的好奇、對答案的渴望,是驅動咱們學習和探索的主要動力。java

「知識不是簡單的記憶,而是由咱們主動地去建構而來的」。咱們必須充分利用現有的知識,在主動性目標或核心問題的引導下去積極地進行探索,只有這樣,咱們纔可以把獲得的新知識與舊知識糅合在一塊兒,並在頭腦中建構出新的知識體系。程序員

「一個好的長時程問題,能讓咱們成爲「構建者」,由於咱們不只在學習知識,還在「建構答案」,在努力回答問題的過程當中,咱們篩選、評判與整合新舊知識,並把它們融匯而成一個知識體系。」面試

「一個好的長時程問題,能讓咱們成爲「探索者」,主動地去探求未知的領域,擴寬「未知的未知」的邊界,而不是僅僅知足於對現成的、邊界明晰的知識的掌握。」算法

所以,「提出一個深刻的探索性問題是一種學習效果很是好的方法」。在問題牽引下的學習,會幫助咱們接二連三地構築着知識之間的聯繫,最終便會造成針對於該問題的思惟導圖之解。編程

「提問是將咱們引向深度學習的起點。一位優秀的學習者,必定同時也是一個優秀的提問者,他會從閱讀、觀察、思考的過程當中產生問題,先解答表層的、容易的那部分,留下深度的、探索式的問題給本身,並在由此問題招致的持續困擾和折磨中開啓卓越的心智旅程。」json

二、經過解碼,深刻事物的深層

咱們不要只作信息的搬運工,而應該經過解碼,去深刻事物的深層。設計模式

一個高段位的學習者,一般都是一個適應性專家,他們能夠有意識地構築一個信息解碼與知識擴展的良性循環—不斷地從一些高質量的學習資料中經過「學習、思考、實踐」去獲取深度知識以擴展與修正咱們現有的知識體系。最多見的一些高效的解碼方式有以下三種:性能優化

1)、「不只要去尋結論,更要去尋過程」:不言而喻,過程比結論更加劇要。微信

2)、「不只要去作概括,更要去作擴展」:概括的同時,咱們應當注重保留其中的核心知識與關鍵細節。

3)、「不只要去比較類似,更要去比較不一樣」:不一樣纔有知識,纔有新意,纔有新的發現,才能實現真正地自我提高,在差異中咱們首先應當選擇最受強調的東西,這不只僅是由於它們最引人注目,並且是由於它們也最富有啓發性。

而這,大概就是解碼的要法了。

三、技能—纔是學習的終點

只有最後可以做用於現實的學習,纔是惟一有效的學習。最有效的學習方式,即「作中學」,它是學習真正爲我所用的關鍵一步。

目前「最有效的兩種通用學習方式」

1)、「不斷地測試練習」:即高頻次的重複練習。

2)、「分散練習」:分散練習即在一個較長的時期內使用較長時間間隔的分佈式訓練,,例如「1小時、1天、1周、1個月、3個月」的時間間隔。

得到技能也就意味着咱們擁有了改變世界的能力,哪怕一開始這種能力很是弱小。

「高效實踐的方式有三種」,以下所示:

1)、寫做式練習

寫做是一種「典型的知識建構或重構活動」。一篇文章若是要被人讀懂、要把人說服,須要縝密的思惟、清晰的表達和翔實的依據,這些都須要咱們對知識的編碼與組織達到一個相對較高的水準。

而寫做的另外一個優點在於能「得到外界的反饋」,咱們能夠「根據讀者的評論去提取出對咱們有用的信息,以此來完善或修正咱們的知識體系」

2)、遊戲式練習

咱們能夠「使用「思想實驗」來實現一個虛擬的遊戲式練習」,思想實驗就是構造一個現實中並不存在的假想情境,而後運用所學的知識,來設想事物在這個情境中的變化。在這樣的練習中,咱們每每能夠獲得比原先更爲深入的洞見。

3)、設計式練習

調用已有的知識,「設計某一種解決方案,來解決某個特定的問題」。這種練習咱們一般會在架構與系統設計方面應用的比較多。

能夠看出,「知識的練習迫使咱們對現有的知識進行更加深刻的審視,對現實的情境和問題進行更加細微的觀察,而且致力於創造二者之間的關聯。它使咱們再也不固守書本,再也不去作僵化的記憶,而是讓咱們賦予知識以靈性,以更好地適應這個變化莫測的世界」

四、調整努力的姿式

具有成長性心智的人,會比日常人成長地更快,它們都堅信——「只要夠努力,就能變得更好」。以大多數人的努力程度之低,根本輪不到拼天賦。根據當前的神經科學的研究代表,「人的大腦具備至關大的可塑性,所以後天的努力對人的改造做用能夠是驚人的」

咱們在不斷地學習和思考的過程當中,其大腦內部會產生劇烈的神經活動,這迫使腦神經之間創建了更多的鏈接。隨着神經元之間鏈接愈來愈多,咱們對問題的認識也就愈來愈深入,遇到相似的問題反應也會愈來愈快。不只如此,甚至還能舉一反三,觸類旁通,乃至和其餘的領域結合,產生創新性的想法。

「努力,不是一場意志力的較量,而是一種須要學習的策略」。努力自己是一種具備策略性的活動,這體如今以下「三個方面」

1)、「我的資源的調配。」

2)、「行動方向的選擇。」

3)、「執行進度的把控和調適。」

而這種策略是須要咱們不斷地學習與優化的。

五、專一在一個領域走到最後

在這個互聯網上,信息是爆炸的,知識是過載的,觀點是鼓譟的,熱點是速朽的。而反過來,「專一在一件事上,精益求精、鍥而不捨的態度和行動,則是最爲稀少與珍貴的。」

我一直都相信一句話——「具有突出的優勢比沒有明顯的弱點要重要的多」。對此,我天然而然地就想到了業界常說的「T」型人才,要高效地成長爲「T」型人才,咱們得先作出那一豎,即「應先在某一領域深刻鑽研後再去涉獵其餘領域,這樣更能舉一反三,對提高那一橫的含金量也頗有好處。」

而很多事實也證實了,「淺嘗輒止的人極可能將一無所得,而專一投入走到最後的人將會得到超額收益。而且,每一個人的精力都是有限的,若是你不專一,就頗有可能永遠在多個「緩慢起步期」徘徊。」

而且,人是沒法作到十全十美的,由於可提高的方面實在太多,在有限的精力與時間之下,咱們只能竭力發揮本身的優點,將其發揮到淋漓盡致。對此,咱們須要「學習齊白石先生那種長期專一和一絲不苟的精神,去把一件事情作到極致。」

六、花費20%的時間去涉獵不一樣領域的知識

「學習高手一般都會有意識地把不一樣領域甚至不一樣學科的知識擺放在一塊兒,而後嘗試去分析、比對它們之間的潛在關聯,甚至當那異質的素材堆疊在一塊兒時,僅僅是潛意識的推進,就可讓這種隱藏的關係浮出水面。」

在當今,有不少醫學的難題長期沒法解決或者沒有進展的一個主要緣由就因爲大多數的醫學研究者由於多年專業教育塑造的知識壁壘致使缺少足夠的知識廣度而形成的。

所以,咱們須要須要去花費20%的時間去涉獵不一樣領域的知識。在學習時間的分配上,我一般會採用「二八分配」的原則,即把80%的時間專一在主業上,把剩餘的20%的時間用來去接觸各類不一樣領域的知識或補足本身的知識短板。

知識短板會嚴重阻礙咱們進步。準確識別它們的最佳方式之一就是「看看本身在哪些工做上花費了大量時間,或者一直進行重複性的勞動」。例如沒有掌握鍵盤快捷鍵可能就是一個知識短板。

七、構建呈階梯式難度的關卡

人是須要一些挫折、失敗或者高難度的挑戰來刺激的。若是老是一路順風,就會一直待在本身的「溫馨區」裏不願出來,潛能就沒法被充分地激發。

所以,咱們應該「爲本身的學習適當地增長必要的難度,例如在學完知識後延遲一段時間再作練習,而這種稍可貴考驗正好能強化咱們對這些知識的存儲和構建。」

咱們應該學會去「構建適合本身的「我的挑戰階梯」」,拿學英語來講,一個比較好的」英語學習挑戰階段「以下所示:

背單詞 => 考託福 => 考 GRE => 聽英語電臺(VOA、BBC)=> 聽各類地方口音的英文 => 英語脫口秀複製代碼

遇到的挑戰越大,得到的快感也越強。好的挑戰階梯的設計可以給與咱們足夠的挫折與失敗,而這將會大大加速咱們的成長速度。

「咱們應該作一個主動探索的學習者,不斷地爲本身設計出有難度的」非標準動做「,在挑戰中得到才能的提高與飛躍。」

八、如何更加高效地讀書?

要想真正掌握一本書的核心內容,須要讀三遍。

第一遍:「細讀,目的在於完整閱讀全書,而且劃出重點,寫上讀書筆記。」

一個月後讀第二遍:「掃讀,主要快速翻閱第一遍閱讀時作的筆記和劃的重點,目的在於加深記憶。」

半年後第三遍:「憶讀,讀的時候只看目錄,而後去回想內容,若是回想不起來,再去進行掃讀。這樣三遍下來,基本上一本書的核心內容就可以很好的吸取。」

九、切忌完美主義

學習不是要麼0分,要麼100分的。80分是收穫,60分是收穫,20分也是收穫,「有收穫纔是最重要」。可是由於着眼於本身的不完美,最終放棄了,那就是完全的0分了。

「不完美實際上是常態,根本不會影響咱們學習更多更深刻的內容」。可是在自學過程當中,不少同窗卻要求本身在本身制定的每一步計劃中都達到「完美」,才進行下一步。最終結果,一般都是「放棄」。

而不要「完美主義」,不表明學習能夠草率前行。「每一個人都必需要找到適合本身的學習節奏」。若是在本身又由於本身的學習進度而沮喪的時候,問本身一句:是否是本身又犯「完美主義」的毛病了。

十、不要過分「學習路徑依賴」,學習要衝着本身的目標去。

例如想學機器學習,就去直接學習機器學習。學習過程當中發現本身的數學不夠用,再回頭補數學便可。

十一、不要迷信權威的「好」教材、不要看不起「薄薄」的「傻」教材

每一個人必需要去探索學習如何尋找適合本身的學習材料。適合你的教材不必定是權威的,「可能有一些你看不起的學習材料,就是是你入門某個領域的關鍵。」

「先用薄教材入門,再找「厚」教材,是我百試不爽的學習方法。由於「薄」的教材能讓你以最快的速度看完,對整個學科有一個全盤的認識,薄會將你入門這個領域的難度降至最低,短時間學習完以後會讓你產生更多的興趣與成就感。這一點每每更加劇要,由於學習,不是100m短跑,而是加長版的馬拉松。」

十二、不要迷信單一教材。

在大多數狀況下,學習不是一本固定教材能夠搞定的。非要找到一本「最適合本身的」教材,而後就一頭扎進去,實際上是不科學的。

建議每個技術點都須要「篩選多個優秀資源去進行 學習、實踐、思考、總結。由於不一樣的做者對同一個事物會從不一樣的角度作解讀,這可以幫助你更深入的認識一個概念。」

1三、學會覆盤

「在天天晚上睡覺的前半小時以內,咱們須要覆盤當天的學習狀況,哪些完成哪些沒完成的須要記錄,爲明天作一個銜接的準備,以確保當前的學習進度是可控的。」

1四、量變到質變

僅僅對着一個問題思考,不少時候都是死衚衕。由於咱們見識的還不夠多,就不足以幫助咱們去總結出更加「廣泛」問題解決的規律。

咱們不要企圖經過一個問題就理解問題的本質,這其實和企圖經過一本教材就精通一個領域的想法是同樣的,是不現實的。

其實大多數問題,都是須要「回頭看」的。對一個領域理解的越深刻,回頭再去看那些曾經的問題,都會產生新的視角,對於不少曾經想不明白的問題也豁然開朗。這也是「進步」的根源。「不少時候,你發現對一些問題「百思不得其解」,或許不是由於本身「笨」,而是由於「還不夠努力」。」

2、如何分析問題?

一、分析問題的重要性

只有「挖掘出問題的核心和根本」,才能針對性地剔除改進或者完善流程,來避免相似的問題再次出現。

二、5WHY 分析法

核心是「追究根本緣由」。例如針對線上的屏幕適配問題,咱們能夠提出五種對應的改進方案:

1)、開發者要吸收經驗,儘可能採用普適性較強的寫法。

2)、對一些組件進行封裝,避免相似的適配問題。

3)、有新設備上市,要儘早採購。

4)、QA 的測試用例要多人評審,儘可能保證用例覆蓋全面。

5)、經過一些自動化檢測手段,對適配問題進行檢測。

三、第一性原理

有問題時,運用第一性原理,多讀官方文檔或源碼。閱讀源碼的本質:優秀框架背後的「設計模式與架構」

此外,對於一些難以用技術解決的問題,能夠從需求的角度去解決。

3、學習十步法

對技術人成長最重要的三個因素一般都包含以下三個要點:

1)、「學習-不斷提高自身深度與廣度的能力」

2)、「思考-即解決問題的能力」

3)、「實踐-大量的實踐能讓咱們真正地理解一個技術的本質」

而學習十步法的精髓就在於「學習-實踐-(思考出問題-學習-實踐)-掌握-教授」這一系列過程。注意()內的過程(這個過程也被稱爲探索)一般須要屢次反覆進行直到最終掌握這個技術點。

「學習十步法充分利用了人天生的好奇心來幫助咱們吸取更多的知識,這將會持續不斷的激勵咱們經過實踐向着目標前進,而不只僅是讀書或者聽教學視頻。」

在開始使用學習十步法以前,首先須要明確的是,「學習計劃最好能結合工做計劃,理論結合實際,快速學以至用」。所以咱們應該「優先學習的是工做中會用到的或將會用到的技能」。在完成了本身的本職工做以後,咱們應該去儘可能地考量公司中各個系統和業務模塊,看看有哪些不合理和能夠改進的地方,而後盡力地提高本身相關方面的技術,並去識別和優化它們,在優化的過程當中咱們能夠優先參考其它公司的技術方案。

一、瞭解全局

瞭解全局的做用在於咱們能夠「快速甄別,決定哪些事情值得花費時間」,例如「作一些基礎性的研究,例如網絡搜索、查閱一下該主題的書的介紹性章節。」

二、肯定範圍

咱們應該「聚焦學習範圍,關注重點內容」。這兒須要充分利用本身在第1步中收集到的信息,找出本身的學習範圍,也能夠藉助本身的學習理由來決定學習的範圍。

選擇一個專一而聚焦的範圍,「明確學習範圍的時候須要儘量地充分考慮時間因素與衡量時間成本的性價比。」

那麼,如何衡量時間成本的性價比呢?

1)、「評估掌握一項技能在短時間和長期內對咱們的重要性。」

2)、「咱們應該對需求和時間成本評估,決定需不須要學,以此肯定學習的目標。」

3)、「一些簡單、僅僅須要瞭解的知識點利用碎片時間去完成便可,但若是是須要掌握甚至「精通」的一些知識點,咱們須要爲它劃分出一整段的時間。」

此外,在這一步中,有兩個點須要注意:

1)、有些知識的獲取是須要「循環漸進」的,除非你已經有了很是紮實的基礎,不然跳級進階只能是吃力不討好。

2)、有些知識點例如「源碼、晦澀的一些概念」等等,只要它們是足夠「重要」的,弄明白它們就是「很是值得」的。

三、定義目標

好的成功目標應該是「具體的、無二義性」的。例如在學習 ASM + Gradle 時,我定義的目標是:使用 ASM + Gradle 完成一個全局的 Bitmap 監控組件。

四、尋找資源

目前,我學習的主要信息來源包括以下「九個渠道」

一、「官方文檔」:第一手資料。

二、「源碼」:第一手資料。

三、「Github 開源項目」:按期查看 GitHub 的熱門榜,看有沒有須要的優質項目(至少每週一次)。

四、「Awesome-Android-NoteBook &&豆瓣讀書 - 計算機科學經典書籍」

五、「開源的權威資料」

六、「極客時間」

七、「慕課網」

八、「百度雲盤」

九、「WanAndroid 優秀文章」

在這一步,記得也要尋求一些好的薄教材/入門文章,在咱們剛開始學習這個主題時,便會從它們開始。

五、建立學習計劃

咱們須要「根據本身我的的時間去制定適合本身的學習計劃」。這一步咱們能夠把它看做本身寫書時候的大綱,這裏一般能夠經過查閱圖書的目錄進行。

六、篩選資源

計劃學習前要考慮清楚,一旦開始執行學習計劃,就應儘可能保持少的變動,除非後續發現計劃有問題。所以這裏咱們須要多加一步去「選取品質最高的資源覆蓋學習計劃,對於一些購買性的資源能夠經過查看評論的方式進行評估。」

七、開始學習,淺嘗輒止

這一步的關鍵在於「過猶不及」。你會很容易就失去自控力,開始消化計劃學習中列出的全部資源。可是,你會發現,若是你能經受住這樣的誘惑,你會取得更大的成就。咱們應該要「專一於掌握本身所需的、能在下一步動手操做的最小量的知識。」

「好記性不如爛筆頭」,在學習的過程當中,學習的東西至少要作好筆記(印象筆記、有道雲筆記),而且後續須要「按照必定的間隔時間去反覆複習」

八、動手操做,邊玩邊學

萬事無他,惟手熟爾。教育的首要目標,並不在於」知「,而在於」行「。

對於計算機領域的學習來講,教材的意義其實遠遠小於實踐的意義。真正動手實踐去編程是異常重要的。這就比如學游泳,必須下水去游泳;或者學開車,必須親自上路。不然你說的再頭頭是道,一個小學生文化水平的人,只要他開過車,遊過泳,都能在這兩個領域瞬間秒殺你。

真正的學習上的提升,就發生在實踐的過程之中。例如,「debug 就是一種高效的實踐方式。它不只僅是找到代碼錯誤,解決錯誤的手段,其實更是一個重要的學習手段。」

所以,咱們應該「經過探索和實踐進行學習,在實踐中碰到的問題會引導着咱們走向真正重要的方向。當回過頭尋找問題的答案時,不僅是這些問題迎刃而解,並且你記得的東西比你學習到的東西多得多,由於你所學到的都是對你很重要的東西。」

此外,在實踐中,「在某些關鍵動做上刻意練習,也會取得事半功倍的效果」。由於不停的練習和思考能夠改變大腦結構,大腦像肌肉同樣,挑戰越大,影響越大,學習更高效,而且也會產生突破性。

九、全面掌握,學以至用

咱們「沒有必要吧收集到的全部資源所有仔細看一遍,而應該以解決在動手操做中發現的問題爲主要目的」。試着把本身正在學習的內容與最終目標關聯起來。「你掌握的每一個模塊,都應該以某種方式推進着你向着終極目標前進。」

在這一步中,咱們能夠將測試練習與分散練習這兩種學習方式結合起來使用,以達到最佳的學習效果。同時,咱們最好能給本身設置一系列的挑戰階梯,例如對於學習音視頻的同窗能夠給本身設置以下的挑戰階梯:

使用 Android 音視頻 API實現一個播放器 => 使用 FFmpeg 與 OpenGL 實現一個播放器 => 定製 FFmpeg 的源碼、掌握 OpenGL/Vulkan 的高階用法實現功能更增強大的播放器複製代碼

學習某一個技術其實到最後會造成一顆「技術樹」,咱們能夠使用「思惟導圖 => XMind || 幕布」進行描述。而對於一些涉及「流程」相關的技術點,咱們能夠使用「ProcessOn」來畫流程圖。

十、樂爲人師,融合貫通

若是你能將本身所學的東西都教給別人,那麼你不只可以記住,並且還可以理解得更加深入。

重點在於,咱們須要花時間將本身所學到的東西從大腦中提取出來,以別人可以理解的方式組織起來。「在經歷了這整個過程以後你會發現,有不少你覺得本身明白了的知識點,其實並無摸透。這一步對保持信息以及深刻理解知識而不只僅只是流於表面相當重要。」

在教學的過程當中,有一些內容是必不可少的,例如:

「是什麼?」

「爲何?即它解決了什麼問題。」

「優缺點。」

「對比同類技術的不一樣/相同點。」

「如何使用?」

「如何解決問題的?即內部的實現原理。」

「概括時注重核心知識與關鍵細節,並嘗試去類比不一樣領域或不一樣學科之間的知識。」

「重要的過程、結論。」

分享就是一種很好的教學方式,並且它的時間成本也相對較低,目前常見的有「三種分享方式」

1)、「博文文章/專欄」

2)、「慕課網技術視頻」

3)、「部門/社區內的技術分享」

技術分享的真正意義在於,「總有一部分知識咱們並無真正理解透徹到能夠向別人解釋,而」教「的過程可以迫使你面對這一部分。在教別人的時候,咱們迫使本身面對課題中的難點,深刻探索,從只知皮毛變成徹底理解。學習知識暫時的,而理解是永久性的。」

「在咱們試圖教別人的時候,會強迫本身從新組織大腦中的資料」。最好的思惟方法就是解釋某樣東西並將其記錄在紙上,或者記錄到 Word 文件或者幻燈片中,使你能夠將這些互不連貫的碎片信息收集起來,並以一種有效的方法從新組織起來。「要想教人,咱們得先把本身教會。」

而在教別人的過程當中,最好的教學方式就是「心態謙卑,信心滿滿——以謙虛的視角來觀察問題,以權威的口吻去詮釋問題。」

最後,不要忘記進行隔期複習,對於一篇文章來講,能夠「先擴展出它的知識樹,而後再嘗試去描述其中每個知識節點的核心內容與關鍵細節。」

開源本身造的輪子也是一種很好的分享方式,咱們應該學會造輪子,去寫一些框架或組件,建議設置簡單到複雜的挑戰階梯。

最後,我就以最近正在學習的 Android 網絡優化爲例來實踐一下十步學習法,其思惟導圖以下所示:

4、重要問題解答專區

一、怎樣由淺入深地學習一個技術點?

建議你們先選定一個本身最感興趣的方向,後面一段時間就專攻這一個方向,拿 Flutter 作例子,能夠先將全部 Flutter 相關的專業文檔、優秀書籍、視頻教程、文章等蒐集起來,將其中涉及的知識大綱列出來,對其中涉及到的每個知識點(現在天或這幾天要學的是佈局類組件)須要的對應資料列出來。而後去學習、實踐它的基本用法,接着能夠再深刻一層看這個知識點涉及到的內部原理(如 Flutter 中經常使用佈局的實現原理),最後總結出對應的學習筆記(供之後複習)。這樣學習起來就比較有效果,並且剛開始能夠根據自身的狀態去調節計劃時間的長短,建議開始計劃定鬆一點,確保天天都能完成。養成習慣並徹底適應後,能夠加大學習量。這就跟健身的原理同樣,剛開始鍛鍊的人通常都體質比較差,因此須要從最基礎的動做開始練,等將基礎打好了,體質提高上來了,才能去適當地作一些力量訓練,增長肌肉。

二、怎樣才能很好地把安卓零碎的知識點串起來?

這可能說明學習的時候沒有注重體系化地學習與思考,而是東學一點西學一點,那這些知識天然而然地會零散地遍及在咱們腦海的各處。爲了解決這個問題,咱們須要首先須要把目前所學的知識列出來,而後可儘量地找到這些知識點的聯繫,把它作成思惟導圖。因爲可能有不少聯繫點咱們以前學習的疏漏而沒有把它歸入咱們的腦海中,可是,這並沒有大礙,後面咱們能夠圍繞這張 1.0版本的安卓知識思惟導圖 不斷迭代,最終,它就會日漸完善,發揮出想象不到的威力~

三、對將來很迷茫,每天都在學習可是技術就是提高不上去?

其實,對於你們來講,最重要的事情就是 如何去從最本質、最底層的層面去打磨本身? 如何培養興趣、深刻鑽研某一個領域從而成爲專家?如何具有快速、高效、不斷深挖某一技術的核心能力(即一通百通的能力)?這些問題的答案很難在短期讓你們去明白、理解。其實,我「今年的整個文章路線」就是圍繞這些內容而定製的,其共分爲幾個核心路線:「軟技能、高效構建算法知識地圖、性能優化領域專家、NDK 高手之路(偏向於 Native 層的性能優化、Hook 實現)、Flutter(從最重要的核心點 自上而下打通 Flutter 的整個架構體系)」,明年上半年的路線:架構師成長之路(從易到難具有強大的架構設計能力) 。可能有的同窗認爲我學的好像很雜,其實否則,我一直都專一於一條路線,就是「基礎架構研發」,它涉及的主要工做內容就是「架構設計、性能優化、前沿新技術預研(Flutter、JetPack」)。建議你們選定一條路線,也不必定要是上面的路線,專一於音視頻、圖形處理 或 AI 移動、大前端 的路線均可以,今年你們一塊兒加油,但願年末能給本身一份滿意的答卷~

四、如何更高效地學習技術視頻?

學習視頻的時候建議「開 2 倍速看,對於 不熟悉/偏難 的知識,每看一個小的技術點以後,就實踐一遍,而後把實踐的成果寫入 筆記/你的初稿博客 中,對於 比較熟悉/簡單 的知識,通常是看一小節/兩三個技術點以後再實踐、寫入 筆記/你的初稿博客。」

五、如何選擇第三方庫?

1)、肯定這個庫是不是必需的。

2)、這個庫可否帶來開發效率的提高,下降代碼的維護成本。

3)、這個庫的學習成本如何 好比 rxjava 其實學習成本會相對高一些。

4)、這個庫的質量如何,不要僅僅看 star,更要看 issue 的處理狀況。

六、怎樣練習算法題?

1)、每道算法題都先本身去實現,理清思路後本身去實現一遍。(超過5分鐘沒思路跳下一步)

2)、而後再看看答案,記住答案的思路,手寫一遍。

3)、次日再從新按照答案的思路再手寫一遍。

4)、等到要面試的時候再系統地將全部的題型按類別進行手寫便可。

七、如何閱讀源碼?

1)、準備

一、Java設計模式(模板方法,單例,觀察者,工廠方法,代理,策略,裝飾者)。

二、Java高級相關(泛型、反射、IO)。

三、在官方文檔上了解軟件的總體架構設計、主要功能。

四、熟練掌握這個庫。

五、搭建系統,把源碼跑起來。

2)、開始閱讀

一、根據你對系統的理解,設計幾個主要的測試案例,定義好輸入,輸出。(Debug一

遍確定是不行的,須要Debug不少遍)

二、第一篇拋棄細節,抓住主要流程,第二篇,第三篇,再去看各個部分的細節。

三、閱讀的時候同時使用 UML 畫出系統的類圖。主要的測試案例明白了,豐富測試案例,考慮一些分支。

四、這一步會很是很是地花費時間,可是你作完了,對系統的理解絕對有質的飛躍。

3)、流程小結

一、準備。

二、網上搜索針對該開源項目進行分析的優秀文章。

三、對開源項目提出本身的疑問,並帶着疑問閱讀源碼。

四、閱讀源碼過程當中多添加註釋、筆記.

五、作閱讀總結/寫文章,吸取和再創造

八、新技術頻繁出現,咱們應該採起有效的針對性措施?

一項新技術的出現,咱們應該先去了解它,看它是否對自身的技術成長有比較大的幫助,有的話按優先級加入學習計劃表,而不是立馬去學習或否認它。

5、總結

對於大多數人來講,可能關鍵不在於學習方式的優劣,而在於「如何不痛苦地堅持下去」。而要解決這個問題,最大的利器即是興趣。「只有真正深刻到一個領域,才能培養出對其的真正興趣。若是對一件事的瞭解不深、不透,老是淺嘗輒止,那天然體會不到這件事的妙處,也天然不會產生持久的興趣。這讓人容易滑入一個死循環:瞭解不夠致使興趣不足,而興趣不足又沒法加深對它的瞭解。」

「若是我能長期地堅持去作一件事,必定是這件事帶給個人豐盈感和知足感超過了個人全部付出,必定是這件事日日夜夜縈繞在個人心頭讓我欲罷不能,必定是這件事喚起了我心裏深處最強烈的興趣」。也就是說,賜予我力量的,是激情的驅動,而不是意志力的鞭策。可是,熱情很難一直存在,所以,在熱情黯淡的時期,須要咱們有必定的自控力去作支撐過渡。所以,如何練就強大的自控力也是須要咱們去不斷深刻探索的一個問題。

做者:掘金丨jsonchao

原文連接:https://juejin.im/post/5eb168e9f265da7bb65fb27a



自學C/C++編程難度很大,不妨和一些志同道合的小夥伴一塊兒學習成長!

C語言C++編程學習交流圈子,【點擊進入】微信公衆號:C語言編程學習基地

有一些源碼和資料分享,歡迎轉行也學習編程的夥伴,和你們一塊兒交流成長會比本身琢磨更快哦!

相關文章
相關標籤/搜索