我是怎么學習編程的?
大家好,我是 Guide哥~
我的學校是荊州一所雙非一本。
整個大一,我都沒有怎么認真學習編程,每天就是出去玩,還有參加各種社團活動。
在大二上學期末,最終確定了自己以后要走的技術(shù)方向是走 Java 后端。于是,我就開始制定學習計劃,開始了自己的 Java 后端領(lǐng)域的打怪升級之路。
到了大三,我基本把 Java 后端領(lǐng)域一些必備的技術(shù)都給過了一遍,還用自己學的東西做了兩個實戰(zhàn)項目。整個過程一共花了我一個暑假+半個學期,每天的學習強度基本都在 10 個小時以上。
這篇文章就簡單聊聊:我是怎么學習編程的?
有哪些學習的途徑?
一般來說,有了一個具體的學習路線,知道學習什么之后,我們通常有下面幾個方向來學習:
視頻
初學編程的小伙伴盡量多看視頻,因為,視頻教程比較容易理解。
不過,對于經(jīng)驗已經(jīng)比較豐富的小伙伴來說,視頻教程相比于文檔教程學習起來會更慢一些。
像慕課網(wǎng)和嗶哩嗶哩上面有挺多學習視頻可以看,只直接在上面搜索關(guān)鍵詞(比如 Java、MySQL)就可以了。

提個醒哈!在嗶哩嗶哩上學習的時候,不要學一會就跑到別的分區(qū)去了,有點頂不住啊!

