如何快速掌握一門新技術/語言/框架

無敵北瓜發表於2015-08-17

IT行業中的企業特點是都屬於知識密集型企業。這種企業的核心競爭力與員工的知識和技能密切相關。而如果你在企業中扮演的是工程師的角色的話,那麼你的核心競爭力就是IT相關的知識與技能的儲備情況。而眾所周知,IT行業是一個大量產生新知識的地方,就拿Web前端舉例,短短的5,6年時間,Web前端已經經歷了數次變革,就目前來看變革還將繼續下去。從以前的div+css網格化佈局到JavaScript的方興未艾,然後是各種JavaScript框架的百家爭鳴,HTML5和CSS3的落地,移動web衝擊下帶來的響應式設計,jQuery,AngularJs,ReactJs等操作DOM元素截然不同的理念和方式,web component的標準化程式……為什麼現在企業到處都在招前端工程師?好像突然之間,前端工程師成了稀缺資源。這裡的原因之一就是很多前端工程師跟不上行業變化,無法達到目前市場上對前端工程師的能力和要求。在這種大環境下,工程師能夠掌握快速學習的能力就變的至關重要。

筆者根據自身的親身體會,以及結合對周圍同事的觀察,對如何快速掌握一門新技術(這裡的技術包括一門新的IT技術,包括一門新的程式語言,抑或一種新的程式框架等)有著以下幾點指導。

要想快速掌握一門新技術,首先有兩個先決條件。

  1. 首先思想要主動求變,敢於跳出的自己的舒適區,對任何技術都抱有開放的心態。貪圖安穩是人的本性。而這種本性往往會阻礙你的發展。人所能瞭解的知識的多少,取決於自己的舒適區有多大,舒適區越大,與外界接壤的範圍越大,就越感覺自己的無知。程式設計師至少要做到兩點,不要對自己不瞭解的技術心存偏見,不要對自己不熟悉的技術心存恐懼
  2. 要化被動式學習為主動式學習。在中國很大一批程式設計師每天都是在被動式學習。什麼是被動式學習?就是被人、事逼著去學習。今天新啟動一個專案,技術調研不想採用新的技術,開發過程中碰到難題才會去查資料,整天就是把別人的、自已以前寫的程式碼複製重用,複製以後出問題了也要花好長時間解決。舉個例子,一個程式設計師使用了Spring好幾年,都不知道Spring的核心理念,不知道Spring框架結構,不知道Spring各個元件功能,不知道Spring新版本的新特性。這是非常可怕的,因為你不知道這些東西,就無法採納Spring的最佳實踐,出現問題不知道如何快速定位,專案中的某些需求就無法使用Spring早已封裝好的功能(因為你不知道Spring還能幹這個)。主動式學習需要你未雨綢繆,不能臨時抱佛腳。而且要把學習看做是對自己的積累和提高,看成是對自己的長期投資,不能抱有太強的功利性。

有人說,我就是喜歡舒適區,我就是不喜歡主動學習,有什麼好的方式和方法改變這兩點?說實話,我所能提供給你的幫助很有限。正如《後會無期》裡的一句臺詞,“我聽過很多大道理,可依然過不好這一生”。這兩點還是更要靠你個人來實現。而接下來的一些點,我相信可以幫助到你。

  1. 學習一門新技術前,先要搞清楚為什麼要學習它?沒這個技術前我們是怎麼幹活的?有了它以後我們又是怎麼幹活的?它帶來了哪些改變?其實問這些問題,就是為了瞭解該技術解決或者簡化了那個問題域的問題,又是採用了什麼方式達到了這樣的效果。就拿AngularJS為例,AngularJS最初是為了彌補HTML構建應用的不足。以前的HTML在設計時是為了展示多媒體資訊,後來雖然擴充了一些動態功能,但是在應用web化的潮流下,HTML設計上的不足就越來越突出。比如DOM元素操控太繁瑣、業務邏輯很難模組化、可測性低、開發效率底下等。而AngularJS採用了一種全新的設計來解決該問題,它提出了一系列概念,引入了資料繫結、識別符號、路由、依賴注入等特性,大大簡化了我們開發WEB開發的工作量。通過這樣的方式能迅速建立起了對該技術的巨集觀認識,瞭解了其潛在的應用場景、應用方式以及一些侷限性等。
  2. 接下來就要實際使用一下該技術的核心的功能,強化對它的認識。方式就是參考該技術官網的Quick Start(快速開始)章節,一步一步來。現在的程式設計師越來越珍惜時間,文件的簡潔性、完備性、易上手都成了是否採納某項技術的指標之一。尤其是現在的各種開源元件,連文件都是開源的。所以很多文件都是完全按照程式設計師的思維寫的,讀起來很清爽。再拿Spring來說,想學習Spring4.0推出的Spring boot元件,那麼可以訪問其官網,頁面上最大的按鈕就是Quick Start。點選學習吧。頁面是一個簡單的例子,可能花不了你五分鐘。如果還沒過癮,右邊又列出了更多的

