下了很大決心,我坦白吧
畢業(yè)參加工作這幾年,在不同的公司遇到過不同的團隊,也認識了許多不同的人。
身邊的同事經(jīng)常問我:“你成都的啊,川大還是電子科大?”
每當這個時候,我就很尷尬了,心里問對方一句:成都難道就這兩所大學嗎?

軒轅高考遭遇滑鐵盧,只去了一個普通學校,學的也不是計算機專業(yè),而是一個偏硬件的:通信工程。
在之前的自我介紹里說過,來自農(nóng)村的我從小就被身邊的人灌輸各種妖魔化電腦、網(wǎng)絡的思想。所以直到高三,我也沒玩過幾次電腦,沒上過幾次網(wǎng)。
也因為這個原因,高考選擇專業(yè)時,對計算機專業(yè)有了抵觸,最后稀里糊涂的選了個通信工程。
沒想到幾年后,兜兜轉轉半天還是走上了計算機之路。這篇文章就給大家擺一擺龍門陣:軒轅的大學四年自學之路是怎么過來的?
大一
大學那幾年,都流行考證,也不管這個證考來有沒有用,考來干嘛,反正別人考,跟著考就對了!
大一的第一個學期,我們非計算機專業(yè)的同學流行考計算機二級證書,說是以后畢業(yè)找工作加分項,我也沒有免俗,跟著交錢去學吧。
那時候也不知道計算機二級證書是什么,要學哪些東西,沒想到學校統(tǒng)一報名學的竟然是個早已作古了的數(shù)據(jù)庫編程語言:Visual FoxPro。

不過,第一次接觸計算機編程,還是很興奮的,從表的字段、結構到SQL語言,然后到程序設計的循環(huán)、分支、函數(shù)等等基礎概念的第一次接觸,都在當時一張白紙的我腦子里留下了深深的印象。
雖然這門語言早已過時,但是有一說一,這位老師是講的真好,可以算是大學四年里我認為單純教學能力上最出色的老師!沒有之一。
通過這個計算機二級的考試,算是正式點燃了我對計算機和編程的興趣。考完了計算機二級之后,我沒有停下,繼續(xù)用這個VFP自己做了一些程序,各種XX管理系統(tǒng)。
那時候剛剛進入大一下學期,開始教授C語言了,我卻沒有意識到這門課的重要性,還在研究VFP的高級用法。直到當我拿著寫出來的軟件給網(wǎng)友曬的時候,卻被潑了一盆冷水:這年頭誰還用這語言啊,連C語言都不會嗎?就這?
那時候開始,我開始調整精力,開始全面學習C語言。
不過,大學老師講的太水了,用現(xiàn)在的話講,就是一個只會照著PPT念的機器人,上課讓人昏昏欲睡。和之前教計算機二級的老師教學能力,相差甚遠。
我很快意識到,想靠上課來學C語言多半是沒戲,這進度也忒慢了。
與此同時,我還意識到一個更重要的問題:我的通信工程專業(yè),以學校的平臺和師資,如果想走硬件路線,太難出頭了,不是不能,是太難了。而如果走軟件路線,則要容易得多。也就是在大一的下學期,我正式下了決斷:學軟件!
我開始嘗試自學,很多跟計算機關系不大的課程,能不去就不去,自己看書學習,期末考試確保不掛科就行。
但是編程這東西,三分靠看書,七分靠實踐,得要上機練習才行!實驗課每周次數(shù)有限,不能做到隨時想練就練。后來打聽到學校有個學生活動中心可以上網(wǎng),還特便宜。于是我開始每天往返于學生活動中心,在那里度過了一個多月,把C語言這門課本上的東西算學完了。
當時的教材是著名的清華大學譚浩強老師編寫的《C程序設計》,書中只是一些C語言基本的語法介紹,一個月后學完感覺這東西好像沒啥用,都是在一些黑乎乎的窗口寫一點數(shù)學運算之類的題目,實用性不高啊。

