如何高效的學習掌握新技術

最近一段時間,把React學習實踐了一把,算是又多掌握了一門新技術,雖然學習過程比較辛苦曲折,但熟練掌握後感受仍是很好的,之後又多了一種選擇,在技術思路上也開闊了不少。javascript

回想編程生涯這些年,2001年開始學習Asp,2002年學習Javascript,2003年學習Asp.Net/C#,2009年學習Objective-C,2013年又跳到前端這個大坑,從NodejsjQueryAngularjs到如今的React。這一路學來,走過一些彎路,也積累了很多學習的經驗。html

積極開放的心態最重要

學習新技術,就如探索一片新的領域,通常在心態上來講,都會有兩種典型的心態,一種是恐慌和抗拒的,一種是積極和開放的,不一樣的心態會形成不一樣的結果。好比對我本身來講,對於編程技術,一直是我所喜歡的,因此編程的新技術,老是能積極的去學習,而且能很快掌握。而對於英語和寫做,從上學開始,就一直是我所不喜歡不擅長的領域,因此即便學了不少年,也並無什麼明顯的進步。直到後來工做後,逐步意識到英語和寫做的重要性,在心態上做出了調整,積極的去面對,到如今總算是改善了不少。前端

學習新技術的另外一個障礙來源於已經熟練的技術。當好不容易把一門技術掌握的很熟練後,雖然這在未來學習新東西時,會幫助少走不少彎路,但同時可能也會變成一種障礙。java

我曾對幾門語言掌握的至關熟練,甚至有些曾覺得本身精通了。好比當年對於asp,能夠熟練的完成在當年技術條件下的複雜BS系統,雖然按如今標準來看,也無非是用vbs對數據庫增刪改查,那時候交互並不複雜,還能配合寫一些簡單的javascript,讓體驗更好一些。那時候以爲會了Asp,能夠搞定全部的BS系統開發了。後來Asp.Net出來了,心理很複雜,一方面以爲我用Asp已經啥均可以搞定了,爲何要學Asp.Net?另外一方面以爲這個是將來發展的趨勢,仍是應該學習掌握,否則之後可能跟不上時代發展。結果仍是硬着頭皮去學。只是每次遇到困難挫折的時候,就會有放棄回去寫Asp的念頭,以爲這要是我用Asp來寫,早搞定了,何須這麼苦逼學新技術呢?node

當我終於有一天,對Asp.Net熟練掌握後,才發現本身原來的淺薄無知,之前Asp也就是停留在腳本編程,到了Asp.Net,已經能夠用面向對象的思想去設計架構,甚至於出了網頁,還能夠去開發後臺服務。這對於我來講,至關於又打開了一扇新的大門,能夠從更寬廣的角度來看待問題。react

從心理學的角度來講,咱們對於外部世界的認識可分爲三個區域:溫馨區,學習區,和恐慌區。咱們所熟悉的技術領域就是溫馨區,而新技術是處於學習區或恐慌區。隨着對新技術的掌握,新技術會進入溫馨區,可是總還會有更新的技術在學習區甚至恐懼區,等着去學習掌握。jquery

若是想高效的學習掌握新技術,在心態上必定得是開放和積極的。git

作中學(Learning By Doing)

若是沒有@鄒欣老師的《構建之法》,我可能無法這麼精準的去歸納這種邊作邊學的方法,對於軟件技術的學習,最高效的辦法應該就是「作中學」。程序員

如何經過「作中學」去學習掌握新技術,我通常分紅這樣幾個步驟:angularjs

  1. 總體概覽
  2. 明確階段性目標,選擇實踐項目
  3. 蒐集整理相關文章和開源項目,模仿借鑑

總體概覽

所謂磨刀不誤砍柴工,在動手去作前有必要先作一些準備工做。在開始學習一門新技術的時候,先對新技術總體有個瞭解是頗有必要的,須要知道它能作什麼,有哪些關鍵的知識點。接下來的步驟,也都依賴於對技術總體的掌握和了解。

這個工做,若是有條件,能夠買一本薄一點的,淺顯易懂的書,總體翻一翻,基本就能有個瞭解。但不建議買大塊頭的書,通常大塊頭的書適合當詞典來查。但如今新技術推出速度太快,每每要等書出來每每是幾個月以後的事情了,因此絕大部分時候,仍是獲得其官方網站去查相關技術文檔。就像此次學React,確實難找到本合適的書,因此我直接去它的官方網站() ,把Getting Started裏面的文章快速的瀏覽了一遍,基本上算是有了個大概的瞭解。並且如今網絡上相關文章也比較多,經過搜索,也能找到不少相關的文章和資料。

明確階段性目標,選擇實踐項目

通常一門新技術所涉及的面比較廣,若是一開始就想全面掌握並不現實,但若是從一個個點去突破,相對要簡單不少。因此通常我會經過一個或多個項目實踐的形式,分紅幾個階段,逐步去掌握各個知識點,最終總體去學習掌握技術。

例如我之前學習一些服務端語言,都會嘗試經過寫一個留言板或者博客系統來學習,而此次學習React,主要就是經過用React重構我之前用Angularjs寫過的一個聊天室應用,來學習掌握React。經過前面對React的概覽性學習,結合自身狀況,我對於這個項目實踐,簡單分紅了幾個階段:

