程序員和工程師的差別

這個博客中寫了一些研究方面的文章,值得學習閱讀:http://www.kylen314.com/archives/5814html

------------------------前端

這位工程師給出了以下的回答:java

(0) 仍是要強調的是matlab是給工程師而非碼農用的。若是不瞭解工程領域,至少應該知道在software以外還有firmware這麼一個世界吧,否則C語言怎麼還會佔據如此大的市場?python

(1) Matlab有符號運算啊,symbolic math toolbox,不過這點上應該沒有mathematica強,但這原本就不是matlab的重點,基於矩陣運算的快速算法開發和驗證,以及仿真纔是核心。程序員

(2) 矩陣表達反直覺?理工科沒學過線性代數不可能,但就算是純碼農也不該該說出這樣的話啊——有多少算法是跟矩陣有關的啊!工程領域,許多公式的矩陣表達無比簡潔清晰,比循環語句/求和函數什麼的看起來清楚多了算法

(3) Matlab的發家是從控制系統/信號處理等開始的,逐漸擴展到其餘領域,例如統計,金融等。這些裏面有許多的算法(這是更廣意義的算法,不是狹義的CS領域的,雖然許多也有關係,例如FFT),用matlab編寫這些算法的效率比C高10倍都不止,也就python這些年附帶了許多庫在某些領域也比較強,但更多也是在偏碼龍行業的例如數據挖掘等,論工程領域算法的全面性,matlab那麼多年積澱和如今toolbox的發展已經讓後繼者沒法超越了——例如我如今須要一個IIR濾波器知足xxx性能,嗯...或者我要對一些信號作頻譜分析,而後提取須要的部分作進一步計算和統計分析並畫圖給老闆看:你用C一天時間寫個FFT和假設檢驗再作一個畫圖程序?就算是找到現成庫(找的時間還不知道多久呢),把他們集成起來也得要點時間吧——而這樣的事情用matlab也就幾十行代碼,一個小時coding加test就搞好的事情,而後就是大量時間去作實驗採數據作驗證了——驗證不成功,再花一個小時換另一種improve的頻譜分析算法試試。編程

(4) Matlab能夠很方便跟其餘語言集成的,互相對調,一些新算法的開發驗證在matlab裏實現,而外圍的功能用其餘語言後端

(5) Simulink在控制系統/信號處理等領域是無可替代的,而且也在延伸到許多其餘相關領域,例如電力系統,SimEvent等。用C寫一個工程級別的最基本的PID控制器模塊,那都是一個要歸入人年計算的工程了,而這僅僅是控制系統裏一個模塊,前端的數據預處理,濾波器設計,後端的信號調製:一個實際控制系統的一個子系統可能就是一個大的diagram,其中PID只是一個小模塊——你讓研發的時候就直接寫C代碼上硬件去測試,仍是先仿真呢?架構

(6) 更重要的是matlab有code generator了,能夠直接從m-file或者simulink model生成C代碼,質量還至關高(matlab後臺實現自己應該就是C),這樣的代碼能夠很快被直接移植到firmware去的。Mathworks如今市場活動搞得最多的就是汽車行業的model-based design,就是用仿真模型作開發直接生成代碼,能夠大大提升開發和測試效率的,並且還支持hardware-in-loop的測試——直接在真實硬件環境下debug仿真模型。
 
---------------------------
Matlab追求的是解決問題自己的簡潔,而無論程序自己是否簡潔,
用Cpu的時間來換取解決問題者的時間。
當你還在關注"術"或"形"上的東西的時候,說明你還沒打算解決什麼基本問題,於是也沒法體會到它的好了。
---------------------------
做者:匿名用戶
連接:https://www.zhihu.com/question/20736883/answer/16020637
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

1.
Matlab比C的最直接優勢在於,matlab代碼不須要編譯,省下你無數debug的時間。只要你果然寫過「hello world」之外的代碼,天然明白這句話的含義編程語言


2.
爲何我要強調工程領域,由於matlab這玩意兒就是爲工程師設計的,不是爲程序員設計的。工程師對編程的需求,和程序員對編程的需求,實際上是不同的。
對程序員來講,代碼不只是工具,更是產品,因此喜歡關注代碼自己。
但對工程師來講,工具就真心只能是工具,用起來方便纔是王道,至於他的工做原理是否是優雅,對不起我不關心啊。

好比變量不須要聲明,不須要檢測類型。計算機科班出身的人會和你說這是多麼多麼的大忌,但實際使用中便利是不少的,誰用誰知道。

