2018年終總結_四年計算機科班學習經驗分享+半年工做感悟

1、寫做初衷&簡單自我介紹

本科專業爲計算機科學與技術,今年六月畢業後入職一家上市遊戲公司從事遊戲服務器端開發,九月中旬離開遊戲行業,目前在一家互聯網公司從事圖形圖像音視頻算法崗,偶爾兼顧服務器開發。html

爲何要寫這樣一篇文章,主要緣由有兩點:git

1,根本緣由:大學四年的學習 + 工做半年的實踐與領悟,讓我刷新了之前對技術的認知,在此記錄一下;github

2,直接緣由:隨着博客訪問量的提升,總會碰到一些非計算機專業的其餘工科生,理科生甚至文科生想要入IT行業,在此想盡個人微薄之力爲他們提供一些真實有效的經驗和學習方法,而不是被無所事事的人誤導剛入門就去看《算法導論》,Linux內核源碼。面試

 

2、計算機學科基礎

計算機學科的專業課主要有這些算法

  • 高等數學、機率論、線性代數:這些課程之前只是爲了應付考試,但當我工做後才逐漸發覺,邏輯寫入到底層時,是研究操做系統內部機理以及算法,而算法研究到必定層次其實就是在研究數學。好比音頻加密中會用到傅里葉變換,機率論在人口預測和推薦系統中的使用,線性代數在圖形渲染,計算三維座標的應用等;
  • 數據結構與算法:學編程確定離不開這個。數據結構是定義數據存儲的一種格式,而算法是解決某一特定問題所使用的方法,因此數據結構+算法+一門熟練的編程語言=你所要編寫的程序;
  • C語言:大多數學校都會選擇以C語言做爲入門語言,還有一些學校以Java或Python做爲入門語言,在此我不是想爭辯C語言有多麼好,但就從長遠看來,我認爲C語言是除了彙編語言以外第二個能將系統底層原理展現出來的語言,因此會有人說學懂了C/C++,看其餘語言都不是很難了;
  • 離散數學:和數據結構有着殊途同歸之妙;
  • 單片機:計算機硬件方向必修課,涉及C語言/彙編語言學習,涉及電路知識,由於這門課,讓我深刻了解了數據在底層的傳輸;
  • 計算機組成原理:不管是之後作硬件仍是軟件都應掌握的底層技能;
  • 計算機控制原理:和自動化,機械設計專業共有的專業課,主要面對工業製造方面,控制原理中涉及許多積分、傅里葉變換;
  • 數據庫:通常以SQL語句爲主,涉及後端開發必須掌握了一項技能;
  • 操做系統:當年把銀行家算法、頁面置換算法搞的妥妥的,就爲了期末考試那40分大題,除此以外,還有進程、線程,安全的概念,屬於底層技能;
  • 計算機網絡:凡是涉及網上收發消息,通訊,都離不開網絡編程,所以這塊基礎知識也得學習;
  • Linux操做:有時作開發須要在Linux操做系統環境下進行,因此要掌握Linux基礎操做,屬於專業基礎課;
  • 編譯原理:這塊涉及不深,不過聽說是數據結構、編程語言、操做系統綜合起來的一門學科,課程設計是作一個簡單的編譯器出來;
  • 面向對象:學Java、C++語言進階須要掌握的一種編程思想,當時我學習這門課時用StartUML畫類圖,時序圖,它就像教你如何設計一個工程,而畫的圖就是作這個工程的圖紙;
  • 圖形學:一門將技術和藝術結合起來的學科,很是有趣,兼具美感和深度,美是由於它作出來的東西確實好看,並且應用領域很廣,深度在於它的學習有必定的門檻,好比線性代數,算法,還有空間幾何和變換等;
  • 信息/網絡安全:涉及網絡編程,加密的一門專業基礎課,在我看來,這門課不是教你如何盜取對方電腦上的資料或者稱爲一名黑客,而是教你如何更好的保護本身的電腦,以及學習相關的安全法律;
  • 模擬電路:大二的專業基礎課,難度較大,當時也沒學好,不過這門課對於計算機硬件編程頗有幫助;
  • 數字電路:大二的專業基礎課,將開關狀態轉爲01邏輯數字,進行一系列的操做。

 

