《嵌入式软件成长之路》阅读感悟

已记不清具体是什么时候接触到小马儿的博客了,依稀只记得刚接触时他的书籍已经写了好几篇了。阅读后,我有种相见恨晚的感觉。市面上对嵌入式开发的经验类书籍还是蛮少的,心中有种如获至宝的感觉,于是关注了他的公众号,等待着每周的更新。从每篇文章中,我或多或少能有所收获。由于领域不同,有些地方实在看不懂。零零散散的读完了,由于时间跨度较大,看到后面时经常已经忘记了前面。恰逢这段时间没有项目,比较清闲,于是再一次重读了这本书。

作者小马儿在工业领域有二十多年的经验,经由这段时间的不断摸索,构建出了一套全新的工业嵌入式产品研发理念。这套理念小巧接地气,适合小规模的研发团队。其背后还隐含了一个人从入职到成长为架构师的全过程。小马儿把它总结为6个步骤:看到——快速入职——审核与团队——接口抽象——可复用架构——质量和团队。

看到
作者介绍了从东芝G2项目组“看到”的研发流程。

“ 我看到了一种有序的工作模式,平时看似散沙,但一旦有具体的项目任务,又能快速的聚集起来,成功的破解了很多人员混乱的困局。”

由于有了东芝G2项目组的一段经历,作者心中埋下了一颗种子。经由后续一系列的折腾,最终成长出一套小团队的工业嵌入式产品研发理念。同样的,让新人从整体上“看到”产品的优秀架构思想,有助于在他们心中买下一颗种子,也有助于全局性指导后期的工作。

快速入职
企业里通常采取师傅带徒弟的培训模式。这个模式通常是这样的:新人入职后,师傅给一堆产品资料让新人啃;啃过一段时间后,师傅有空时,交给新人一个产品或任务,让其折腾;新人通常举步维艰,更多者则是一路死磕,甚少主动请教;最终,新人入不了岗,老人脱不了身。

新人入职难,有没有好的应对策略呢?

“新人培训是架构师的基本职责之一,甚至需要从架构的角度去考虑,而新人入职是培训体系的起点。”

由于学校和职场的差别,无法对新人进行逐项学习,而是要采取快速入门的方法,因此,架构师需要具备提炼出产品所需的最小技能集,并搭建最小入职培训体系的能力。在快速入门后,架构师有责任和义务尽快给新人安排相关的工作。这样知行合一,新人就可以有序的参与到工作中来。

经过多年的摸索,作者总结了新人入职的“速成”策略:

  1. 快速入门策略: 需要老人依据产品特点, 构建知识体系和最小必要知识,并指导陪伴新人上路。
  2. 为用而学策略:因为需要用起来,才有必要开始快速入门学习, 本末不可倒置。
  3. 陪伴策略: 快速入门后的不熟悉阶段,需要老人的鼓励和陪伴,审核机制是这一阶段最佳工具。
  4. 构建伙伴关系:大家陪着产品一起成长, 做中学,学中做, 知识库是这一阶段的法宝。
  5. 图形化架构设计:让大家完成从知识思维到产品思维的跨越, 能理解自己的工作在团队中的位置,此时才算真正的入职。

审核与团队
编程规范是一系列形式化的工具,为便于代码审核服务。只有团队成员都按照统一的编程规范进行编程,代码审核才能高效执行。

作者总结了一套简介的编程规范,简称“四条半编程规范”。
1.云深不知处——文件全局观;
2.灭绝裹脚布——编码细节观;
3.代码如天书——约定注释;
4.相见不相识——统一命名;
5.懒人大法——借助工具。

符合编程规范的代码只是看起来比较舒服,并不一定就是优秀的代码。硬件的check list方法,在软件上同样可以使用。将check list作为代码评审的依据以及作为团队的知识库进行积累具有重大意义。借由check list的建立及维护,完成从个人到团队的成长。

接口抽象
前面提到的“新人上不了手,老人脱不开身”问题,最主要有两个原因:
1. 程序本身强耦合,从而增加了软件的复杂度;
2. 任务紧急,hack大法横飞,导致程序在修修补补中凌乱了。

解决这个问题的策略有:
1. 持续积累模块化技巧;
2. 将模块接口作为审核标的物,借助团队和流程的力量提升模块抽象层的质量。

书中列举了许多在工控领域使用的方法,大家可以在书上仔细阅读,此处不做叙述。

可复用架构
模块设计是细节,产品框架是全局。要想从模块升级到架构,需要具备整体产品化思维。
“架构设计是活的,是会随着产品需求迭代成长的,而绝大部分优秀的设计理念都是在迭代过程中演化生长出来的。”

  1. 严格层次化分层
    在产品构建的过程中,人员专业方向和能力水平是最基本的约束条件。破解人员约束的最佳策略就是代码分层。代码分层同时也有助于新老员工间的分工,老员工负责底层技术含量较高的编码工作,新员工负责上层业务流。作者的团队提出了严格层次化模型的概念。也就是说,仅允许上层直接调用下层,但不允许反方向调用。在下层需要掉用上层时,使用回调函数的机制进行解决。

  2. 元件化模型
    通过严格层次化分层,完成了软件各层之间的隔离。而同一层内的软件模块则容易出现耦合。

  3. 分布式模型
    作者介绍了基于CAN总线搭建起来的分布式网络。

  4. 静态组织架构
    “分层分块分布”的静态组织架构的一个核心点时平台化研发,另一个是高复用。

  5. 动态执行架构
    这一节里边,作者介绍了前后台系统,双环前后台系统,限时前后台系统,中断虚拟任务,强实时OS,增强型中断虚拟任务。

“在我心目中,架构是活的,是长出来的,别人的架构你很难直接拿走。但看到是一种力量,看到别人能迭代出一套优秀的架构,我们大脑中的镜像神经元就会开始努力工作,帮助我们去“体验”那种经历。”

质量和团队
“ 做产品容易, 但做出好产品难, 职场上很多工程师大部分时间不是在查找各种 bug, 就是在解决现场工程问题。 遗憾的是,产品质量问题的解药从来不是大家想当然的测试,而是管理,需要有效的团队协作才能真正提升产品质量。戴明博士的全面质量管理体系,将质量、管理和团队完美融合在了一起,成为我们跨越这一步很好的切入点。”

质量不应该和产品分离,它要融入到产品研发的整个过程中。戴明博士提出,“提升产品质量,关键还是要靠人,质量应该由人产生,为人服务”。

猜你喜欢

转载自blog.csdn.net/weixin_37366441/article/details/121616172