作個直觀的比較,兩種語言:一種10小時編寫,1小時運行;另外一種1小時編寫,10小時運行。
程序員傾向第一種,無可厚非,由於代碼的重複使用率極高,先勞然後逸是常態。好比網站,代碼寫完了挑戰纔剛剛開始。
但工程師不是,我建一個模型,重要的是設計過程,重要的是這個模型的物理意義。設計完了,一個模型跑幾天幾夜根本不是事兒,我回家睡覺就是了。等到結果出來,之後這個模型不再碰了也無所謂。因此我在意的是設計過程,人力成本比cpu運行成本高太多。

做者:匿名用戶
連接:https://www.zhihu.com/question/20736883/answer/16020637
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

正如樓下的 @張抗抗 朋友所說:
Matlab追求的是解決問題自己的簡潔
當你還在關注「術」或「形」上的東西的時候,說明你還沒打算解決什麼基本問題


3.
爲何matlab在工程行業內受歡迎,由於其既是科學計算,又是程序語言,仍是圖形設計軟件。。。互相之間還無縫兼容,因此才強大。核心功能上確實有一些強力的競爭對手,但若是分散到各個專業領域,尤爲是那些分開來賣的toolbox,就未必能找到合格的替代品了。
不喜歡Matlab的人,認爲某某工具比Matlab好的人,由於大家只須要使用那一種工具。因此儘管挑那一個用就是了唄。

matlab還有許多爲了大型建模及實體模型而服務的功能,好比Code Generation, Simulink Target, Real Time Workshop等等,恐怕是學生黨未必會接觸到的東西。因此學生黨依據平常作做業的經驗而給出的評價,我認爲不全面。再說了,高校購買的student version本就不是全套功能。。。

我換個說法好了:若是對你來講matlab只是一種程序語言的話,那對不起,這東西確實不適合你用。
換個更簡單的說法:若是你用matlab而從未點開過simulink的話,那你也不用和我爭了,我懶得和你爭。

若是有人說:我以爲自行車比坦克車好用,由於輕便、節能、環保。
請問我該如何回答他呢?


4.
再說箇中國用戶廣泛體會不到的優勢:售後服務。
正版matlab包含tech support,24小時電話伺候,不管是有bug仍是本身不會用,神馬問題均可以問。我的用戶不以爲什麼,對企業用戶來講有售後沒售後是徹底不一樣的概念。

舉一個實際工做中遇到的例子:
你以爲python免費好用,各類開源的library也應有盡有,你以爲碉堡了,花錢的matlab簡直就是垃圾。
而後你寫了個程序,可是結果就是算不對。這就屌了,你不得不花好幾天的時間去debug。最痛苦的不是bug,而是你始終懷疑這個bug不是你本身的,是免費開源代碼自身的漏洞——我這裏指的不是python的漏洞,而是第三方工具包的做者可能本身犯錯了
通過了一個星期的努力,掙扎吧,在血和暗的深淵裏,你終於肯定了是代碼自身的問題。
這時候就更屌了,人家是免費軟件啊,是開源軟件啊,誰有空來給你負責啊?你又不會本身重寫library,只好到各類技術論壇上去求助。先不說別人未必願意搭理你,就算願意,但是你纔是專家啊,你乾的活別人不懂啊,因此人家也沒辦法幫你啊。就這樣又過了一個星期。
而後你的工做這樣一卡就卡了兩個星期,也不知道何時可以解決。python是免費的是嗎?但是美國碼農時薪40刀/時,兩個星期的人力成本就足夠你買matlab了,還有找零

5.
程序員逼格過高,跟你談算法談架構,可是對不起啊,咱們的側重點不同啊。
比如一個醫生說青龍偃月刀不適合作手術,因此這玩意兒弱爆了。那沒辦法,什麼事都是你說了算,你贏了行嗎?
過去有人提醒我不要在知乎上和程序員對噴,現在我是服了。世界上不是隻有程序員一種工做,請你睜開眼睛看看別人的世界

再逐條說幾個細節:

矩陣表達,據我所知這是matlab的強項,也是創業初期matlab可以在一堆科學計算中脫穎而出的關鍵。因此這一條我實在不知道你的噴點在哪裏,請闡明細節

說matlab的代碼「醜陋」,「不優雅」。這就真無法說了,請先定義優雅。另外你以爲C比java好看嗎?法語比日語優雅嗎?仍是那句話,光說這些主觀感受的我實在沒法回答

