硬件工程师编程基本功一般都比较扎实,毕竟都有几年的c或c++的基础,有的甚至还有linux下编程的经验,所以说编码不是太大的问题,他们头疼的是软件的套路太多,尤其是这么架构那么架构的,比较头大。
话说硬件编码中没有那么多的套路,硬件代码一般都是非常简洁、高效的,原因是要伺候底层硬件,不得不简化代码,提高效率。但是软件尤其是java,套路比较多,架构体系复杂,硬件工程师一般不太适应,但是软件工程师却驾轻就熟。
举个简单的例子,有几年经验的软件工程师要是和人聊天的时候,口里不冒出几个面向对象或是层次构架的,你都没法在单位混了。硬件工程师基本上不用对象,为什么?太浪费资源,而且编译器也不支持,最多让你支持个结构就算对得起了。
话又说回来,那硬件工程师学习软件,要是不了解面向对象还有软件的构架、类库什么的,也没法提高编码效率,因为没有哪个软件工程师还去用上个世纪的编码方式去写一个一个的基本的通用函数了。
那么构架是什么?实际上我们软件和硬件差不多,只是一个是硬件体系,一个是软件体系而已,硬件是模块化的,软件是对象化的,再往下说一层,都是封装,硬件实际上是非常良好的封装,每个模块之间做到配合良好而且互不影响,这就是非常不错的封装,软件类似,一个软件系统,可以分为几个大层次,每个层次又分为若干子模块或子系统,每个模块又分子模块,子模块又分基础类、业务类、函数和组件。
还是举一个比较实际的例子来说吧。
现在要做一个智能玩具车管理系统,硬件层次就不说了,主要是玩具车配上无线通信和物联网定位组件。关键的是软件后台。
软件后台实际上就是基于B/S架构的管理系统,就是基于web的系统。
首先,这个系统需要一个小网站,用户能够登录;
其次,这个系统要能管理用户,要有权限管理吧,如果老板雇佣了一个运营人员,那还得分个角色,老板啥都能看,运营人员可不能管钱,钱得老板娘管。
再次,需要一个小车控制子系统吧,控制小车启动、停止等等;
最后,还需要一个财务子系统吧,只能老板娘能登录,老板都不行。
上面说的,软件里叫做系统结构。如果更细一点,比如详细介绍每个子系统的功能,那就叫系统功能结构。
单纯有结构还不行啊,还需要介绍单元之间的关系,这就叫业务流程,实际上就是用流程图表示出来,硬件工程师也经常画这种流程图,只不过这里说的是人的动作,而不是单片机的动作。
仅仅有软件还不行啊,数据得保存,就像单片机一样,要是没有FLASH,程序搁哪儿?没有EEPROM,数据存哪儿?软件也一样,程序得搁在服务器上,所以介绍一下服务器的参数;运行数据搁在数据库里,比如说mysql,所以要介绍一下mysql。
然后还得介绍一下程序实现吧?前端打算用什么语言?vue?easyui?nodejs?后端用什么语言?java?php?c#?或者是python。
这些都交代了,还要交代一下我这个软件是不是还用了一些组件和第三方的接口,比如说小程序接口、支付接口、报表组件等等。当然还有我们硬件工程师经常用到的mqtt消息协议或者其他的物联网协议。
以上就是软件架构包括的基本的内容。的确是有些啰嗦,但是所有系统都差不多,记住一个,其他的就如法炮制。
1.jpg 2.jpg