Getting Started Guides ,也是一步一步的教你進階功能。有些人可能要問了,英語不好怎麼辦?請學英文。英文是一個優秀程式設計師的必備技能。可能也有人說,看文件時有各種雜音咋辦。比如看Spring boot的start guide,需要之前對Spring有一定了解,需要知道tomcat、jetty是幹啥的,需要有一定gradle或者maven使用經驗…這些知識在演練Spring boot的那個小程式時都需要,但由於這些雜音的干擾,會拖慢學習的過程。擺脫這些雜音的唯一方式就是,對於那些不瞭解的知識點,也花時間去學習吧。所以學習是一個良性迴圈的過程,學的越多,就學的越快。

  1. 前面兩步能夠保證你對一門技術入門,那麼如何進階那?這個階段就是讀了。從官網上把該技術的詳細文件扒拉下來,使勁讀吧。通讀這些文件能讓你進入它的實現細節,以及各種使用方式與場景,甚至一些最佳實踐。比如Spring boot官方文件,詳細到了牙齒。凡是你想到的、沒想到的,文件都貼心的列了出來。如果你想學習Scala,那麼請訪問http://www.scala-lang.org/documentation/,各種文件應有盡有,讀完就是大半個Scala專家。一門技術最好的文件必須是它的官方文件,如果不是,那麼這門技術火不了。注意通讀文件的過程中一定要在專案加以運用。如果在專案中沒實踐機會,自己可以寫一些小的demo來實踐。學習知識時實踐與理論相結合的道理恆古不變。
  2. 走完前三步,你對這門技術的理解已經比大多數人強了。你可以算掌握這門技術了。那麼還有進階方式沒?當然有,那就是把你所學、所想講出來,寫出來,暴露在公眾之下,接受批判,從而發現自己的不足,促使你進步。有空給大家做幾個講座,寫幾個系列文章,那麼你在大家眼中就成了這門技術的牛人。你就有了各種機會來解決使用該技術遇到的各種疑難雜症,反過來加深和修正你的理解。沒事上上StackOverFlow,回答別人幾個問題,或者訂閱該技術的問題列表,經常看一看。
  3. 還可以再繼續深入。加入國內/國際技術社群(國內沒這樣的社群咋辦,機會來了,趕緊自己建一個),進一步發揮自己影響力。翻譯、編寫與該技術相關的書籍;如果該技術是開源的,那麼有時間就提交修改把,自己就成了開發者一員了。這就是質的飛躍,從使用工具進階到創造工具。

走完5步,你已經不是僅僅掌握這門技術了,你已經超神了好吧!有人可能又會問,能達到這五步的肯定要花很長時間,不是一般人能夠到的高度。那當然了,這個過程肯定很難,但並非難到登天。至少我身邊有很多這樣的例子。其實你只要完成前三步,你就比50%的程式設計師牛了,完成第四步,你已經站在90%程式設計師的前面。

最後快速總結。重要的事情說三遍。

  1. 主動學習很重要,主動學習很重要,主動學習很重要。
  2. 官方文件很重要,官方文件很重要,官方文件很重要。
  3. 實踐很重要,實踐很重要,實踐很重要。

相關文章