編程小白用了3年在 Github 斬獲 90k Star! 聊聊學習編程的正確姿式!

我是Guide哥,一Java後端開發,半個全棧,自由的少年。html

若是你看到這篇文章,恭喜你!不管是初入編程領域的小白,仍是已經在工做幾年的老手,這篇文章都將對你有很大的幫助。建議看到最後。相信我!必定會有收貨。前端

這篇文章我會試着給你帶來一個更加不同的編程能力提升實戰指南。若是你以爲這篇文章對你有用的話,也不要白嫖好吧!點個在看或者贊就是對我最大的鼓勵。歡迎轉發讓更多人看到這篇文章,一塊兒變強!git

先來講一下本身的狀況!我從小學就開始接觸電腦,不過到了大學以後才接觸編程,整個大一都很迷茫,編程不多,也不知道如何提升本身的編程能力。大二的時候,本身加入了學校的一個技術組織,自此以後,便真正開啓了本身瘋狂的大學自學編程之路。程序員

自學編程路上,Github 絕對對我幫助最大。 我在大二就開始接觸 Github 了,當時就以爲上面有太多不錯的學習資源了。到了大三下學期,本身就想着說要不也嘗試着作一下開源唄!而後,我就從比較好入手的 Java 學習和麪試指南入手。 到目前未知,個人全部的開源項目累計接近 90k star,而且收穫了 4.6k 的關注。github

說到 Github 其實也挺慚愧的!由於個人大部分項目都沒有提供英文版本。實際上,若是你要作開源的話,本着開源精神,最好能有一份英文翻譯版。

好的!下面咱們就開始正文!想要本身編程變得更強的小夥伴記得多記筆記。面試

1. 選擇一個合適的電腦

學習編程前至少要有一個稍微適合一點的電腦吧!算法

關於電腦選擇,我以爲不要糾結是買 Mac 仍是 Windows。做爲一個使用了 Windows 開發 4 年,Mac 開發一年的人客觀地說,二者對於編程效率的影響沒有你想的那麼大。特別是在你初學編程的階段,是徹底沒太大區別的。編程

Mac 的性價比更低,一臺合格的 Mac 開發本 1 萬 2 起步。雖然它確實好一些,可是選擇電腦的時候仍是要根據本身實際經濟狀況來決定。segmentfault

另外,必定不要選擇內存低於 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掘金csdnsegmentfault知乎......。

3.學會使用 Googgle 搜索,學習和解決問題效率提高一個檔次

知道了要使用 Google 搜索以後,你學習編程的和解決的問題能夠提高一個檔次。若是你實在是沒法越過那道牆的話,能夠試試必應搜索。

2.3. 不要把學習編程還當作學生時代的應試考試來看

你或許也發現了。不少成績特別特別優異的同窗,他們的編程能力其實並很差。在大學的時候,那些編程能力最強的每每是那些成績比較通常的。

爲何會這樣呢?

我以爲主要是一個思惟的轉變問題。不少人學習編程的時候,老是想着我要把這個 API 記下來,把這個庫的用法記下來。這樣學習,致使的結果只有一個那就是你會很難受!由於,這些根本不是要死記硬背的東西啊!真還當這是上課考試啊!你要從如何用你學的東西來解決實際編程問題出發,站在作一個實際的項目的角度來學習。

拿我本身來講:我平時也會寫 Python,基本就是本身看着官方文檔或者一些書籍的教的語法跟着寫。若是哪一個地方不會了,我就去查一下。

2.4. 不要懼怕閱讀英文文檔

大部分最新的資料/技術都是國外那邊的,基本上大部分都是英文的。聽說 90% 以上的程序員都不習慣直接看英文文檔,都會選擇看別人的翻譯/總結或者書籍。可是,書籍或者別人的翻譯/總結都會比較慢,並且不免會有我的主觀因素影響翻譯效果。

這個時候不少人就會說了個人英語很差啊!徹底看不懂英文文檔。

別擔憂!有道翻譯和谷歌翻譯就是你最好的老師。若是是使用 Chrome 瀏覽器的話,我還推薦你安裝一個 Mate Translate 插件。 這個插件對於網頁閱讀英文文檔太友好了,能夠一站式翻譯您的網頁以及標記的文字段落。使用效果以下圖所示:

<img src="https://imgkr.cn-bj.ufileos.com/8428d921-f8a1-43ab-ab40-f5a65e12bdc5.png" style="zoom:50%;" />

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. 選擇一門適合的編程語言入門

初學編程第一步就是選擇一門適合本身的編程語言入門。

選擇的時候,無非是要從下面幾點考慮:

  1. 難易程度:通常建議初學編程應該選擇一門稍微簡單點的好比 Python、 C、Java。
  2. 發展前景 : 肯定你要學習的編程語言發展前景是不錯。就好比相比於 PHP ,我確定更推薦你學習 Java。
  3. 市場需求 : 有了市場需求以後,工做崗位纔會多,找工做也會相對容易。
  4. 薪資水平 : 薪資水平實際和編程語言不是那麼相關,和我的實際能力相關。不過,相同能力下某些編程語言的薪資確實要稍高一些。

下面這份數據來自 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. 多修煉內功

不要沉迷框架,多花點時間去修煉內功——底層技術。不少人以爲在學校裏面學的數據結構和算法、計算機組成原理、操做系統這些東西工做以後根本用不到。而後,就想固然地以爲這些東西不重要。

