内容简介:关于软件工程师和硬件工程师的问题,我们先看一张图:前几天,我的一个朋友问我:你觉得软件工程师和硬件工程师,哪一个更有发展前景?说实在的,他把我问住了。但是我是得以我多年的经验来和大家聊聊这个问题,只是个人的一点拙见,有问题我们可以一起沟通下。软件/硬件工程师发展前景对比:
关于软件工程师和硬件工程师的问题,我们先看一张图:
前几天,我的一个朋友问我:你觉得软件工程师和硬件工程师,哪一个更有发展前景?说实在的,他把我问住了。但是我是得以我多年的经验来和大家聊聊这个问题,只是个人的一点拙见,有问题我们可以一起沟通下。
软件/硬件工程师发展前景对比:
就我所了解的,在现在以及可预见的未来,软件工程师的需求绝对是碾压硬件工程师的。也就是说,招软件工程师的职位比硬件工程师的职位要多的多,而且软件工程师找工作上来说会比硬件工程师更容易。
第一点从企业的角度来讲讲。 我个人认为造成这个差异的原因,第一个是基本上所有的公司,从初创公司到全球百强,都有对软件工程师的需求。现在哪个公司不需要几个 码农 来开发app,或者做个web。但是做硬件这种工作并不是所有公司会去做的。而且哪怕是硬件公司,也需要大量的软件工程师来支持硬件前端工作。
第二点我觉得要归功于现在的创业潮。 不管在美国在中国互联网创业都是趋势,但是可以说绝大部分的初创互联网公司做的都是软件方向。有个点子,有点技术,找几个合伙人抱着电脑就能开干了。但是初创公司要专注做硬件开发就比较难了,因为成立设计硬件公司的门槛和起步开销比较大。所以这也导致大部分初创公司以互联网为主,能做的了硬件设计的公司基本上都是处于垄断地位的大企业。
第三个很重要的原因就是硬件设计在现在来看已经是相对成熟的技术, 前一阵子全球大牌的硬件公司才裁了不少人,intel更是裁掉了接近20%的硬件工程师。但是互联网热从90年代开始到现在热头还没过,而且未来诸多产业如人工智能、机器学习、图像识别、大数据都才刚起步,所以还有一定的上升空间。
但是这并不意味着会编程就肯定找得到工作,也不意味着硬件产业就会低迷下去。不管软件工程师和硬件工程师有多少差异,他们都在通过自己努力在一点一点改变着这个世界。也希望自己能在若干年之后,还能自豪的称自己为程序员,一个略懂硬件的码农。
说完了两者的发展前景,下面我们再来深入探讨下软件工程师和硬件公式思维的不同,互相了解,知己知彼才能更好的沟通和合作。
1、软件工程师:我今天要完成xx行代码的重构
硬件工程师:这几个器件能不改就不改,实在不行用独家供货
软件的灵活性很高,可以根据需要进行修改。
硬件不一样,有时候动一根线,或者layout的时候动了一点位置,都可能导致信号产生比较大的噪声或者异常。
2、软件工程师:有一个新的需求,我们要考虑一下实现方案
硬件工程师:有一个新的需求,我们看能不能在原来的方案上改一改
软件行业日新月异,有各种各样的语言、框架和实现方式,同时,软件具有灵活性,需求往往是变化多端的。
硬件的变化算是比较小的,虽性能在不断提高,但更新的速度和更新的范围往往是较小的。经常用着100年前的原理,加上20年前的技术,改一改实现新的需求。
3、软件工程师:It works!! 好吧,就这样搞定吧。
硬件工程师:换了一个电容就可以了,不科学啊,我得找下是什么原因
硬件工程师比较倾向于“根因分析”。软件工程师觉得问题解决了就是OK的,对于后续的变化和需求,有时间再分析。这并不能显现责任心的问题,一是因为再次遇到问题的代价不一样,二是因为需要管理的复杂度。
硬件面对的复杂度从某种程度上说是有限的,器件就那么几个,顺藤摸瓜就行了,大不了每个器件换一遍。软件面对的复杂度相对较大,如果涉及到操作系统甚至还需要hack操作系统等较为复杂的问题,就会显得心有余而力不足。
4、软件工程师:我的代码是一颗树,我要每天去耕耘
硬件工程师:我的方案是一个平台,以后的需求就在这个平台上面改一下就好了
因为两者的复杂度和需求度,软件的平台化往往只是个开始,就像是栽下了一颗树苗,后面的路还很长。这其中发挥比较重要作用的往往是软件工程师本身,而不是硬盘里面的那些可能不成熟的代码。
5、软件工程师:项目节点要到了,实在不行我先发布一个beta版本
硬件工程师:项目节点要到了,实在不行只能延期了,争取后面不再修改
互联网行业软件升级速度很快,有很多产品就一直处在beta版本,有的甚至生命周期都结束了,都还挂着beta的标签。升级成本和开发周期的不一样,使得双方面对项目时间点的态度会有所不同。
6、软件工程师:在我那边还好好的,怎么到你这边就不行了
硬件工程师:这个现象也是可以解释的,可能是米勒电容/寄生电感/xxx的影响
程序运行起来之后一般都是很老实的,CPU 忠实的运行着每一条指令,虽然在它的世界里面只有0和1,但绝不会出现1+1不等于2的情况。
硬件系统不一样,一样的布局布线,也有可能因为器件之间的微小差异导致运行的问题,而器件本身不是完全理想的,经常会出现1+1=2.1的情况。
7、软件工程师:再安排一次检视,想想看还有没有什么场景可能导致问题
硬件工程师:再多做几个模块,确保方案的可靠性
测试不管对软件和硬件来说都是有效的可靠性保障,但对于硬件和软件而言理念却有不同。硬件测试对重复要求较高,因此对同一个模块的反复测试,或者同一种场景的反复测试是很常见的。
而软件系统由于其运行的一致性,尽量去覆盖每一种场景,甚至每一行代码。测试覆盖不到的,就使用人海战术,通过人每一行代码的检视,去发现问题。
总结
软件和硬件的联合设计在过去二十多年,一直是产业界关注的重点。从技术角度看,这种结合能够带来更好的性能提升,更低的功率损耗。但随之而来也会带来新的问题,那就是很难去衡量。
在很多的芯片公司,软件工程师是远超过硬件工程师的,他们对于通过购买什么类型的 工具 去协助改善功耗、性能和成本有重点的关注和见解。
最终的目标是降低时间和功耗。而最好的效果就是当你从Fab里把硬件拿回来的时候,所有的驱动就已经都内置好了。所以说,软件建模机会来了。
欢迎加入 51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 前端工程师如何成为全栈工程师?
- 从乙方工程师转为甲方工程师的一些思考
- Facebook工程师:从工程角度,系统掌握Python
- 数据科学家、机器学习工程师与普通的软件工程师有什么不同
- 论算法工程师首先是个工程师之深度学习在排序应用踩坑总结
- 普通工程师简史
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。