如何高效學習編程技術?

通過這段時間的看書學習和對編程的思考,結合自己的親身的學習經歷,今天想和大家聊一聊如何高效學習編程技術。

我們可以把學習編程技術的人分爲下面四種情況。

第一種是既懂方法又努力的,學的又快又好,但大家會覺得這是他們有天賦,甚至稱他們是天才,而並沒有看到他們的方法和努力。

第二種是不懂方法但努力了,這類人學的不快但願意花時間學,不過由於學習編程技術所需的時間一般比較長,一些人沒有堅持下去便放棄了,而一些人則堅持了下來,最後學的很好。

第三種是知道方法但並不是一直都很努力,這類人學習的持續性比較差,一些技術學的比較好,而另外一些技術學的不好。

第四種是既不懂方法又不肯努力的,這類人自然是學不好編程技術的。

注意我這裏說的只是對於學習編程技術的,並不代表編程學的不好的,學習其他事情也是這樣,切莫以偏概全。比如在實際生活中,一個編程學的不好的,但唱歌唱的卻特別好。

我公衆號讀者,大都也是和編程專業有關的學生或者是已經工作了的前輩,羣裏也經常把那些技術比他們好的人稱爲大佬或大神,除了羨慕外,也能看到他們對於成爲大佬的渴望。按照上面的情況劃分,他們可能是屬於第二種或第三種情況。一個人的努力是看自己,這個別人也教不了,所以我這裏和大家聊的是學習編程技術的一些方法,這是對我學習編程技術的總結,這些方法可能並不一定對你有效,所以你大可作爲一種參考。

學習編程技術,最開始都是從某一門編程語言開始學起的,拿我來說,之前我也不知道學什麼語言好,聽別人說 Java 好,才學的 Java(現在看,覺得 Java 真的很好,至少現在來說,在企業級的項目開發中,Java 還是應用最廣泛的)。所以往往我們對於一門語言並不知道他們能幹什麼的時候,或者說是他們的優勢在哪,就急於開始學習了,很可能到最後才發現原來有更好的語言做這個,當時花了那麼大力氣,反而效果並不好。對於語言是這樣,對於框架也是這樣,就像我之前並不知道 Shiro 的優勢是什麼,自己手動寫權限控制,最後發現還是框架好用(這裏先不談該不該自己造輪子的話題)。

所以學習一門語言或者框架時,第一步並不是上來就扎進去學,而是應該站在”遠處“,用客觀的眼光去看待它,找出它的優點和缺點,看看是不是符合自己的需要。比如說,你要從事人工智能方面的研究,目前來說 Python 是最好的選擇(這裏先不談 Python 的性能問題)。對於語言的認識,對於新手來說,並不簡單。看網上的文章,肯定也是各執一詞,因爲沒有哪一種語言是完美的,沒有缺點的,知乎上的大牛還是比較多的,你可以去那裏看看他們對該語言的評價,好的壞的都看看,相信你應該可以得出自己要不要學的結論。而對於框架,我覺得認識它的最好方法是去它的官網,看官方文檔,因爲這是最一手的資料。但這些資料往往是英文的,所以英語對我們學習技術是至關重要的(老實講,現在我們用的編程技術 99% 是來自西方,我們還停留在全面模仿和學習西方的階段),所以在很長一段時間,我們都要接受英文文檔,同時提高自己的英文閱讀能力。實際上,文檔中框架介紹的英文並不多,少的也就幾個關鍵字就把框架的特點概括了,學習過英語的人藉助字典翻譯都是可以看懂的,只是需要你耐着性子看下去罷了。

上面便是學習編程技術的第一步——認識它,就算你現在用不上,瞭解一下也是挺好的。現在每個人都訂閱了不少的微信公衆號,羣消息和朋友圈也被公衆號文章充斥着。我也訂閱了不下幾十個的公衆號,大多是編程技術方面的,也有一些投資理財的(個人對這些也比較感興趣)。而我看的更多的是介紹技術或者某個知識點的背景,除非我對某個技術比較熟悉,不然很少看涉及很多具體細節的文章。我的看法是,公衆號是一種碎片化學習的一種方式,一些作者的實踐總結和經驗之談,一些優秀的文章還是值得一看的。但倘若只靠看公衆號文章學習,知識是成不了體系的。所以一些公衆號文章作爲認識技術的一種方式,是個不錯的選擇,當然一些優秀的博客也可以。認識了技術之後,即使時是向別人介紹時,也可以說出來一些。你也可以試着介紹自己學過的一些技術,看自己能否清晰的說出來你對它的認識,或者只是知道一些技術細節,對整體的認識並不夠。

學習編程技術的第二階段就是學着使用它,如果已經有書籍和視頻可以幫你學習它,那麼這兩種方式肯定是比較好的。學習語言和一些常見的框架,基本上都是有視頻和書籍的,視頻可以在網上找些培訓機構(這裏也不談培訓結構好不好),只要對你有幫助的資源你就應該利用起來學習,我學習使用某項技術時,也是看了不少視頻。如果某個框架沒有相關的書籍和視頻,那麼只能找些文檔和去官網學習了,對於前端框架(庫)來說,這是很常見的。學習需要一個過程,沒有基礎,看視頻是最好的方式。有了基礎後,我覺得看書是更好的選擇,也可以節省你的時間,我就是買了很多書,現在學習也基本都是看書來的。當然沒基礎的時候還是推薦看視頻,雖然要花很長時間,但是後面你就會發現自己學習其他技術會越來越快。在這個階段遇到問題,也是很正常的,在網上一般都是可以找到答案的,自己解決問題的能力也會慢慢鍛煉出來。在一些社區也可以發你的問題,CSDN、知乎、Stack Overflow 都很不錯。

