1. 程式人生 > >計算機專業大類下,還有哪些細分的專業,分別是幹什麼的?

計算機專業大類下,還有哪些細分的專業,分別是幹什麼的?

作者:羅文
連結:https://www.zhihu.com/question/40819195/answer/129677777
來源:知乎
著作權歸作者所有,轉載請聯絡作者獲得授權。

之前就有想過寫一篇關於這個問題的長文,因為還有工作,慢慢寫了有兩天,很多觀點都會帶有個人知識水平的侷限性,如果有說錯的地方,請大方的指出來,或者您也可以寫下你在這個行業的領悟,我最後希望這篇文章能幫助高考的孩子或者大一大二不太瞭解的新生或者有意從事計算機方向的人的一本入門指南。接下來,我會從就業人數、著名公司、產品代表、門檻、工具、技能、業內現狀和發展前景,從軟體和硬體兩個大方向分別描述,至於非技術方向類似於產品,推廣運營我並不是特別瞭解,不敢瞎說。請大家積極分享同時提提意見。

先來一個思維導圖。

硬體

硬體工程師

指在計算機領域裡,需要接觸到電路底層的工程師,實際上在電氣領域,在電方向上分為強電和弱電,強電指高壓傳輸,電動機等高電流作為能源動力領域,弱點就是指微電子方向的資訊處理領域。計算機硬體工程師的工作範圍在弱電,主要內容主要有PCB設計(印製電路板),ic(晶片)設計,FPGA工程師。往上還包括涉及針對特定硬體做系統開發維護的嵌入式工程。

PCB工程師、FPGA工程師、IC工程師

專業術語大家可能不太懂,就舉例一下每種工程師對應的工程產品吧。

PCB工程師的工作就是設計一個高速穩健的交通網路,把電路板上各個功能不同的模組連線起來。他們的工作環境如下所示。

FPGA全稱叫現場可程式設計邏輯陣列,就是理解為一個可以程式設計的硬體。傳統意義上的積體電路是定製化的,針對特定的需求設計特定的電路板。而fpga可以通過熔斷機制來動態修改電路的結構,達到動態程式設計的效果,簡單點說,針對一塊FPGA,你可以把他燒製成視訊編碼器,也可以燒製成無線wifi通訊模組。雖然這些演算法都可以通過軟體實現,但是硬體實現的效果演算法成本更低。開發語言常用的有VHDL(硬體描述語言)。

IC工程師就是設計一個高效運算的大腦,涉及到流水線機制,超頻,最重要的是解決納米級別下電流擾動問題,最大的制約因素也是材料工藝問題。

以上三種崗位其實在現代學術分支類還是屬於EE下的子類,事實上從事這個方向的人也大部分是學習電子電路工程的同學。這個專業的特點就是強者通吃,全球唯二的兩家晶片公司intel、AMD。而且他們的核心競爭力並不是晶片設計能力上,而是在製作工藝上。現在在移動終端統一江湖的還有英國Acorn有限公司設計的ARM晶片,它只是提供一個解決方案,設計圖紙,具體的製造還得是華為,三星自己開場設立。但是同時又有很多小眾領域,比方說無人機,安全門等等你又需要做專門的PCB設計,所以硬體工程師也是有市場需求基礎的,但是也不多。從技能需求來看,要求數學知識紮實,邏輯嚴密,電子電路知識更多,類似工具反而並不是顯得那麼重要。從未來的發展前景來看,隨著智慧硬體物聯網的推廣,會有一波大紅利。

崗位需求:IC << FPGA = PCB

薪資 :IC >> FPGA = PCB

嵌入式工程師

系統級別嵌入式

主要是針對特定硬體移植一套作業系統,類似於linux,VxWorks等,甚至於自己開發一個只能滿足需求的未知系統,你需要讀管腳資訊,讀時序。但是大部分還是使用成熟的系統移植,自己寫系統一來太慢,二來肯定很多坑。相對來說在這個層面上的人都是大牛。或者做一些驅動開發,比如說,每年讓無數遊戲宅剁手的最新NVIDIA顯示卡,都需要這個級別的工程師來做相應的顯示卡驅動。

薪資水平絕對高,起薪百萬級別,入門門檻也絕對高,業內最強不是在研究所,而是在公司。

應用級別嵌入式

在基於已經能跑的機器上做開發,比如說,作業系統已經提供了最基本的檔案管理,記憶體管理,CPU管理的情況下。你在此基礎上做特定應用的開發。普遍打交道的語言工具是C。本人實驗室其實是這個方向的,有過軍工和國企的一些專案,從這層往上,到架構師之前,本人至少都接觸過一些。能說點自己的感悟,而不是查資料了。