——————————————————————————
我真是服了一些噴子了
我這帖一沒強買強賣,二沒貶低別家,我連橫向比較都儘可能減小了,單純分享一下本身的使用體驗而已。就這樣還能有人噴?還讓不讓人說話了?知乎是你家開的?
工具就是工具,經過貶低別人的工具來彰顯本身水平的人,我真是開眼界了,水平真是驚世駭俗啊。

有不一樣意見的我歡迎交流,至於滿嘴噴糞的我勸你三思,這畢竟是個人地盤,到時候你辛苦半天噴出一大坨,我點點鼠標就給刪了。你說究竟是誰比較酸爽呢?
 
---------------------------
做者:Henry Zhou
連接:https://www.zhihu.com/question/20736883/answer/26197323
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

我以爲把MATLAB和C相比原本就是一個錯誤,這兩個誰也替代不了誰。並且全球那麼多各行各業的大公司都在用MATLAB,竟然還有人說用MATLAB是由於編程能力太差,暈,那些大公司的工程師傻啊?原本就是兩代不一樣的編程語言,那有沒有人說用C的是由於彙編語言太差?或者用匯編語言的是否是由於人工讀101010110000010111101太差?再說,就從MATLAB的應用來講,你以爲代碼生成簡單?你以爲工業界別驗證簡單?基於模型設計簡單?金融應用程序簡單?

記得MathWorks中國工程師說過一句話,盜版讓MATLAB在中國氾濫了,泛是應用普遍,但濫是指中國對MATLAB的應用停留在很是低的水平。在咱們爭論MATLAB和R、Python等在某些領域哪一個好的時候,MathWorks早就盯着工業界了。這幾年國外對於MATLAB的報道,已經不多涉及到數值計算的,大多數都是工業界,好比NASA用來製做航天飛機,Tesla用來開發電動汽車等等,國外就連學生上課,也不用MATLAB來進行數值計算了,而是教學生怎麼用MATLAB來設計硬件算法,如何應用到Arduino,樹莓派等。

原本MATLAB就是給工程師用的,就拿汽車製造來講,一輛汽車幾千萬行代碼,全人手寫代碼對人力物力和時間要求過高,這時就須要MATLAB了,況且MATLAB何有驗證工具箱,直接檢查是否符合行業那幾個標準,這就是爲何國外的開發團隊只須要幾十我的就能夠開發那麼大工做量的項目。

原本計算機語言從0101010發展到彙編語言,再到C、C++,再到MATLAB、R等,原本就是對人類愈來愈友好,但同時應用面愈來愈窄的。聽有人說過MATLAB會致使人的編程能力變弱,我以爲做爲老師,教學生的時候能夠這麼作,但實際工業中,人手用C語言寫一個FFT有意義嗎?人的價值在於設計出FFT的算法,而不在於知道算法後去浪費時間編寫,這些你們都知道的東西讓機器(或碼農)本身作就好了,工程師應該關注與有實際意義的算法設計或流程設計。舉個極端的例子,那爲何要用計算器呢?人工手算更能鍛鍊計算能力了。正是由於計算自己不產生價值嘛。

至於MATLAB和Mathematica的對比,很簡單,喜歡那個用那個,還有python、R什麼的,喜歡那個用哪一個,原本他們存在競爭就證實了各有千秋,誰也沒法完全擊敗誰。不過這些知識在數值計算、統計等方面跟MATLAB有競爭,仍是那句話,MathWorks已經將視野放到工業界了。
 
---------------------------

首先 MATLAB 是一個工具的集合
而 C 只是一種程序設計語言
二者根本沒有可比性

MATLAB 的流行就是由於功能強大易用性強
作算法的都喜歡 MATLAB
反正研究的時候不用考慮真正的實現
對於我來講 MATLAB 的仿真速度確實太慢了
也許是由於我自己水平不夠吧

我以爲要比較的話仍是和如今比較流行的 Python 相關工具庫比較吧
這裏有一些淺顯的介紹
 
 
---------------------------

 

 

參見以下連接:

爲何 MATLAB 的矩陣表達這麼反直覺,代碼不優雅,而且符號計算這麼差,仍是有這麼多人用它?功能實現上比 C 好在哪裏?以及如此流行是由於它功能強大兼/或易用嗎?

https://www.zhihu.com/question/20736883

 

十行之內,你寫過哪些比較酷的 Matlab 代碼?

https://www.zhihu.com/question/27780598

 

MATLAB 中有哪些命令,讓人相見恨晚?

https://www.zhihu.com/question/24499729

相關文章
相關標籤/搜索