編程小白用了3年在 Github 斬獲 90k Star! 聊聊學習編程的姿勢
我是Guide哥,一Java后端開發,半個全棧,自由的少年。
如果你看到這篇文章,恭喜你!不論是初入編程領域的小白,還是已經在工作幾年的老手,這篇文章都將對你有很大的幫助。建議看到最后。相信我!一定會有收貨。
這篇文章我會試著給你帶來一個更加不一樣的編程能力提高實戰指南。如果你覺得這篇文章對你有用的話,也不要白嫖好吧!點個在看或者贊就是對我最大的鼓勵。歡迎轉發讓更多人看到這篇文章,一起變強!
先來說一下自己的情況!我從小學就開始接觸電腦,不過到了大學之后才接觸編程,整個大一都很迷茫,編程很少,也不知道如何提高自己的編程能力。大二的時候,自己加入了學校的一個技術組織,自此之后,便真正開啟了自己瘋狂的大學自學編程之路。
自學編程路上,Github 絕對對我幫助最大。 我在大二就開始接觸 Github 了,當時就覺得上面有太多不錯的學習資源了。到了大三下學期,自己就想著說要不也嘗試著做一下開源唄!然后,我就從比較好入手的 Java 學習和面試指南入手。 到目前未知,我的所有的開源項目累計接近 90k star,并且收獲了 4.6k 的關注。
說到 Github 其實也挺慚愧的!因為我的大部分項目都沒有提供英文版本。實際上,如果你要做開源的話,本著開源精神,最好能有一份英文翻譯版。

好的!下面我們就開始正文!想要自己編程變得更強的小伙伴記得多記筆記。
1. 選擇一個合適的電腦
學習編程前至少要有一個稍微適合一點的電腦吧!
關于電腦選擇,我覺得不要糾結是買 Mac 還是 Windows。作為一個使用了 Windows 開發 4 年,Mac 開發一年的人客觀地說,兩者對于編程效率的影響沒有你想的那么大。特別是在你初學編程的階段,是完全沒太大區別的。
Mac 的性價比更低,一臺合格的 Mac 開發本 1 萬 2 起步。雖然它確實好一些,但是選擇電腦的時候還是要根據自己實際經濟情況來決定。
另外,一定不要選擇內存低于 8g 的電腦,有條件的話最好能 16g。
2. 六個黃金原則
很多人可能會覺得說,我們學習編程,首先是要找一門編程語言好好開始學,比如我在上大學的時候最開始接觸的是 C 語言。
我覺得非也!就我自己作為一個從大學自學編程一路一路踩坑的過來人來說,我覺得學習編程第一步應該是要搞清楚學習編程有哪些必備的網站?我們是如何查資料的?我們是如何解決問題的?國內外有哪些技術社區比較好?......
初次之外,你還要搞明白學習編程不是參加應試考試。
2.1. 了解常見的學習編程網站
了解學習編程有哪些必備的網站之后,你才能更好地進行自學。
一般情況下,但凡是初學編程的同學,往往都需要課后進行持續學習的。一是因為你可能剛學編程,老師教的東西你聽不明白。二是因為程序員這個行業本身就需要不斷學習。三是因為大學里面教的東西往往和社會實際需要脫節,只有自學才可以讓你技術和社會不脫節。
推薦幾個我常用的學習編程的網站:
a.中國大學 Mooc
上面有很多名校的課程和國家精品課程比較適合我們夯實編程基礎。比如下圖是南京大學的一門關于軟件工程的大學選修課。

b.慕課網
上面有很多比較適合入門的免費課程。另外,如果你需要實戰項目視頻資源的話,也可以在慕課網找到(慕課網打錢!!!)。
c.嗶哩嗶哩
是的,你沒看錯!看 B 站也能學習!B 站上面有很多優秀的學習資源以及優秀的 UP 主比如 Guide 哥。

