標籤:

為什麼招程序員不考慮MATLAB技能?

RT

會C++ java Python php都能進公司當程序員,唯獨會matlab(如果只有這一項熟練)不行,這是為什麼?工業界真的不用MATLAB編程?


工業界需要MATLAB的職位一般不是「程序員」。比如汽車行業(包括福特,豐田,另外還可以算上John Deere, TRW, Bosch等)招硬體或者控制系統方面的工程師,就會要求懂MATLAB/Simulink。有一些金融機構像Bloomberg, HSBC會用MATLAB開發一些相當複雜的內部用的計算和管理平台。某著名水果公司也用MATLAB/Simulink, 但是用的都是硬體工程師,目的是設計例如手機鏡頭的伸縮功能之類的硬體控制器。NASA, Boeing, Airbus等一些航天航空相關的領域也大量使用MATLAB,但是他們不怎麼招「程序員」。很多知名的大公司都在使用MATLAB的,但是那些崗位一般都是偏研究的(詳情見 MathWorks User Stories Listed by Company)。其實,MATLAB本來也不是給程序員用的, 而是給工程師/研發人員這樣的Domain Experts解決問題用的。

退一步講,不摳「程序員」這個字眼。很多大公司的這類真正需要Domain Experts的研髮型職位目前都不會設置在國內, 而國內本身一些中小企業負擔不起設置這些崗位 (像東風這樣的企業真不多) 。所以表面上看起來需要MATLAB的職位很少,本質是上國內的所謂工業界對Domain Experts的需求太少。


因為MATLAB不是給程序員用的啊。

看看MATLAB文檔中對自己的定位:

定位的用戶群體是工程師和科學家。


數值計算和模擬工具目的是實現數值計算(或模擬),所需的技能也不是編程技能而是數學(或工科姿勢)

對,我的意思就是你會數學且在help的幫助下自然就會matlab了,和編程能力無關。我校一個教授甚至用學生會不會說:「我怎麼學習matlab」來檢驗學生智商,因為他的觀點是matlab不需要專門去」學習」

上面這段話要覺得我貶低matlab那就是語文有問題了,這根matlab無關,而且BTW我是死忠粉


與MATLAB對應的是工程師(傳統意義的工程師)


只會matlab的程序員和鹹魚有什麼區別


這個問題可以分三方面說:版權問題、軟體/語言自身設計問題、人力資源問題。

Matlab 一個 license 在中國內地賣 15000,真的很貴的。

Matlab 直到最近才支持單元測試。對面向對象編程的支持也一直是聊勝於無。在 7.0(2004) 取消了純 C 代碼的生成(老一輩科研人員長期珍藏 Matlab 6.5 和 VC6 不是沒有理由的),然後又在 2011a 重新推出單獨的 MATLAB Coder(可以生成 C 代碼)。讀寫 XML 的時候,經常要手寫 JAVA 代碼,查 JAVA 庫的文檔(不知道近期是否有更新。查過了,沒有,還是那樣。啟動的時候 -nojvm 乾脆就不 work 了)。這麼多黑魔法,這麼個混亂的系統,很難算得上是一個工程可用的穩定的系統。另外,MATLAB 算是個語言呢,還是個 IDE?具體不好評說,但至少定位是混亂的。有個網站似乎是 MATLAB missing manual,可以慢慢讀一下,可以了解很多 Matlab 的陰暗角落。PS. 是這個:Undocumented Matlab

Matlab 的用戶缺乏良好的軟體工程文化。

以上都可以展開充分討論,但暫時沒什麼時間。

但其實最主要的問題是,Matlab 是一個模型設計模擬工具,驗證了模型之後,會再去用其它語言實現,這是一直以來 Matlab 的工作模式。

但近期隨著科技的快速發展,這種工作模式已經逐漸被拋棄了。軟體工程敏捷化,快速迭代,以及科研與應用的緊密結合使得模型開發與應用無縫結合。一線公司也需要專業科研人員,這個時候原本 Matlab 的工作模式就不適用了,也就出現了這種比較尖銳的矛盾。

mathworks 其實也在著手解決這方面的問題,奈何歷史依賴太重,社區文化進展還是很慢,與業界脫節比較嚴重,尤其是等位的幾種競爭性替代發展也很快,如:Python, R, Julia 等。例如深度學習領域,已經幾乎完全是 Python 的天下了。MatConvNet 龜縮一隅。

