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

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. 實踐很重要,實踐很重要,實踐很重要。

作者:黃博文
來源:51CTO

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394736.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394736.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言今天星期幾問題,C語言輸入今天星期幾

滿意答案迷茫03222015.07.24采納率&#xff1a;55% 等級&#xff1a;9已幫助&#xff1a;665人123456789101112131415161718192021#include<stdio.h>int main(void){ enum weekday{ sun, mon, tue, wed, thu, fri, sat }; int n; printf("輸入星期數(0-…

備忘錄模式 詳解

定義 在不破壞封裝性的前提下&#xff0c;捕獲一個對象的內部狀態&#xff0c;并在該對象之外保存這個狀態&#xff1b; 行為型模式 角色 發起人角色&#xff08;Originator&#xff09;&#xff1a;記錄當前時刻的內部狀態&#xff0c;負責定義哪些屬于備份范圍的狀態&#xf…

dll oem證書導入工具_技術干貨 | 惡意代碼分析之反射型DLL注入

歡迎各位添加微信號&#xff1a;qinchang_198231 加入安全 交流群 和大佬們一起交流安全技術01技術概要這是一種允許攻擊者從內存而非磁盤向指定進程注入DLL的技術&#xff0c;該技術比常規的DLL注入更為隱蔽&#xff0c;因為除了不需要磁盤上的實際DLL文件之外&#xff0c;它…

像程序員一樣思考_如何像程序員一樣思考-解決問題的經驗教訓

像程序員一樣思考by Richard Reis理查德里斯(Richard Reis) 如何像程序員一樣思考-解決問題的經驗教訓 (How to think like a programmer — lessons in problem solving) If you’re interested in programming, you may well have seen this quote before:如果您對編程感興趣…

CF908G New Year and Original Order 數位DP

傳送門 看到數據范圍到\(10^{700}\)毫無疑問數位DP。那么我們最重要的問題是如何有效地維護所有數位排序之后的數的值。 對于某一個數\(x\)&#xff0c;設\(f_{x,i} (i \in [1,9])\)表示\(x\)中的所有數位的值\(\geq i\)的數位數量&#xff0c;比如說\(f_{6345982 , 7} 2 , f_…

銳捷亮相GITC:請互聯網企業為我點個贊!

【51CTO.com原創稿件】GITC全球互聯網技術大會已成功舉辦四屆&#xff0c;今年的會議現場依然是摩肩接踵圍觀者眾。圍繞互聯網熱點技術&#xff0c;眾人根據云、大數據、安全、運維、基礎架構的不同主題&#xff0c;各自聚成小圈子展開深入交流。 銳捷的展位在主會場的內側&…

c語言匯編混合編程方法,C語言和匯編語言混合編程方法

摘要&#xff1a; C語言是一種高級的面向過程的開發語言&#xff0c;匯編語言是一種低級的面向機器的編程語言。兩者在程序設計開發方面各有優劣&#xff0c;目前兩者的混合編程得到了廣泛的應用。本文通過具體的實例&#xff0c;說明了混合編程的基本方法&#xff0c;為C語言應…

WPF Slider設置整數

IsSnapToTickEnabled"True" 轉載于:https://www.cnblogs.com/Fred1987/p/6038608.html

api代理提取_了解提取API

api代理提取Interested in learning JavaScript? Get my ebook at jshandbook.com有興趣學習JavaScript嗎&#xff1f; 在jshandbook.com上獲取我的電子書 Since IE5 was released in 1998, we’ve had the option to make asynchronous network calls in the browser using X…

react.lazy 路由懶加載_React lazy/Suspense使用及源碼解析

React v16.6.0已經發布快一年了&#xff0c;為保障項目迭代發布&#xff0c;沒有及時更新react版本&#xff0c;最近由于開啟了新項目&#xff0c;于是使用新的react版本進行了項目開發。項目工程如何搭建&#xff0c;如何滿足兼容性要求&#xff0c;如何規范化等等這里不作為介…