d.LeetCode
國內的公司慢慢開始向國外的面試形式靠攏,手撕算法已經是很多大廠的標配了,不論是社招還是校招。LeetCode 這個網站的話,是我們平時刷題必備的一個網站。
在你初學編程的階段,也可以經常去上面找一些簡單難度的算法題來做。
e.極客時間
主打付費學習的一個付費學習社區(極客時間私聊我打錢哈!)。不過課程的質量大部分都挺高的,我自己也看了里面很多的課程,并且很多課程都是 Java 領域大佬級別的人物講的。
2.2. 拓展視野,好的技術社區是你成長的助力器
了解了國內外有哪些比較好的技術社區之后,你才有機會認識到更多更優秀的程序員,看到更多對你有幫助的東西。而不是說,整個人的思想都局限在學校。這點是很重要很重要的! 比較好的技術社區的話有:Github(穩居第一位好吧!開源項目交流社區)、Stackoverflow(一個程序設計領域的問答網站,網站允許注冊用戶提出或回答問題。和知乎很像,重大的一點不同是 Stack Overflow 可以對問題進行打分)、v2ex、掘金、csdn、segmentfault 、知乎......。
3.學會使用 Googgle 搜索,學習和解決問題效率提升一個檔次
知道了要使用 Google 搜索之后,你學習編程的和解決的問題可以提升一個檔次。如果你實在是無法越過那道墻的話,可以試試必應搜索。
2.3. 不要把學習編程還當做學生時代的應試考試來看
你或許也發現了。很多成績特別特別優異的同學,他們的編程能力其實并不好。在大學的時候,那些編程能力最強的往往是那些成績比較一般的。
為什么會這樣呢?
我覺得主要是一個思維的轉變問題。很多人學習編程的時候,總是想著我要把這個 API 記下來,把這個庫的用法記下來。這樣學習,導致的結果只有一個那就是你會很難受!因為,這些根本不是要死記硬背的東西啊!真還當這是上課考試啊!你要從如何用你學的東西來解決實際編程問題出發,站在做一個實際的項目的角度來學習。
拿我自己來說:我平時也會寫 Python,基本就是自己看著官方文檔或者一些書籍的教的語法跟著寫。如果哪個地方不會了,我就去查一下。
2.4. 不要害怕閱讀英文文檔
大部分最新的資料/技術都是國外那邊的,基本上大部分都是英文的。據說 90% 以上的程序員都不習慣直接看英文文檔,都會選擇看別人的翻譯/總結或者書籍。但是,書籍或者別人的翻譯/總結都會比較慢,而且難免會有個人主觀因素影響翻譯效果。
這個時候很多人就會說了我的英語不好啊!完全看不懂英文文檔。
別擔心!有道翻譯和谷歌翻譯就是你最好的老師。如果是使用 Chrome 瀏覽器的話,我還推薦你安裝一個 Mate Translate 插件。 這個插件對于網頁閱讀英文文檔太友好了,可以一站式翻譯您的網頁以及標記的文字段落。使用效果如下圖所示:
2.5. 多看優秀的代碼
不看優秀的代碼,你寫的代碼質量很難提高。
雖然要多看優秀的代碼,但是也不要被 “最佳實踐” 所束縛,很多時候實際是根本不存在適用于任何場景的“最佳實踐”,沒有銀彈。
有哪些優秀的代碼值得學習呢?
拿 Java 來說,不知道閱讀什么源碼的話,可以先從 JDK 的幾個常用集合看起。另外,我比較推薦看 Dubbo 的,因為感覺會稍微相對容易一點,模塊劃分清晰,注釋也比較詳細。搞清楚了 RPC 的基本的原理,知道如何自己實現一個 RPC 框架之后,看起來就沒那么吃力了。
另外,隨便一個框架的源碼都 10w+行了,都看一遍是不可能的。要挑選比較重要的地方看,就比如看 Spring 源碼的話你一定要看 IoC 和 AOP,要知道一個 Spring Bean 是如何一步一步被創建出來的。你要看 Spring Boot 源碼的話就要知道 Spring Boot 的啟動機制是啥,Spring Boot 是如何實現自動配置的。
2.6. 多讀好書
一定要多看好書!像《重構》、《代碼大全》、《代碼整潔之道》這類書是程序員標配、必讀的書籍。
看書相比于零散的看一些文章學習更加系統。當然,網上也有很多比較系統的學習資源,比如你要學習 Java 的話,可以看我開源的 JavaGuide (「Java 學習+面試指南」一份涵蓋大部分 Java 程序員所需要掌握的核心知識)。
3. 選擇一門適合的編程語言入門