但另一方面 simulink 暫時也確實還沒有夠分量的對手,也許 mathworks 也並不著急吧。畢竟控制、航空等領域也還是很牢固的。


人生苦短,我用Python。

其實還是會的人少,精通的更少,也沒有太多非用不可的情況,自然不重視


Matlab本來就是給業界的非程序員,以及學術界的非計算機科學家用的啊。


好多人甚至公司對 MATLAB 的理解不深,就像有人說的「只是個高級計算器」,那是因為他們「只會把它當做高級計算器來用」

這是官網介紹的解決方案:MathWorks - Solutions

以及用戶案例:用戶案例 - MathWorks 中國

用戶案例(按行業分類):MathWorks User Stories Listed by Industry

鑒於有些人(包括我)很懶可能不會點擊鏈接里的鏈接,所以單獨拿出來幾個頁面的:

東風電動車輛股份有限公司使用基於模型的設計開發混合動力電動汽車的電池管理系統

奇瑞使用基於模型的設計實現發動機管理系統軟體的自主開發

馬自達加快下一代應用創馳藍天技術(SKYACTIV TECHNOLOGY)的發動機開發

Airbus 使用基於模型的設計為 A380 開發出燃油管理系統

Solar Impulse開發先進的太陽能飛機

Alenia Aermacchi 開發符合 DO-178B A 級認證的自動駕駛儀軟體

ATB Technologies 通過使用適用於 TI C2000 MCU 的代碼生成,使電機控制器的開發時間縮短了一半

RWE開發和部署應用於天然氣及電力交易和風險管理的自動化系統

三星(英國)利用 Simulink 開發出 4G 無線系統

都科摩(北京)研究中心加快移動通信技術的研發速度

Semtech加快基於FPGA和ASIC的數字收發器的開發

Harris 加快信號處理 FPGA 驗證

NASA Ames Research Center Develops Flight Software for Lunar Atmosphere Dust Environment Explorer

NASA"s X-43A Scramjet Achieves Record-Breaking Mach 10 Speed Using Model-Based Design


Matlab用在工業界有幾個弊端:

1. 價格高,真的太高了。而且如果幾十個人用Matlab開發,拿花在licence上的錢估計要趕上一個人的工資了,而免費的替代品octave的性能和擴展性又差距太大;

2. 開發難度大。不是說Matlab難寫,實際上用Matlab實現一個功能比C++/Java/Python都容易,但是嵌套幾個for循環,Matlab的性能優勢就毫無存在了——寫出高效的、並行的、稀疏的運算代碼,對新手難度確實很大。而且真正實現高性能的mex function的開發與調試難度很高,基本上沒有現成的工具鏈可以用,稍微溢出就整個Matlab崩潰了,對開發經驗需求很高;

3. 輪子少。這是最主要的一個問題,Matlab的開發群體基本還局限於校園中,主要library大部分用於計算和模擬,而真正工業界需要的那些東西——高性能的資料庫,前端,高並發的network library,這些東西Matlab就算有,也沒多少人真正熟練掌握,更沒有人持續開發;

4. Matlab本身也不穩定,比如函數的名字,工具箱的名字,simulink的一些東西,一直在變,很難讓一個企業的成熟的產品去一直依賴著Matlab的生態環境,因為不知道哪天就不支持了。

當然這不代表工業界不用Matlab,只不過互聯網公司不用,實際上Matlab和Simulink在控制、電機、電力電子等行業的模擬存在著不可動搖的地位,不過這一領域的Matlab又完全是另一件事了。


工控、車企需要開發新演算法,即使只會Simulink建模也是可以的,前提是演算法很牛逼。DSP和FPGA都懂得話,就是加分項了。大型項目前期開發都是Model based Design,直接用Simulink生成嵌入式平台代碼的。

工業界和互聯網公司是有區別的


為什麼招水管工不考察流體力學


人家可是正經公司,可不跟我們學生一樣隨手找個2016b就用,人家的MATLAB是要真金白銀買的。。。

那麼有免費的C++ Python。為什麼要用收錢的MATLAB。


工業界和學術界的差異。學生覺得好的一些東西或者必備技能,然而實際在很多領域並不適用。


天滅MATLAB,大蟒保平安。人在做天在看,上網搜九評MATLAB有真相!