Dart編程語言入門

Dart基礎入門語法介紹&#xff0c;詳細說明可以查看相關視頻《Dart編程語言入門》。 變量與常量 變量 1.使用 var 聲明變量,默認值為 null var a;//null a 10;2.顯示類型聲明 int a;//null a 10;3.使用 var 聲明&#xff0c;可賦予不同類型的值 var a; //null a 10; //int a…

《PHP精粹:編寫高效PHP代碼》——1.1節為什么要使用面向對象編程

本節書摘來自華章社區《PHP精粹&#xff1a;編寫高效PHP代碼》一書中的第1章&#xff0c;第1.1節為什么要使用面向對象編程&#xff0c;作者&#xff1a;&#xff08;美&#xff09;  Davey Shafik&#xff0c;更多章節內容可以訪問云棲社區“華章社區”公眾號查看 1.1 為什…

c語言數據結構系統化,C語言數據結構+數據庫+操作系統

http://cv.qiaobutang.com/post/55c419b20cf2009bd4607795第二部分是專業相關的C &#xff0c;數據庫&#xff0c;操作系統&#xff0c;數據結構。http://c.biancheng.net/cpp/u/shuju/數據(Data)是信息的載體&#xff0c;它能夠被計算機識別、存儲和加工處理。它是計算機程序加…

c語言判斷一個序列是不是另一個的子序列

1 #include <stdio.h>2 #include <string.h>//添加字符串頭文件3 4 int Subsequence(char s[], char t[]) 5 {6 int m,n,i,j;7 n strlen(s); //n表示序列S的長度8 m strlen(t); //m表示序列T的長度9 i0; 10 j0; 11 if (m>…

linux中python如何調用matlab的數據_特征錦囊:如何在Python中處理不平衡數據

今日錦囊特征錦囊&#xff1a;如何在Python中處理不平衡數據? Index1、到底什么是不平衡數據2、處理不平衡數據的理論方法3、Python里有什么包可以處理不平衡樣本4、Python中具體如何處理失衡樣本印象中很久之前有位朋友說要我寫一篇如何處理不平衡數據的文章&#xff0c;整理…

源碼安裝zabbix遇到的報錯集錦

報錯1&#xff1a;checking for mysql_config... configure: error: MySQL library not found 解決辦法&#xff1a;查找mysql_config #find / -name "mysql_config*" /usr/local/mysql/bin/mysql_config 在配置時將原有的 --with-mysql 改為 --with-mysql/usr/loca…

pso算法c++語言代碼,一C++PSO(PSO)算法

收集和變化PSO算法&#xff0c;它可用于參考實施&#xff1a;#include #include #include #include #include #define rand_01 ((float)rand() / (float)RAND_MAX)const int numofdims 30;const int numofparticles 50;using namespace std;//typedef void (*FitnessFunc)(fl…

Hadoop不適合哪些場景 哪些場景適合?

Hadoop設計的目的主要包括下面幾個方面&#xff0c;也就是所謂的適用場景&#xff1a; 1&#xff1a;超大文件 可以是幾百M&#xff0c;幾百T這個級別的文件。 2&#xff1a;流式數據訪問 Hadoop適用于一次寫入&#xff0c;多次讀取的場景&#xff0c;也就是數據復制進去之后&a…

微服務 邊界服務_遵循這些實用原則以獲取精心設計的微服務邊界

微服務 邊界服務by Jake Lumetta杰克盧米塔(Jake Lumetta) 遵循這些實用原則以獲取精心設計的微服務邊界 (Follow these practical principles to get well-designed microservices boundaries) 如何避免使微服務太小和緊密耦合 (How to avoid making your microservices too …

ShareEntryActivity java.lang.ClassNotFoundException | Android類找不到問題

錯誤堆棧&#xff1a; Process: com.mci.smagazine, PID: 23265java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mci.smagazine/com.mci.smagazine.apshare.ShareEntryActivity}: java.lang.ClassNotFoundException: com.mci.smagazine.apshare…