程序員的自我進化:學習之道,如何更有效的學習

不得不感嘆,計算機技術更新迭代的速度太快了,作爲程序員每天除了面對工作,就要學習新技術,筆者自己也不例外,近三年來,筆者自己的感覺是一直在爲技術疲於奔命,直到現在,也不敢放緩腳步。學習對於程序員來說太重要了,就像每天必須喫飯一樣,程序員每天必須抽出一定時間學習新技術,避免被淘汰。

然而,目前的計算機編程語言和技術框架可謂百花齊放,百家爭鳴。作爲程序員如何去學習,以及如何更有效的學習呢?本篇將從以下5個方面來講,希望能夠讓大家的程序員學習之路更有效。


1.定位自我

所謂定位,在對本產品和競爭產品進行深入分析,對消費者的需求進行準確判斷的基礎上,確定產品與衆不同的優勢及與此相聯繫的在消費者心中的獨特地位,並將它們給目標消費者的動態過程。                                   ---《定位》艾·里斯和傑克·特勞特
“定位(Positioning)”概念,首次出現是在商業營銷中,艾•里斯與傑克•特勞特提出了定位理論,開創了一種新的營銷思維和理念,被評爲“有史以來對美國營銷影響最大的觀念”。

那麼對於程序員,我們對自己以及自己從事的工作,也應該給一個準確清晰的定位,至少你要清楚,你是一個程序員,在你拿着高薪工作的時候,你要爲這份工作付出很多,包括時間、經歷和金錢,最主要的是,你需要不斷學習,不斷更新自己的技術棧。

定位,意味着,你要認識到當前自己的優勢和不足,並制定好未來的規劃和技能需求,你要確定你是去大公司鍍金還是去小公司獨當一面,然後沿着這個方向不斷學習和武裝自己。

2.有效學習的步驟

對於國內大多數人來說,從小到大我們接受的都是應試教育,填鴨式教學。當你進入職場,離開了當初的教育環境,成爲一個名副其實的程序員,你還在不斷要求自己學習嗎?

第一,針對學習,不同的人的認知能力是有差距的,而不同的學科也會呈現不同的特點。就像技術更新迭代一樣,人的學習過程也是一個迭代的過程,用已知的知識去認識未知世界,當兩者之間有關聯時,就會很快被理解並接受,否則就表現出不理解和不接受的特性。

所以關聯是人類認識的本質,我們要刻意去強化這個過程,使得關聯產生的越多、越直接,你理解和接受的認知也越多。類似於,當你在會Java編程語言基礎上,再去學習Python編程語言時一樣,你不需要再從HelloWord寫起,而你應該去了解Python和Java在句法等上的不同點,並在熟知的必要條件下,你就直接可以開始寫代碼了,遇到不懂得地方,再去查查說明文檔,很快你就掌握Python編碼,筆者當初從Java開發做起,隨着人工智能發展,學習Pyhton就採用的這種學習方式,一個月時間就很熟練了。但這種方式的優勢的學習快,缺點就是不容易學習到第二門編程語言的精華,比如從Java到Python,採用上述方法寫出的Python代碼是Java風格,而不是Pythonic風格,所以筆者推薦Python的學習者看《編寫高質量代碼改善Python程序的91個建議》這本書。

因此,學會遷移學習讓知識關聯,你將學的更快,這種關聯,不僅僅是代碼與代碼之間,包括代碼和生活中的場景,這樣更有助於我們理解業務知識。

第二,學會簡化知識,讓繁雜變得簡潔,你的大腦將更容易理解和接受。簡化讓我們對學習的知識印象更深刻,人的認知也是一樣,複雜的東西是不利於大腦記憶和處理的,我們認知的第一感覺,更傾向簡潔的東西。所謂一圖勝千言,大概說的也是這個道理。

在《代碼整潔之道》中,作者提出了一個觀點:代碼質量與其整潔度成正比,乾淨的代碼,既在質量上可靠,也爲後期維護、升級奠定了良好基礎。

