計算機有哪些專業?
結合自己清華和MIT學習,工作經歷來說說自己的觀點和體會吧,很多觀點都會帶有個人知識水平的局限性,如果有說錯的地方,請大方的指出來,或者您也可以寫下你在這個行業的領悟,希望這篇文章能幫助高考的孩子或者大一,大二不太了解的新生或者有意從事計算機方向的人的一本入門指南。接下來,我將從就業人數、著名公司、產品代表、門檻、工具、技能、業內現狀和發展前景,從軟件和硬件兩個大方向分別描述,至于非技術方向類似于產品,推廣運營我并不是特別了解,不敢瞎說。請大家積極分享同時提提意見。
先來一個思維導圖。
## 硬件
### 硬件工程師
指在計算機領域里,需要接觸到電路底層的工程師,實際上在電氣領域,在電方向上分為強電和弱電,強電指高壓傳輸,電動機等高電流作為能源動力領域,弱點就是指微電子方向的信息處理領域。計算機硬件工程師的工作范圍在弱電,主要內容主要有PCB設計(印制電路板),ic(芯片)設計,FPGA工程師。往上還包括涉及針對特定硬件做系統開發維護的嵌入式工程。
#### PCB工程師、FPGA工程師、IC工程師
專業術語大家可能不太懂,就舉例一下每種工程師對應的工程產品吧。
PCB工程師的工作就是設計一個高速穩健的交通網絡,把電路板上各個功能不同的模塊連接起來。他們的工作環境如下所示。
FPGA全稱叫現場可編程邏輯陣列,就是理解為一個可以編程的硬件。傳統意義上的集成電路是定制化的,針對特定的需求設計特定的電路板。而fpga可以通過熔斷機制來動態修改電路的結構,達到動態編程的效果,簡單點說,針對一塊FPGA,你可以把他燒制成視頻編碼器,也可以燒制成無線wifi通信模塊。雖然這些算法都可以通過軟件實現,但是硬件實現的效果算法成本更低。開發語言常用的有VHDL(硬件描述語言)。
IC工程師就是設計一個高效運算的大腦,涉及到流水線機制,超頻,最重要的是解決納米級別下電流擾動問題,最大的制約因素也是材料工藝問題。
以上三種崗位其實在現代學術分支類還是屬于EE下的子類,事實上從事這個方向的人也大部分是學習電子電路工程的同學。這個專業的特點就是強者通吃,全球唯二的兩家芯片公司intel、AMD。而且他們的核心競爭力并不是芯片設計能力上,而是在制作工藝上?,F在在移動終端統一江湖的還有英國Acorn有限公司設計的ARM芯片,它只是提供一個解決方案,設計圖紙,具體的制造還得是華為,三星自己開場設立。但是同時又有很多小眾領域,比方說無人機,安全門等等你又需要做專門的PCB設計,所以硬件工程師也是有市場需求基礎的,但是也不多。從技能需求來看,要求數學知識扎實,邏輯嚴密,電子電路知識更多,類似工具反而并不是顯得那么重要。從未來的發展前景來看,隨著智能硬件物聯網的推廣,會有一波大紅利。
崗位需求:IC << FPGA = PCB
薪資 :IC >> FPGA = PCB
#### 嵌入式工程師
**系統級別嵌入式**
主要是針對特定硬件移植一套操作系統,類似于linux,VxWorks等,甚至于自己開發一個只能滿足需求的未知系統,你需要讀管腳信息,讀時序。但是大部分還是使用成熟的系統移植,自己寫系統一來太慢,二來肯定很多坑。相對來說在這個層面上的人都是大牛?;蛘咦鲆恍寗娱_發,比如說,每年讓無數游戲宅剁手的最新NVIDIA顯卡,都需要這個級別的工程師來做相應的顯卡驅動。
薪資水平絕對高,起薪百萬級別,入門門檻也絕對高,業內最強不是在研究所,而是在公司。
**應用級別嵌入式**
在基于已經能跑的機器上做開發,比如說,操作系統已經提供了最基本的文件管理,內存管理,CPU管理的情況下。你在此基礎上做特定應用的開發。普遍打交道的語言工具是C。實驗室其實是這個方向的,有過軍工和國企的一些項目,從這層往上,到架構師之前,本人至少都接觸過一些。能說點自己的感悟,而不是查資料了。
做嵌入式應用開發最怕的不是開發而是調試,在這一層做開發會有各種奇葩問題,比方說你昨天還跑得好好的,今天可能就崩了,可能是硬件問題,虛焊?電容擊穿?電路板電流擾動?也可能是軟件問題,野指針(很少有系統做了虛擬內存,你所有操作都是在實際的內存空間上操作的),內存溢出。
薪水來看,起薪比較低,華為一般給的算是不錯了,能到16K,但是隨著你對業務的熟悉,工資是沒有上限的,最終達到的升級狀態就是系統級別嵌入式工程師。
## 軟件
### 桌面程序工程師
傳統的桌面應用軟件類似于office,瀏覽器啊在PC端上運行的軟件。主流的開發框架有Qt,MFC,.NET?,F在還比較強勢的一些桌面應用領域就是微軟的office和桌面游戲公司。以及基于微軟的C#的開發應用,基于QT的C++開發應用。其他的不是特別了解,但是給我的感覺就是這個市場不怎么活躍,招人很少,身邊也沒有認識的人走這條路線。
### 網絡應用工程師
從google發跡以來,基本上所有新興的巨無霸公司,facebook,bat,amazon都是依賴于互聯網的發展,依賴于這群互聯網應用工程師。同時他們也就是在網上自稱為碼農的這個群體。他們這個群體應該能占到計算機領域70%以上的研發人員。
#### 前端開發
廣義的前端就是指呈現在用戶視覺的領域,直接可以讓用戶感受到的開發,往下會細分為web,andoroid,ios。
#### web前端(h5前端)
web前端指在瀏覽器(包括手機和pc瀏覽器,或者是webview控件,甚至于搭載JS引擎的任意環境)上運行的一系列應用。
傳統意義上的前端主要是指網頁,html,css,js那一套了,或者再加上html5,css3。但是最近幾年前端發了很多變化。
這個方向是這幾年的大熱門,隨著機器性能的提高,v8引擎的普及,雖然js和c,java的運算效率還是差上很遠,但是目前來看對于呈現展示內容已經基本夠用,所以,近幾年出現了各種叛逃,比如說cocos2d-js來做游戲,react-native來做客戶端啊。同時,隨著大量人才的涌入,特別是這兩年,大量的前端框架,解決方案讓你感覺跟不上時代,講真,兩年前還是JQuery的天下,現在你不知道Vue,Angular都不好意思打招呼。同時由于機器性能的提高和V8引擎的強勁有力,腳本語言的另一個優點就是無須編譯運行,導致了它可以實現一個其他語言無法做到的事情---動態更新,可以在app不發版的情況下動態的大幅度更改它,進一步的增加了JS的需求量。
薪資比起前兩年來看漲了不少,而且市場需求量也很大,基本上任何應用都沒有完全脫離web的框架內。門檻也不算高,但是往下深入一樣會有很多東西要學。
#### android和iOS
android是一個基于linux內核開發的開放源代碼移動操作系統,由Google成立的Open Handset Alliance(OHA,開放手持設備聯盟)持續領導與開發,主要設計用于觸屏移動設備如智能手機和平板電腦。iOS(原名 iPhone OS,自 iOS 4 后改名為 iOS)是蘋果公司為移動設備所開發的封閉源代碼操作系統,所支持的設備包括 iPhone、iPod touch 和 iPad。
目前看來,智能機市場上,android的市場份額在四分之三以上,ios占了大概五分之一,剩下的都是什么塞班,winphone我們應該不用考慮,你應該也不會想做這個的。雖然android和ios市場占有率相差懸殊,但是android工程師和ios工程師基本上能維持相同的人數,所以你如果想從事移動端開發,就業市場來看的話,沒有很大的區別。
技術層面來看兩個其實比較像,主要的區別其實是生態圈的比較。
相應來說,可能android的入門成本門檻比較低,java相對于Object-C,swift來說還是比較流行的,同時,相對于iOS(mac電腦+蘋果手機+一年100刀的開發者賬號)的起始1.5W的投入來看,可能android的競爭會更激烈一些。
由于android的開放性,基于開源的linux開發,所以業內會有很多公司針對于android做所謂的“深度定制”,“適合國人的智能手機”等,那就導致了android的各式各樣,不同的手機廠商在某些細節方面又有不同的理解,倒是android開發最大的一個問題就是適配。同時由于android的權限開放性,他會有很多可以hack的地方,針對android的木馬病毒(360管家)很多,你要考慮到的東西會很多,不過目前來看,android的每次發版,安全性也越來越好,權限管理也越來越規范,以后會越來越好。而iOS的封閉特性,相對來說被發現的漏洞少(并不是不多,我個人覺得絕對比android多),但是每次爆出都是大新聞,它的開發相對來說規范很多,有很多成熟的解決方案,他的主要問題其實是iOS審核這塊,大部分的公司都有過app被appstore斃過的經歷。
另外,最近蘋果公司也在推swift,如果你要做iOS,由于各種歷史問題,OC并不能完全棄掉,但是swift也會成為你求職的考點或者亮點,通過同事的反應來看,swift比OC更爽,它更愿意做swift。
#### 后端開發
后端開發指的是,在為前端提供數據支撐的一個大的總類,包括數據庫,業務邏輯處理,數據處理等。主要的開發語言分兩個方向編譯型語言,java,c/c++等,他的特點就是運行效率高,相同機器配置的情況下能支撐更大的訪問量,適用于超高并發度,比方說淘寶后臺是java,網易游戲騰訊游戲是c++。另一種就是以php、python等解釋性語言,他們的特點就是開發效率高,無需編譯,寫完就能運行,主要針對一些運算量不大的中小型網站,比如說你的個人博客,管理后臺。
##### 運維工程師
特意把它從后端中拿出來,主要是他的開發任務比較少,但是同樣很重要,當數量量達到一定程度,數據庫服務器都有上千臺的時候,就需要專業的人士做做數據維護的工作了,它的工作難度一樣很多,容災備份,熱替換。而且目前的趨勢都是服務化,組件化,虛擬化,一樣有各種難題有待于你去解決。但是從市場需求來看,只有大廠才會招專業的運維工程師,創業公司100臺服務器以下的小公司一般都是托管到各種云,然后由后臺工程師兼任。
##### 通俗意義上的后臺開發
也就是那些經常說自己是業務狗的屌絲碼農,覺得不做架構設計比較low,他們主要的工作就是實現pm的工作需求,比方說雙十一來了,pm說,這個要添加一個搶紅包的功能,然后后臺業務狗就忙起來,要解決高并發下的死鎖啊,重復請求啊,帶寬啊各種功能,當然也需要前端,但是前端并不需要考慮復雜的并發性問題。而如果這些業務狗在處理高并發問題上有所建樹,那么他們就能一步步升級為架構師。那個時候就可以把屌絲碼農的屌絲去掉了。
### 測試工程師
一個產品或者一個新的功能需要上線,必須要經過完備的測試,測試工程師目前其實有兩種,一種是純測試,另一種是他的升級版測試開發工程師,它能在測試的過程的順手把小bug改了而不需要返工。好的測試開發工程師工資也可以比做開發的工資高。
而且你們也不要小看測試這個東西,不要以為你只會點點鼠標看看對不對這么簡單,合格的測試工程師需要熟悉各種測試工具,能自己寫測試腳本,能找到bug,而且還能知道為什么會出現bug。這個工種一般也都是大公司才會配置的,對于小公司來說,一般就是開發人員自己也是自己的測試人員。
### 安全工程師
同樣一個產品或者一個新的功能需要上線,不僅需要要經過完備的功能測試,還有一向就是安全性測試。而由于安全性測試可能需要的知識比較多,所以又會有一個單獨的工種來這個。
或者你們也許更喜歡叫他們黑客(壞孩子),白帽子(好孩子)。他們游走在法律的邊緣,或做著俠士的行為而不為人所知,或調皮搗蛋想整一個大新聞,更有甚者違法牟利。但是必須指出,他們確實互聯網圈子里最有創新精神,反抗精神的人,當然我不是說的那些連腳本都不會寫的工具小子了。我指的是阿桑奇,中本聰(主要是技術吊,思維吊,但是沒做啥好事)。他們是IT圈的安拉,耶穌基督,精神偶像。必須指出,走安全工程師這條路必須得先走一條邊緣線,要想有最好的防守你得先知道別人是怎么進攻的。薪水來看并不是特別有競爭力(不包括黑產)。從業人員這幾年很多看到的情況是好孩子越來越多,但是中國的大環境不是特別好(烏云都被關了)。
### 架構師
從這里往后,已經算是程序員界的高富帥了,可以稱的上是半個科學家。架構師的工作差不多已經基本脫離代碼了,他的主要工具從VIM,EClipse變成了word,ppt。他主要覺得技術選型,針對大容量高并發的問題制定解決方案?;旧纤麄兌际怯珊笈_工程師升級打怪升上來的,好像聽聞業界也有前端工程師升級為了CTO做架構的,但是畢竟還是少數,node的效率還是差了很多。
### 算法工程師
這類人,基本都是大學參加ACM競賽拿過獎,或者本身思維邏輯嚴密性高,數學基礎扎實,算法牛逼。如果你是一個數學系或者物理系的優秀畢業生想轉IT,這個可以作為你的主要方向。這個算是建筑系里的學院派,從學校畢業之后就直接達到了這個等級,起薪很高。
#### 數據挖掘
它的作用就是從一堆數據中挖去你你想要的信息。打個比方,給你2008年到2016年所有的房屋成交量,房屋成交價格,土地成交量,人口增長,銀行貸款利率變化等等很多信息,讓你預測明年房價變化情況。他們就是干這個的,這個工作分三步走,爬數據,建模,寫算法驗證。
爬蟲工程師,就是從各種國家統計局網站,鏈家網站爬去數據,存儲為結構化的數據。
數學建模,建立各種數據之間的影響關系,影響因子。
寫算法驗證,大部分數據挖掘工程師好像都是用python,工具比較多,語法簡單。
難點其實不是在寫代碼部分,而在于建模,如果設計一個有效的模型來量化這些數據間的聯系。其中的影響因子權值就是他們的生命價值所在,所有他們會光榮的把自己稱呼為“調參俠”,顧名思義,就是天天調整參數,讓模型運算結果來匹配實際情況。
薪水很高,一般統計分析局或者大公司才會招人,而且還可以獨立創業,像是知乎很有名的團支書,拿數據打臉的那種牛逼轟轟的人物。
另外再而外介紹一下量化交易,量化交易是指以先進的數學模型替代人為的主觀判斷,利用計算機技術從龐大的歷史數據中海選能帶來超額收益的多種“大概率”事件以制定策略,極大地減少了投資者情緒波動的影響,避免在市場極度狂熱或悲觀的情況下作出非理性的投資決策。這個是計算機屌絲和金融高富帥融合的比較成功的一個新的工種,通過一個優秀的交易員建立一個理論交易模型,再有程序員實現代碼,這個算是數據挖掘領域比較直接的變現交易,著名的知乎英國五毛,Lightwing(李軼睿)就是從事這個方向的,他們的薪水是按照日來的,關鍵也在于模型建立,而且都是通過技術面分析,確保收益,比如說從10塊錢漲到了10.1塊,即便它很可能漲到11塊,他們也可能就會賣掉(算法策略),然后通過超高頻率的買賣來確保收益,比如說雖然每次買賣只能賺一毛錢,但是他一天內買賣了幾十手,而且大部分都賺了,總的收益可能也會有1塊,所以量化交易也有叫高頻交易的.
#### 人工智能
我好久也沒看過這方面的書了,可能理解有誤。大家經常看到的siri,或者聊天機器人之類的都是屬于這種東西。他的本質還是一個有限自動狀態機,在一個狀態下在很多因素的影響下走向下一個狀態,理論上你把你在三維世界所有的輸入都考慮進去,而且都分別定義了相應的輸出,他是可以做到人工智能的。但是這樣寫出來程序會非常大,電腦跑不動。我個人的理解,基于計算機簡單的01唯一向性,真正意義上的人工智能還是蠻難實現的。比如說之前非?;鸬睦钍朗髴鸢⒎ü?,在這種特定的應用下,輸入很簡單,圍棋上的落子16*16,狀態也很簡單,2的16*16次方,在這個復雜度下,肯定也是沒辦法枚舉的,他們會有降維算法各種算法來聚類他們的狀態。
#### 深度學習
我們上面所說的數據挖掘會有一個調整參數的過程,而在深度學習領域,他會添加一個正向反饋,讓你的參數由機器自動調整,讓他計算的結果去自動匹配實際的結果。這個就是所謂的機器學習,就是把人為調參的過程讓機器自動完成。
此外,人工智能,深度學習,數據挖掘并不是分開來看的,他們會存在一定程度上的重合。他們其實真正的難點實在各種降維算法,概率論,退火等數學領域。所有說他們算是半個科學家也就是這樣原因了。
#### 性能效率支持
這個才是普遍意義上的互聯網的算法工程師做的事情。比方說,我要求一個數的平方根,現在我們編程很簡單,只需要sqrt()就可以了,但是你如果看過這個的源碼,你就會驚呼,感興趣自己去搜,他并不是用牛頓萊布尼茲公式做的,它比牛頓牛逼多了,能提高100倍的效率。這只是一個很簡單的例子,在實際應用中,當遇到大運算量的時候,就是他們該出場了。這部分功能其實大部分也是由后臺工程是自己擔任的,但是不排除大公司類似google,fb會特意招ACM來做算法支持,起薪很高。
在這里我特意提一下效率工程的頭面擔當,游戲引擎工程師(目前國內主要使用開源的unity3d)。主要做3D渲染,需要在計算機圖形學方面有較高建樹。類比于工業皇冠上的航天發動機一個級別。游戲開發只是一個特定方向的開發,,一樣有客戶端,web端,pc端,后臺,數據庫運維等。并沒有需要單獨拿出來一個講。不過游戲開發工程師一般來說都是比較累的,但是同樣薪水也是高,陰陽師團隊今年估計年終獎拿100個月我都不稀奇。
### 標準化組織協會會員
這個也算是吧。比如說,美國電子工程協會(IEEE),3GPP協會。他們主要是制作各種標準化協議。這個級別太高了,在特定領域,全球估計也就幾十個人能做的了主吧。工資多少,人家應該都不在意這個東西。而且大部分還都是國家撥款或者公益組織撥款,反正不是盈利性質的。比如說,TCP/IP協議制定,5G協議制定。我也不知道他們從哪招人,可能是大學教授或者行業領袖吧。
### 量子計算機工程師
這個超級厲害,這個是未來的計算機先驅,我也只是略知一二,不敢細談,如果有興趣,請自行查閱瀏覽相關資料。
以上就是結合本人的有關計算機專業的學習和工作經驗,最后,希望通過這篇短文,能夠幫助你能更好的認識,理解計算機的專業的學習和工作內容。