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

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

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

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

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

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

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

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

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

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

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