1. 程式人生 > >一個大四計科學生的簡單總結

一個大四計科學生的簡單總結

寫在前面

第一次這麼詳細地寫個人經歷,算是對自己大學幾年學習程式設計的總結吧。我不是什麼計算機大佬,也沒有所謂的計算機天賦,這一路走來磕磕絆絆的,踩過許多坑,走了很多彎路,最後也是靠著一些運氣,以一個應屆生的身份加入到了完美世界(北京)。現在公司安排的員工公寓中,等待HR下發最後的通知,不出意外的話,週一就能正式開始實習了。趁現在,寫一下個人感想吧,希望能對一些同學有啟發!

本博文沒有涉及到太多技術性的東西,更多的是個人的經歷以及總結,希望一些還在學習的同學能有所收穫!!!

PS:好久不來部落格園寫了,一直在CSDN。。。感覺CSDN的寫作介面比較友好,,就是廣告太多了。。。。。

我的基本經歷

我的本科就讀於一所普通的院校(非985、211),現在是大四,明年正式畢業,專業是電腦科學與技術,感謝我的學校給我提供的一些環境,讓我可以有今天一點點小成績;也十分感謝那些幫助過我的老師和同學們,很幸運可以遇到你們。

來計算機專業之前

故事要從高考前開始說起。高考之前,像很多北方的男孩子一樣,我是想著去報考軍校的或者當一個飛行員的,很不幸,由於某些因素,這兩個願望都落空了。當時也不知道自己想要幹什麼,所以選擇了飛行器有關的專業(可能還是很喜歡飛機之類的吧)。高考結束後,根據自己的實際成績報考專業,第一志願也很幸運地被現在地母校的飛行器專業錄取,開始了我的大學的第一個階段,飛行器與機械大類專業。

大一上學期,都是高數、畫法幾何等的一些基礎課程。我當時沒有一些確切的目標,但是大體上想的時能進一些研究所之類的,所以這些課程學的非常認真,雖然我內心裡不是很喜歡畫各種工圖。當然,有付出肯定是有回報的,我的成績在專業裡也非常靠前,再加上是學校的王牌專業之一,不禁有些飄飄然的感覺。現在再回想起來,當時的我挺幼稚的。在該學期,也經歷了很多的課外活動,比如情景劇、辯論賽和各種的知識競賽等,雖然有一些小的成績,但總是感覺少了些什麼。

真正觸動我的,是學校計算機博弈協會的宣講。我本來對計算機程式設計毫無興趣,甚至報志願前,專門避開了計算機類的專業。本來我是不打算去的,也多虧了我的助導,他那時候是大三,而且他鄰班的一個同學在這方面取得了很好的成績,所以助導一直催促著我去,在抱著試試看的心態下,我和班裡的另一個關係很好的同學就去聽了一下宣講會。上面提到的助導,現在某航發集團公司工作,而且算是他比較想去的公司吧;助導的鄰班同學,也是我很佩服的一個學長,現在是北京某211高校的計算機專業碩士,也非常的優秀;另一個關係很好的同學,正在準備今年的考研,方向也是飛行器類的,衷心祝願同學可以考研成功!

宣講會上,很多內容我都忘記了,但是有兩點對我觸動比較大:老師說協會的同學都是很優秀的;計算機以後的收入比較高,很多同學是10K起步的(稅前、不扣除五險一金、正式轉正入職)。當時聽了很心動,尤其是收入上,因為之前總是對月薪年薪等缺乏具體的概念,不是到多少是合適的。抱著試試看的態度,我加入了機器博弈協會。上面提到老師的說法,現在來看部分是正確的,只有那些少數真正能投入精力進行學習的同學,才是比較優秀的;計算機如果學的比較好,就單純看月薪或者年薪的話,真是很高的,至少如果一個能力較強強的同學轉正,是很輕鬆超過老師說的那些的),甚至說10K根本都不考慮去了。