3、計算機學科進階

工做半年,意識到學校所學與企業所用,二者之間形成的斷層是多麼的深,因此有些公司會在新人入職時進行相應的培養,在此說下個人感覺。數據庫

若是讓我用優先級來判別的話,確定是以你在公司目前崗位所需的技能進行優先學習,例如:編程

  • 遊戲服務端:掌握C++/Go這些語言的基礎,再學習下TCP/IP,線程安全,簡單的數據庫查找語句;
  • 遊戲客戶端:熟練Unity操做和C#腳本編程,熟悉Shader原理和渲染管線;
  • 圖形渲染:熟練使用C++編程,理解操做系統原理,有良好的數學基礎,熟悉經常使用的圖形學算法,最好能本身寫一個軟件渲染器出來。

以上三個崗位是我接觸後瞭解了需求總結獲得的,在此掌握的基礎上,而後學習你想學習的東西。後端

 

進階階段能夠經過刷編程題,或者作一些小demo來實踐你所學的內容,例如:安全

  • 能夠經過寫一個包含線程安全的多人在線聊天室,來熟悉Go語言或C++編程,網絡基礎和數據庫操做,鎖機制 Github地址
  • 能夠經過寫一個3D/2D射擊小遊戲,來熟悉Unity遊戲引擎的操做,以及C#腳本代碼的編寫,若是考慮多人聯網,那就去複習服務器端相關技能 Github地址
  • 能夠經過寫一個3D旋轉的時鐘,來熟悉圖形學中的紋理貼圖,搭建三維場景的框架等 博客文章地址
  • 能夠經過把一個99碼錶計時器,來熟悉單片機課程的基礎知識,以及Proteus軟件的操做,還有C語言的硬件編程,若是還想進一步挑戰本身,能夠將C語言轉成彙編語言來實現它,或者把碼錶來改進增長其餘功能 博客文章地址

 

4、一些吐槽 + 學習經驗

1,學編程必需要精通數學嗎?

若是你是找計算機相關工做的話,在我看來沒有必要。服務器

用到什麼學什麼。精力有限,你不可能爲了搞懂一個空間座標變換而把一本線性代數,矩陣論看一遍;也不可能爲了一個加密而把大學高等數學所有學一遍。

 

2,學編程必需要有電腦嗎?

我高中學編程用算術本寫程序,在我看來電腦只是爲了幫你驗證你的程序是否能夠跑起來,同時它自帶首行縮進,語法高亮,還有在線查問題的功能。

之前看一些人爲了學編程在手機上下載編程軟件,在我看來沒有這個必要。

有些人會把寫不了程序怪本身沒有電腦,或者鍵盤敲着沒有手感,在我看來徹底是爲了逃避困難而找的藉口。

 

3,算法崗,開發崗、測試崗和技術支持崗的區別是什麼?

若是把咱們作出來的東西比做一輛車的話

  • 算法崗:根據使用場景造輪子,思考如何讓車跑的更快,是造方的好,仍是圓的好,仍是三角的好;
  • 開發崗:熟練將輪子與發動機銜接好,將輪子與各個模塊裝好,並使其跑起來;
  • 測試崗:車子在跑的過程總要通過各類場景的測試才能夠投入量產,這時候他們會把各類測試數據採集,分析,遇到數據異常的發給開發崗和算法崗來進行優化,改bug;
  • 技術支持崗:車子在投入量產後,總會在用戶那使用中碰到一些小問題,這時候先由技術支持崗的負責人前去排查問題,看是操做不當,仍是輪子到期該換了,仍是輪胎那有個缺口,若是他們解決不了,再找開發。

曾經因分不清技術支持和技術研發而在一場面試中尷尬了,面試詳情以下 海康威視2017校園秋季招聘技術支持工程師面試經驗

注:以上四個崗位也是根據個人觀察和工做來熟悉的,若是有前輩或同行以爲有誤導,請及時在下面提出來。

 

4,有沒有必要從頭至尾把 CSAPP,C++ primer這樣的超過七百多頁的磚頭書從頭至尾看一遍?

