哇塞,原來這樣學編程可以直接起飛??!
今天來給大家分享一些學習編程的心得,真的顛覆了我以前對學習編程的刻板印象,可以這么說,如果你恰好處在大學階段,看到了這篇內容,OK,恭喜你,如果你能按照我說的去做,大三大四的時候絕對能領先同學一大截,除非你好心把這篇內容分享給他——嘿嘿。
編程分兩種,一種是實操型,奉行的準則是實踐出真知;一類是理論型,奉行的準則是全部的知識都要搞懂后才肯去動手。前者代碼寫得多,但基礎不扎實,剛學編程時候的我應該屬于這一類;后者代碼寫得少,一句“talk is cheap, show me the code”就被嗆得想動粗。
真正的大牛,能在兩者之間找到一個巧妙的平衡點。
對于上班族或者轉行的同學來說,想把所有的知識點都鋪開去學習完,確實不現(xiàn)實,最好的辦法就是重實戰(zhàn),然后再補理論。對于科班的在校大學生來說,因為有充足的時間,所以可以在理論知識上多花一些時間,等到工作后再彌補實踐上的短板我認為是最正確的方式。畢竟魚和熊掌不可兼得呀!
最近些年,可能是因為寫作的原因,我補充了大量的基礎知識,就突然感覺“今非昔比”了,編程上有了很大的進步,盡管依然很菜,但比前些年自認為好了很多。
好了,廢話就不多說了。先給大家推薦一門課,哈佛大學的 CS50。

老師非常激情,盡管沒有在現(xiàn)場,但依然有一種身臨其境的感覺。第一節(jié)課,直接就叫同學到講臺上撕了一本超級厚的書,就為了給同學們灌輸一種思維——說得直接點,就是二分查找法,先把書撕一半,然后再撕一半,再撕一半,直到找到一個 M 開頭的名字。
總共也就 20 多節(jié)課,每節(jié)課大概一個小時左右的時間,大家可以每天刷一節(jié)。我簡單列一下課程的目錄,基本上都是編程中要搞懂的基礎知識。
算法、程序設計、語言等 數(shù)據(jù)存儲、磁盤等 C 語言、源代碼、編譯器等 函數(shù)、全局變量、參數(shù)、返回值等 線性搜索、二進制搜索 符號、遞歸、冒泡排序等 歸并排序、動態(tài)內存分配、堆和棧等 指針、文件輸入輸出等 數(shù)獨、計算機史上最有名的 bug 等 魂斗羅游戲如何分配內存等 哈希函數(shù)等 網(wǎng)絡編程等 網(wǎng)絡安全等
說一件挺不好意思的事,我以前覺得只學 Java 這門編程語言就夠了,做個 CRUD 的好 boy 不就挺好的嘛。然后隨著時間的推移,越來越覺得這個想法有點天真,有點無邪,哈哈,還是要力爭上進的,多學點沒啥壞處。
一開始學也行,隨后補也行,總之是不能想當然的不學,會吃虧的,吃大虧的。
關于 C 語言,我之前給大家推薦了浙大教授翁愷的視頻,以及一個英文的在線學習網(wǎng)站,新來的同學可以去看一下。
大家應該能發(fā)現(xiàn),很多講解計算機科學相關的書籍,包括課程,里面的例子幾乎都是 C 語言描述的。我在一把小刀,直插 class 文件的小心臟這篇文章里也提到了 C 語言的符號表(Symbol Table)。
C 語言是很古老了,但越老的東西活得越久,越能證明它的優(yōu)越性。
不得不說,哈佛就是哈佛,名校就是名校,這課程真心給力。如果你真的是對計算機科學感興趣,并且將來要進入這個行業(yè)工作,強烈建議多刷幾遍。
這是一個在編程界混吃等死了十多年的老菜鳥給初學者的最良心的建議。下面是這門課程的地址。
https://open.163.com/newview/movie/free?pid=M6U6LS8CV&mid=M6U6MHDUR
刷完這門《哈佛大學的 CS50》,也刷完了翁愷教授的《C 語言程序設計》,就可以看看下面這本天書了!