做嵌入式應用開發最蛋疼的不是開發而是除錯,在這一層做開發會有各種奇葩問題,比方說你昨天還跑得好好的,今天可能就崩了,可能是硬體問題,虛焊?電容擊穿?電路板電流擾動?也可能是軟體問題,野指標(很少有系統做了虛擬記憶體,你所有操作都是在實際的記憶體空間上操作的),記憶體溢位。

薪水來看,起薪比較低,今年華為給的算是不錯了,能到16K,但是隨著你對業務的熟悉,工資是沒有上限的,最終達到的升級狀態就是系統級別嵌入式工程師。

軟體

桌面程式工程師

傳統的桌面應用軟體類似於office,瀏覽器啊在PC端上執行的軟體。主流的開發框架有Qt,MFC,.NET。現在還比較強勢的一些桌面應用領域就是微軟的office和桌面遊戲公司。以及基於微軟的C#的開發應用,基於QT的C++開發應用。其他的不是特別瞭解,但是給我的感覺就是這個市場不怎麼活躍,招人很少,身邊也沒有認識的人走這條路線。經知友私信補充,這個行業的薪資並沒有隨著網際網路浪潮而有大幅度增長,該知友在.NET平臺下使用C#開發,有5年的從業經驗,15年的薪資水平在11k左右,後來轉行去了android,當然這可能只是個例,有很多厲害的人我們可能不知道,先謝謝這位知友知友了。

網路應用工程師

從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唯一向性,真正意義上的人工智慧還是蠻難實現的。比如說之前非常火的李世石大戰阿法狗,在這種特定的應用下,輸入很簡單,圍棋上的落子1616,狀態也很簡單,2的1616次方,在這個複雜度下,肯定也是沒辦法列舉的,他們會有降維演算法各種演算法來聚類他們的狀態。

深度學習

我們上面所說的資料探勘會有一個調整引數的過程,而在深度學習領域,他會新增一個正向反饋,讓你的引數由機器自動調整,讓他計算的結果去自動匹配實際的結果。這個就是所謂的機器學習,就是把人為調參的過程讓機器自動完成。

此外,人工智慧,深度學習,資料探勘並不是分開來看的,他們會存在一定程度上的重合。他們其實真正的難點實在各種降維演算法,概率論,退火等數學領域。所有說他們算是半個科學家也就是這樣原因了。

效能效率支援

這個才是普遍意義上的網際網路的演算法工程師做的事情。比方說,我要求一個數的平方根,現在我們程式設計很簡單,只需要sqrt()就可以了,但是你如果看過這個的原始碼,你就會驚呼,感興趣自己去搜,他並不是用牛頓萊布尼茲公式做的,它比牛頓牛逼多了,能提高100倍的效率。這只是一個很簡單的例子,在實際應用中,當遇到大運算量的時候,就是他們該出場了。這部分功能其實大部分也是由後臺工程是自己擔任的,但是不排除大公司類似google,fb會特意招ACM來做演算法支援,起薪很高。

在這裡我特意提一下效率工程的頭面擔當,遊戲引擎工程師(目前國內主要使用開源的unity3d)。主要做3D渲染,需要在計算機圖形學方面有較高建樹。類比於工業皇冠上的航天發動機一個級別。遊戲開發只是一個特定方向的開發,,一樣有客戶端,web端,pc端,後臺,資料庫運維等。並沒有需要單獨拿出來一個講。不過遊戲開發工程師一般來說都是比較累的,但是同樣薪水也是高,陰陽師團隊今年估計年終獎拿100個月我都不稀奇。

標準化組織協會會員

這個也算是吧。比如說,美國電子工程協會,3GPP協會。他們主要是製作各種標準化協議。這個級別太高了,在特定領域,全球估計也就幾十個人能做的了主吧。工資多少,人家應該都不在意這個東西。而且大部分還都是國家撥款或者公益組織撥款,反正不是盈利性質的。比如說,TCP/IP協議制定,5G協議制定。我也不知道他們從拿招人,可能是大學教授或者行業領袖吧。

量子計算機工程師

這個超級吊,這個是先驅,未來的計算機。
如果有對大資料感興趣的同學,可來我們的大資料技術學習群:876723141,裡面免費送整套系統的大資料教程!我自己是一名從事了5年大資料探勘,分析開發的工程師,辭職目前在做線上教育講師,創了一個交流群,每晚都會在群內直播,今年年初我花了一個月整理了一份最適合2018年學習的大資料乾貨,包括資料採集。資料儲存和管理。資料處理和分析。資料隱私和安全。雲安全,雲技術,人工智慧等資料都有整理,送給每一位大資料小夥伴,這裡是大資料學習者聚集地,歡迎初學和進階中的小夥伴。