寒假裡自學C語言,開學後,在某個學長的指導下,我完成了第一個五子棋人人對弈的小程式,只是一個控制檯的,能判斷勝負等。我心情最激動時候,是寫出下面這段很經典的入門程式碼:

#include <stdio.h>
int main() 
{
    printf("hello world !");
    return 0;
}

當時,我對計算程式設計的錯誤認識就沒有了,取而代之的是一種可以自己掌控計算機的滿足感,這也極大地激發了我在這方面的學習興趣。

大一下學期到大二下學期轉專業之前,是我技術一個進步期,也是各種採坑和走彎路的時期。大一下學期,為了準備機器博弈校賽的選拔,我開始自己去研究那些博弈程式。很可惜,當時沒有遇到正確的引路人,全都是靠著自己摸索。那時候,我一直以為C語言(或者說是程式設計)就那麼幾個模組,比如順序、選擇、分支和迴圈等,甚至覺得指標沒什麼用處。我不知道有演算法和資料結構、不知道有ACM等的一些比賽、不知道有Github等的一些網站、不知道什麼是面向物件程式設計、不知道軟體工程、不知道前端後端等,總之就是各種不知道,一直被侷限在自己的思維裡,現在想想,真是可笑至極。

後來被選去參加國賽,為了這個比賽,我“專門”地去學習C++,當時地想法也很幼稚:C++就是比C語言多了一個class,把printf、scanf等關鍵字換成了cout、cin等,反正也是各種無知,再加上我們組裡都不是計算機專業出身的,所以就十分的尷尬了。又因為當時的資訊不對稱,不知道該怎麼學、向誰請教等,導致我連DFS這種簡單的演算法,都是到比賽前一個月才突然有了靈感(大佬們就別噴我了,真的很菜。。)。不過還好,之前學長有寫過搜尋框架,我和當時的學長英語能力都還可以,然後照著論文去搞了一下評估函式,最後成績還行,不過還是有些心虛。

大二上學期,認識了幾個計算機同學,知道了有資料結構和演算法這些東西。當時借了一本C++的資料結構,我就像發現了武林祕籍一樣,知道了原來自己還有這麼多不會的,瞬間感覺被打臉了。我把這本C++的資料結構的所有程式碼和練習題,自己上機實踐了至少一遍,理解了C++語言的一些基礎、基本的面向物件的思想,更重要的是有了演算法和資料結構的一些基本思想,基本上能讀懂一些大佬們寫的技術部落格了,那是我感覺最充實的一個階段之一。

轉入計算機專業

後來,為了能更好地學習有關計算機地技術,我在大二下學期申請轉入計算機專業。當時很多同學和我專業的負責老師,認為我這人不正常,非要從一個王牌專業轉入一個非王牌的專業。現在來看,我個人感覺這個決定是很對的,至少從收入看是這樣的。可能一年後,很多之前專業那些直接就業的同學的月收入(都是稅前、不扣除各種金),能有我的1/3就算比較高的了,而且這是不算專案獎金,年終獎之類的。別噴我,我沒裝×,我個人是隻想賺錢,你有你的價值觀,我有我的判別標準,而且這是由行業性質和社會趨勢決定的,而且我暫時不是什麼大佬,牛×的人遠比我賺的多。。。

剛轉來計科,就被數電和模電教做人了,,我曾經一度懷疑我學的不是計算機。。。資料結構這課,就去聽過兩次,因為之前很認真的自學了,期末成績和課設成績都很高。。。就這樣,我的計算機專業之旅非常奇葩,,軟體方向基本沒話多少心思,最多考前突擊一下,就能搞個還可以的成績,,硬體和電路方面多虧了有同學的幫忙,才能勉強度日。。。

在計算機專業裡,還發生了很多有意義的事情,我就不贅述了,僅僅選出幾個對其他同學有參考價值的事情吧。