初學編程第一步就是選擇一門適合自己的編程語言入門。
選擇的時候,無非是要從下面幾點考慮:
- 難易程度:一般建議初學編程應該選擇一門稍微簡單點的比如 Python、 C、Java。
- 發展前景 : 確定你要學習的編程語言發展前景是不錯。就比如相比于 PHP ,我肯定更推薦你學習 Java。
- 市場需求 : 有了市場需求之后,工作崗位才會多,找工作也會相對容易。
- 薪資水平 : 薪資水平實際和編程語言不是那么相關,和個人實際能力相關。不過,相同能力下某些編程語言的薪資確實要稍高一些。
下面這份數據來自 TIOBE 官網統計的 2020 年 7 月份編程語言排行榜,也可以作為你的參考。從統計結果可以看出,C、Java、Python 還是很強勢的,這弟兄仨基本常年就是前三(Java 和 C 經常爭第一)。另外,R 語言的進步也很快,同樣值得關注。

再來看一下 PYPL 指數。 這份指數數據主要描述的編程語言的受歡迎程度,具體受歡迎程度是由分析 Google Trends 得出。從統計結果可以看出,Python、Java、Javascript 三者穩居前三。

再來看一下編程語言的平均薪資水平和使用年限。這份數據來自于 Stack Overflow 2019 Survey 。我們需要格外關注的是 Go 語言。Go 語言背靠谷歌,薪資比較高也不奇怪。并且,國內現在很多大公司比如騰訊使用 Go 進行項目開發的越來越多了。

相信你看了上面這么多關于編程語言的介紹之后,你一定可以選擇一門適合自己的編程語言進行學習和深入。
4. 不要被編程語言所束縛
編程語言只是工具。我們的確需要有一門比較擅長的編程語言,但是,不是任何時候,我們做任何東西都要使用這一門編程語言來做。比如 Java 適合網站開發而 Python 更適合做數據分析。選擇合適的語言做合適的事情很重要。 再比如你想要做全棧開發的話,還可能需要掌握多門編程語言。拿我自己來說,也算是半個全棧開發,我主要是以 Java 做后端開發,Javascript 來進行前端開發。
5. 多實踐
我見過很多人學習編程一年多了,自己敲的代碼可能還不到 1000 行。然后, 你讓他做用自己學的編程知識做個什么東西,他就蒙了。
學習編程以及提高編程能力最直接的辦法就是實踐!不斷實踐!特別是在編程初期的時候,積累代碼量格外重要。
就比如你學習 Java 后臺開發的時候,能不能通過自己學過的知識獨立做個網站呢?再比如你搞懂了某個框架原理之后,能不能模仿著去寫一個簡單的呢?
我們實際項目開發中是比較忌諱造輪子的,但是,實際學習過程中造輪子絕對是最自己百利而無一害的! 就比如我之前搞懂了 RPC 的原理之后,就自己動手寫了一個簡單的 RPC 框架。我的 RPC 框架肯定是無法和 Dubbo 這類已經這么成熟的相提并論。但是,在自己去寫 RPC 框架的時候,更加加深了自己對于 RPC 框架的認識。實現的過程中,遇到了很多問題,解決問題的過程中也提高了自己的編程能力。總而言之,造輪子是一種特別能夠提高自己系統編程能力的手段。