博客
網(wǎng)上的博客大多沒有體系,推薦你在解決某一知識點或者問題的時候可以在網(wǎng)上找一些相關(guān)的博客看。
就比如我在學習消息隊列 Pulsar 的時候,先把Pulsar 官方文檔看了一遍。然后,自己在網(wǎng)上找了一些相關(guān)的文章來深入學習。
《Kafka vs. Pulsar vs. RabbitMQ: Performance, Architecture, and Features Compared》 《為什么放棄 Kafka,選擇 Pulsar?》 《7 Reasons We Chose Apache Pulsar over Apache Kafka》 《比拼 Kafka, 大數(shù)據(jù)分析新秀 Pulsar 到底好在哪》 《從 Kafka 到 Pulsar,BIGO 打造實時消息系統(tǒng)之路》 《Apache Pulsar 在 BIGO 的性能調(diào)優(yōu)實戰(zhàn)(上)》、《Apache Pulsar 在 BIGO 的性能調(diào)優(yōu)實戰(zhàn)(下)》 《Apache Pulsar 在能源互聯(lián)網(wǎng)領(lǐng)域的落地實踐》 ......
Java 領(lǐng)域比較成體系的博客,推薦 JavaGuide(項目地址:https://github.com/Snailclimb/JavaGuide),
官網(wǎng)(官方文檔)
除非是一些國產(chǎn)項目的官方文檔提供了中文版本,否則大概率是英文的。
另外,官方文檔介紹的往往也比較粗糙,不太適合初學者作為學習資料。
不過,官方文檔我們一定是要看的。通過官方文檔你才能知道你學習的技術(shù)最新的技術(shù)動態(tài),才能知道這個技術(shù)有哪些模塊需要學習,才能知道這個技術(shù)具體可以幫你解決什么問題。
比如下面是 Spring 的官網(wǎng),通過網(wǎng)站首頁你就可以大概知道 Spring 可以幫助你:
快速開發(fā)網(wǎng)站 開發(fā)微服務(wù)架構(gòu)的軟件 開發(fā)響應(yīng)式架構(gòu)的軟件 ......

書籍
書籍的內(nèi)容更成體系,更系統(tǒng)。不過,書籍存在時效問題。你可以通過一些手段了解技術(shù)最新動向:
關(guān)注一些技術(shù)社區(qū)的動態(tài)比如 Github Trending 關(guān)注一些公開的技術(shù)分享 關(guān)注一些技術(shù)大佬 ......
自學過程中有哪些需要注意的地方?
英語閱讀能力
大部分優(yōu)秀的技術(shù)書籍都是國外的,幾乎都是英文,并且,大部分技術(shù)的官方文檔也都是英文的。
所以,提高自己的英文閱讀能力很重要。英文閱讀能力暫時比較差的也不要緊,有道翻譯和谷歌翻譯就是你最好的老師。如果是使用 Chrome 瀏覽器的話,我還推薦你安裝一個 Mate Translate 插件。這個插件對于網(wǎng)頁閱讀英文文檔太友好了,可以一站式翻譯您的網(wǎng)頁以及標記的文字段落。
多練!多記!多實戰(zhàn)!
不論是看視頻還是看書,最好都要跟著一起練,記錄一些關(guān)鍵的內(nèi)容。
另外,如果你是看視頻學習的話,最好可以邊看視頻邊找一本相關(guān)的書籍閱讀。
學習過程中沒弄懂的知識點一定要盡快解決。如何解決?首選百度/Google,通過搜索引擎解決不了的話就找身邊的朋友或者網(wǎng)上認識的一些人。
另外,一定要進行項目實戰(zhàn)!很多人這時候就會問沒有實際項目讓我做怎么辦?我覺得可以通過下面這幾種方式:
實戰(zhàn)項目視頻/專欄 :在網(wǎng)上找一個符合自己能力與找工作需求的實戰(zhàn)項目視頻或者專欄,跟著老師一起做。跟著老師做的過程中,你一定要有自己的思考,不要淺嘗輒止。對于很多知識點,別人的講解可能只是滿足項目就夠了,你自己想多點知識的話,對于重要的知識點就要自己學會去深入學習。 實戰(zhàn)類開源項目 :Github 或者碼云上面有很多實戰(zhàn)類別項目,你可以選擇一個來研究,為了讓自己對這個項目更加理解,在理解原有代碼的基礎(chǔ)上,你可以對原有項目進行改進或者增加功能。Java 類的實戰(zhàn)項目,你可以從 awesome-java 這個倉庫里面找,里面有很多非常贊的項目。 從頭開始做 :自己動手去做一個自己想完成的東西,遇到不會的東西就臨時去學,現(xiàn)學現(xiàn)賣。這個要求比較高,我建議你已經(jīng)有了一個項目經(jīng)驗之后,再采用這個方法。如果你沒有做過項目的話,還是老老實實采用上面兩個方法比較好。 ......
做項目不光要做,還要改進,改善。另外,如果你的老師有相關(guān) Java 后臺項目的話,你也可以主動申請參與進來。
一定要學會分配自己時間,要學的東西很多,真的很多,搞清楚哪些東西是重點,哪些東西僅僅了解就夠了。一定不要把精力都花在了學各種框架上,算法和數(shù)據(jù)結(jié)構(gòu)真的很重要!
不要把學習編程還當做學生時代的應(yīng)試考試來看
你或許也發(fā)現(xiàn)了。很多成績特別特別優(yōu)異的同學,他們的編程能力其實并不好。在大學的時候,那些編程能力最強的往往是那些成績比較一般的。
為什么會這樣呢?
我覺得主要是一個思維的轉(zhuǎn)變問題。很多人學習編程的時候,總是想著我要把這個 API 記下來,把這個庫的用法記下來。這樣學習,導致的結(jié)果只有一個那就是你會很難受!因為,這些根本不是要死記硬背的東西啊!真還當這是上課考試啊!你要從如何用你學的東西來解決實際編程問題出發(fā),站在做一個實際的項目的角度來學習。
拿我自己來說:我平時也會寫 Python,基本就是自己看著官方文檔或者一些書籍的教的語法跟著寫。如果哪個地方不會了,我就去查一下。
多看優(yōu)秀的代碼
不看優(yōu)秀的代碼,你寫的代碼質(zhì)量很難提高。
雖然要多看優(yōu)秀的代碼,但是也不要被 “最佳實踐” 所束縛,很多時候?qū)嶋H是根本不存在適用于任何場景的“最佳實踐”,沒有銀彈。
有哪些優(yōu)秀的代碼值得學習呢?
拿 Java 來說,不知道閱讀什么源碼的話,可以先從 JDK 的幾個常用集合看起。另外,我比較推薦看 Dubbo 的,因為感覺會稍微相對容易一點,模塊劃分清晰,注釋也比較詳細。搞清楚了 RPC 的基本的原理,知道如何自己實現(xiàn)一個 RPC 框架之后,看起來就沒那么吃力了。
另外,隨便一個框架的源碼都 10w+行了,都看一遍是不可能的。要挑選比較重要的地方看,就比如看 Spring 源碼的話你一定要看 IoC 和 AOP,要知道一個 Spring Bean 是如何一步一步被創(chuàng)建出來的。你要看 Spring Boot 源碼的話就要知道 Spring Boot 的啟動機制是啥,Spring Boot 是如何實現(xiàn)自動配置的。
不要死記硬背
學習理論知識的時候,我們可以多花點時間整理筆記。
但是,在學習框架使用的時候,就沒有太大必要花大量時間的整理做筆記了。
你完全可以隨時查文檔,記住關(guān)鍵詞即可!比如 Spring Boot 你不知道如何接受 Query Param 的話,你直接搜 Spring Boot Query Param 即可!

再比如你不會使用 Redis ,你做的 Spring Boot 項目需要用到的話,你直接搜“Spring Boot+ Redis”就出來了各種詳細的教程。

你要做的就是把常用的東西串聯(lián)起來,知道有這個東西就好。根據(jù)自己的實際能力,再對底層的東西進行學習就好。
更多編程好習慣,請看:《成為一個不那么差的程序員》 。
歡迎準備面試的朋友加入我的星球,一個純 Java 面試交流圈子 !Ready!。目前星球已經(jīng)更新 3 個原創(chuàng)小冊:《Java面試進階指北》、《從零開始寫一個 RPC 框架》 、《程序員副業(yè)賺錢之路》。累計幫助 850+ 位球友提供了免費的簡歷修改服務(wù),回答了 1000+ 個問題,產(chǎn)出了 1600+ 個主題。
推薦?? :1049天,100K!簡單復盤!
推薦?? :年薪 40W Java 開發(fā)是什么水平?
推薦?? :Github掘金計劃:Github上的一些優(yōu)質(zhì)項目搜羅
