
從大一入學被調劑到計算機專業,到喜歡上這個專業,再到畢業拿到 10 多個 offer,最終進入理想的大廠作業,回想起這些年確確實實踩過的坑,小北不慎感慨,和我一樣,他在剛學習編程的時候也想一口氣吃個大胖子,但卻不盡人意,
我讓小北把這些年來學習編程的一些經驗梳理了出來,順帶挑選了一些我認為很值得注意的方面,分享給大家,希望初學編程的你,能少走一些彎路,可能文章比較長,但我真心希望你能一字一句地認真讀完,至少,我認為如果我剛學編程的那會能看到這篇文章,絕逼是有一些幫助的,
作為一名計算機專業的學生,很多人會認為編程是在課堂上學到的,其實不是這樣的,科班比非科班的優勢可能在于知道該去學什么,知道哪些作業和專案是必須完成的,除此之外,真的是全靠自學,
對于自學編程,我認為首先應該考慮的是如何去避免一些坑,這樣可以節約大把的時間,下面我就以問題的形式來分享一些我認為重要的方面,
01、應該選擇哪一門編程語言
“我應該學習什么編程語言”,可能是困擾編程新手最多的一個問題,很多人一直在糾結這個問題,于是陷入了一種怪圈,這門語言學一點,那門語言學一點,最終什么也沒學會,時間也白白浪費了,
剛上大一的時候,我也很想知道應該選擇什么編程語言,網上查了很多資料,但答案都略顯片面,無非是“這門編程語言難”,“那門編程語言性能好”,“某某編程語言生態好”,
作為初學者,我認為,沒有哪門子編程語言是容易的吧?至于性能好不好,生態好不好,更沒有概念,
如果你沒有明確的方向,那么很好選擇,如果你學歷高,想走演算法、機器學習方向,Python 就是最好的選擇,如果學歷一般,想做個 Web 后端開發工程師,Java 就是最好的選擇,如果學歷還行,想做更底層的作業,C 和 C++ 就是最好的選擇,
可能很多人和我一樣,上大學之前沒怎么接觸過計算機行業,各種編程語言也就是知道個名字,根本不知道它們之間有什么差別,那索性不要糾結了,我替你做個選擇吧,
如果你是在校大學生,首選的當然是學校給你安排的編程語言,畢竟有個可以學習交流的氛圍,如果學校選擇的不是 C 或者 C++,那么就在私底下自學,千萬不要不學,會在以后的作業中吃大虧的,
C 和 C++ 都很難,看起來似乎不適合入門,但學習編程不是只學習某一門編程語言的事,而是要學習一個龐大的計算機知識體系,C 和 C++ 可以幫助你更容易地理解作業系統、編譯原理、計算機網路、計算機組成原理,因為底層的東西基本上都是靠它們實作的,
如果你已經參加作業了,但剛開始學習編程,C 和 C++ 對你來說有些復雜和困難,因為學習它們需要大量的時間,你又無法像在校大學生那樣投入大把的時間,我建議你選擇一門「就業條件更寬泛」的編程語言,比如說 Java,難度適中,生態又極其豐富,也能快速做出一些小的應用,在最短時間內看到學習的效果,
當然了,學習任何一門編程語言都需要看看與計算機系統相關的書籍,這樣才能更深層次地去編程,我強烈推薦你啃一啃這本書——《深入理解計算機系統》,

多啃幾遍后,你就能把整個計算機系統給串聯起來了,學習編程也就更有底氣了,
02、需要學習哪些課程
我已經畢業快十年了,偶爾同學們聚會的時候,總能聽見一些同學抱怨說,“大學那會,學校安排的高數、離散數學、線性代數、概率論等等,這些課程對作業壓根就沒有一點幫助,不學也罷,”
對于某些作業來說,這些課程可能沒用,但做演算法和機器學習的同學肯定知道,這些課程有用到不行,
之前看過這樣一個視頻,有個同學問一名老師,“老師,學習古文詩歌有什么用啊?”老師一開始覺得很懵逼,因為他之前沒想過這個問題,學習古文和詩歌又不能掙錢,又不能當官,但思索了片刻后答道,在教育學的理念當中,有 3 個因素是很重要的,第一就是想象,它決定了你有沒有創造性,比如說李白說“為樓高百尺,手可摘星辰”,第二就是直覺敏不敏感,我們看月亮它可能是個月亮,但宋朝有個混蛋說月亮像寡婦的臉,因為他心情不好,第三就是邏輯嚴不嚴謹,有些古文嚴謹到滴水不漏,
同樣的道理,你覺得某些課程沒用,可能是因為你沒用到而已,大學面向的是“面”的教育,什么課程都講一點,但又不講那么深,當你作業或者讀研的時候,更多的則是面向“點”的學習,用到的知識更專業,更深入,
如果學校安排了某些課程,你感興趣的話,就使勁學,如果不感興趣的話,可以放輕松點,做到不掛科就行了,然后把精力投入到你更感興趣的方面,沒必要很抗拒,這門課沒用,打死我都不學,這種態度是不可取的,
大學的時候,學校不知道你以后是搞演算法還是搞架構,還是搞服務器開發或者搞硬體,所以學校需要你多學習一些課程,盡量都有個了解,對于學生來說,一方面可以從中選擇自己感興趣的方向,一方面對未來的就業方向有所啟發,
我給大家一些建議吧,
如果你是在校大學生,可以在學習一段時間理論知識后,做個小專案,將做專案遇到的問題記錄下來,針對性地學習相關知識,然后再實踐,讓知識成網路發射狀地變大,
如果你已經參加作業,那么就針對作業中遇到的疑難雜癥系統性地學習,做個能夠解決問題的人,這樣你不僅能夠成為公司不可或缺的那個人,還可以最有價值的知識學到手,
03、學習編程是否需要指定計劃
其實不只是學習編程需要制定計劃,其他任何學習和作業都需要制定計劃,小北在上大學的時候就開始定期給自己制定計劃,這個習慣一直保持到他作業以后,按照他自己的話叫做受益匪淺,
我自己在平常學習的時候,也喜歡先做計劃,然后按照計劃表去落實,比如我在學習 Java 基礎的時候,會先畫一個思維導圖,然后按照里面的每個節點再深入地去學習,

