在學習一個技術以前,判斷一個技術是否是真正有價值?一個技術是否是值得咱們花費足夠的精力去深挖?是很是重要的,關鍵就在於在將來幾年甚至十幾年,它是否能真正地解決項目研發過程當中的一些痛點,讓企業的收益最大化。並且,「我的的技術成長(硬實力)與軟技能(軟實力)是密切相關的」,能夠這麼說,「要想保持長久的技術提高效能與持續成長,就必須有全面、強大的軟實力作支撐」。前端
從咱們認知的整個思惟結構上來講,軟技能是比數據結構與算法、計算機基礎更加底層的東西。「越底層的東西它的持久力、生命力以及帶給咱們的收益就越大」,而且,從某種程度上來講,軟技能的學習比算法、計算機基礎這些底層知識的學習難度要低很多,因此,這就是我爲何一直要在每週堅持抽出20%的時間去系統地學習軟實力方面的內容。java
在軟技能的知識體系中,對於咱們程序員來講最重要的莫過於學習方法了。咱們應該如何釋放本身的內在潛力去像海綿同樣地吸取知識呢?在本篇文章中咱們將深刻探討如何成爲一個頂尖的學習者。git
❝對問題的好奇、對答案的渴望,是驅動咱們學習和探索的主要動力。程序員
❞
「知識不是簡單的記憶,而是由咱們主動地去建構而來的」。咱們必須充分利用現有的知識,在主動性目標或核心問題的引導下去積極地進行探索,只有這樣,咱們纔可以把獲得的新知識與舊知識糅合在一塊兒,並在頭腦中建構出新的知識體系。github
「一個好的長時程問題,能讓咱們成爲「構建者」,由於咱們不只在學習知識,還在「建構答案」,在努力回答問題的過程當中,咱們篩選、評判與整合新舊知識,並把它們融匯而成一個知識體系。」web
「一個好的長時程問題,能讓咱們成爲「探索者」,主動地去探求未知的領域,擴寬「未知的未知」的邊界,而不是僅僅知足於對現成的、邊界明晰的知識的掌握。」面試
所以,「提出一個深刻的探索性問題是一種學習效果很是好的方法」。在問題牽引下的學習,會幫助咱們接二連三地構築着知識之間的聯繫,最終便會造成針對於該問題的思惟導圖之解。算法
「提問是將咱們引向深度學習的起點。一位優秀的學習者,必定同時也是一個優秀的提問者,他會從閱讀、觀察、思考的過程當中產生問題,先解答表層的、容易的那部分,留下深度的、探索式的問題給本身,並在由此問題招致的持續困擾和折磨中開啓卓越的心智旅程。」編程
咱們不要只作信息的搬運工,而應該經過解碼,去深刻事物的深層。json
一個高段位的學習者,一般都是一個適應性專家,他們能夠有意識地構築一個信息解碼與知識擴展的良性循環—不斷地從一些高質量的學習資料中經過 「學習、思考、實踐」 去獲取深度知識以擴展與修正咱們現有的知識體系。最多見的一些高效的解碼方式有以下三種:
而這,大概就是解碼的要法了。
只有最後可以做用於現實的學習,纔是惟一有效的學習。最有效的學習方式,即「作中學」,它是學習真正爲我所用的關鍵一步。
目前「最有效的兩種通用學習方式」:
得到技能也就意味着咱們擁有了改變世界的能力,哪怕一開始這種能力很是弱小。「高效實踐的方式有三種」,以下所示:
寫做是一種「典型的知識建構或重構活動」。一篇文章若是要被人讀懂、要把人說服,須要縝密的思惟、清晰的表達和翔實的依據,這些都須要咱們對知識的編碼與組織達到一個相對較高的水準。
而寫做的另外一個優點在於能「得到外界的反饋」,咱們能夠「根據讀者的評論去提取出對咱們有用的信息,以此來完善或修正咱們的知識體系」。
咱們能夠「使用「思想實驗」來實現一個虛擬的遊戲式練習」,思想實驗就是構造一個現實中並不存在的假想情境,而後運用所學的知識,來設想事物在這個情境中的變化。在這樣的練習中,咱們每每能夠獲得比原先更爲深入的洞見。
調用已有的知識,「設計某一種解決方案,來解決某個特定的問題」。這種練習咱們一般會在架構與系統設計方面應用的比較多。
能夠看出,「知識的練習迫使咱們對現有的知識進行更加深刻的審視,對現實的情境和問題進行更加細微的觀察,而且致力於創造二者之間的關聯。它使咱們再也不固守書本,再也不去作僵化的記憶,而是讓咱們賦予知識以靈性,以更好地適應這個變化莫測的世界」。
具有成長性心智的人,會比日常人成長地更快,它們都堅信——「只要夠努力,就能變得更好」。以大多數人的努力程度之低,根本輪不到拼天賦。根據當前的神經科學的研究代表,「人的大腦具備至關大的可塑性,所以後天的努力對人的改造做用能夠是驚人的」。
咱們在不斷地學習和思考的過程當中,其大腦內部會產生劇烈的神經活動,這迫使腦神經之間創建了更多的鏈接。隨着神經元之間鏈接愈來愈多,咱們對問題的認識也就愈來愈深入,遇到相似的問題反應也會愈來愈快。不只如此,甚至還能舉一反三,觸類旁通,乃至和其餘的領域結合,產生創新性的想法。
「努力,不是一場意志力的較量,而是一種須要學習的策略」。努力自己是一種具備策略性的活動,這體如今以下「三個方面」:
而這種策略是須要咱們不斷地學習與優化的。
在這個互聯網上,信息是爆炸的,知識是過載的,觀點是鼓譟的,熱點是速朽的。而反過來,「專一在一件事上,精益求精、鍥而不捨的態度和行動,則是最爲稀少與珍貴的。」
我一直都相信一句話——「具有突出的優勢比沒有明顯的弱點要重要的多」。對此,我天然而然地就想到了業界常說的「T」型人才,要高效地成長爲「T」型人才,咱們得先作出那一豎,即「應先在某一領域深刻鑽研後再去涉獵其餘領域,這樣更能舉一反三,對提高那一橫的含金量也頗有好處。」
而很多事實也證實了,「淺嘗輒止的人極可能將一無所得,而專一投入走到最後的人將會得到超額收益。而且,每一個人的精力都是有限的,若是你不專一,就頗有可能永遠在多個「緩慢起步期」徘徊。」
而且,人是沒法作到十全十美的,由於可提高的方面實在太多,在有限的精力與時間之下,咱們只能竭力發揮本身的優點,將其發揮到淋漓盡致。對此,咱們須要「學習齊白石先生那種長期專一和一絲不苟的精神,去把一件事情作到極致。」
「學習高手一般都會有意識地把不一樣領域甚至不一樣學科的知識擺放在一塊兒,而後嘗試去分析、比對它們之間的潛在關聯,甚至當那異質的素材堆疊在一塊兒時,僅僅是潛意識的推進,就可讓這種隱藏的關係浮出水面。」
在當今,有不少醫學的難題長期沒法解決或者沒有進展的一個主要緣由就因爲大多數的醫學研究者由於多年專業教育塑造的知識壁壘致使缺少足夠的知識廣度而形成的。
所以,咱們須要須要去花費20%的時間去涉獵不一樣領域的知識。在學習時間的分配上,我一般會採用「二八分配」的原則,即把80%的時間專一在主業上,把剩餘的20%的時間用來去接觸各類不一樣領域的知識或補足本身的知識短板。
知識短板會嚴重阻礙咱們進步。準確識別它們的最佳方式之一就是「看看本身在哪些工做上花費了大量時間,或者一直進行重複性的勞動」。例如沒有掌握鍵盤快捷鍵可能就是一個知識短板。
人是須要一些挫折、失敗或者高難度的挑戰來刺激的。若是老是一路順風,就會一直待在本身的「溫馨區」裏不願出來,潛能就沒法被充分地激發。
所以,咱們應該「爲本身的學習適當地增長必要的難度,例如在學完知識後延遲一段時間再作練習,而這種稍可貴考驗正好能強化咱們對這些知識的存儲和構建。」
咱們應該學會去「構建適合本身的「我的挑戰階梯」」,拿學英語來講,一個比較好的」英語學習挑戰階段「以下所示:
背單詞 => 考託福 => 考 GRE => 聽英語電臺(VOA、BBC)=> 聽各類地方口音的英文 => 英語脫口秀
複製代碼
遇到的挑戰越大,得到的快感也越強。好的挑戰階梯的設計可以給與咱們足夠的挫折與失敗,而這將會大大加速咱們的成長速度。
「咱們應該作一個主動探索的學習者,不斷地爲本身設計出有難度的」非標準動做「,在挑戰中得到才能的提高與飛躍。」
要想真正掌握一本書的核心內容,須要讀三遍。
學習不是要麼0分,要麼100分的。80分是收穫,60分是收穫,20分也是收穫,「有收穫纔是最重要」。可是由於着眼於本身的不完美,最終放棄了,那就是完全的0分了。
「不完美實際上是常態,根本不會影響咱們學習更多更深刻的內容」。可是在自學過程當中,不少同窗卻要求本身在本身制定的每一步計劃中都達到「完美」,才進行下一步。最終結果,一般都是「放棄」。
而不要「完美主義」,不表明學習能夠草率前行。「每一個人都必需要找到適合本身的學習節奏」。若是在本身又由於本身的學習進度而沮喪的時候,問本身一句:是否是本身又犯「完美主義」的毛病了。
例如想學機器學習,就去直接學習機器學習。學習過程當中發現本身的數學不夠用,再回頭補數學便可。例如我以前在寫 深刻探索 Android 內存優化(煉獄級別) 與 深刻探索 Android 包體積優化(匠心製做) 時,發現有很多優化方式都使用到了「編譯插樁 + Gradle 自動化構建」相關的技術,所以,我又回過頭去系統學習了編譯插樁與 Gradle 自動化構建的知識。
每一個人必需要去探索學習如何尋找適合本身的學習材料。適合你的教材不必定是權威的,「可能有一些你看不起的學習材料,就是是你入門某個領域的關鍵。」
「先用薄教材入門,再找「厚」教材,是我百試不爽的學習方法。由於「薄」的教材能讓你以最快的速度看完,對整個學科有一個全盤的認識,薄會將你入門這個領域的難度降至最低,短時間學習完以後會讓你產生更多的興趣與成就感。這一點每每更加劇要,由於學習,不是100m短跑,而是加長版的馬拉松。」
在大多數狀況下,學習不是一本固定教材能夠搞定的。非要找到一本「最適合本身的」教材,而後就一頭扎進去,實際上是不科學的。
建議每個技術點都須要「篩選多個優秀資源去進行 學習、實踐、思考、總結。由於不一樣的做者對同一個事物會從不一樣的角度作解讀,這可以幫助你更深入的認識一個概念。」
「在天天晚上睡覺的前半小時以內,咱們須要覆盤當天的學習狀況,哪些完成哪些沒完成的須要記錄,爲明天作一個銜接的準備,以確保當前的學習進度是可控的。」
僅僅對着一個問題思考,不少時候都是死衚衕。由於咱們見識的還不夠多,就不足以幫助咱們去總結出更加「廣泛」問題解決的規律。
咱們不要企圖經過一個問題就理解問題的本質,這其實和企圖經過一本教材就精通一個領域的想法是同樣的,是不現實的。
其實大多數問題,都是須要「回頭看」的。對一個領域理解的越深刻,回頭再去看那些曾經的問題,都會產生新的視角,對於不少曾經想不明白的問題也豁然開朗。這也是「進步」的根源。 「不少時候,你發現對一些問題「百思不得其解」,或許不是由於本身「笨」,而是由於「還不夠努力」。」
只有「挖掘出問題的核心和根本」,才能針對性地剔除改進或者完善流程,來避免相似的問題再次出現。
核心是「追究根本緣由」。例如針對線上的屏幕適配問題,咱們能夠提出五種對應的改進方案:
有問題時,運用第一性原理,多讀官方文檔或源碼。閱讀源碼的本質:優秀框架背後的「設計模式與架構」。
此外,對於一些難以用技術解決的問題,能夠從需求的角度去解決。
對技術人成長最重要的三個因素一般都包含以下三個要點:
而學習十步法的精髓就在於「學習-實踐-(思考出問題-學習-實踐)-掌握-教授」這一系列過程。注意()內的過程(這個過程也被稱爲探索)一般須要屢次反覆進行直到最終掌握這個技術點。
「學習十步法充分利用了人天生的好奇心來幫助咱們吸取更多的知識,這將會持續不斷的激勵咱們經過實踐向着目標前進,而不只僅是讀書或者聽教學視頻。」
在開始使用學習十步法以前,首先須要明確的是,「學習計劃最好能結合工做計劃,理論結合實際,快速學以至用」。所以咱們應該「優先學習的是工做中會用到的或將會用到的技能」。在完成了本身的本職工做以後,咱們應該去儘可能地考量公司中各個系統和業務模塊,看看有哪些不合理和能夠改進的地方,而後盡力地提高本身相關方面的技術,並去識別和優化它們,在優化的過程當中咱們能夠優先參考其它公司的技術方案。
瞭解全局的做用在於咱們能夠「快速甄別,決定哪些事情值得花費時間」,例如「作一些基礎性的研究,例如網絡搜索、查閱一下該主題的書的介紹性章節。」
咱們應該「聚焦學習範圍,關注重點內容」。這兒須要充分利用本身在第1步中收集到的信息,找出本身的學習範圍,也能夠藉助本身的學習理由來決定學習的範圍。
選擇一個專一而聚焦的範圍,「明確學習範圍的時候須要儘量地充分考慮時間因素與衡量時間成本的性價比。」
此外,在這一步中,有兩個點須要注意:
好的成功目標應該是「具體的、無二義性」的。例如在學習 ASM + Gradle 時,我定義的目標是:使用 ASM + Gradle 完成一個全局的 Bitmap 監控組件。
目前,我學習的主要信息來源包括以下 「九個渠道」:
在這一步,記得也要尋求一些好的薄教材/入門文章,在咱們剛開始學習這個主題時,便會從它們開始。
咱們須要「根據本身我的的時間去制定適合本身的學習計劃」。這一步咱們能夠把它看做本身寫書時候的大綱,這裏一般能夠經過查閱圖書的目錄進行。
計劃學習前要考慮清楚,一旦開始執行學習計劃,就應儘可能保持少的變動,除非後續發現計劃有問題。所以這裏咱們須要多加一步去「選取品質最高的資源覆蓋學習計劃,對於一些購買性的資源能夠經過查看評論的方式進行評估。」
這一步的關鍵在於「過猶不及」。你會很容易就失去自控力,開始消化計劃學習中列出的全部資源。可是,你會發現,若是你能經受住這樣的誘惑,你會取得更大的成就。咱們應該要「專一於掌握本身所需的、能在下一步動手操做的最小量的知識。」
「好記性不如爛筆頭」,在學習的過程當中,學習的東西至少要作好筆記(印象筆記、有道雲筆記),而且後續須要「按照必定的間隔時間去反覆複習」。
❝萬事無他,惟手熟爾。教育的首要目標,並不在於」知「,而在於」行「。
❞
對於計算機領域的學習來講,教材的意義其實遠遠小於實踐的意義。真正動手實踐去編程是異常重要的。這就比如學游泳,必須下水去游泳;或者學開車,必須親自上路。不然你說的再頭頭是道,一個小學生文化水平的人,只要他開過車,遊過泳,都能在這兩個領域瞬間秒殺你。
真正的學習上的提升,就發生在實踐的過程之中。例如,「debug 就是一種高效的實踐方式。它不只僅是找到代碼錯誤,解決錯誤的手段,其實更是一個重要的學習手段。」
所以,咱們應該「經過探索和實踐進行學習,在實踐中碰到的問題會引導着咱們走向真正重要的方向。當回過頭尋找問題的答案時,不僅是這些問題迎刃而解,並且你記得的東西比你學習到的東西多得多,由於你所學到的都是對你很重要的東西。」
此外,在實踐中,「在某些關鍵動做上刻意練習,也會取得事半功倍的效果」。由於不停的練習和思考能夠改變大腦結構,大腦像肌肉同樣,挑戰越大,影響越大,學習更高效,而且也會產生突破性。
咱們「沒有必要吧收集到的全部資源所有仔細看一遍,而應該以解決在動手操做中發現的問題爲主要目的」。試着把本身正在學習的內容與最終目標關聯起來。「你掌握的每一個模塊,都應該以某種方式推進着你向着終極目標前進。」
在這一步中,咱們能夠將測試練習與分散練習這兩種學習方式結合起來使用,以達到最佳的學習效果。同時,咱們最好能給本身設置一系列的挑戰階梯,例如對於學習音視頻的同窗能夠給本身設置以下的挑戰階梯:
使用 Android 音視頻 API實現一個播放器 => 使用 FFmpeg 與 OpenGL 實現一個播放器 => 定製 FFmpeg 的源碼、掌握 OpenGL/Vulkan 的高階用法實現功能更增強大的播放器
複製代碼
學習某一個技術其實到最後會造成一顆「技術樹」,咱們能夠使用「思惟導圖 => XMind || 幕布」進行描述。而對於一些涉及「流程」相關的技術點,咱們能夠使用「ProcessOn」來畫流程圖。
❝若是你能將本身所學的東西都教給別人,那麼你不只可以記住,並且還可以理解得更加深入。
❞
重點在於,咱們須要花時間將本身所學到的東西從大腦中提取出來,以別人可以理解的方式組織起來。「在經歷了這整個過程以後你會發現,有不少你覺得本身明白了的知識點,其實並無摸透。這一步對保持信息以及深刻理解知識而不只僅只是流於表面相當重要。」
在教學的過程當中,有一些內容是必不可少的,例如:
分享就是一種很好的教學方式,並且它的時間成本也相對較低,目前常見的有「三種分享方式」:
技術分享的真正意義在於,「總有一部分知識咱們並無真正理解透徹到能夠向別人解釋,而」教「的過程可以迫使你面對這一部分。在教別人的時候,咱們迫使本身面對課題中的難點,深刻探索,從只知皮毛變成徹底理解。學習知識暫時的,而理解是永久性的。」
「在咱們試圖教別人的時候,會強迫本身從新組織大腦中的資料」。最好的思惟方法就是解釋某樣東西並將其記錄在紙上,或者記錄到 Word 文件或者幻燈片中,使你能夠將這些互不連貫的碎片信息收集起來,並以一種有效的方法從新組織起來。「要想教人,咱們得先把本身教會。」
而在教別人的過程當中,最好的教學方式就是「心態謙卑,信心滿滿——以謙虛的視角來觀察問題,以權威的口吻去詮釋問題。」
最後,不要忘記進行隔期複習,對於一篇文章來講,能夠「先擴展出它的知識樹,而後再嘗試去描述其中每個知識節點的核心內容與關鍵細節。」
❝開源本身造的輪子也是一種很好的分享方式,咱們應該學會造輪子,去寫一些框架或組件,建議設置簡單到複雜的挑戰階梯。
❞
最後,我就以最近正在學習的 Android 網絡優化爲例來實踐一下十步學習法,其思惟導圖以下所示:
建議你們先選定一個本身最感興趣的方向,後面一段時間就專攻這一個方向,拿 Flutter 作例子,能夠先將全部 Flutter 相關的專業文檔、優秀書籍、視頻教程、文章等蒐集起來,將其中涉及的知識大綱列出來,對其中涉及到的每個知識點(現在天或這幾天要學的是佈局類組件)須要的對應資料列出來。而後去學習、實踐它的基本用法,接着能夠再深刻一層看這個知識點涉及到的內部原理(如 Flutter 中經常使用佈局的實現原理),最後總結出對應的學習筆記(供之後複習)。這樣學習起來就比較有效果,並且剛開始能夠根據自身的狀態去調節計劃時間的長短,建議開始計劃定鬆一點,確保天天都能完成。養成習慣並徹底適應後,能夠加大學習量。這就跟健身的原理同樣,剛開始鍛鍊的人通常都體質比較差,因此須要從最基礎的動做開始練,等將基礎打好了,體質提高上來了,才能去適當地作一些力量訓練,增長肌肉。
這可能說明學習的時候沒有注重體系化地學習與思考,而是東學一點西學一點,那這些知識天然而然地會零散地遍及在咱們腦海的各處。爲了解決這個問題,咱們須要首先須要把目前所學的知識列出來,而後可儘量地找到這些知識點的聯繫,把它作成思惟導圖。因爲可能有不少聯繫點咱們以前學習的疏漏而沒有把它歸入咱們的腦海中,可是,這並沒有大礙,後面咱們能夠圍繞這張 1.0版本的安卓知識思惟導圖 不斷迭代,最終,它就會日漸完善,發揮出想象不到的威力~
其實,對於你們來講,最重要的事情就是 如何去從最本質、最底層的層面去打磨本身? 如何培養興趣、深刻鑽研某一個領域從而成爲專家?如何具有快速、高效、不斷深挖某一技術的核心能力(即一通百通的能力)?這些問題的答案很難在短期讓你們去明白、理解。其實,我「今年的整個文章路線」就是圍繞這些內容而定製的,其共分爲幾個核心路線:「軟技能、高效構建算法知識地圖、性能優化領域專家、NDK 高手之路(偏向於 Native 層的性能優化、Hook 實現)、Flutter(從最重要的核心點 自上而下打通 Flutter 的整個架構體系)」 ,明年上半年的路線:架構師成長之路(從易到難具有強大的架構設計能力) 。可能有的同窗認爲我學的好像很雜,其實否則,我一直都專一於一條路線,就是「基礎架構研發」,它涉及的主要工做內容就是「架構設計、性能優化、前沿新技術預研(Flutter、JetPack」)。建議你們選定一條路線,也不必定要是上面的路線,專一於音視頻、圖形處理 或 AI 移動、大前端 的路線均可以,今年你們一塊兒加油,但願年末能給本身一份滿意的答卷~
學習視頻的時候建議「開 2 倍速看,對於 不熟悉/偏難 的知識,每看一個小的技術點以後,就實踐一遍,而後把實踐的成果寫入 筆記/你的初稿博客 中,對於 比較熟悉/簡單 的知識,通常是看一小節/兩三個技術點以後再實踐、寫入 筆記/你的初稿博客。」
一項新技術的出現,咱們應該先去了解它,看它是否對自身的技術成長有比較大的幫助,有的話按優先級加入學習計劃表,而不是立馬去學習或否認它。
對於大多數人來講,可能關鍵不在於學習方式的優劣,而在於「如何不痛苦地堅持下去」。而要解決這個問題,最大的利器即是興趣。「只有真正深刻到一個領域,才能培養出對其的真正興趣。若是對一件事的瞭解不深、不透,老是淺嘗輒止,那天然體會不到這件事的妙處,也天然不會產生持久的興趣。這讓人容易滑入一個死循環:瞭解不夠致使興趣不足,而興趣不足又沒法加深對它的瞭解。」
「若是我能長期地堅持去作一件事,必定是這件事帶給個人豐盈感和知足感超過了個人全部付出,必定是這件事日日夜夜縈繞在個人心頭讓我欲罷不能,必定是這件事喚起了我心裏深處最強烈的興趣」。也就是說,賜予我力量的,是激情的驅動,而不是意志力的鞭策。可是,熱情很難一直存在,所以,在熱情黯淡的時期,須要咱們有必定的自控力去作支撐過渡。所以,如何練就強大的自控力也是須要咱們去不斷深刻探索的一個問題。
一、《軟技能 代碼以外的生存指南》
二、《精進 如何成爲一個很厲害的人》
三、《躍遷 從技術到管理的硅谷路徑》
❝歡迎關注個人微信:
❞bcce5360
❝「因爲微信羣已超過 200 人,麻煩你們想進微信羣的朋友們,加我微信拉你進羣。」
❞
❝2千人QQ羣,「Awesome-Android學習交流羣,QQ羣號:959936182」, 歡迎你們加入~
❞