身邊有高年級的師兄告訴我:“光學這個不行,你得去做點實戰(zhàn)項目,去圖書館找?guī)妆緯桑「殹?/p>
于是,我又去學校的圖書館,找了幾本書。拿回來一看,里面出現(xiàn)了好多不認識東西,一問才知道,我拿的是C++的書。
雖然不知道C++是什么,但聽說下學期也要學這個,索性我就提前學了。
書是有了,但電腦的問題卻日益嚴重,去學生活動中心電腦室上網(wǎng)也不是個長久之計,有時候去晚了根本沒位置,而且距離宿舍也不近,來回挺折騰的。而買新的電腦,動輒就是幾千塊,我一個窮小子實在負擔不起,也開不了口向家里要。后來,我在淘寶上淘到了一個二手筆記本電腦,五百多塊拿下了,雖然慢的要命,但好過沒有。于是我開始在這臺電腦上正式開啟了我的C/C++編程之路。
大一的下學期,還有一件事,就是計算機的一門基礎課:計算機網(wǎng)絡。
這門課和C語言是同一個老師,同樣的PPT走馬觀花,同樣的讓人昏昏欲睡。
但是偶然一次路過,發(fā)現(xiàn)隔壁班的計算機網(wǎng)絡是當初教計算機二級的老師在上課,我和兩個小伙伴就一起溜進去蹭課,這一蹭不要緊,一下就上了癮。
這位老師風格獨立,根本不用學校發(fā)的教材,而是自己編寫了一套PPT,從最底層的原理講起,從通信的編碼校驗,到局域網(wǎng)的802.3、802.4、802.5等技術演進,用生動有趣到生活實例告訴我們什么是CSMA/CD,聽得我們如癡如醉。我現(xiàn)在寫的很多故事性的文章,一定程度上都有這位老師的影響。
在我們幾個的口口相傳下,我們班在上計算機網(wǎng)絡課時,門可羅雀,而隔壁班人卻越來越多,不知道我們的計算機網(wǎng)絡老師看到后心里有何感想。
大一這一年,是迷茫中尋找方向的一年。
大二
買來的二手電腦終究經(jīng)不起我的折騰,才用了半年左右就出現(xiàn)各種毛病。大二上學期的國慶節(jié)回到老家,跟奶奶聊起了學校的經(jīng)歷和日常。奶奶聽后二話沒說,拿出了四千塊錢給我,讓我去買電腦。我是又喜又愧,喜的是可以換新電腦了,愧的是我知道這四千塊錢對她來說有多么不容易。奶奶說,等我以后掙錢了再還她就是了,可快十年過去了,我還沒還,奶奶卻不記得這事了。
言歸正傳,換上了新的電腦,得更努力的學習才行。
大二這一年,加入了學校一個研究所,跟著老師還有師兄師姐們一起做項目,這一年是收獲的一年。
進入研究所的第一件事,就是一個跟網(wǎng)絡數(shù)據(jù)包打交道的項目。
印象最深的是,第一次看到了網(wǎng)絡數(shù)據(jù)包長的是什么樣的。之前學計算機網(wǎng)絡時,總把數(shù)據(jù)包掛在嘴邊,什么TCP/IP幾層協(xié)議,張口就來,卻連真正的數(shù)據(jù)包都沒見過。
學習計算機網(wǎng)絡,一定得抓個包來看看,看看課本里的一層層協(xié)議,一個個字段,在網(wǎng)絡中真實的樣子。這里推薦兩個抓包軟件:
專業(yè)人士:wireshark

如果是新手小白,Wireshark純英文版用起來有一定門檻,推薦一個國產(chǎn)軟件:
科來網(wǎng)絡分析系統(tǒng)

