【转】硬件VS软件
0赞本人本科所在的学院只有两个专业:软件工程,微电子学。平时接触的人不是搞软件就是搞硬件,所学的课程也是软硬皆有,自己也面临专业方向软件还是硬件的选择,所以对软件和硬件的关系有一些自己的思考。
软件和硬件的本质都是为了解决问题,我今天只想从抽象层次上来分析,因为在我看来其本质的区别只是抽象层次不同,这样伴随的解决问题的效率和成本就不同了。“一一对应”也就是数学里的映射真是一种奇妙而伟大的思想,因为“一一对应”生活中的很多事物我们可以抽象成符号,很多问题我们可以找到相似点,用一些固定的方法去解决。我们为了让我们的思路抽象成一条定型的方略去解决问题,数学这门科学应运而生,当解决问题的方法抽象到数学这个层次,数学家不用去接触具体的问题了,只需要去研究这些定型的方略,提出更好的理论和方法,因为分工已经出现。哲学家说:“不学数学的人不能算是一个健全的人”,以前我一直认为是这样,但是万法归一,中国古代儒家和道家不也是给人规定了很多解决问题的准则吗?
将生活中的一个简单问题用方程来描述,问题的解决方案抽象成方程的未知数。这个时候数学家不用去管具体的问题了,他们有定型的方略来解这个方程。但是当方程复杂到用人的计算能力需要几十年甚至有限的时间根本无法解决时,电子计算机出现了。现在的软件工程师可以用几行代码去解决这个问题,硬件工程师可以设计一款专用的芯片来解决这个问题但是一般不会这样做,因为划不来,但是如果限制你在一个极短的有限时间解决这个问题时,硬件就变得很有必要了。
其实软件的解决方案最终也是在硬件上实现的,当抽象层次很高了,形成了一套能跟人交互的编程语言准则,这时人只需将自己解决问题的思路用这个准则描述出来,而不需要去管底层语言被解析成0、1信号后通过电路硬件的执行过程。CPU是一款通用的集成电路芯片,冯诺依曼体系结构是一个很好的执行程序的平台,当这个平台被搭建好后,软件工程师可以自由的通过既定的语言准则实现自己解决问题的思路。
现在已经相对较少专门设计一款芯片去解决一个问题了,IC设计已慢慢转向片上系统(SOC)的解决方案了。智能个人终端的迅速发展,电子产品的功能需求越来越强大,在一个系统平台上软件解决方案所占的比例越来越大,所以现在业界嵌入式软件工程师很火。如果要说魅族M8和iphone的差别,我认为最大的差别在软件上,应为它们用的处理器都是第三方提供的。
所以现在IT领域对软件工程师的需求远大于硬件,因为抽象层次的不同,硬件工程师和软件工程师的培养周期也相差很大。模拟IC和数字IC也同样如此,现在数字IC的设计方法已经抽象到了一个很高的层次,几乎所有的设计都是从硬件描述语言(HDL)开始的,HDL已接近高级语言,借助EDA工具大大简化了数字IC的设计过程。DSP很火,但是我相信所有DSP的解决方案,运用纯粹的模拟电路也能解决,只是这样的成本加上工艺对模拟的限制很不划算。模拟电路的设计是从晶体管器件的搭建开始的,它的抽象层次更低,培养周期更长,但是执行效率更高,CPU、memory这类高端的芯片不是更多的采用类似于模拟IC设计的全定制设计方法解决的吗?
转自结缘Analog的博客