第一個是接觸到了ACM校隊的同學,跟著他們一起刷題、搞演算法、包括大二暑假一直留校刷題等。雖然我沒在這方面取得一些突出的成績,但是這些基本的演算法思想卻深深印到我的腦海裡了(演算法dalao就忽略我這種小菜雞啊)。

第二個是一直堅持寫程式碼。其實即使是轉入了計算機學院,我還是很迷茫的。我不知道自己到底應該幹嘛。在這期間,我嘗試過各種技術,從前端到後端、從PC端到移動端、從AI到區塊鏈等。當然,這些具體的程式語言我都忘得差不多了,但是一些基礎的思想還是刻錄在了頭腦中。

第三個是一直保持著一個還算可以的學習勁頭吧。雖然我沒能像那些dalao們一樣,能在各種國際類大賽上一展身手(有部分原因是我找不到方向),但是我內心了還是很怕自己落後的,即使沒找到具體的突破點,但是我任然是一個想要加入一個優秀的團隊並不斷學習的渴望,所以“不斷學習”這根弦一直在緊繃著。我認為,不過是那個行業,都得有不斷學習的觀念,都要樹立終身學習的意識,靠一個技能吃老本的時代已經過去了。

不知不覺到了今年上半年,因為我想要加入一個優秀的團隊、想要學習更多的東西,但是卻一時想不出有更好的方式,所以選擇了考研。不過,考研期間,也就是大三下學期,我還是有些心有不甘,總是覺得大學期間少了些什麼。這學期,有我最喜歡的軟體工程課,這門課不僅僅是老師講解理論,更重要的是可以去實踐,包括團隊專案等,而且我們是ZX老師組織的一個全國性的軟工課程,還可以參考其他院校同學的實踐情況,我個人比較推薦這種方式;也感謝我的軟工老師ZYF老師和助教ZR老師,在兩位老師身上學到很多實際開發的流程經驗。而且這期間,我還接觸了一下區塊鏈等的一些東西。雖然是在準備考研,但是卻總想進入業界看一下,這也是後期放棄考研而秋招的一個伏筆。

秋招之路

終於還是厭煩了天天刷題的應試教育,加上家裡的一些原因,耗費了2-3個月處理的時間,我最終還是決定來業界。此時已經是9月份末期了,很多秋招都結束了。本來是計劃著一直學習到明年春招呢,現在來看,兩個月前的想法還是挺幼稚的。10月末的一個週三下午,我投出了第一份簡歷,這種行動一致持續到週五。本來以為要0offer了,沒想到第二週來了好多的筆試和麵試的機會。從投出簡歷到收到第一個電話期間,我的內心還是非常波動的,情緒也是很不穩定。不過好在後來一份份的邀請沖淡了我的不良情緒。

我有收到小米、三七互娛、多益科技等一些大廠的,也有一些我個人認為比較有前景的創業公司的。不過多益科技的筆試謎一般的掛了(我個人感覺做的最好的一個?),小米的崗位不是十分想去的,三七互娛一直沒有回覆,直到突然收到了完美世界的面試邀請。總共兩輪面試,結果最後通過了,還是非常高興的。之後三七又給了面試機會,不過既然完美世界要給offer了,那麼我也不去三七互娛了,個人傾向於北京。創業公司的話,如果感覺是一個明星團隊,而且個人實力允許,可以考慮加入。本次我接觸的有兩個是遊戲界的明星創業團隊,至少成員大部分是當年特別火的遊戲的主程、策劃之類的,而且A輪或者B輪融了很多錢,公司規模控制在幾十人的那種,具體公司名稱和人員不方便透露,不過我很看好他們,但是可能我更想先去大公司體驗一下,所以選擇了完美世界。

之後,就是現在在完美的員工公寓裡等待最後的實習計劃了。

感謝我遇到所有的HR和麵試官,不管是大廠還是小廠,也不管是大公司還是創業公司,這些HR和麵試官們的有很高的職業素質,我從他們身上學會了很多東西,希望這些公司發展順利,這些人事業有成!!

