我的程式設計能力從什麼時候開始突飛猛進
程式設計師的成長之路
網際網路/程式設計師/技術/資料共享
閱讀本文大概需要 5 分鐘。
來自:https://www.zhihu.com/question/356351510/answer/1148885728
本文源於知乎回答,以下為原文。
在啃掉一本本計算機經典書籍和寫下大量程式碼以後。
疫情原因回不去學校,作為一個馬上畢業,即將入職騰訊的大四生,分享一下自己的學習歷程吧。
本人在大學之前從未接觸過程式設計,最開始的程式設計學習還是在高考完後,從書店買了本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,找到好工作的學長學姐先例很少,一直是沒有信心自己能去大廠,直到當時瞭解到孟永康學長在春招收割了一系列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,兩家都給的比較高,選擇了工作體驗更喜歡的騰訊哈哈。
總的來說,學習計算機是需要積累的,花一兩年時間啃下那些厚厚的經典書籍後,才能構建自己的知識體系,然後閱讀大量優秀原始碼,做一些有趣的專案,程式設計能力就能突飛猛進啦。
現在回頭來看,大學時光真是如此寶貴,這是人生中為數不多可以靜心學習的一段時間,可以不用考慮任何其他事情,每天學習十多個小時。
部分藏書
<END>
推薦閱讀:
5T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,微控制器,樹莓派,等等。在公眾號內回覆「2048」,即可免費獲取!!
微信掃描二維碼,關注我的公眾號
朕已閱