若是時間充裕,固然最好是認認真真看幾遍,但我平時常常把它們當作手冊來查閱,帶着問題去看。

 

5,學習編程有必要學習英語嗎?

有必要,但不是絕對。

我時常看到一些人由於看不懂英文而頭疼說是要把考研英語大綱8000個詞彙背完,固然這是好事,但或許是揀了芝麻丟了西瓜。

我剛入職算法崗時曾被打擊英文閱讀能力差,由於老大給的全部參考資料都是英文的,爲此我開啓了一個英語學習的開源項目VocabularyMap。可是據我瞭解,咱們平時所常用的英語詞彙最多不超過一千個,加上你所在崗位的特殊專業名詞,不超過一千五百個,並且句式較爲簡單,不像考研英語閱讀那麼喜歡拐彎抹角的表達意思(這個形容詞我想了好久),你只需在閱讀英文時,把中文思惟調整爲英文思惟,單詞多看幾遍記住意思便可。

 

6,自學仍是報培訓班學比較好?

若是有半年的充裕時間,建議選擇自學,若是自制力差,能夠找幾位靠譜的朋友一塊兒學習,實在不行再去報培訓班。

 

7,關於剛畢業找工做

慎入外包公司。

剛畢業建議去大廠工做一段時間,在這裏面會遇到許多有特色的人,同時也會學習到他們思考問題的方式,這對自身長遠發展都是很是有利的。

若是不在大廠,那就靜下心來先作好眼前的事,再想辦法提高本身。

 

8,公司都在看有沒有我的博客和github帳號,我須要申請一個嗎?

堅持寫博客和整理寫過的代碼是一個好習慣,但既然選擇去作就堅持下去,不要爲了面試,爲了找工做去隨意丟幾個代碼上去,要是那樣我一天能夠寫出幾十篇,甚至不要爲了github上的Stars和Followers而故意去造假。

面試是看你的專業基礎能力和在這個公司繼續幹下去的穩定性,博客和Github只是展現你能力的一部分體現,莫要本末倒置。

 

9,如今公司不用匯編作開發,是否是就表明它已經不重要?

其實這樣的問題還有個變形,例如,C語言崗位招的少了,是否是表明它即將要被淘汰了?
在我看來,編程語言沒有高低貴賤之分,只有適用場合的不一樣。那些所謂的排名也是根據每一年的需求量而不斷變化。
所以,存在便是合理,也許它如今沒有什麼用途,但在將來某一新發現的領域中會起到不同的做用。對技術存在包容,那麼對本身能力的提高也是有必定好處的。
具體感覺能夠參考這篇文章淺談單片機中C語言與彙編語言的轉換

 

5、寫在最後

2018這一年,我經歷了考研失敗帶給個人痛苦,經歷了校園春招帶給個人打擊和培訓機構的騙術,我慶幸有父母對個人寬容與理解,女朋友的不離不棄帶給個人鼓勵,還有每一位前輩和好朋友的加油,最後在畢業時經歷四輪面試拿到了上市遊戲公司研發崗的offer,在這裏我收穫了寶貴的開發經驗,結識了許多能力強又不失低調的夥伴,表明了開發團隊去廈門參加48小時遊戲開發大賽最後的Pitch Time,最後也因工做緣由離開遊戲行業,選擇進入圖形圖像和音視頻算法領域進行歷練。

猶記得進去的第一天,發現部門內基本都是碩士研究生畢業,或者是工做3-5年的老哥,只有我一位稚氣未脫的本科畢業生,接着一週五天,連續打擊了個人C++編程,VitualStudio軟件操做,英文翻譯水平和提出的問題(由於太簡單)。

但也正是如此,使我跑開了曾經學校戴在我身上的枷鎖,使我在不斷的遇到問題和解決問題的過程當中,逐漸縮小着與周圍人的差距。

謹以此文,記錄我從象牙塔出來後的半年時間完成的蛻變,同時寫給那些想跨行轉計算機的人,但願這篇文章能幫助大家解決一些學習上的困惑。

最後安利我開啓的兩個開源項目

 距離2019年還有半個月的時間,收拾好心情,一塊兒努力!

(本文內容已同步至Github-WeeklyARTS計劃)

相關文章
相關標籤/搜索