一些總結

以下是我個人對於怎樣學習的一些總結,這結合了我的一些經歷,尤其是各種坑。希望可以對各位有所啟發吧。可能這更適合新手。

摒棄完美主義

程式設計中的“完美主義”是非常致命的。舉個簡單的例子,我們要學習某個技術,並把它應用到實際開發中。如果是以前的我,那麼我可能會把與該技術有關的書都借來,然後研讀每個細節,直到所有的點都弄明白,然後再動手嘗試著去開發。其實這就是一種所謂的“完美主義”,絕大多數起因於我們之前的應試教育的陰影。正確的做法應該是嘗試著去做,邊學邊做,這樣才可以更加高效的學習,而且可以滿足專案的進度。之前的方式,不僅影響進度,而且會讓我們迷失在細節的汪洋大海中,失去興趣。學中做、做中學。

想清楚了立馬就去做,不要瞻前顧後

之前,我在學習某個技術的時候,一直在想這個東西有沒有用,學了可以幹什麼。總是在糾結這種問題,很難全身心的投入到學習中;而且,糾結的時間,就幾乎可以入門某個技術了。更要命的是,我們的知識體系不夠,或者說是我們不瞭解整個知識框架,才有這種幼稚的想法。其實多學習一些技術,在很多時候可以拓寬我們的知識面,雖然很多東西會忘記,但是一些基本思路和基本方法都會有較深地印象,一些資深架構師、技術專家和專案負責人等,都有很廣闊的知識體系。

學習程式設計的核心是學習思路和特性,而不是所謂的詞法、語法

首先,我要說明,詞法語法很重要,這是程式能執行的基礎,但是在剛開始學習的時候,不要過分的糾結於這些細節,要把主要的精力放在語言本身特性上,如果是新手,還要注意學習演算法和資料結構。

舉個簡單的例子,C++本身的特性相當複雜(看看標準手冊就知道了),號稱最難的語言。如果我們有了C語言的基礎了,再學習C++的話,最好不要直接看那麼複雜的手冊。其實應該C++的基本特性入手(我不是C++高手,不當的地方還請包含):C++相比於C語言,最核心的是擴充套件了面向物件部分和泛型程式設計(包括STL)部分(先不考慮C++11以及以後的版本),因此我們在學習的時候,先把這兩個基本點弄清楚。或者說,這兩個點的基本用法先弄明白,搞清楚怎麼回事後,在一步步地深入拓展下去;而不是每天都看標準手冊,我估計那樣正常人都會GG。。拓展的時候也是,每個點都要邊學邊練的策略,由淺入深。我之前踩的坑是剛開始就像搞明白所有的東西,結果最後搞得身心疲憊,以至於很難學精,而且丟了興趣。

同樣的例子,如果由C++轉Java,我們需要了解Java語言的基本特性是什麼。先不考慮JVM的情況下,主要的區別有兩大點:面向物件的部分和自動垃圾回收的部分(包括指標引用之類的)。掌握了基本特性,在一步步地去解決,不僅效率高,而且不會丟失興趣。

學習程式設計不要鑽牛角尖,程式設計最終目的是為了解決問題(需求)

我遇到過很多同學,包括之前的我在內,總是容易鑽牛角尖。比如說,將來是要做後臺的,那麼前端的東西一點都不碰;或者說,我認為Linux才是一個合格開發者必備的工具,用Windows顯得很菜(可能一般是是服務端同學這麼想);又或者說,大佬們都用vim or Emacs,用IDE顯得沒有那麼Geek等等。這樣類似的問題有很多,我個人把它們歸結為鑽牛角尖。其實,現在來看,這種想法是很幼稚的,連基本的東西都搞不明白,就一味地追求所謂地“高手地配置”,沒什麼卵用;而且,只要能高效地解決問題,就不要管那些是否是“Geek”的東西,程式設計的本質是為了解決問題(需求)

