1. 程式人生 > >我的自學程式設計之路

我的自學程式設計之路

從決定轉IT那天到現在,已經四年了,一路上經歷了許多的坎坷,困難,直到現在終於略有收穫,找到了一份滿意的工作。期間走過許多彎路,吃了很多虧,也有很多反思和感悟。

決定轉行的那天是2014年10月7日,距離那年的考研還有81天。原本打算考體育專業的我,和家人以及老師做了一些分析以後,決定轉行考軟體工程。但是那個時候我根本不知道自己面對的是什麼,從沒學過高數,只有一點點少得可憐的c語言基礎(計算機三級的水平),不知道資料結構為何物,更不知道軟體工程是個什麼,甚至電腦科學和軟體工程的區別都不知道,但是我當時知道的是,我喜歡寫程式,也希望能把一輩子的經歷用在軟體開發上,無論前面的路多麼難,我都想試試。

第二天,我買了高數的課本和線性代數的課本,開始了自學高數的道路。艱難異常,花了整整一個多月的時間我自學完了一元函式積分學,又花了半個月的時間看完了線性代數的前三章內容,政治在考前借同學的複習資料看了一週多,英語也看了不到一週左右的時間(前兩個月有在背單詞)。這個時候只有四天就要考研了,專業課還沒有開始預習,不過那年的主要目的是去試水,看看體形,以及看看自己究竟有沒有能力讀軟體工程。四天的時間,從基本的線性表開始,看完了連結串列,堆疊,佇列,並且用c++實現 了部分內容以後,我就上了考場。第一天還好,雖然自己很爛,政治大題基本不怎麼會寫,但是還是挺過來了,但是第二天上午就尷尬了。課本上那點東西根本不足以應付考研數學這個龐然大物,大題根本看不懂題目,選擇題蒙了一下,填空題把選擇題的選項抄上了,大題只寫了三步洛必達法則(我當時能記得的也只有洛必達法則了),非常尷尬的熬過了三個小時。下午專業課的感覺還是不錯的,至少寫上來了一半的內容,剩下的題目我也把題偷偷抄在了准考證後面,準本回去以後重新看看,然後來年再戰。當年的考研成績是數學11分(多優秀的成績)英語政治都是四十幾,專業課88分。看到專業課成績我知道自己應該可以,於是決定再戰一年,但是大四的下學期一堆亂七八糟的事,加上畢業論文,學車,畢業,一直到了六月份我才開始安心的複習。報了新東方的考研政治班和數學的網課,一路跟下來,發現自己的數學依然很爛,平時最多考到110分,最低大約80左右。不過這個分數對我來說已經足夠了,因為我對自己的專業課、政治還有英語比較有信心。考研結束以後,我看了政治的選擇題答案和英語的答案解析以後,知道自己的英語政治肯定沒問題了(政治選擇題估分40)。但是數學,很糟心,因為2015年那場考研數學應該是有史以來最難的一次,我全程處於懵逼狀態,除了自己學的確實很紮實的線性代數能做對大半意外,高數又一次把我虐了,自己估分53分,專業課因為調整了大綱,加了一章內容(圖),而我恰恰沒複習,所以最後20分的題目我基本就是不會,最後給自己估分110~120之間。當時做出的結論就是,數學單科能過,我就能過(SDU的數學單科線75分)。

成績出來以後,果然數學掛了,59。於是又參加了調劑,被調劑到CDUT,那一刻其實一直很感激我的導師把我收了,否則我可能真的永遠離開IT了。開學以後,學習也算比較努力,但是因為研一上學期拼命過度,第二年頻頻跑醫院,根本沒有多餘的能力去學習。不過好在成績不算太爛。三年的研究生生涯拿到了學業三一二等獎學金(每年一個)並且在今年的秋招遇到了一個我認為比較賞識我的老闆,老闆人真的很好,親自進行技術面。終於,我拿到了offer,薪水雖然在班裡只能排中等,但是也讓我狂喜了好多天,畢竟如果我沒有讀這個研究生,我可能只能做一個健身教練(健身教練這份工作也很不錯,但是我不太喜歡和人打交道)。雖然這份工作要與我學習了一年多的SLAM告別,但是我可以學到更多新知識,並且,SLAM可以作為我的興趣點,關注一輩子。而且,有了研一的經歷以後,我找工作的第一要求就是不加班(拒絕996,拒絕995)。畢竟活著才是硬道理,而且,沒有自己的時間,也沒有機會提升自己。

曾經我一直以為自己是因為在計算機方面有天賦,所以才會取得比較快的進步。但是回想起來,發現自己僅僅是因為興趣,比別人更努力了一點罷了。能力這個東西真的是需要用時間去打磨的,即使智商超群, 沒有長時間的訓練和思考,也無法取得很高的成就。研究生期間有很多遺憾,沒有一篇高質量的論文,沒有找到SLAM方向的工作,沒有早一點找到一個領路人。所以,還是希望更多人能儘可能的避免這些坑吧:

1. 多看論文,多看部落格,多參加學術論壇,多向高手請教,不要以為自己在改變世界,因為這個世界上的大牛真的太多太多了。

2. 好好學英語,主要是專業英語,因為好的文章都是英語的,無論是國內還是國外的學者,因為SCI大多數就是英語文獻,排斥英文文獻將直接限制自己的眼界和能力。

3. 多練程式設計,我認識很多本科生以及研究生,連二叉樹都不能獨立完成。如果沒有程式設計能力,除非你有很強的數學能力,否則公司憑什麼要你呢。

4. 提升數學能力,數學讓我在考研的時候吃了很大的虧,所以我也是在研究生階段花了很多時間補數學。其實工程上用的數學很多時候可能不需要很強的計算能力,因為計算機的計算能力肯定是比人強的,但是要把公式概念理解透徹,至少做到在paper中看到一堆公式,能夠知道這些公式是怎麼得到了,如何去推導,如何去實現。否則就會錯過這篇文章的精華部分。一篇論文裡面的內容(或者部分內容)只有自己動手實現一遍才能知道其真偽(國內學術造假這種事真的不想吐槽了),並且完全理解透徹。

5. 要有輸出,多寫開原始碼和部落格,這樣可以把自己的學習經歷分享出來,也可以讓自己把自己覺得理解的最正確的內容記錄下來(畢竟別人要看的,太垃圾了自己都不好意思拿出來吧)。很多時候自己還是太懶了,不想整理,而且在CSDN上打公式好麻煩……多分享,對自己和別人都是一種提升。

6. 不要侷限在某一種語言上,語言只是工具,演算法才是核心,數學才是王道。我中途有過轉JAVA和python的經歷,有了c++的基礎,學習新語言很快,而且有彙編基礎,對很多模型的理解也會比較快,所以不要總是糾結於選擇什麼語言,學好了演算法,多去寫程式,明智的老闆不會卡你的。

7. 如果準備考研,一定要去好學校!否則那些國企大公司連簡歷都不會多看一眼,如果沒有頂會頂刊,好的獨角獸公司依然不會多看一眼,如果學校不好,多在牛客網上練程式設計,這是彎道超車的最好方法,因為公司也不知道那些筆試做的好的人究竟是真的強還是僅僅就會那幾個題,然後參加現場面試現場筆試的宣講會,能力強自然會有好工作。我的同班同學今年拿到了32W的年薪,還是能力決定一切。