這本書牛不牛逼,直接看豆瓣評分就能感受到,基本上全星,應該說是計算機相關書籍中評分最高的一本了吧。
那肯定是一門好書,一本再好不過的書了。
但能不能看得懂,能不能耐著性子看下去,就需要看你的定力了!
這本書從計算機開始講,介紹了電腦主機有什么部件,主板上有什么零件,CPU、內存和硬盤之間是怎么連接的。
介紹了我們寫的程序是怎么從一個文本文件被編譯,然后是怎么變成匯編語言,再到機器碼的,以及怎樣被計算機執(zhí)行的。
還講到了計算機網(wǎng)絡、計算機組成原理、進程和線程等等,從硬件到軟件,全部拿下。
這本書讀完后會有哪些收獲呢?
明確某一個階段我們欠缺什么知識。 對技術有極客追求的同學會在這本書里找到很多答案。 終于明白了,我們寫的程序是怎么被計算機執(zhí)行的。
再次強調,《深入理解計算機系統(tǒng)》這本書對初學者并不友好,可能需要在不同的時間節(jié)點反復的看,一開始看不懂的內容可以過一段時間再看,如果還看不懂就再等等,過一段時間回來再繼續(xù)看。另外,書里面很多例子都是用 C 語言寫的,所以在看這本書之前一定要把 C 語言給吃透了。
總之,不要抱著那種一定要把這本書吃透再怎么怎么樣的幻想。先從中學到 1%,再學到 5%,再到 10%,不要操之過急,學到點是點,能學到多少都是值的,不拋棄不放棄,嘿嘿。
如果真的想從事編程,當做一份職業(yè)來對待的話,你需要一本這樣的書。
讀這本書的同時,可以著手學習數(shù)據(jù)結構了,比如說數(shù)組、鏈表、樹、圖,以及哈希表等。為什么要學習數(shù)據(jù)結構呢?
清華大學鄧俊輝老師的答案:數(shù)據(jù)結構作為構建高效算法的必要基礎,在計算機科學領域中,起到了技術體系的基石的作用。以 ACM/IEEE Computing Curricula(計算機教學大綱)2005 年版為例,其中對于計算機科學、計算機工程、信息系統(tǒng)、信息技術、軟件工程等幾個相關專業(yè)的共同要求中,數(shù)據(jù)結構與算法作為程序設計概念與技能的核心,緊隨在數(shù)學之后,排在第二位。
當然了,基本的算法也跑不了,比如說動態(tài)規(guī)劃、貪心算法,還有基本的排序算法。

我給大家推薦一個在線的學習網(wǎng)站,地址如下所示:
https://www.programiz.com/dsa/why-algorithms
這是一個純英文的學習網(wǎng)站,截圖中為什么是中文的?哈哈,當然是我用 Safari 瀏覽器翻譯過的。英文功底可以的同學可以直接看英文原版的。代碼示例有多種版本,Python、Java、C 和 C++ 的都有,完全不用擔心被編程語言困擾的問題。

有 C++ 基礎的同學可以直接看鄧俊輝老師親自錄制的課程,有配套書籍——《數(shù)據(jù)結構》第三版,清華大學的計算機系列教材,質量沒得說。

我貼一下課程的在線地址:
https://www.xuetangx.com/learn/THU08091000384/THU08091000384/5883586/video/9215529
害,如果你想在畢業(yè)后或者跳槽的時候拿到滿意的 Offer,甚至體驗那種好多個 Offer 擺在面前,卻不知道選哪一個的感覺的話,我推薦的這三門課程、一個學習網(wǎng)站、兩本書,你值得擁有!
哇塞,原來學編程可以這樣呀,忍不住點個贊,嘻嘻~
