當前位置: 華文星空 > 知識

你的編程能力從什麽時候開始突飛猛進?

2019-11-17知識

update:

評論區很多學弟學妹要求整理一個學習路線,剛寫了篇文章:

從小白到後端工程師的自學之路 - MutexLock的文章 - 知乎 https:// zhuanlan.zhihu.com/p/13 0364187

---------------

在啃掉一本本電腦經典書籍和寫下大量程式碼以後。

疫情原因回不去學校,作為一個馬上畢業,即將入職騰訊的大四生,分享一下自己的學習歷程吧。

本人在大學之前從未接觸過編程,最開始的編程學習還是在高考完後,從書店買了本C Primer Plus,然後暑假開始啃,前前後後也就看了幾十頁。

大一上的時候,來到了華中師範大學,還沒有轉專業到電腦,一直在自學C語言和看一些電腦入門書籍(編碼、電腦科學概論)。當時也很迷茫,不知道以後道路如何,所以也學了一些雜七雜八的東西(前端 python啥的),所幸的是,當時堅持把C Primer Plus結結實實地精讀了一遍,而且幾乎練習題都做了,算是比較好的開端。

大一下,轉專業到電腦了,開始自學數據結構,演算法和C++,部份看完了 數據結構與演算法分析,並且把書上的數據結構實作了一遍,記得當時五月份給自己的flag是看完C++ Primer,然後每天上課看,晚飯吃完後也跑去七號樓刷書,最後囫圇吞棗似的看完了大部份。

大一暑假,txr大佬 @杏仁糖 給我說他面試透過了華科的聯創團隊Unique Studio,而且給我說他們團隊都特別厲害,有些人在軍訓的時候就把C++ Primer給蹲著看完了,當時十分欽佩,幻想也能夠進入貴團隊。於是打算在大二上的時候,去報名他們的秋招。所以,那個暑假在學校自學,呆了五十多天。最初,拿起一本APUE,看了一章後感覺看不懂又放下了。然後,又拿起一本紅色封面的演算法第四版,這本書看完了,並且用C++把上面的演算法都實作了一遍。另外,聽知乎大佬說CSAPP是必看的神書,當時也懵懵懂懂地看了前面三章,做了lab。為了學習linux,還看了一本叫linux命令列大全的書。武漢的夏天很熱,只能寂寞待在宿舍的我,開啟了LeetCode的世界,寫了一百多道題。

大二上,十月,忐忑迎來了聯創的面試,前面兩輪都過了,直到其特色的「熬夜測試」環節,因為實力不足+精力不足,測試敗北,沒有透過。清晨七點,在回學校的公交車上思考自己不足,總結是知識體系仍然不夠完全,而且深度也不夠。後來這個學期有點「誤入歧途」的意思,入了Machine Learning的坑,記得當時花了好幾個月刷完西瓜書和吳恩達機器學習課程的講義(真佩服當時的毅力,都是英文和公式推導),後來想了想,ML/DL這個東西有點玄學,於是毅然決定成為一名做工程的程式設計師。總的來說,雖然這個學期的時間都投入到ML的學習中,沒有學習工程方面的東西,只有用python寫了一點好玩的爬蟲,但是給了我以後堅定走工程方向的決心吧。

大二下,這個學期是打下電腦知識基礎的關鍵時期。從知乎找了一系列書單,看完了CSAPP(做了lab,為了bomb lab還通宵了,強迫癥想讓自己把炸彈都拆了)、半本演算法導論、effective C++、電腦網絡系統方法(前三章)、部份TCP/IP詳解等,做了一些專案,比如正則引擎(這個是參考了輪子哥的教程)等等,嘗試寫JSON庫(未遂)。其實,因為學校只是一個普通211,找到好工作的學長學姐先例很少,一直是沒有信心自己能去大廠,直到當時了解到myk @孟永康 學長在春招收割了一系列offer後,才有了些許信心,相信自己如果能夠像他那樣努力,那麽也能夠找到好工作(感謝myk學長那時的鼓勵和指導)。所以,定下了一年把自己水平提升到能夠在大三下春招的時候拿下大廠offer的目標。

大二暑假和大三上也一直為這個目標奮鬥,補上了APUE、部份UNP、深度探索C++物件模型、STL源碼剖析、作業系統概念、作業系統真象還原、Linux多執行緒伺服端編程、部份C++ template、部份C++ Concurrency in Action等書籍。然後,也一直沒有放棄刷題,LeetCode寫到了三百多道。同時也做了一些專案,跟著作業系統真象還原寫的作業系統、簡單的協程庫,閱讀了一些優秀的開源專案,SGI STL、muduo、libgo、libco等。中途還對haskell產生過興趣,打印了一本Learn Yourself Haskell For Great Good,看完後感覺坑太深,還是專註找工作吧,haskell對我一直都有很強的吸重力,但是這種也只能作為愛好吧。另外,編譯器也是有這種魔力,看了部份編譯原理(龍書)、部份現代編譯原理(虎書)和部份Engineering a Compiler,多次嘗試寫自己的編譯器,多次未遂(不過現在有空了,在補上之前的爛尾專案)。當年的筆記哈哈:

部份學習筆記

時間到了12月份,9號樓某個自習室內,txr大佬一直鼓勵我去投簡歷找實習,本來我一直畏畏縮縮,對自己不太有信心,被鼓勵後想著投就投吧。當時投了字節跳動和momenta的實習,面試都比較順利,於是在大三上就在字節跳動開始了愉快的實習,比自己的計劃早了大半年。當時為了準備面試,看了好多牛客網的面經,查漏補缺式地補齊自己的知識盲區。

大三下,基本都是在實習,學習了很多工程實踐上的東西,接觸了go的技術棧,並且對devops和軟件工程方面有了認知,包括程式碼管理、釋出流程、微服務啥的。然後實習的時候騎驢找馬,找到了騰訊的暑期實習。因為這個時候沒有了找工作的壓力,所以開始學一些自己感興趣的東西,包括Rust(至今水平還是不太行)、分布式系統(DDIA、MIT6.824等),零零散散學了點東西。

大三暑假,騰訊實習了兩個月,開始學習kubernetes、各種中介軟體等實際業務用到的東西,這個時候就感覺擁有到紮實的電腦基礎是最重要的東西。

最後,順利拿到了騰訊轉正和字節跳動的秋招offer,兩家都給的比較高,選擇了工作體驗更喜歡的騰訊哈哈。

總的來說,學習電腦是需要積累的,花一兩年時間啃下那些厚厚的經典書籍後,才能構建自己的知識體系,然後閱讀大量優秀源碼,做一些有趣的專案,編程能力就能突飛猛進啦。

現在回頭來看,大學時光真是如此寶貴,這是人生中為數不多可以靜心學習的一段時間,可以不用考慮任何其他事情,每天學習十多個小時。

部份藏書: