程序员和工程师的差异

这个博客中写了一些研究方面的文章,值得学习阅读:http://www.kylen314.com/archives/5814

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

这位工程师给出了如下的回答:

(0) 还是要强调的是matlab是给工程师而非码农用的。如果不了解工程领域,至少应该知道在software之外还有firmware这么一个世界吧,不然C语言怎么还会占据如此大的市场?

(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

posted @ 2017-03-16 10:57  念槐聚  阅读(1521)  评论(0编辑  收藏  举报