作為一個研究型學生,找工作時也宣揚以自己熟練使用MATLAB為傲,後來發現大多數企業其實對此並不感冒。也在幾個不同的 互聯網公司 工作過一段時間,非常贊同上面匿名用戶的幾個弊端的回答。首先對此他回答的幾個弊端做幾個自己的經驗示例補充:

1.價格高:公司發布的產品必須用正版軟體,譬如如果開發Java,只能用Eclipse,而不能用MyEclipse,而且所有需要使用的軟體包都必須使用開源的。

不過有個別時候處理數學分析較多的演算法時,上司希望我先用Matlab快速得到一個初步結果給他看,再決定是否使用,如使用再用公司用的語言實現。

2.開發難度大:其實Matlab代碼挺難寫的,寫得代碼不解釋別人也真不好懂(即使有注釋),因為都是直接的矩陣處理,幾乎沒有顯性看一眼代碼就能知道在做什麼的邏輯語句,一個功能一行,每行都要寫注釋,譬如:

for i=1:point
% 從第i點進行統計驗證
ansMat = bsxfun(@plus,stMat(i,:)",stMat(:,1:point)); %所有長度為2的路徑求和
[ans,colFind] = find(5==ansMat); %查找路徑為5的
[count,num] = hist(colFind,1:size(stMat,1)); %統計位置
% 處理是否相鄰
adjoin = find(stMat(i,1:point)~=0); %查找相鄰點
count(adjoin) = count(adjoin)+1; %相鄰點路徑數自動+1
counId = find(count&>0); %查找滿足條件的點
% 統計這些點是否是所有點,如不是則說明有的點不滿足條件
if length(counId)&<(point-1) % disp("fail"); return; end end

3、4.插件少+Matlab自身不穩定:在學校里用工具箱還真就是用模擬和演算法,感覺不少了,而且有一些自己都不知道怎麼調參和參數意義,但是不影響使用~~~~~~哈哈哈哈~~~~話說這樣寫出來的東西能穩定才怪~~~~~~~~~

-----------------------------------------------------------------------------------------------------------------------------

另外,我現在在公司里做程序員,再沒有對MATLAB的神級崇拜了,想想主要是下面幾個原因:

1.Matlab作為一種解釋性語言,和Python類似,但是更容易將主要精力用於Matlab的語言優化上,對矩陣再熟悉,也需要很仔細得先推導演算,很難第一遍寫就得到簡潔、正確的結果

2.互聯網公司里其實對數學要求不太高,對整個項目的架構卻要求很高,需求幾乎是在一直變化,對設計模式的要求比實現功能的要求更重要~~~~~~~~~而Matlab真的不太適合實現各種設計模式,至少不那麼直觀方便改寫~~~~~~

3.Matlab語法雖然不複雜,但是常用函數可比C、Java、Python多得多,不同的人對它的掌握真的差別挺大的,尤其是矩陣運算。看別人用Matlan寫出類C的代碼真是氣死~~~~~~~~

--------------------------------------------------------------------------------------------------------------------------------

所以回到問題:

為什麼招程序員不考慮MATLAB技能?

會C++ java Python php都能進公司當程序員,唯獨會matlab(如果只有這一項熟練)不行,這是為什麼?工業界真的不用MATLAB編程?

1.公司里上司以及大部分人都不懂Matlab,也不用Matlab做公司代碼,自然不太重視這方面的技能。而且這個技能也不好評定,代碼質量可以差別很大。

2.公司里本來就不太重視對功能實現的細節要求,對設計模式的要求更重要,而Matlab技能並不能體現。所以那些大型管理項目往往比Matlab模擬模擬項目更有說服力。

3.公司里對數學需求也並沒有想像中的那麼大,用其它語言實現即可。項目里幾乎都是使用一堆成熟的小演算法,而不是試圖搞一個大演算法


誰說不看Matlab?你在應聘通訊業的演算法工程師崗位,你說你不會Matlab,你看有哪家公司要你?!


程序員與工程師是兩類人。


matlab不是只有要發論文的時候才會用的嗎?


因為他們招的是程序員


推薦閱讀:

各位大神,請問如何用matlab證明人耳對聲音的相位不敏感?
請通俗易懂地解釋一下guidata()的用法?以及他是如何幫助參數在GUI間傳遞的?
Matlab畫圖增加右邊坐標軸的刻度,與左邊一樣,如何處理?
請問怎麼用matlab 畫一個傾斜的橢球?
「MatLab 模擬結論在工業界認可度低」是否屬實?

TAG:程序員 | MATLAB |