中文界面操作起來更簡便易懂。
這段日子,是編程能力快速提升的時期,之前都是自己跟著書瞎練習,現(xiàn)在有了過來人指導,避免了很多彎路。
記得研究所老師說過一句話:什么時候覺得自己編程能力入門了?就是當你能夠獨自編寫超過1萬行代碼軟件的時候。
進入研究所之前,自己寫的軟件,每個工程也就一兩千行代碼的水平。而接觸真實的項目后,一下就被十幾萬行代碼的巨大工程震撼到了,由衷的佩服師兄們是怎么完成這么浩大的工程的。
那時候,研究所項目很多都是VC++開發(fā),雖然經(jīng)過自學有了C++的基礎,但一下接觸VC++,還是來的有點猛。于是乎,開始各種找資料補課學習。
后來在網(wǎng)上找到了一個叫孫鑫老師的《深入VC++詳解》的視頻,共計二十堂課,講的全是干貨,真的是深入淺出,很快靠著這個視頻算是入了門,終于初步具備開發(fā)項目的能力。
這個時期,跟著幾本VC++實戰(zhàn)教程,做了幾個軟件項目,不得不說,實在比VFP難多了。
學了網(wǎng)絡編程,做了一個網(wǎng)絡聊天軟件,在寢室局域網(wǎng)中用來跟室友聊天。
為學校的信息安全比賽,開發(fā)了一個監(jiān)控軟件,可以同時監(jiān)控多個人的電腦桌面。

還寫了一個Web服務器,第一次獨自開發(fā)超過了3萬行代碼。
大二這一年,是找到方向后快速成長的一年。
大三
經(jīng)過大二一年的學習,算是從計算機小白,變成了一個有一些編程能力的“老司機”。
大三上學期,研究所來了一位新的師兄,師兄是計算機學院正統(tǒng)軟件工程專業(yè)出身,不像我們幾個東拼西湊學來的,一進來就給我們帶來了全新的沖擊。但這個沖擊,是正面的。
科班出身就是不一樣,軟件工程理論、設計模式、Java技術棧,這些東西,都是我之前靠自學從未接觸過的東西。
知道落后不可怕,不知道自己落后才可怕。直到大三才第一次有了一個意識:不要把目光局限在研究所,局限在學校這個小小的空間,該睜開眼去看看外面的世界,看看社會上公司里現(xiàn)在都用什么技術。
那時,我才發(fā)現(xiàn),我一直洋洋自得的VC++編程技術,早已走過了它的巔峰時期,現(xiàn)在是Java和Linux的天下,是時候該學一些新東西了。
可能是先入為主,也可能是年少輕狂,我和Java的第一次相遇很快就結束了,初步了解之后覺得一個靠虛擬機運行的語言怎么能比得上C++?我當時竟然誕生了這樣的想法,遺憾的與Java擦肩而過。直到多年后畢業(yè)工作,才重新學Java,真想捶扁當時的自己。
反倒是Linux,越學越有勁,從一開始接觸命令行時戰(zhàn)戰(zhàn)兢兢,每做一個操作都要百度搜索,到后來對命令操作愛不釋手。
后來不滿足于表面的應用,在淘寶上淘了一本盜版的 《深入Linux內核架構》,開始琢磨起這個神奇的操作系統(tǒng)來。
因為并非計算機專業(yè),所以并沒有系統(tǒng)的學習操作系統(tǒng)這門課程,反而是先看了《Windows內核原理與實現(xiàn)》和《深入Linux內核架構》這兩本具體寫兩個操作系統(tǒng)內核的書之后,才轉過頭去看操作系統(tǒng)原理這門課程。