就好比在開發過程中,假設我們模擬下五子棋,如果所有代碼都面向過程開發,這樣整個下棋流程爲:開始遊戲->黑子先走->繪製畫面->判斷輸贏->輪到白子->繪製畫面->判斷輸贏->返回步驟2->輸出最後結果,你需要把個個步驟一步一步實現;如果你採用面向對象的開發過程,整個下棋流程爲:先定義黑白雙方,這兩方的行爲是一模一樣的,再定義棋盤系統,負責繪製畫面,最後定義規則系統,負責判定諸如犯規、輸贏等。

採用上述2種方式開發的代碼,我相信,如果大家選擇的話,更願意選擇面向對象的代碼,因爲更簡潔,大腦更容易接受。

第三,學會知識分層,將知識系統化和層次化,存儲在大腦合適的位置。這樣我們在對知識使用時,大腦更容易搜索到。類似搜索引擎或需要模糊匹配,亦或需要精準匹配的過程。

我們的大腦存儲知識,就類似與工作中常用的數據庫一樣,對於數據庫而言,越是簡單的結構,就越容易存儲和處理,對於複雜的數據結構,不僅需要分庫分表存儲,還需要創造NoSql等來存儲。

當你遇到大量知識和信息時,永遠先分層,先抓重點。

3.沒有人輕易告訴你的學習途徑

也許每個人都有自己的學習方法,但是技術的學習還是有一些共性的東西。

第一,學會搜索知識和代碼。遇到困難或者代碼報錯,解決問題的快速辦法就是先趕快定位你的問題,並通過搜索引擎查找關鍵字詞,看是不是已經有人遇到過該問題,並且在博客或者論壇有解決辦法,此外,CSDN博客、開源中國、極客學院、菜鳥教程、W3School、知乎等都是程序員學習的好去處;還要學會在GitHub上搜索代碼,本着“避免重複造輪子”,要學會站在巨人的肩膀上看世界,儘管GitHub被微軟收購,但是豐富的開源軟件和代碼有很多價值,要學會利用。

第二,學會利用培訓機構的課程大綱。很多人一提到培訓機構的速成課程覺得都不靠譜,其實這是一種偏見。對於程序員要學習一個系統的知識,筆者有一個經驗,就是去市面上找幾個比較好的培訓機構官網,然後在官網上找到你想學習的知識的課程大綱,對照課程大綱,通過不斷利用搜索引擎來把知識點各個擊破,你也就掌握了要學習的知識。

第三,想系統全面的學習知識,一定是要靜下心來看書。移動互聯網和知識付費的快速發展,碎片化學習,成爲越來越多人工作之餘的選擇,比如,微信公衆號閱讀、得到、知識星球、GitChat等。儘管碎片化學習,每一篇文章或者觀點都會盡力把知識表達的完整和清楚。但是,筆者認爲,碎片化學習效率高、速成,但是還是有斷章取義的嫌疑,讓閱讀者缺少更加系統與深層次歸納思考和總結,而閱讀一本書就不一樣了,根據上下文和章節內容聯繫,閱讀的過程中要不斷總結和思考,這樣的學習雖然慢,但是一定比碎片化學習更系統全面。

第四,拒絕懶人模式只看不練。俗話說,眼過千遍不如手過一遍,對於學習編程來說非常實用,實踐才能出真知。學習編程時,在新手階段大多數人都有這樣一個感覺,看視頻或者資料時,一目瞭然,感覺自己都掌握了,等到親自動手寫的時候,卻遲遲下不了手。原因何在?那就是缺少練習,你僅僅是隻看不練。新手先從模仿做起,跟着教程自己親自敲寫一遍代碼,這樣知識點掌握的更透徹,然後在這個基礎上,你才能根據自己的思路去修改和寫出相應的代碼。