下圖是 2016 年 10 月 30 日的計劃,那時候小北已經大四了,并且已經找到了作業、簽了滿意的 offer,當時已經沒有什么課了,按理說可以放松放松了,不過小北還是制定了一些學習計劃,并且選擇在 11 月去百度實習,
從內容上看,主要是學習英語和計算機專業課,因為大一大二的時候小北確實不明白為什么要學習專業課,到了大三想清楚原因后,就一直在重新學習,因為計算機專業課真的很重要!學好了這些課,能讓你在日后的學習作業中輕松不少,

除了大四制定的計劃外,大二的時候小北也制定過較為詳細的學習計劃,見下圖,我都有點自愧不如,說實話,太強了,他把需要學習的內容編了號,存入表格,做起來就有條不紊了,當然了,很難完全按照計劃去執行,不過制定相應的計劃能讓你清楚地知道自己應該干什么,

04、編程是否需要做筆記和寫博客
反正我一開始的時候,把寫博客當成了做筆記的形式,雖然博客寫出來是給大家看的,但一開始沒什么瀏覽量,讀者就只有自己,很無所謂的心態,不管你寫不寫博客,我都強烈建議你記筆記,并且記筆記是一個長期的程序,
就編程而言,我們需要善用搜索引擎,因為搜索引擎會給我們提供各式各樣的答案,但答案畢竟是別人的,如果只是照搬的話,可能有用,但你記不住,知識就不屬于你,之后你遇到同樣的問題,還是要再搜索一遍,并且搜索引擎提供的答案不是一成不變的,可能過了一段時間后,你就找不到原來你想要的那個答案了,
但記筆記不一樣,筆記是定制化的,按照你自己的風格定制的,你用自己最喜歡的方式,自己既能看得懂,也能記得住,之后再遇到相同的問題時,也可以快速地通過筆記找得到,
另外,我需要特別提醒你的一點就是,筆記是一種不可多得的財富,如果你以后想寫博客了,這些筆記就是最寶貴的素材,可以直接拿來用的,
小北已經記錄了四年多了,總共積累了 1G 多的內容,已經形成了他自己的知識體系,給大家展示其中的一部分看一看,

05、需要刷題嗎
不管你是刷 LeetCode,還是 OJ(Online Judge),我認識是需要的,但不要“走火入魔”!小北在上大學的時候,身邊就遇到了很多搞計算機競賽的人,他們之間都相互稱對方為“XX 神”,使用某個演算法,將程式的運行時間從 1 秒降低到 0.999 秒之類的,
我認為刷題不應該是奔著這個目的去的,而是適應寫代碼的感覺,在這個程序中你會遇到編譯錯誤,你會慢慢去記住一些語法、關鍵字,并理解一些概念,還可以自己去使用它,比如實作資料結構,慢慢的你就會變得有經驗,知道一些錯誤產生的原因,
刷題到一定程度后就沒必要一直刷下去了,可以到 GitHub 上找一些優質的開源專案來看,然后嘗試去增加一些功能或者優化一些代碼,這樣的話,編程能力就能夠大幅度的提升,
刷題除了可以鍛煉編程能力,對找作業也是有很大幫助的,因為大廠都喜歡這么干,
一開始,刷 LeetCode 可能會很吃力,怎么辦呢?我強烈推薦這份谷歌大佬的 Leetcode 刷題筆記,這位谷歌大佬當年在美國卡內基梅隆大學攻讀碩士學位時,為了準備實習秋招,他從夏天開始整理 Leetcode 上的題目,幾個月的時間,刷了幾百道題目,
憑借著扎實的基礎和長期的勤奮,他很快找到了如愿的作業,后來,他想啊,自己刷了那么多題,而且對很多題目的解法都有著自己的理解,為什么不把這些題目歸納總結一下,做成一個便于后來者閱讀學習的電子書呢?
于是他就把這份 PDF 開源了出來,我仔細看了一下,每一道題的題解都寫得非常清楚,
參考大佬的話來說,就是:
本書分為演算法和資料結構兩大部分,又細分了十五個章節,詳細講解了刷 LeetCode 時常用的技巧,我把題目精簡到了 101 道,一是呼應了本書的標題,二是不想讓讀者閱讀和練習時間過長,
從我的直觀感受來說,這是一本用心的資料結構演算法類書籍,全書總共 143 頁篇幅,詳細講解演算法的內容有十五個章節,每個章節都是一些重要的知識點,伴有基礎講解和例題介紹,當然,也有一些推薦的練習題,

