嵌入式软件工程师有必要精通算法,参加各种编程大赛吗?
扫描二维码
随时随地手机看文章
来源:嵌入式资讯精选知乎上有人问
经常在网上看到很多牛人有ICPC等各大编程大赛的经历。
我是学习嵌入式开发的,感觉我天天都是在看芯片资料,代码难度也不高,甚至很多都有现成的,只要改改就可以自己用。
好像什么高级算法、超强的数学能力在我的学习中都没有什么体现啊! 完全用不到啊~~
那做算法研究,ICPC为了什么???都是做研究的牛人吗??
ICPC这些东西对一般程序员有什么意义??
下面是各位过来人的回答:
陈俊直 你参加ICPC没有必要,行业不同,那是计算机软件工程师参与的。个人感觉嵌入式工程师所涉及的算法和计算机软件工程师所设计的算法有一小小差别。计算机软件工程师要实现的是运行在通用计算机平台上的软件,算法研究偏向于尽量降低系统的开销,完全不需要考虑硬件设备。
而嵌入式软件工程师所设计的工作是面向机器编程或者是面向过程编程,算法多考虑的是如何结合硬件来处理事件。因为嵌入式系统不像计算机那样有大量的内存资源(RAM基本以KB计算,所以很少敢用链表,甚至部分电子、测控、自动化专业学生都不学数据结构,虽然他们以后可能也从事嵌入式软件研发),但当你用DSP处理图形图像、音频、电机控制的时候,就会用到算法了。最简单的是《自动控制》课本里提到的PID。还有我听到过而没做过的神经网络算法(在实验室跟做项目时候听研究生们说的,但我只是个本科生。自控课本里那堆数学理论都没看懂呢),打个比方,要设计一个嵌入式系统控制自加热水壶的水温精确并快速达到60℃,是直接烧到60℃就停止加热(但停止后有余热会继续升高温度,这样浪费电能);还是加热到五十多度后停止加热让余热慢慢使水温到达60摄氏度后再断续控制水温(如何做到既省电又省时间)。
而对电机的控制,记得看过MIT的学生做的四轴飞行器,那个东西在狂风中飞行都可以做到平稳自如,拿杆子捅它也只是晃动一下,很快就回复平稳状态。这也是自控的算法实现的。还有更接近人们生活的嵌入式系统算法就是实现汽车ESP车身稳定系统的那些算法。
所以,嵌入式软件研发工程师其实跟普通计算机软件工程师(程序猿)在设计思维上还是有一些区别的。但共同点是:苦逼加班必不可少……
PS:本人对这些过程控制、自动控制理论实践较少,如有错误敬请指出。
沈沉 因为你对自己的定位是"一般的程序员",所以确实没什么意义。
李剑波-游友移动 嵌入式与算法没有直接联系。你提到的嵌入式开发是属于嵌入式系统的驱动单元,嵌入式系统中涉及算法的部分应该在“主控单元”。如果你想觉得做算法高级,可以考虑到通信领域试试看。通信领域的无线信道计算里会涉及很多算法,但是也基本成熟。
还有机器人领域,在机械手臂控制上会有识别算法,还有就是涉及图像处理的嵌入式领域。另外,楼主应该知道每个人都有自己的成长轨迹,这个轨迹与周围环境关系巨大,你想想还有人30不到当国家一把手,虽然大家轨迹不同,但是轨迹的终点应该是我们心里所寻找的地方,而不是从众的结果。如此,每个人的人生都是独特的。
邱震钰 有这闲情干嘛不留着去享受造车轮的乐趣,写点编译器、3D图形引擎、regex引擎、通用Adt库、网络库、3D超级玛丽之类的或者在嵌入式实现一些你想有别于一般嵌入式从业者的东西,ICPC这种,不适合你(价值观上)。
条条大路通罗马。
tom pareto 建议回头把嵌入式系统的定义再回顾一下。什么叫嵌入式系统?国内一个普遍被接受的定义是:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。这里的定义很值得琢磨,由于嵌入式系统与常规计算机系统相差较大, 所以对代码质量的要求很高。
从计算机的角度来看,程序的性能要高,所以时间复杂度要低。由于内存小,所以空间复杂度要低,要设计很好的数据结构。功耗要低,所以将一些硬件功能用软件完成。从应用的角度来看,嵌入式系统以应用为中心,所以有一大票应用的算法需要开发:语音识别、人脸识别、数据融合、路径检测、机器视觉、压缩编码、信号检测、...…。
在你的工作中,算法和数学能不能用上,取决于你自己。类似于机械加工,一般技术工人并不需要太高的理论水平,只需要读懂工程师给的图就可以了。但是,对于工程师来说,那就不一样了,必须合理地选择材料、结构、工艺,这个时候就需要理论了,所以一切取决于你自己了。
李俊杰 根据你工作内容而定,根据你个人偏好而定,如果你爱造轮子,这些有用。嵌入式也分硬件和软件。如果你选择偏硬件,在电子上多下功夫,软件竞赛对你没有用。如果选择偏软件的,现在比较多的是linux驱动开发,也没有涉及多少算法。但是不想做底层的搬运工,想可以往上层转型的时候,像图像处理,语音识别这些涉及数学的就比较多了,然后感兴趣可以走机器学习之类高薪低竞争的方向。看这些的时候,算法和数学功底就显得尤其重要了。简单的使用单片机、DSP,控制个电机、连个摄像头,都没有多少技术含量。像楼上提到的四轴、自平衡的优化、机器人、路径的规划、摄像头、图像的压缩等等,同样的东西看你自己要挖掘多深了。
王鑫 电子专业,大一打了一年ACM,区域赛打酱油蹭个铜牌,至少写起程序来虐虐同学还是很容易的(学校很一般般)。参加这类比赛还是会让你的思路开阔一些,代码实现能力强一些。
仲睿光 作为一名有多年OI经历,目前研究软件无线电方向的嵌入式算法工程师来回答一下吧。我现在做的主要是各种通信算法在FPGA、DSP及多核arm上实现,如宽带抽取滤波器,主要难点是算法在并行下的展开,强实时要求下的调优,所涉及到的知识结构主要是计算机体系结构的基本知识(如CPU工作原理)、数字电路,但是在实现时候要对算法本身了解透彻(据说近几年acm和oi出过fft相关试题?本人没有亲自考证)。以fft为例,该运算在FPGA上的实现思路与PC及GPU思路完全不同。此外还有各种为了接近硬件io瓶颈的zero copy的代码研究。从嵌入式工控方向看,也对数学基础有一定要求,如无人机飞控涉及到的算法。当然应用面较广的通用嵌入式,主要侧重于业务组合,对算法要求不高。
匿名用户 对于“一般”程序员,有很高的概率没有意义。嵌入式行业依托于硬件,测试成本更高。实际的开发中,大多数时候会更倾向于稳定为主,出于成本效益角度考虑,没有机会让你去按照你的想法去做你想做的。一个“一般”的开发人员,在这个方面基本没有什么话语权。不管初创公司也好,行业生存十几、几十年的公司也好,代码往往都是捡着现成的来。说PID算法的,哪家公司会让你自己从零实现?还不都是以调参为主,这对开发人员有很高的要求么?而且还有一种悲哀的情况是,嵌入式行业公司的竞争力,技术以外的东西更多,技术人员的重要性相对低。你做开发的费尽心机做的优化,很可能比不上销售的一杯酒,比不上评审时的一个悄悄送上的信封…
历苏 一般来说,嵌入式软件开发的复杂度不可与计算机的开发相比,所以对算法的要求不会那么高,但是往往为了压低成本,大部分嵌入式设备的内存和存储空间会比pc小很多,因此也是需要进行算法优化的,所以高级的嵌入式设备对基本的数据结构和算法还是要学的。但往往嵌入式更重要的是要求硬件设计的品质,还有软硬件结合、系统移植、驱动程序开发(可能需要连接传感器)的知识。
| 整理文章为传播相关技术,版权归原作者所有 |
| 如有侵权,请联系删除 ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