為什麼成為一名程式設計師?

好久沒有寫感悟類的文章了,本來考完研就打算寫一篇文章,對大學四年做一個「復盤」的,但複試被調劑了,難受了很久,之後也實在沒什麼由頭寫。在歲末年初前夕,我終於不打算再拖沓了,準備好好整理一下,做個紀念。一方面,審問一下自己的初心,整理一下思緒;另一方面,思索未來的方向,慕然回首時,不回因碌碌無為而羞愧。

初次接觸

我和程式的淵源,最早可以追溯到小學。

上的小學是我們縣裡最好的私立小學,當時還很潮,有微機課。現在回想起來,還記得上課時要穿鞋套才能去機房,調皮的男孩子扣出滑鼠里的軌跡球當彈力球玩。那時的微機課學了好多東西,但到現在我記得最深的是老師在一個框框里演示一個小烏龜爬呀爬,畫出了各種圖形,那個框框老師說叫Turtle。之後老師讓我們自己操作,我照著書敲擊鍵盤,畫出了圓形、方形,三角形,很有成就感。當時的我根本不知道在做什麼,等多年以後我在python里發現了turtle庫的時候,猛然如雷擊,這竟然是在編程?

後來初中為了考電腦等級,學了excle,裡面的函數有求和、取平均,最大最小,甚至還有if-else結構,其實這也算是編程了吧。

上了高中學習壓力大增,雖然學校也有微機課,但只在高一上過幾節,講了一些電腦基礎和剪輯影片。後來了解到當時高中重點班裡就有一些學霸,在搞NIO(資訊學奧賽),他們在高中應該就學完C語言和數據結構了,聽說在南方這很常見,但對我們這些北方小縣城的學渣是不敢想像的。

選擇專業

高考算是人生第一次重要選擇,我高考成績很差,理綜考了有史以來的最低分(17年理綜生物的一道道橫線永遠也忘不了),只能上一個二本。那時候,知乎和B站還很小眾,沒有這麼多專業選擇的文章和影片。家裡也沒有走出小縣城的人做指導,我只能靠那本學校發的一本全國高校分數線的書,按圖索驥,找和自己分數匹配的學校專業。當時大部分選擇還是省內的學校,那就找找合適的專業吧。我開始選了一堆土木工程、機械工程、自動化,爸爸看了看,緊鎖眉頭,問了我一句:你以後想去工地還是去工廠?啊這,我想了想我自幼體弱多病,也不愛運動,肯定做不了體力活。看了看剩下的還有電腦、數學、統計之類的專業,家裡一位當老師的大姨說可以學學數學,但我又想到我高考剛一百出頭的數學成績,學了數學豈不是會被累死?最後權衡之下選了電腦科學與技術,現在回想起來,還挺好玩的,電腦並不是當時的首選項,如果當時選了數學或統計,研究生再轉電腦,又會是怎樣?

可惜沒有如果,最重要的一次人生路線,我就這樣陰差陽錯做出來選擇,去了離家開車只需要兩小時的一所財經類高校,慶幸學校重視電腦,計科專業是國家特色專業,老師和學校也儘力提供了各種資源。我懷著對大學生活的憧憬度過了暑假,終於等到了開學。

大學生活

大一剛開學,我就像逃出籠中的鳥兒,參加了好幾個社團,本想著終於開始自己豐富多彩的大學生活了,但社團活動就是無聊的簽到和開會,後面我也不想去了,一有空就在宿舍躺著完手機。如果我一直這樣下去,可能就真的廢了吧,但我的C語言老師改變了我。我的C語言老師當時對我們非常嚴格,期末成績由三次上機考試分數組成,有一次不及格,直接掛掉。每次上完課後都會在Online Judge上布置作業,如果系統判斷是抄襲,也是直接掛科。在這樣的重壓下,我們不得不認真完成作業準備考試,有時為了完成作業,整個宿舍寫程式碼到深夜。不得不說,嚴師出高徒,我在OJ上練習多了竟然也對寫程式碼興趣愈發濃厚,簡單循環加判斷的組合竟然能解決這麼多問題,每次練習AC了就很開心,WA了就抓耳撓腮。後來學院ACM集訓隊招募隊員,我通過了選拔,開始了演算法學習。

在ACM集訓隊學習期間,晚上就是刷演算法題,周末參加線上的比賽,假期師哥們講解演算法。我當時整體做題補題到自閉,看著周圍同學都能很快理解題意碼程式碼,我一遍遍懷疑自己是不是智力缺陷。有很多同級的同學嶄露頭角和師哥們取打省賽、區域賽,也獲得了很好的名次,說不羨慕是不可能的。後來我也明白自己沒有競賽的天賦,索性就當學習吧,就這樣給大佬們當陪讀,學了些數據結構、圖論、動態規劃、搜索演算法等。ACM比賽帶來的抗壓能力、程式碼能力、演算法理解力、思維縝密度這些是最珍貴的。我的部落格最早也是寫演算法題題解的,想來這也算是ACM帶給我的好處——整理知識、分享知識。不得不說,那些一直參加ACM的同學畢業去大廠的真的不少,阿里位元組都有。今年畢業時,我校ACM隊終於拿下了省賽金牌,後生可畏啊!

到大二時我選擇了退出,選擇了另外一個學習電腦底層的實驗室。當時實驗室的學習任務是在Linux上做一些彙編實驗,用的是CMU的CSAPP上的實驗,裡面的彙編拆彈讓我一步步了解了程式是怎麼在記憶體中執行的,很nice!大二開始學C++、Java、作業系統、組成原理,我也可以搞一些事情了。當時我每上完一節課,就對著課本整理筆記放在部落格上,最開始只想著自己回顧的時候方便些,後來有越來越多的網友閱讀,也有不少在下面評論的,我像得到了正回饋一樣,越來越有趕緊了。就這樣我整理完了演算法設計與分析C++Java資料庫組成原理作業系統圖形學等的專欄筆記,隨著學習的投入,我的成績排名也保持專業前三。

初入江湖

未完待續。。。