要合理分配學習的重心,搞明白問題的輕重緩急,以需求為導向

現在,各種新技術層出不窮,令人眼花繚亂,別說是新手了,就是有一定程式設計經驗同學,也會糾結各種各樣問題。但是,以我現在的觀點來看,造成這種現象的一個很重要的原因是,我們沒能搞明白自己的真正需求。技術總是學不完的,如果再像 應試教育那樣,非要搞明白每個知識點,那麼肯定完不成任務,正確的做法是先弄明白自己到底要幹什麼,然後再去搜集有關的資料等,最後確定解決問題的大體步驟,然後根據步驟來有計劃地、分部分地學習。很多時候,程式設計學習需要不求甚解,這是和應試教育最大區別,也是我們最需要克服的障礙之一。

多向他人請教,多與別人交流,保持一個謙卑的心態

“程式設計師是最驕傲的一個群體”,這話不是沒有道理的。甚至可以說相當一部分的程式設計師,都想要證明自己的牛×高明之處,總是有想要證明自己比別人聰明、比別人強,總要成為整個專案的最最最核心的人物,總是有強烈的個人英雄主義情結。我承認,曾經的我也是這樣的,後來接觸的人和事情多了以後,我也一直在反思自己的不足之處,我也一直在努力地克服自己的缺點。

《商業的本質》一書有一句很經典的話:“商業的本質是一個團體活動”。我個人十分贊同這句話,我們在IT界,先排除那些純粹公益性質的開源專案,我們中的絕大多數人程式設計是為了做商業性質專案來獲取收入的。那麼,我們從事的活動本質上也是一個商業活動,那麼也就是團體活動了。而上述的行為,是非常“反團體”的,這種行為肯定會對真個專案組造成極為惡劣的影響。

人都有有自己的個性,但是不能把這個作為一些壞毛病的藉口,所謂“人不可以有傲氣,但不可無傲骨”。我們要學會欣賞並學習周圍同學(同事)有點和長處,多和他們交流,取長補短,真正地去發揮團隊的力量。要記住一句話:別人總是有地方比自己聰明的。

別和自己較勁

這一點和別鑽牛角尖類似,在這裡單獨拿出來,是為了再次強調。很多人遇到問題總是想自己去解決,總是認為參考別人的思路或者程式碼就顯得自己很low,非要和自己較勁。其實才是這是一種非常low的想法,程式設計本身是一個思想活動,而思想最重要的還是交流,思想交流的價值不言而喻。因此,如果有自己確實解決不了的問題,應該及時向搜尋引擎或者懂的人請教,這沒什麼,重要的是解決問題和學習新的思路與方法。

多讀多寫程式碼

程式設計和寫作有很多類似的地方,都是一個將思維反映在“紙面”上的活動,不過寫作是一個比較“模糊”的對映,而程式設計需要一個精確的“對映”。成為一個優秀的作家,巨大的閱讀量是一個先決條件;同時,只看不寫也永遠成不了作家。程式設計也是同理,要多看別人寫的“文章”,同時也要自己不斷練習,只有這樣,才有機會成為dalao。

善於總結、多思考和反思

“吾日三省吾身”,總結自己的得失,思考和反思自己的優劣,併合理地調整自身,才可以取得長足地進步。作為IT人,部落格可能是一個最好的方式了,技術人要有自己的部落格,至少是作為自己的筆記。

有自己的判斷力

這和我自己踩的坑有關,我在這裡不想指責誰,也不想埋怨有些事情,只能說當初選擇“Leader”和“Team”的時候,確實是經驗不足,不過這正好是一個很寶貴的經歷,至少讓我有了比其他同學更多的閱歷!“悟已往之不諫,知來者之可追”,這些都過去了,重要的現在和未來。在這裡,我只想說一句:選對方向、做對事、跟對人

還有其他的,留作後續補充

其他的還有很多,時間原因,後續再更新吧。