學習編程技術的第三個階段是掌握(第二階段和第三階段的分界線其實並不是很明顯),能夠用這個技術做出一點東西來,就說明你逐漸掌握它了,比如你學完 Java Web,自己可以動手做出來一個簡單的管理系統網站,這就可以了,並不需要考慮複雜的業務場景,這些在工作時會學到的。這個階段更多的關注技術本身的細節,比如 Java 中的多線程編程有幾種方式,最好自己動手寫寫筆記或者博客,這些都是很好的學習方式。學習框架,也可以看看官方文檔,部分技術文檔也有中文版的,畢竟寫官方文檔的人一般都是這個技術的開發者,他們肯定是最懂這個的。學習編程技術就像鑄劍一樣,需要經過反覆的淬火,劍才能變得更加鋒刃,學習也是需要不斷地回顧和總結的過程,這樣才能強化和鞏固所學的知識。每個人的記憶力都是不一樣的,根據自己的情況,時不時的複習非常非常有必要的。

學習編程技術的第四個階段是深入,對於語言,可以看看實現的源碼(這裏又要提到 Java 的好處了),在第二個階段學着使用它時,肯定會有一些概念和知識點,比如在 Java 中,ArrayList 對象中的數組是可以動態擴容的,但是你是否知道在 Java 中具體是怎麼實現自動擴容的呢?如果你回答不了這個問題,那隻能說明你還需要進一步的學習 Java,大部分的 Java 源碼你都可以直接反編譯查看,這裏推薦 Intellij IDEA IDE,查看 Java 源碼非常的方便(但 Java 也有一些本地化的方法,和操作系統關係密切,並不是 Java 寫的,不能直接查看),而 Eclipse 還需要手動導入源碼,不是很方便。學習框架,這個階段要關注框架的設計思想和實現,也需要看源碼,一些熱門的框架,找幾本經典的書籍來看也是不錯的。還是推薦國外的書籍,畢竟很多框架都是從國外傳入國內的,國外優秀的書籍會比較多些,當然我們國內也有一些,但總體還是國外多些。如果沒有相關的書籍,那麼就只能去相關的技術社區和看源碼了。如果是開源的技術,一般都會推管到 GitHub 上,可以去 GitHub 上看看,不懂的可以提個 Issue,甚至學到一定程度也可以貢獻你的智慧,到這個階段,不用我說,你都知道該怎麼做了。

如果身邊有和自己學習同一種編程技術的,可以多多交流,肯定可以碰撞出思維火花的。沒有的話,也可以加一些羣,比如公衆號的這個羣(後臺回覆 ”交流羣“ 獲取加羣方式),大家可以一起交流。或者看一些優秀作者的書籍,我讀了楊冠寶大牛(孤盡,也就是《阿里巴巴Java開發手冊》的作者,下面稱之爲楊老師)的《碼出高效——Java開發手冊》,當一些觀點和作者不謀而合時,那種感覺非常爽。比如在談到面向對象時,楊老師說可以從哲學的角度看 Object 類中的方法,我是誰(getClass 方法、toString 方法),從哪裏來(Object 構造方法、clone 方法),到哪裏去(finalize 方法),之前我也這樣想過,但是沒楊老師總結的好。有時,你也可以從書中發現一些錯誤和不恰當的地方,比如劉欣老師在《碼農翻身》一書中,舉 Maven 和 Ant 對比的例子時說這是 ”約定重於配置“,而 ”約定重於配置“ 是在對比註解和配置時纔會說的,是明顯地舉例不當,但這些都是很正常的,每個人都難免會有出錯的時候。有時候讀書發現這些,也是很有趣的。在讀吳軍博士的《態度》一書時,他給二女兒講爲什麼要讀非小說類的名著時,說閱讀不能只看一些期刊和雜誌,即使嚴肅雜誌上的文章質量非常高,但作者觀點的前因後果由於篇幅都被省略掉了。零星的觀點也是形不成知識體系的,而書的知識完整性是比較高的。所以在學習編程技術時,讀書是很有必要的。但是也不要因爲學習編程技術,而只看相關的書籍,這樣你的視野會受限制,這點我這段時間才感受到,也是最近纔開始看些編程無關的書籍,包括金融和經濟學相關的。讀這些看似與編程無關的書,能開闊人的眼界,增長人的見識,碼農只是程序員的下限,優秀的程序員絕對不只會寫程序。上面提到的的書籍,如果你感興趣也可以看一看,相信你會從中受益的。

考慮到這篇文章的受衆,所以寫的是比較基礎的,我這段時間也在思考如何寫好公衆號文章。我算是比身邊的人多學習了點東西,不能保證這篇文章就是很好的高效學習編程技術的方式。所以這裏談談到的一些做法,未必對你來說就是有效的。這段時間看劉欣老師的《碼農翻身》,很佩服他能夠將一些技術由來和關鍵點融入到故事中,並且還能講的那麼有趣。如何寫好文章也是我今後的學習方向,也歡迎你在後臺留言,提出你的建議和觀點。

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