有了這兩本書的鋪墊,再看操作系統(tǒng),竟是如此的絲滑和順暢。每次看到操作系統(tǒng)原理中的理論章節(jié),就能浮現(xiàn)出Windows和Linux在這個理論上具體實現(xiàn)的異同之處。相反,如果一開始先看純理論,很可能不會有這么深刻的認識。
大三的這一年,是開拓視野和眼界的一年。
大四
大四的主題,每個人都知道,那就是:找工作。
確實如此,其實從大三下學期開始,我們研究所的小伙伴們就開始關注秋招了。
那幾年,還不流行刷leetcode,倒是流行看一個系列的書:《程序員面試寶典》。不看不知道,一看嚇一跳,我們這東拼西湊學來的,畢竟不夠系統(tǒng),基礎知識不扎實,很多題目都不會做。
大三結束的那個暑假,開始瘋狂補課,尤其是下面幾個重點方向:
C/C++編程基礎 計算機網(wǎng)絡 操作系統(tǒng) 數(shù)據(jù)結構與算法
這些知識,平時多多少少有接觸或用到,但從未有機會系統(tǒng)全面的梳理過。在這個暑假,一邊做題,一邊看書,突然找到了一點高考的感覺,因為我們知道,9月份就要開始的秋招大戲,對我們而言,那就是一場高考。
臨近9月,開始在網(wǎng)上開始各種搜索往屆各大公司的筆試面試題,看別人的面經(jīng)貼,學習經(jīng)驗。
不過這還是不夠,為了更加真實的鍛煉自己,在8月份的時候,我在網(wǎng)上找了幾家公司投了簡歷,去真實的面試幾次。
投簡歷的目的,不在于是真正想去這家公司,而是想通過這樣的實戰(zhàn)面試,鍛煉自己不怯場的膽量,畢竟在象牙塔里長大的我們真正走出社會,還是有一些障礙需要去跨越。
試了有四五家公司,在過程中不斷發(fā)現(xiàn)自己的問題,包括技術上的問題和交流溝通表達上的問題。你還別說,這一招還真管用,越到后面自己越發(fā)自信,一開始連自我介紹都說不利索,到后面都能夠流暢表達脫口而出。
好在功夫不負有心人,技術上查漏補缺,面試經(jīng)驗也積累了一些,在秋招正式開始不久,我就收獲了心怡的offer,總算可以為自己的大學四年交上一份合格的答卷了。
經(jīng)驗談
我的大學四年自學過程,總結了幾條經(jīng)驗,供大家參考:
非科班沒關系,只要想學,就有希望。 基礎知識很重要,別只做項目,忽略基礎。 別悶頭自學,多聽聽別人的意見,但也別光聽一家之言,兼聽則明,偏聽則暗。 找一群志同道合的小伙伴,互相鼓勵,一起學習,共同進步。 及時關注外面的世界,不要局限在自己的小圈子里。 理論與實踐結合,多走出去,樹立自己的自信心。
最后,給大家推薦一些,在自學歷程中我自己看過,且有必要推薦給你們看的書。
推薦書單
C/C++:
《C和指針》 《C++ Primer》 《Effective C++》 《深度探索C++對象模型》 《STL源碼剖析》 《UNIX網(wǎng)絡編程》 《Boost程序庫完全開發(fā)指南(第二版)》
Java:
《Java核心技術》 《Java并發(fā)編程實戰(zhàn)》 《深入理解Java虛擬機》 《Java虛擬機精講》 《深入分析Java Web技術內幕》
操作系統(tǒng):
《深入理解計算機系統(tǒng)》 《操作系統(tǒng)精髓與設計原理》 《Windows內核原理與實現(xiàn)》 《深入解析Windows操作系統(tǒng)》 《深入Linux內核架構》
計算機網(wǎng)絡:
《TCP/IP詳解卷一:協(xié)議》 《Wireshark網(wǎng)絡分析的藝術》 《Wireshark網(wǎng)絡分析就這么簡單》
數(shù)據(jù)結構與算法:
《算法導論》 《大話數(shù)據(jù)結構》 《編程之美》 《圖解算法》
網(wǎng)絡安全:
《C++反匯編與逆向分析技術揭密》 《白帽子講Web安全》 《白帽子講瀏覽器安全》 《惡意代碼分析實戰(zhàn)》 《寒江獨釣-Windows內核安全編程》 《天書夜讀-從匯編語言到Windows內核編程》 《0day安全:軟件漏洞分析技術》 《軟件調試》 《漏洞戰(zhàn)爭》
最后的最后,祝每一位看到這里的朋友都能被世界善待,收獲自己想要的offer。畢竟,有夢想誰都了不起!