光看書的目錄就覺得非常的震撼,相信你和我一樣,都有這種強烈的感受,整本書,我仔細看了一遍,并對書中的一些解題思路和代碼進行了校驗,確實良心了,第 7 章是講動態規劃的,這里摘取了一點內容,你可以看到谷歌大佬對于知識點的講解是非常透徹且細致的,

從排版上也可以看得出,整本書制作得非常精美,如果你需要這份 Leetcode 刷題筆記的話,我貼一下地址,
鏈接:https://pan.baidu.com/s/1ojBerkBfgMFpYcj-JfDKlw 提取碼:5ttz
還有一份 BAT 大佬的刷題筆記,不管你使用的編程語言是 Java、C++,還是 Go,都可以學習,適合刷題的同學反復學習,認真地揣摩其中的框架思維,你會發現,這是一本非常用心的刷題類書籍,筆記總共 1200 頁,分編程技巧、線性表、字串、堆疊佇列、樹、排序、查找、BFS、DFS、貪心、動態規劃等,

每個章節都會先講解框架思維,然后挑選非常典型的十幾道 LeetCode 題進行實戰講解:

不僅排版十分精美,內容也例外充實,每一題都是細致的講解,有時候還會配上圖片,就怕你搞不懂,大大的良心啊!


如果你恰好要學習演算法、資料結構,或者年后找作業,一定不要錯過,貼一下下載地址:
鏈接:https://pan.baidu.com/s/12RT8pRk6OUNa1PuYkqZliw 提取碼:8w3m
如果你想刷 OJ 的話,可以去北京大學、浙江大學、全美計算機奧林匹克競賽的網站,里面有大量歷年的競賽題目,注冊一個 ID,然后用自己熟悉的語言(一般有 Pascal/C/C++/Java)寫好源代碼提交即可,會實時回傳資訊告訴你是否正確,
北京大學:http://poj.org
浙江大學:https://zoj.pintia.cn/contests
全美計算機奧林匹克競賽:http://www.usaco.org/index.php?page=contests
06、看書還是看視頻
看視頻入門,看書進階,
視頻能用較短的時間告訴你你現在所學的技術可以干什么,可能需要先修哪些知識,可以幫助我們搭建一個入門知識體系,
我最近在 B 站上發現了兩個不錯的視頻,推薦給大家看一下,能堅持看完,絕對受益匪淺,
清華大學的作業系統:https://www.bilibili.com/video/BV1js411b7vg
清華大學資料結構與演算法:https://www.bilibili.com/video/BV1jt4y117KR
看書的重要性我就不再贅述了,不管到了什么時候,看書仍然是吸收知識最佳的途徑,你渴望力量嗎?機械工業引進的黑皮書系列,你值得收藏,這些板磚書無論是用來墊顯示幕還是桌子腿,都是非常好的選擇,

《C 程式設計語言》、《演算法導論》、《深入理解計算機系統》、《現代作業系統》、《計算機程式的構造和解釋》、《編譯原理》、《設計模式》、《計算機網路》、《資料庫系統概論》等等,這些書啃下來確實比較吃力,可能不太適合初學者,但這些就是計算機方面的經典書籍,
我知道,你肯定也想要獲取這些電子書,有!
CodeChina:https://codechina.csdn.net/mirrors/itwanger/JavaBooks
GitHub:https://github.com/itwanger/JavaBooks
碼云:https://gitee.com/itwanger/JavaBooks
這一套下去,你就會擁有知識與力量!!! 等待著你的只會是重塑于新生!!!面試的時候更輕松了,寫起代碼更流利了,腰不酸了腿不痛了,頸椎也不難受了,高薪升職再也不是夢了!!!還等什么,心動不如行動,編程黑皮書,誰讀誰知道,讀了你不后悔,讀了你不吃虧! 成為大拿的機會就在眼前,還等什么,行動起來!!!
最好的編程指南,二哥和你一起補上,沖!
CSDN認證博客專家
博客之星
Java 大牛
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247199.html
標籤:其他
下一篇:學習日記——蜂鳴器開關實體