多實踐不是說拿到問題就直接開始寫代碼、不是不學習理論知識。多問自己 why ,而不是 what。 就比如技術選型的時候,相同的功能可能有不同的解決方案,你是人云亦云地不顧項目實際需要去選擇,還是自己經過詳細的對比呢?想當然肯定是根據自己項目的實際需要,然后經過各種對比之后選擇!
“ talk is cheap, show me code”這句話雖好,但是請不要忘記思考!換句話說就是:多寫代碼雖好,可不要貪杯哦!
6. 多修煉內功
不要沉迷框架,多花點時間去修煉內功——底層技術。很多人覺得在學校里面學的數據結構和算法、計算機組成原理、操作系統這些東西工作之后根本用不到。然后,就想當然地覺得這些東西不重要。
如果你暫時覺得這些東西沒有用,很可能是現在學習某門技術只是浮于表面。舉個例子:如果你要看懂框架或者某個類庫的源碼,那數據結構是必須要搞懂的吧!如果你要培養和提高自己解決問題的能力,那算法肯定是必須吧!
為什么要修煉內功?
- 技術更新換代快 :我們前幾年可能還在用 Spring 基于傳統的 XML 開發,現在幾乎大家都會用 Spring Boot 這個開發利器來提升開發速度,再比如幾年前我們使用消息隊列可能還在用 ActiveMQ,到今天幾乎都沒有人用它了,現在比較常用的就是 Rocket MQ、Kafka 。技術更新換代這么快的今天,你是無法把每一個框架/工具都學習一邊的,底層技術就是你快速上手他們的瑞士軍刀。
- 懂得底層技術的人更有競爭力 : 現在的程序員這么多,你如何能和別人拉開差距?單純就靠使用框架的能力么?這些隨便從培訓班抽一個人可能都會做的工作無法成為你的核心競爭力。
拿 Java 舉例子,有哪些比較底層的技術呢?
- 算法和數據結構、計算機網絡和操作系統(適用于任何編程語言的底層技術);
- 框架的源碼;
- Java 程序運行的基礎—JVM;
- ......
7. 多總結、多分享、多輸出
總結知識不是把自己學到的東西按照老師的說法完完整整的整理下來,而是結合自己的理解和補充整理下來。
將自己學到的東西分享出來,一方面能檢驗自己是否掌握,另一方面還能加深自己的理解和認識。
分享和輸出的方式有很多種,給大家推薦幾種最常見,同時也是我最常用的學習方式。
7.1. 寫博客
可以養成寫博客輸出的習慣。我在之前有寫過一篇文章來說為什么要寫博客:程序員寫博客很重要嗎? 。
簡單來說,主要有下面 幾點原因:
- 對知識有更加深的認識,讓自己的知識體系更加完整
- 督促/倒逼自己學習
- 可能會帶來不錯的經濟收入
- 提升個人影響力
- 擁有更多機會
- 好的博客會成為面試加分項
這個時候,你肯定就糾結了: 我該在哪里寫博客呢?
作為一個從大二開始就堅持寫博客,期間折騰了無數次個人網站的我來說: 我推薦先找一個不錯的博客平臺比如掘金,然后在博客平臺上寫博客,后面可以自己搭建自己的博客網站。
這個時候,你肯定又要糾結了:我該怎么搭建自己的博客呢?
Emm...這部分要格外好好看,適當記筆記哈,小伙伴們!給大家推薦幾個最好也是最常見的搭建博客網站的方法,想要免費高速個人博客網站的小伙伴們不要錯過。
搭建難度 是否需要服務器 易用性 SEO Hexo 易 非必須 中 一般 Vuepress 易 非必須 易 友好 Docsify 易 非必須 易 不友好 Wordpress 中 必須 易 友好 Halo 中 必須 易 一般
綜上,我還是比較推薦 Vuepress 和 Docsify 的。 關于如何使用 Docsify 搭建一個自己的博客網站,我還寫過一篇文章手把手教你搭建:《手把手教你搭建一個文檔類型的網站!免費且高速!》 。而且,我還提供了配套的視頻教程。就很貼心好吧!記得給 Guide 哥點個贊 !
有了自己的網站后,你可以將自己的文章整理成一個系列,然后部署在自己的網站上,自己想看的時候就可以隨時查閱。你也可以將文章同步到其他博客平臺來擴大自己的影響力。
我整理 7 個常見的技術平臺供大家參考:

7.2. 項目組內分享
一般公司都會有內部的技術講座以及博客平臺。
你可以在公司或者項目組內部組織技術講座,這樣不僅可以增加自己的存在感,還能提高自己的表達能力。
你也可以在公司內部的博客平臺分享自己寫的博客,這樣你寫的東西就能被更多人看到了!
7.3. 做開源項目
你可以在 Github 分享很多東西,你的學習筆記、自己做的實戰項目、自己造的輪子......(資源類的不太推薦,太容易侵權)。雖然,現在 Github 被很多人單純玩成了引流工具。但是,整體來說 Github 整體技術環境和氛圍還是很不錯的!

另外,最好的話是要給項目弄一個英文版本,項目代碼中的注釋最好也要是英文的。畢竟是開源,最好是能準守開源精神使用世界通用語言(這一點我自己也沒做好,反思!)。
總結
這篇文章,我站在自己的這些年自學的角度,掏心窩子地說了很多話。看了這篇文章之后,哪怕你只學會了要使用 Google 搜索我都覺得開心,也希望這篇文章能夠影響到更多人。
另外,文中講了很多編程領域不可爭的事實或者說正確姿勢比如:不要以學生時代應試考試的方式學習編程、多實踐、造輪子是一種特別能夠提高自己系統編程能力的手段等等。說了這么多,如果你沒有將這些學習編程的正確姿勢用到自己平時學習中的話,這篇文章對你的幫助可能非常有限。