文/耳東
我,程序員一枚,2017年從山東大學(xué)計(jì)算機(jī)畢業(yè),先后在創(chuàng)業(yè)公司、互聯(lián)網(wǎng)大廠做高級(jí)研發(fā)工程師。今天寫(xiě)下這篇文章是想跟大家分享一下我大學(xué)時(shí)的心路歷程。
其實(shí)讀大學(xué)之前我完全沒(méi)想過(guò)自己會(huì)學(xué)計(jì)算機(jī),當(dāng)時(shí)房地產(chǎn)挺火的,我曾想要不要去學(xué)土木建筑等專業(yè),后來(lái)聽(tīng)一位親戚的建議,選了和“電”“科技”相關(guān)的專業(yè),電氣工程、計(jì)算機(jī)、軟件工程都曾考慮過(guò),最終去了山東大學(xué)軟件工程專業(yè)學(xué)習(xí)計(jì)算機(jī)。
大一的我一直在糾結(jié)一件事情:要不要轉(zhuǎn)專業(yè)?為啥我想轉(zhuǎn)專業(yè)呢?因?yàn)閷?shí)在是學(xué)不懂啊!大一一開(kāi)始,學(xué)校就開(kāi)始教《程序語(yǔ)言設(shè)計(jì)》這門(mén)課,當(dāng)時(shí)教材是以Java作為語(yǔ)言來(lái)授課,我全程兩眼一抹黑,整個(gè)一學(xué)期下來(lái)我只學(xué)會(huì)一句System.out.println(“Hello,World”)。還記得當(dāng)時(shí)每次上完課回到宿舍跟室友說(shuō)過(guò)最多的一句話就是“今天又是毫無(wú)收獲的一天”。
大一時(shí),不僅跟計(jì)算機(jī)相關(guān)的課程,還有高等數(shù)學(xué)這門(mén)課,我也學(xué)得特別菜。本來(lái)我高中數(shù)學(xué)挺好的,不知道為啥一到大學(xué)立馬歇菜了,變得學(xué)不懂?dāng)?shù)學(xué)了,高數(shù)學(xué)不好,編程學(xué)不懂,雙重打擊差點(diǎn)給我整抑郁了。
身邊陸續(xù)有同學(xué)轉(zhuǎn)專業(yè)成功,比如我們班有個(gè)兄弟從計(jì)算機(jī)轉(zhuǎn)到了化工,還有個(gè)兄弟從計(jì)算機(jī)轉(zhuǎn)到了電氣工程。當(dāng)然,也有編程學(xué)得特別好的,人家也是付出了非常多的努力的,這后來(lái)也讓我有許多反思。
度過(guò)大一這一年的“菜雞”生活,轉(zhuǎn)眼就到了大二,我依然在計(jì)算機(jī)專業(yè)里混日子。雖然一直想轉(zhuǎn)專業(yè),但是我實(shí)在不知道往哪兒轉(zhuǎn),以及我的專業(yè)課成績(jī)實(shí)在不足以支持我轉(zhuǎn),就這樣我依舊在計(jì)算機(jī)專業(yè)毫無(wú)收獲地上課聽(tīng)天書(shū)。
大二這一年我們開(kāi)始上《數(shù)據(jù)結(jié)構(gòu)與算法》這門(mén)課了,對(duì)編程有了解的人應(yīng)該都知道,很多人都很怕這門(mén)課,因?yàn)椴皇呛苋菀讓W(xué)懂并且運(yùn)用,當(dāng)然我也不例外。
我依稀記得當(dāng)時(shí)大二第一學(xué)期一開(kāi)始,我決定重振雄風(fēng)認(rèn)真聽(tīng)課爭(zhēng)取學(xué)懂編程,沒(méi)過(guò)幾天數(shù)據(jù)結(jié)構(gòu)這門(mén)課就讓我徹底忘記了起初的決心。剛開(kāi)始學(xué)線性表我還是能聽(tīng)懂一點(diǎn)點(diǎn),但是做作業(yè)時(shí)我連題目都看不懂,更別說(shuō)上手寫(xiě)代碼了。什么排序、查找、二叉樹(shù),我確實(shí)明白是啥意思,但是代碼是真的寫(xiě)不出來(lái)。
大二這一年是我非常迷茫和焦慮的一年,焦慮到啥程度呢?晚上翻著知乎上很多學(xué)習(xí)編程的建議就更睡不著了。因?yàn)榭粗鴦e人學(xué)得很好很系統(tǒng),還能找到好工作,有的還能去大廠實(shí)習(xí),結(jié)果自己都大二了還啥都不會(huì),也沒(méi)做過(guò)項(xiàng)目。
但是很快,我的人生轉(zhuǎn)機(jī)來(lái)了。
大二暑假,我的一位同學(xué)打算去他親戚家的小軟件公司實(shí)習(xí),我當(dāng)時(shí)問(wèn)他:“你跟我一樣啥都不會(huì),還去實(shí)習(xí)?”他說(shuō):“反正也是閑著,就去學(xué)學(xué)唄,自家親戚,你去不去?”我一想也對(duì),就去了。
剛實(shí)習(xí)那會(huì),我依然是啥都不會(huì),但總不能啥都不做吧?于是我從網(wǎng)上找了一套Java視頻開(kāi)始學(xué)習(xí),希望能夠早點(diǎn)開(kāi)始干活。
我就這樣跟著視頻一行一行地敲代碼,從最簡(jiǎn)單的輸入輸出開(kāi)始,老老實(shí)實(shí)地敲代碼,遇到問(wèn)題就去網(wǎng)上搜索??赡苁且?yàn)閴毫︱?qū)動(dòng),也可能是因?yàn)榧倨跊](méi)有其他事情的干擾,慢慢地我發(fā)現(xiàn)我可以看懂一部分代碼邏輯了!曾經(jīng)我對(duì)編程幾乎處于放棄狀態(tài),但是現(xiàn)在居然可以看懂一部分了!雖然現(xiàn)在回頭看那只是入門(mén)都算不上的能力,但在當(dāng)時(shí)卻極大地增強(qiáng)了我的自信心,驅(qū)使著我往下學(xué)。
我跟著視頻陸續(xù)學(xué)習(xí)了面向?qū)ο蟆⒗^承多態(tài)、多線程、網(wǎng)絡(luò)編程等等。那段時(shí)間很充實(shí)很快樂(lè),因?yàn)槊刻於荚趯W(xué)習(xí)新的知識(shí)點(diǎn),學(xué)到的東西可以馬上都寫(xiě)成代碼得到驗(yàn)證。
學(xué)完Java課程后我跟著課程做出來(lái)了一個(gè)完整的項(xiàng)目,當(dāng)時(shí)做的是坦克大戰(zhàn)。之前費(fèi)了很大的勁兒都寫(xiě)不出程序,但是老老實(shí)實(shí)學(xué)完一套課程,以及做出一個(gè)項(xiàng)目之后,我覺(jué)得我入門(mén)了。
那個(gè)暑假過(guò)后,我對(duì)編程和計(jì)算機(jī)不再那么抗拒,也對(duì)寫(xiě)代碼產(chǎn)生了興趣。
經(jīng)過(guò)大二暑假的錘煉,大三過(guò)得很順利。大三我們開(kāi)始學(xué)《數(shù)據(jù)庫(kù)》這門(mén)課,課程設(shè)計(jì)是做一個(gè)增刪改查系統(tǒng),這是我自己獨(dú)立做出來(lái)的第一個(gè)課程設(shè)計(jì),也是最有成就感的一次。
記得當(dāng)時(shí)是直接用Java連SQL Server,用Swing做界面,雖然只是簡(jiǎn)單的增刪改查等功能,但我從零到一完成了整套項(xiàng)目。在這個(gè)過(guò)程中我自學(xué)了很多新東西,比如學(xué)習(xí)SQL,自己封裝簡(jiǎn)單的ORM庫(kù)等等,也克服了之前寫(xiě)代碼的恐懼。
印象最深的是處理一個(gè)配置SQL Server的問(wèn)題,當(dāng)時(shí)它困擾了同專業(yè)很多同學(xué)。我上網(wǎng)查了很多資料,然后總結(jié)出來(lái)一套解決辦法,那段時(shí)間我經(jīng)?!傲鞲Z”于各個(gè)宿舍幫同學(xué)們解決配置以及一些其他的編程問(wèn)題,一些編程技術(shù)不錯(cuò)的同學(xué)都對(duì)我刮目相看了。
努力不會(huì)白費(fèi),最終我的課程設(shè)計(jì)得了高分,我也從寫(xiě)個(gè)“Hello,World”都費(fèi)勁的學(xué)渣變成了可以幫人解決技術(shù)問(wèn)題的學(xué)霸。
大三第二學(xué)期,要開(kāi)始找實(shí)習(xí)工作了,當(dāng)時(shí)依然很菜的我要開(kāi)始好好做準(zhǔn)備了。通過(guò)在網(wǎng)上了解,我大概知道了計(jì)算機(jī)應(yīng)屆生找工作的時(shí)候基礎(chǔ)知識(shí)很重要,于是我找了很多操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)結(jié)構(gòu)算法的資料和書(shū),準(zhǔn)備重新好好學(xué)習(xí)一下之前荒廢的知識(shí)。
這里重點(diǎn)說(shuō)一下我重新學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的方法,其實(shí)很簡(jiǎn)單:我把《數(shù)據(jù)結(jié)構(gòu)與算法》課本上的代碼部分,從頭到尾敲了一遍,沒(méi)有什么特別,就是老老實(shí)實(shí)把課本上的例子在電腦上敲了一遍。
過(guò)程很艱難,但是結(jié)果很不錯(cuò)。一開(kāi)始經(jīng)常出問(wèn)題,比如方法抄錯(cuò)了、少寫(xiě)了分號(hào)等各種低級(jí)問(wèn)題,時(shí)間長(zhǎng)了越敲越順,而且一邊敲一邊理解,最后數(shù)據(jù)結(jié)構(gòu)中的鏈表、二叉樹(shù)、堆、棧、圖、排序、查找等等代碼實(shí)現(xiàn)我都熟悉了,然后就刷《劍指offer》,這本書(shū)大概刷了兩遍。
在把課程都重新學(xué)了一遍后,我開(kāi)始找實(shí)習(xí)。但是此時(shí)有個(gè)非常困擾我的問(wèn)題——我該投什么崗位的簡(jiǎn)歷?前端、后端,還是算法?
于是我去搜了各個(gè)方向的就業(yè)和崗位要求,大概了解到當(dāng)時(shí)(2016年)前端正處于蓬勃發(fā)展的階段,Vue、React技術(shù)棧以及前端工程化正進(jìn)行得火熱,于是我決定走前端方向。
隨后我開(kāi)始學(xué)習(xí)前端的東西,從HTML、CSS、JavaScript開(kāi)始,然后是學(xué)習(xí)Vue,項(xiàng)目我都是從GitHub找的。找實(shí)習(xí)的過(guò)程也是一言難盡,大廠基本都掛了,面試中還經(jīng)常被鄙視。
最難忘的是我去某個(gè)公司面試的時(shí)候,面試官看了簡(jiǎn)歷先問(wèn)我會(huì)不會(huì)Promise,當(dāng)時(shí)的我完全沒(méi)聽(tīng)說(shuō)過(guò),只好承認(rèn)說(shuō)不知道,面試官聽(tīng)完后投遞來(lái)一副鄙夷的眼神,令我至今難忘。
類似這樣失敗的面試有很多,但是當(dāng)時(shí)的我沒(méi)有時(shí)間去悲傷,因?yàn)槲抑雷约旱膶?shí)力不足,所以只有在每次面試之后總結(jié)得失,不停地補(bǔ)齊自己的能力短板迎接下一次面試。
大四的我基本都是在校外中度過(guò)的。我去了一家創(chuàng)業(yè)公司實(shí)習(xí)。當(dāng)時(shí)的我手握兩個(gè)實(shí)習(xí)offer,一個(gè)是這家創(chuàng)業(yè)公司,一個(gè)是阿里體育。因?yàn)楫?dāng)時(shí)我覺(jué)得創(chuàng)業(yè)公司給人的感覺(jué)非常好,而且實(shí)習(xí)待遇會(huì)高一些,所以就去了。
實(shí)習(xí)的時(shí)候就是不停地學(xué)。剛開(kāi)始的時(shí)候“菜雞”如我連webpack都不會(huì)配,裝node環(huán)境都要裝好久。不過(guò)可能是壓力帶來(lái)的動(dòng)力吧,我很快就掌握了工作中需要的東西,并且可以開(kāi)始獨(dú)立做事情。后來(lái)因?yàn)閷?shí)習(xí)期間表現(xiàn)出色,還獲得了最佳實(shí)習(xí)生獎(jiǎng)。
計(jì)算機(jī)是一門(mén)實(shí)踐科學(xué),最重要的是多動(dòng)手,代碼都沒(méi)寫(xiě)過(guò)幾行就想學(xué)好編程,你想想你站在岸上能學(xué)會(huì)游泳嗎?
順利轉(zhuǎn)正后,我留在了那家公司。當(dāng)時(shí)薪資還不錯(cuò),在2016年月薪就有1萬(wàn)6,算下來(lái)年薪20多萬(wàn),這在五六年前確實(shí)是不錯(cuò)的應(yīng)屆生薪水。
如今回頭看,雖然我的大學(xué)過(guò)得不夠出彩,但是我的失敗經(jīng)驗(yàn)和教訓(xùn)還是可以分享給大家的。
1.學(xué)編程一定要多寫(xiě)
大二暑假之前我也嘗試著去學(xué)了一些東西,但是現(xiàn)在看來(lái)當(dāng)時(shí)動(dòng)手操作得太少了。學(xué)編程一定要多寫(xiě),把書(shū)本上的代碼例子自己手敲下來(lái),然后可以按照自己的想法去做改動(dòng),遇到問(wèn)題就去搜索。計(jì)算機(jī)是一門(mén)實(shí)踐科學(xué),最重要的是多動(dòng)手,代碼都沒(méi)寫(xiě)過(guò)幾行就想學(xué)好編程,你想想你站在岸上能學(xué)會(huì)游泳嗎?
如果你現(xiàn)在在苦惱為什么寫(xiě)不出來(lái)代碼、編程能力不好,那你應(yīng)該反問(wèn)自己寫(xiě)過(guò)多少行代碼、解決過(guò)多少bug?
學(xué)編程,就老老實(shí)實(shí)多寫(xiě)代碼吧。做個(gè)聰明人,但是要下笨功夫。
2.目標(biāo)明確,不糾結(jié)
曾經(jīng)我也糾結(jié)過(guò),學(xué)Java好還是C++好,好像安卓開(kāi)發(fā)也不錯(cuò)。但是說(shuō)實(shí)話,如果我當(dāng)時(shí)從這里面任意一個(gè)方向深入進(jìn)去,早點(diǎn)開(kāi)始學(xué)習(xí)做項(xiàng)目,結(jié)果應(yīng)該會(huì)比現(xiàn)在好很多。
所以學(xué)習(xí)編程前可以找懂行的人多問(wèn)問(wèn),看看前景如何。但是一旦你定下了方向,就不要糾結(jié)了,好好學(xué)就是了。
總的來(lái)說(shuō),當(dāng)前有越來(lái)越多的人進(jìn)入到互聯(lián)網(wǎng),錄取計(jì)算機(jī)研究生的分?jǐn)?shù)線每年也越來(lái)越高,人多了那么面試要求也高了,我作為面試官可以很明顯地感受到校招生的簡(jiǎn)歷、能力、學(xué)歷等條件逐年在升高,那么作為計(jì)算機(jī)專業(yè)的學(xué)生,該如何應(yīng)對(duì)這種越來(lái)越“卷”的就業(yè)形勢(shì)呢?
首先你可以提前實(shí)習(xí),因?yàn)樾U械臅r(shí)候大部分公司都希望你有一定的實(shí)戰(zhàn)經(jīng)驗(yàn),作為學(xué)生最好的獲取經(jīng)驗(yàn)的渠道就是去實(shí)習(xí)。正常來(lái)說(shuō)應(yīng)該是大三才去實(shí)習(xí),但是如果想笨鳥(niǎo)先飛的話,我建議大二就嘗試著投遞實(shí)習(xí)簡(jiǎn)歷,但是注意別去那些血汗小公司,盡量去有人可以帶你的公司。就算你面試實(shí)習(xí)沒(méi)過(guò),也沒(méi)關(guān)系,你還有大量的時(shí)間可以補(bǔ)齊短板,并且真實(shí)的面試經(jīng)驗(yàn)也可以讓你調(diào)整自己的心態(tài),提前了解到學(xué)校里學(xué)的東西和面試要求之間的關(guān)系和區(qū)別,更有利于你大三找實(shí)習(xí)和面對(duì)正式的校招。
其次注意校招實(shí)習(xí)、正式招聘、簽offer的時(shí)間節(jié)點(diǎn),曾經(jīng)我以為大部分學(xué)生應(yīng)該都很清楚這個(gè)時(shí)間節(jié)點(diǎn),但是后來(lái)接受了一些學(xué)弟學(xué)妹的咨詢后才知道很多人并不清楚。以主流的中型大型公司為例,大規(guī)模招實(shí)習(xí)生的時(shí)間節(jié)點(diǎn)是:大三的第二學(xué)期中旬,也就是4月份左右就開(kāi)始招聘暑期實(shí)習(xí)生了,這一階段招實(shí)習(xí)生的規(guī)模最大最集中。大規(guī)模校招的時(shí)間節(jié)點(diǎn)是大三第二學(xué)期開(kāi)始(秋招)和大四的第一學(xué)期(春招)。秋招的時(shí)候是大量地招聘正式員工,也就是提前把正式員工的offer發(fā)給你,提前把你鎖定了。春招的時(shí)候相當(dāng)于補(bǔ)錄正式員工,也就是秋招沒(méi)招滿的話,春招會(huì)繼續(xù)招,所以春招的規(guī)模和數(shù)量都不如秋招,一定要把握好秋招。雖說(shuō)大學(xué)本科有4年,但其實(shí)從大三第二學(xué)期秋招就開(kāi)始了,所以讓你好好學(xué)習(xí)準(zhǔn)備的時(shí)間其實(shí)只有兩年半,這么一看時(shí)間還是很緊迫的。