1. 用React搭建基礎框架
React的應用是基於Flux架構,而Flux架構並無統一的標準,須要選擇使用一種Flux架構實現,並基於它搭建基礎框架。

2. 實現界面基礎組件
React是基於組件的方式來編程運行的,因此須要將整個應用拆分紅若干基礎組件,這個階段主要就是把界面的元素和交互拆分紅若干基礎組件

3. 和服務器進行通訊
一個完善的程序,離不開和服務端的交互,對於一個React程序,其和服務端交互的方式,和傳統應用程序,並不全相同,而且對於和服務器通訊的結果數據,還要和界面整合

4. 發佈測試完善
對於作好的做品,發佈給本身和其餘人進行測試,而後繼續完善,在這個過程當中去進一步學習掌握技術細節

當明確了實踐的項目和各個階段的目標,後面就是如何去達到這個目標了,在實踐中學習。

蒐集整理相關文章和開源項目,模仿借鑑

書本或文檔上一個個知識點的說明,和最終的項目產品,仍是有很大差距,項目最終是須要充分運用各個知識點,合理組合,才能寫出高質量代碼,而對於新技術,一開始很難掌握這些細節,盲目依賴以往經驗,極可能就是照貓畫虎,最終作出來的東西不三不四。

在初學習實踐新技術時,模仿借鑑很重要,就像小孩子學說話,都是從模仿開始。好在如今經過github這種開源項目託管服務,利用搜索,能夠找到很是多的優秀開源項目。

早些年學習Asp.Net的時候,我有過很長一段時間對開源項目AspNetForums的二次開發經歷,從中受益良多。以我當時的水平來講,是不可能設計開發出來那樣的高質量產品,甚至於看懂都有些吃力,但正是經過對它的二次開發,不只讓我快速的學習掌握了不少Asp.Net開發的知識點和細節,也養成了不少良好的編碼習慣。在後面在作其餘項目,能夠模仿和應用它不少設計實現。

有些程序員寫了不少年程序,代碼質量不高,一個緣由就是由於看的太少,不多去參考學習那些優秀的開源項目。沒有見過好的代碼是什麼樣的,天然很難寫出來高質量的代碼。

在我此次開始動手實踐React項目前,也嘗試找了不少開源項目,因爲React技術較新,尚未能夠直接完整參考的項目,因此只能是多個項目參考對照。如下就是部分我學習和參考過的項目列表:

在前期搭建基礎框架的時候,就是直接借用的前兩個項目的框架,這樣很快就能讓程序跑起來,而後在後面的基礎組件設計的時候,更多的就是參考hipchat的組件設計。

作中學(Learning By Doing)

在看書看資料的時候,一個個知識點看起來並不複雜,可是當真正去動手實踐的時候,會遇到各類各樣的問題(坑),而這些問題只有反覆的思考、查資料、問人才能最終解決。

在作中學,聽起來很酷,但這個過程老是艱辛曲折的!學習每每就是這樣的,只有經歷各類各樣的磨練,才能真正的去掌握這些知識,把這些知識轉變成自身的能力。

我此次用React重構聊天室的經歷,如同我以往學習其餘新技術的經歷同樣,充滿了艱難險阻,兩個月來付出良多。但最終完成的時候,倒是成就感滿滿,感受到對於新技術終於算是基本掌握了,雖然還有一些知識點沒有應用到,也不過是時間問題罷了,再回頭看之前的一些程序設計,又有了不少新的思路。

經驗教訓

如下是總結的一些經驗教訓

貪多嚼不爛

雖然如今新技術推出很快,但不少技術本質並無變,在有其餘技術「良好基礎」的前提下,掌握一門新技術並不須要花太長時間,但「良好基礎」就如學習武功的內功,纔是真正須要多花時間去培養的。

因此去學習新技術以前,先看看手頭的技術是否是掌握好了,若是沒掌握好,不妨先學好再說,否則每門技術都淺嘗則止,反而是難有成就。

目標不宜太大,要有階段性成就正向激勵本身

人的學習熱情都是有周期性的,最開始激情滿滿,一段時間後就會激情逝去,很容易就半途而廢放棄了。

因此在設定階段性目標時,最好能目標小一點,現實一點,能多一些正向的反饋,這樣能讓本身走的遠一點。

舉例來講,寫程序能夠優先寫單元測試和界面部分,這樣很快就有明確的反饋,好比當你看到單元測試所有經過了,能看到界面了。

學習不會白費

有時候辛辛苦苦學的新技術,可能不久後就會過期,這時候不免會有是否是白學的想法,但實際上學習歷來不會白費的,看過一句話我以爲頗有道理:

你所學習的一切都在幫助構建你頭腦中的神經元網絡,會幫你創建某種聯繫使你在後續學習其餘東西時更加容易,瞭解一種知識可以使你跟其餘知識進行比較和對比。所以,學習老是有用的,不管學什麼。

出處:如何克服 JavaScript 框架疲勞?

就像十幾年前我把Javascript學的很熟練了,那時候以爲沒什麼卵用,如今看來倒是大有用途:)

相關文章
相關標籤/搜索