经常被学生和新人问:老师,做硬件是不是比做软件难多了?门槛更高?今天就来聊聊这个话题。
一、说高,也有道理,显性门槛
1.看得见,摸得着的代价:要是软件写错了,改代码,重新编译下载一下。但是硬件,你画错一根线,焊错一个元件,或者设计有缺陷,好些的是板子点不亮、冒烟烧芯片,严重的整个板子就报废了。重新打板、买元件、焊接。这种试错成本,硬件工程师从一开始就得更谨慎,考虑得更周全。门槛高在犯错成本上。
2.调试:软件调试,会有仿真器、调试器,能一步步跟踪代码,看变量值,逻辑相对清晰。硬件调试呢,板子不工作,可能是电源问题、晶振没起振、某个电容坏了、焊接虚焊了、信号干扰了、芯片本身有问题,需要一样一样,用万用表、示波器一点点去猜,经验非常重要。门槛高在问题定位更复杂、更依赖经验上。
3.知识体系更杂:只懂编程还不够。
基础理论要扎实:电路分析、模拟电子技术、数字电子技术、信号与系统,这些是根基,理解不深就容易在设计时会埋下隐患。
器件特性吃透:电阻、电容、电感、二极管、三极管、MOS管、各种IC,它们的参数、特性曲线、选型要点、失效模式都必须了然于胸。
工具链复杂:原理图设计工具、PCB设计工具、仿真工具、各种仪器仪表的使用,每一项都要专门学习。
经验很重要:很多坑是书本上没有的,比如散热设计、降额设计、安规要求、生产工艺限制、电磁兼容设计等,都要在实践里不断积累和踩坑。设计一块在实验室工作的板子不难,难的是设计一块能在各种恶劣环境下稳定可靠量产的产品板。门槛高在需要掌握的基础和实践技能范围更广。
二、软件的隐性高门槛
软件的逻辑深度和抽象能力要求是很高的:要设计一个庞大、稳定、可维护、高性能的软件系统,难度是几何级上升的。各种设计模式、算法优化、架构设计、并发处理、安全问题,深不见底。好的软件工程师需要有极强的逻辑思维和抽象能力。
软件迭代快,学习压力特别大:新的编程语言、框架、工具、平台层出不穷。软件工程师需要持续学习,终身学习,压力比较大。
坑也多:内存泄漏、死锁、边界条件、兼容性问题、安全漏洞,这些软问题排查起来一样很头疼,而且一旦上线出问题,影响面可能会非常广。
三、我的切身体会
单片机开发恰恰处于软硬件的交汇点
软硬兼施:写驱动要懂寄存器操作和时序,调外设要会看原理图和抓波形,同时也要用C语言写出结构好、效率高的程序。一个串口通信不通,可能是软件配置错误,也可能是硬件电平不匹配或波特率误差超标。
硬件是舞台,软件是灵魂:再精妙的软件算法,跑在一块设计有缺陷、电源不稳、时钟不准的单片机板子上,也会漏洞百出。同样,再强大的硬件平台,如果没有好的软件驱动和逻辑,也只是昂贵的硅片和金属。
门槛感受因人而异:有人天生对电路原理敏感,焊点漂亮,仪器用得溜,觉得硬件更顺手。有人逻辑思维强,抽象能力强,写代码行云流水,觉得软件更容易。兴趣和思维模式的差异,很大程度上决定了对哪个领域门槛的感受更高。
做开发这么多年,好的嵌入式系统离不开软硬件互相配合。硬件工程师要理解软件实现的逻辑和约束,软件工程师也要知晓硬件的特性和极限。所以拥抱这种复杂性,既能读懂电路图上的信号流向,也能驾驭编译器里的代码逻辑,才能游刃有余,真正解决问题,这或许才是跨越门槛以后的广阔天地。
(Source:公众号-电子芯 )
全部评论