隨着科技的不斷髮展,數字電子設備數量迅猛增加,這些設備裏面通常都運行着程序員們寫的代碼,所以,代碼正在改變這個世界。還記得七牛雲存儲CEO許式偉在極客時間的視頻裏說過一句話,大意是:20年後若是你不會編程,那你可能和今天的文盲無異。20年後的實際狀況咱們沒法預見,不過據調查統計,愈來愈多的年輕人加入程序員大軍倒是不爭的事實。程序員
掐指一算,我從寫第一行代碼到今天,已經十幾個年頭了,雖然沒有作出什麼驚動天地的成績,但往往俯首沉思,感概良多。由於是正規科班出身,我本身的程序員之路不能說坎坷,可是也多多少少走了一些彎路,而另外一方面,我也作了一些正確的事情或選擇,憶苦思甜,喜憂參半。在這年終將至之際,我想和年輕程序員們聊聊成長,但願對剛上路的大家有所啓發。數據庫
剛開始進入軟件行業時,若是你只是學習一些原理不動手實踐,可能沒有直觀上的認識,以爲仍是雲裏霧裏,可能漸漸失去學習的樂趣。這時候可能須要一些能快速讓你看到學習成果的工具,所以,對於入門的程序員,有時候進行一些GUI編程仍是不錯的,這讓你對本身的學習成果有更直觀的認識,激起更強的學習慾望。這裏說的偏向於學習方法,即懂得在學習中使用相應的工具來幫助本身理解和進步。編程
下面要說的真正是善用工具的例子。我曾經看到過一些開發人員,領導給一大堆Excel表,要求將裏面的數據導入到MySQL數據庫,他就打開數據庫表,拷貝Excel表裏的數據一行一行的插入到數據庫表中。若是數據量不大,這樣作沒什麼問題,數據量很大的狀況下,可能須要一個月才能完成。若是是你接到這個任務,評估手動工做量以後,你應該立刻想到要採用自動化來實現數據插入了。能夠將Excel表數據轉換成CSV格式,而後寫個腳本,結合awk、sed這些Linux下的工具進行文本分割替換,而後調用MySQL相關命令執行SQL語句將數據插入到數據庫。這個腳本估計數小時就調試好了,而後腳本自動將數據導入數據庫,你能夠邊喝咖啡邊查看數據導入狀況了。一個月手工能完成的工做,你把它自動化,不到一天時間就搞定,大大提升工做效率,老闆不賞識你都難。所以,工做中咱們應該牢記:善用工具,解放勞動力!後端
計算機科學發展至今這麼多年,不少原理性的東西其實一直沒有太多變化,本質上的突破其實不是那麼多。CPU架構、操做系統原理,這些東西雖然也一直在演化和進步,但若是你曾經深刻理解過它們的原理,即便不少年沒有繼續進行這方面的學習,你所理解的這些底層原理對你來講也是夠用的,固然,我指的主要是進行應用層開發的程序員,若是你是內核開發人員,那會有些不同。而更上層的東西,好比編程框架、程序類庫,這些東西的變化相對快不少,今天還沒學會這個,明天那個又出來了,搞得咱們程序員迷茫在疲於奔命中。瀏覽器
做爲程序員,咱們會使用一些新技術來完成工做任務當然重要,但技術的選擇多種多樣,形式也是變化無窮,而這些技術的底層原理每每是相同的。比如如你使用不一樣的JavaScript庫,它們的使用方法有些不同,但都是由瀏覽器的JavaScript引擎解釋執行。若是你深刻掌握了JavaScript編程語言,理解瀏覽器的DOM概念及渲染原理,那你使用那個JavaScript庫都會內心舒坦,出現錯誤時能更快速定位問題的根源。仍是那句話:萬變不離其宗,做爲程序員,咱們應該力求掌握其「宗」,以不變應萬變。並且若是你掌握了基礎原理,對你學習新技術時在理解上也是有很大幫助的。舉個例子吧,好比散打和泰拳裏面都有最基礎的步伐訓練,而散打裏面還有個重要的技能是摔法,泰拳則側重膝肘攻擊,若是你把散打裏面的步伐練好了,再去學泰拳,由於有步伐基礎,你會學得快不少。在這裏,步伐就對應咱們說的底層技術原理。七牛雲存儲
當你技術水平達到一個比較高的水準後,可能會有不知道如何提升的感受,日復一日擼業務代碼堆積功能的重複工做讓你迷茫。其實呢,你還有很大的提高空間,這時候須要開闊你的技術視野和行業視野,一旦視野開闊了,只會以爲學無止境,你所知道的不過冰山一角。架構
首先咱們來聊一下技術視野。假設你是作Java後端開發的,通過幾年的實踐成長後,你最起碼應該知道Java語言的一些發展歷程,是借鑑了其它哪些語言發展起來的,摒棄了其它語言中哪些很差的特性,它的優點和劣勢分別有哪些,Java方面有哪些著名的書籍,好比《Thinking in Java》等等,Java領域有哪些牛人,他們的技術博客你也能夠去看看,瞭解他們都在作什麼,時間久了,你的技術視野就開闊了,你甚至對一些技術的發展趨勢有了本身的判斷。不苛求你的判斷是準確的,可是已經有了本身的觀點。框架
其次是行業視野,即對本身所處行業有一個總體局勢上的瞭解。好比大家公司是搞雲平臺的,我相信你不會不知道阿里雲,但我以爲你應該瞭解更多的同行,好比青雲、UCloud這些公司,他們的客戶對象主要是哪些,他們在技術上有哪些亮點值得學習,甚至他們有哪些地方作得不夠好,而後在打磨本身的產品時,你就會多注意吸收人家好的方面,人家不夠好的地方,你爭取作得更好,這樣纔能有競爭優點。若是你的雲平臺是基於OpenStack,那你在深刻OpenStack技術自己時還應該一直關注OpenStack社區的發展方向,如何跟發展迅速的Docker容器技術進行結合等。除了這些,你還應該常常去看看同行的雲產品,從產品文檔有時候就能夠看出或大體猜到他們底下使用了哪些技術,甚至可能的話還關心他們的用戶數據,以及這些用戶是如何使用他們產品的。這樣長此以往,你對所處的行業從總體局勢上有一個比較全面的認知,你愈來愈廣闊的行業視野逐步成爲你在這個行業中競爭優點的一部分,你,可能不會那麼迷茫了……編程語言
延伸閱讀:工具