用了多長時間學習研究某一框架軟件?
我是不太敢稱自己為專家,對于一些軟件、框架的掌握,我甚至都不敢說自己“精通”,最多也就是熟練掌握,倒不是因為我謙虛,一方面確實認為想要在一個領域達到專家的水平是非常有難度的,自認為達不到這個程度,另外一方面,就是覺得如果是軟件、框架這個層次,不一定非要做到專家水平,設置可以說沒必要做到專家的程度。
01. 需要多長時間才能熟練掌握一個軟件或框架具體給一個時間長度沒有意義,因為難易程度不同、每個人的基礎不同、學習的背景和出發點不同:
我認為最快掌握一個框架,就是“被逼無奈”、“走投無路”的時候,為了解決項目上的某個棘手的問題,學習一個作為解決方案的框架或軟件,這個過程是最快的;我曾經開發一個新項目,時間周期特別的緊,項目中需要使用 Kafka,從搭建、集成、使用,再到略加深入的研究,前后大概花了兩周的時間;當然,也只能算作“熟練掌握”罷了;
在學習 Kafka 的過程中,因為之前我對 RabbitMQ 有一定的了解,所以學習起來會比較快,很多的時候我是在比較兩者的不同,而如果對消息隊列沒有一點了解的程序員學習 Kafka,可能會花費更長的時間;
如果工作中沒有特殊的要求,我學習一門框架的時間可能就長短不一了,可能幾天、幾周,甚至是幾個月,而更多的時候,因為沒有碰到過實際的問題,所以你很可能不會把每一個框架都做深入的研究。
02. 為什么說軟件、框架這個層次,不一定非要做到專家水平跟其他的行業相比,軟件行業的變化很快,技術更新的頻率極高,比如醫生可以始終在某一個非常小的領域進行研究,我就研究眼科,或者就一直做牙醫,做一輩子,成為眼科的專家,但是程序員不行,你說我一輩子就研究 Spring 吧,將自己的技術積累押寶在當前某一個流行的軟件或框架上,這個風險非常大;短期內可能會有成效,但是我們的職業壽命要四十年甚至更長。
有些程序員在某些大公司混的風生水起,非常熟悉公司的技術棧,但是當他換一個公司、換一個平臺的時候,可能就會遇到發展的瓶頸;這是因為作為的“某一領域的專家”,只是依賴于當前公司這個平臺,但不一定可以匹配市場的需求,錯把平臺資源當成自己的能力。
那我們究竟應該學習什么?我十幾年前剛成為 Java 程序員的時候,最流行的就要數 SSH 了,也就是 Spring 、Struts 和 Hibernate,現在再看看,Struts 幾乎絕跡,Hibernate 半死不活,Spring 雖然很火,也是因為版本迭代的很快;
所以十年前我要是選擇了一直研究 Spring 還好,要是選擇押寶了 Struts ......
軟件、框架的更新時很快的,我們不能把主要的精力放在它們身上。
在學習 Spring Cloud 、Dubbo 的時候,也要學習架構設計和演變;
在學習編程語言的時候,也要學習設計模式;
在學習通信框架的時候,也要把網絡模型學習好;
學習 Angular、React、Vue 一堆框架,不如先把精力放在 HTML/CSS 上...
總之,基礎打得牢,框架學的快,不要把百分百的精力都放在這些不斷變化的框架上。
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。