若是你暫時以爲這些東西沒有用,極可能是如今學習某門技術只是浮於表面。舉個例子:若是你要看懂框架或者某個類庫的源碼,那數據結構是必需要搞懂的吧!若是你要培養和提升本身解決問題的能力,那算法確定是必須吧!

爲何要修煉內功?

  1. 技術更新換代快 :咱們前幾年可能還在用 Spring 基於傳統的 XML 開發,如今幾乎你們都會用 Spring Boot 這個開發利器來提高開發速度,再好比幾年前咱們使用消息隊列可能還在用 ActiveMQ,到今天幾乎都沒有人用它了,如今比較經常使用的就是 Rocket MQ、Kafka 。技術更新換代這麼快的今天,你是沒法把每個框架/工具都學習一邊的,底層技術就是你快速上手他們的瑞士軍刀。
  2. 懂得底層技術的人更有競爭力 : 如今的程序員這麼多,你如何能和別人拉開差距?單純就靠使用框架的能力麼?這些隨便從培訓班抽一我的可能都會作的工做沒法成爲你的核心競爭力。

拿 Java 舉例子,有哪些比較底層的技術呢?

  1. 算法和數據結構、計算機網絡和操做系統(適用於任何編程語言的底層技術);
  2. 框架的源碼;
  3. Java 程序運行的基礎—JVM;
  4. ......

7. 多總結、多分享、多輸出

總結知識不是把本身學到的東西按照老師的說法完完整整的整理下來,而是結合本身的理解和補充整理下來。

將本身學到的東西分享出來,一方面能檢驗本身是否掌握,另外一方面還能加深本身的理解和認識。

分享和輸出的方式有不少種,給你們推薦幾種最多見,同時也是我最經常使用的學習方式。

7.1. 寫博客

能夠養成寫博客輸出的習慣。我在以前有寫過一篇文章來講爲何要寫博客:程序員寫博客很重要嗎?

簡單來講,主要有下面 👇🏻 幾點緣由:

  1. 對知識有更加深的認識,讓本身的知識體系更加完整
  2. 督促/倒逼本身學習
  3. 可能會帶來不錯的經濟收入
  4. 提高我的影響力
  5. 擁有更多機會
  6. 好的博客會成爲面試加分項

這個時候,你確定就糾結了: 我該在哪裏寫博客呢?

做爲一個從大二開始就堅持寫博客,期間折騰了無數次我的網站的我來講: 我推薦先找一個不錯的博客平臺好比掘金,而後在博客平臺上寫博客,後面能夠本身搭建本身的博客網站。

這個時候,你確定又要糾結了:我該怎麼搭建本身的博客呢?

Emm...這部分要格外好好看,適當記筆記哈,小夥伴們!給你們推薦幾個最好也是最多見的搭建博客網站的方法,想要免費高速我的博客網站的小夥伴們不要錯過。

搭建難度 是否須要服務器 易用性 SEO
Hexo 非必須 通常
Vuepress 非必須 友好
Docsify 非必須 不友好
Wordpress 必須 友好
Halo 必須 通常

綜上,我仍是比較推薦 Vuepress 和 Docsify 的。 關於如何使用 Docsify 搭建一個本身的博客網站,我還寫過一篇文章手把手教你搭建:《手把手教你搭建一個文檔類型的網站!免費且高速!》 。並且,我還提供了配套的視頻教程。就很貼心好吧!記得給 Guide 哥點個贊 👍!

有了本身的網站後,你能夠將本身的文章整理成一個系列,而後部署在本身的網站上,本身想看的時候就能夠隨時查閱。你也能夠將文章同步到其餘博客平臺來擴大本身的影響力。

我整理 7 個常見的技術平臺供你們參考:

<img src="https://imgkr.cn-bj.ufileos.com/be6d8628-1a38-4a1f-a07a-4fa7d0a8a69f.png" style="zoom:50%;" />

7.2. 項目組內分享

通常公司都會有內部的技術講座以及博客平臺。

你能夠在公司或者項目組內部組織技術講座,這樣不只能夠增長本身的存在感,還能提升本身的表達能力。

你也能夠在公司內部的博客平臺分享本身寫的博客,這樣你寫的東西就能被更多人看到了!

7.3. 作開源項目

你能夠在 Github 分享不少東西,你的學習筆記、本身作的實戰項目、本身造的輪子......(資源類的不太推薦,太容易侵權)。雖然,如今 Github 被不少人單純玩成了引流工具。可是,總體來講 Github 總體技術環境和氛圍仍是很不錯的!

<img src="https://imgkr.cn-bj.ufileos.com/72daad30-f644-4f3c-8682-edf981737b1b.png" style="zoom:50%;" />

另外,最好的話是要給項目弄一個英文版本,項目代碼中的註釋最好也要是英文的。畢竟是開源,最好是能準守開源精神使用世界通用語言(這一點我本身也沒作好,反思!)。

總結

這篇文章,我站在本身的這些年自學的角度,掏心窩子地說了不少話。看了這篇文章以後,哪怕你只學會了要使用 Google 搜索我都以爲開心,也但願這篇文章可以影響到更多人。

另外,文中講了不少編程領域不可爭的事實或者說正確姿式好比:不要以學生時代應試考試的方式學習編程、多實踐、造輪子是一種特別可以提升本身系統編程能力的手段等等。說了這麼多,若是你沒有將這些學習編程的正確姿式用到本身平時學習中的話,這篇文章對你的幫助可能很是有限。

這一期原創分享就結束了!讓咱們一塊兒變強!!!

我是Guide哥,一Java後端開發,半個全棧,自由的少年。

相關文章
相關標籤/搜索