不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我
做硬件还是做软件,这是每个电子专业学生都会问的问题。怎么选呢?本期Back2School系列课程,由妮姐和张杰老师一起来为大家讲讲软件与硬件的差别——
张杰老师说:软件是给硬件注入的灵魂的,没有软件,硬件就是空壳。
而妮姐说:不对,没有硬件,软件往哪装。
所以,你们怎么看硬件和软件的呢?
工作内容
先说硬件的工作内容,妮姐之前在大厂硬件部门呆过,所以分享了自己的工作日常:
首先,根据产品需求,设计硬件原型,电路板布局布线,进行元器件选型,但我是不需要去采购的,有些规模比较小的公司,小批量的采购可能是由硬件工程师来做。
当硬件设计完成之后,板子到了。我在的公司有专门的焊接部门,所以板子出来之后,就直接交给他们去焊接。
接下来,就是基础测试,电源、时钟是不是正常。当时板子上是有CPLD和处理器的,我们硬件还需要编写verilog代码,然后与软件部门配合,进行各种功能性测试,EMI/EMC测试等等。
以上刚说的是新产品的流程,但除了新产品的开发,还会有一部分的工作量要进行老产品的维护,包括出了故障现场出差解决,老产品的升级换代等等。
张杰老师作为一名10年+嵌入式工程师,给大家介绍下软件的工作内容:
其实,平时经常跟硬件部门打交道,硬件的工作需要非常的细致,做硬件比较吃经验的,而软件比较注重一些逻辑思维能力。
目前大概嵌入式软件分为两大类,一种是MCU方向,还有一种是SOC方向,也是随着芯片技术的快速发展,嵌入式芯片的性能也是越来越强。
通常MCU指的是ARM的M核和R核,SOC指的是ARM Cortex A核。
从操作系统的维度来说,MCU一般跑RTOS,代表性的有FreeRTOS,MCU Autosar还有我们国产的RT-Thread等。当然了,对于简单的MCU芯片和应用场景,裸跑也是可以的,一般通过一些芯片厂商提供的IDE来开发一些底层驱动,然后基于业务来开发一些应用程序。
SOC一般跑Linux,QNX等操作系统,通常上了Linux操作系统一般都会跑一些复杂的系统和应用程序,比如Android操作系统底层就是Linux,还有我们现在很流行的自动驾驶系统基本底层操作系统也都是跑的Linux,通常SOC的嵌入式开发环境都是使用Linux系统或者Macbook,看起来就很高级。
其实,从妮姐和张杰老师讲的内容就可以看出,软硬件最大的区别从办公桌就能看的出来,硬件的办公桌是这样堆放各种板卡,测试仪器的,而软件的办公桌,一台电脑,加几根USB线,一块板卡,有的时候甚至都不需要板卡,直接远程或仿真就可以了。
这个时候就不得不上下这张祖传神图了:
技术难度
从技术难度上,张杰老师觉得软硬件不分伯仲,非要说的话,软件可能会更难点。因为不同的行业,不同产品,对软件的要求不一样,比如现在比较热门的自动驾驶,软件非常复杂,涉及到的模块很多,当然也不是所有软件都这么复杂,比如做传感器的。
而从妮姐的角度来说,她觉得硬件反倒是比较难,嵌入式硬件工程师需要掌握的技能太多了,比如EDA软件就要好几种,AD、PADS、cadence等等,还要对常用的模拟电路芯片和数字电路芯片熟练,要有画多层板的能力,还要有解决问题的能力,有的时候还要数学要好,要会计算阻抗参数之类的。
学习成本
嵌入式硬件是要远远高于嵌入式软件的。对于嵌入式硬件来讲,好的硬件工程师,就是用板子和元件喂出来的,然后就是设备和仪器,不管性能如何,也是要必备的,我知道的热爱搞硬件的工程师基本人人一个工作室,示波器、稳压电源、函数信号发生器、逻辑分析仪等这些高端设备都有,造价几万起步。
知识技能
前面妮姐说到硬件技能多,其实软件也很多。一般嵌入式软件的开发需要一门熟悉的编程语言,C/C++是必须要熟悉的,必要的还需要搭配一门脚本语言来辅助开发一些小工具,脚本之类的。
嵌入式软件一个重要的环节是需要和硬件工程师进行联调,比如说基于Linux的板子,当硬件工程师焊接和测试好板子之后,一般嵌入式软件工程师需要把板子上的芯片和功能调试完成,比如说像传感器,还有一些跟SOC有通信的芯片:PMIC,ADC,PWM信号等。
薪资水平
张杰老师觉得薪资这块软件就比较有底气了。以他多年的跳槽以及面试经验来看,总体要比硬件更有钱力的。就拿最近比较流行的人工智能、大模型行业,薪资就没有上限。当然了,如果只是简单的单片机固件开发,可能就没有那么高。
当然了,国内软件开发人才的储备比较多的,想要做到top的,还是比较困难的,竞争压力比较大。
职业天花板
职业发展上看,软件和硬件的职业发展路径大致相同,如果坚持做技术,后期可以做team leader,也可以往架构师、系统工程师发展。
另外,还可以去做项目管理,有技术经验的话,会更加吃香。
问题来了,正在大一大二的同学,纠结软硬件的,到底该怎样选择呢?
妮姐和张杰老师给出了他们当初是如何选择软硬件的过程:
张杰:大学我学的也是电子,那个时候看黑客帝国,黑客入侵我想是很多男生的梦想,我也是其中之一,
我自己恰好也是个技术宅,很喜欢独自coding,掌控全局的感觉,做软件就自然而然了。而且上大学老是焊板子,我并不喜欢动手操作这些~
当然,真正做软件工作之后,除了有竞争力的薪资带来的所谓的职场幸福以外,还有一点我的感触很深,就是做软件是一件非常有挑战的事情,因为软件行业的发展很迅速,你可以深入体会到更多的一些前沿科技的东西,并且可以参与到其中去。
这些我个人的经验,都可以作为大家择业时的一个参考吧。
妮姐:和张杰老师相反,硬件带来的成就感对我来说更强。以前,我们也写代码,总感觉代码是有距离感,比较冰冷的,而做硬件,你能摸得着,看得着,更直观。做硬件是很考验动手能力的,如果你不喜欢动手,就不太建议选硬件。
软件和硬件是密不可分的。你如果要问我职业高光时刻,我脑袋里面有两个瞬间,都是和硬件工程师配合,把一块板子调通了。我想,这种快乐是共通的。
所以,无论是软件还是硬件,你要考虑到自己擅长的点、兴趣,喜欢做的事情。
Back2School “梦想金”
第六季Back2School:
(https://www.bilibili.com/video/BV1vK48evEF6/)
Back2School往期内容: