知乎上看到这么一个问题:走嵌入式方向,一定要软硬件都懂吗?
如下写点个人看法,全文约2432个字,阅读时间约10分钟,仅供参考:
从以瓦特发明蒸汽机为代表的第一次工业革命,到法拉第发现了电磁感应为代表的电气革命,一直到二十世纪末期电子计算机首次问世的信息革命,甚至到现在大家都在聊的AI革命。整个社会的文明高度发展,知识量大爆炸,一个人的时间有限,但知识无限,所谓“ 吾生也有涯,而知也无涯。以有涯随无涯,殆已”。为了解决这个问题,必然需要进行社会分工,由此产生了不同的分工角色,特别是对于技术类的工作,其分工类别随着系统的复杂度上升,分工会越加明显。大家在各种不同的领域中,干着自己高度专业化的事情,通过合理的分工边界、合作,达成系统的最高效益。
当这套体系运作成熟了之后,或者说大家各自的角色做久了之后,角色定义上你自己在这个系统中只是一个很小的占比,但你看到的大家要做的事情却又是一个庞大的系统,对于这个系统更多的认知,你知道有利于你更多地了解事情,但是人家给到你的角色定义上,又好像没有这个硬性要求。
很多人也许还记得当初物理课上亚里士多德为了验证自由落体运动而抛出的那两个铅球,你以为人家是物理学家,然而在当时压根就没有“物理学家”这个词汇。人们把亚里士多德的著作分成了两大类:研究有形体的事物、研究没有形体的事物,再到后来人们把这两大类称之为:物理学、形而上学。
亚里士多德的老师是柏拉图,在成为所谓的“物理学家”之前,亚里士多德首先是个哲学家,而柏拉图的老师是苏格拉底,就是那个提出哲学三大本源命题的人。到了笛卡尔时代,笛卡尔在对世界做出哲学追问的过程中尝试用数学的形式去解释这个世界,创建了“直角坐标系”的那位,然后后人称之为“数学家”。对于笛卡尔自己,是不是“数学家”对于他并不重要。再到牛顿、莱布尼兹时代,这些大咖从一开始就没把自己仅仅定义为一个数学家或一个物理学家,对他们来说,所做的一切不过是在对世界进行探索过程中制作种种工具、提出种种解释。我们生存在高度文明的社会中,周围的事物以越加复杂化的趋势发展,在复杂的局面中,迫使我们用各种专业化名词的方式将各种事物进行细分,乃至于很容易让人一叶障目。一个技术人在面对一个技术问题时,问题通常不会简单地区分这是一个硬件问题还是软件问题,所谓“一定要软硬件都懂吗”的疑问并不存在,因为在日后面对需要解决的bug中,对于问题的执行处理会有软硬件的人员分工,但是对于解决问题,没有所谓的边界。本质上,你就是要解决问题。
对于天线工程师,其主要面对的物料选型是天线材质、形状设计,其中涉及FPC、钢片、PCB等,主要使用的仪器是网络分析仪、天线暗室;对于电源工程师,其主要面对的物料选型是电源芯片、阻容感、二三极管、变压器、接口端子等,由于现有电源架构三大拓扑衍生出来的几种电路形式可以覆盖80%的产品应用,因此设计方案相对集中;硬件方向需要面对的物料选型设计除了电源芯片、阻容感、二三极管、接口端子外,还涉及主控芯片选型、专用SOC芯片选型(如DSP等)、各类传感器(红外、温湿度、距离等)、各类模拟电路设计、芯片应用等;
软件方向需要面对底层驱动、应用层业务逻辑、无线协议(WiFi、ZigBee、BLE等)、通讯接口协议(UART、SPI、I2C等)......这里面所涉及到的内容比天线或电源工程师所需要涉猎的内容要多的多,并且关于软硬件的内容,通常还是交织在一起的。
举个例子,有一款板子喇叭播不出声音,那么这里面原因可能是硬件增益电阻没配置好,也有可能是软件增益值没配好,甚至是否软件声学左右通道没配置好,到底是没有声音,还是声音小到你听不到。涉及这部分功能的软硬件,其中就包括功放电路的设计、I2S通讯、喇叭设计选型等。
我遇见过硬件理论知识很扎实的软件高手,也遇见过软件认知很宽泛的硬件高手,甚至曾经在一场硬件岗位面试中,面试官问了很多关于软件时序逻辑、算法架构的很多问题。但是回归到具体的岗位当中,一家公司还是会把嵌入式分为软件、硬件岗位,因为当涉及到的知识块很多时,为了确保能在细分的知识块做到开发精湛而且开发速度还很快,那么拆分开发工作边界,统筹好软硬件的工作才能让公司的整体开发效率更高。因此我在工作中也挺害怕碰到这么一类人,他们软硬件都有过涉猎,但都是基于表层的认知,所谓表层的认知,打个比方就是知道使用330uf/6.3V的电容,但是并不知道到底是用铝电解电容好还是用固态电容好,再比如,能够写出一个按键开关的程序,但是完全没有“高内聚低耦合”的理念。对于大部分的人来讲,假定一个人每天工作8h,那么你软硬件的开发工作都去承担的时候,在庞大的知识领域中,你在细分领域的积累怎么和一个每天8h都干软件或者硬件的工程师相比?且不论硬件岗位还可以细分电源、基带、天线、射频等,软件岗位还可以细分驱动、应用、网关等。而前文提到的,“硬件理论很扎实的软件高手”、“软件认知很宽泛的硬件高手”,这些人会有一个共同的特征,那就是他们首先要有一个细分领域之长,在这个细分领域做到精湛,具备纵向的深度之后,其他领域知识的认知就决定着他的知识广度。伴随着项目实战的增加,纵向的技能让他的解决问题的认知更加扎实,而横向的技能让其解决问题有着更多的思维。
综上所述,软硬件的知识对于解决问题来说都是必备的技能,而且这两种技能你掌握越多,对于解决问题越有帮助。
当然,你至少要有一项在细分领域中能称得上精湛的技能,而不是泛泛而谈。
从两个维度上讲:对于职业岗位谋生,一技之长让你能够在众多的竞争者中脱颖而出;对于实际工作面对问题的时候,软硬件知识的全面性让你能更加系统地看待问题、解决问题