第五,沒有永久的記憶,只有不忘的博客。都說魚的記憶只有七秒,那人的呢?大家都知道,每天面對各種各樣的事情,我們大腦的記憶存儲處理也是有限制的,不可能把全部的東西一點不漏的記憶下來。也許隨着時間遷移,當初你覺得記得非常牢固的東西,說不定哪天你就忘的一乾二淨了。所以說,沒有永久的記憶,只有不忘的博客。不妨經常抽空把自己曾遇到過的問題和好的原創內容編輯在博客裏,這樣既幫助自己總結和記憶,又能利於別人搜索學習,利人利己,何樂而不爲呢?對於好的原創內容要積水成流,說不定哪天,一個編輯就會敲開了你的創作之門,一本經典作品將流傳於世,爲後來者學習提供更好的資料。

4.如何快速學習新技術?

第一步,找到興趣點。當下整個IT技術圈,技術從硬件到軟件,更新迭代的速度是非常驚人的,作爲程序員,不僅要依靠現有技能出色的完成工作任務,還需要不斷學習新技術,不斷提升自己。如果能把興趣和技術結合起來,迅速找到自己想突破的領域將是一件非常幸運的事。我特別喜歡雷軍說過的一句話,“站在風口上,豬都能飛起來”。學技術同樣也是,要根據技術潮流和自己現有技能,選擇一個自己感興趣的細分領域,在好奇心驅動下,堅定的專注,這是你學習新技術的必要條件。

第二步,搞定環境你就對新技術入門一半了。面對越來越複雜的軟件開發環境,在興趣驅動的必要條件下,學習的第一步就是先配置好環境,其中虛擬機和Docker技術工具任何時候對你來說都是必備的,它們是你在未來工作包括開發或者測試裝機必備的工具。很多情況下,當你想學一門技術的時候,你的資源是有限的,這個時候虛擬機和Docker你就派上用場了。比如,部署Hadoop大數據分佈式環境需要幾臺機器,這個時候你就可以選擇虛擬機。當你通過幾臺虛擬機,把Hadoop分佈式環境部署好之後,在此基礎上,繼續部署Hadoop生態的其他組件,等順利完成了環境部署和通過小數據量的demo測試,你發現你對新的技術有了一定了解,可以算是入門了。

第三步,想要深入,必須找到圈子。不管是工作還是學習,任何時候你都要明白,你不是一個人。對於學習,當你完成初級入門繼續深入學習的時候,如果你還是一個人在孤軍奮戰,後面遇到更大的阻力,你可能會因此放棄。

先給大家講個真實故事,筆者目前所在的公司有很多社團活動,籃球、足球、游泳、跑步團等,由於筆者沒有什麼特長,選擇的是跑步團,每週四下午下班要在朝陽公園完成5.5公里的跑步任務。5.5公里對於經常跑步的人來說,沒什麼挑戰,最多30分鐘就跑下來了,但是對於不愛運動的我,參加跑團給我的最大感觸是,如果是我一個人跑5.5公里,30--35分鐘,我是不可能堅持下來的,但是當團隊一起跑的時候,我發現自己每次都可以堅持跑下來了。

通過上面的例子,我是想告訴大家,要有團隊意識,要找到自己興趣的圈子,避免孤軍奮戰,學會讓能力1+1>2的產出。學習也是,找到你的興趣圈子,避免讓自己的努力前功盡棄,學習的同時,找到相同愛好的小夥伴和興趣圈子,比如通過QQ羣、微信羣、知乎等一些知識社羣,和大家一起成長,要知道人外有人天外有天。

第四步,拒絕懶惰,持續輸入時間和精力。任何時候學習都不是一件速成的事,通過速成你可能很快掌握技能型的東西,但是一些精華思想是需要歲月來沉澱的。要鼓勵自己克服懶惰,對於學習要不斷輸入時間和精力,才能獲得更大的輸出。

總結,本篇文章從自我定位說起,然後介紹了幾種有效學習的步驟和學習途徑,然而筆者認爲,以上都是鋪墊,對於我們程序員來說,在業餘時間少、快節奏的工作中,如何能快速學到新知識才是最重要的。筆者給出的建議是:先找到興趣點,然後把該技術涉及的環境搭建好,其次找到該領域的圈子,最後不斷持續的輸入才能獲得更大的輸出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章