嵌入式软件
多年前,胡适先生发表过一篇文章《多研究些问题,少谈些主义》,大意是空谈误国,与其做些主义的争论,不如多干点实事云云。据说,文章甫出,便迎来骂声一片,足见国人对“主义”情有独钟,绝非个别文人两句话就可回转心意的。
被小资情调酥软了骨头的胡适君当然理解不了“主义”的力量。在之后波澜壮阔的几十年里,走长征,过草地,艰苦抗战,靠着小米加步枪推翻压在旧中国头顶的三座大山,无一不是在共产主义的光辉指引下完成的惊天壮举。
主义的力量是无穷的。今天,我想谈一谈嵌入式软件设计这项同样伟大光辉正确的事业中的主义。
01
电子行业发展近百年,产品形式多样、高度灵活,又可随意定制,在这混乱与嘈杂中,各大标准组织相继成立门户,制定军规。多年下来,硬件设计早已有章可循,条条框框有板有眼,软件设计亦逐渐规范,标准林立。照理说,对于同一个要求,只要按规范和标准来,大家做出的东西就像异父异母的亲兄弟一样,令人免不得生出东哥一般的脸盲症来。
但是,电子工程师偏偏是一个不甘于寂寞的群体。荷尔蒙在体内奔腾,内啡肽在脑子里游走,不在产品上折腾一番,怎么告慰这“无处安放的青春”?
于是乎我们看到,尽管是同样功能的东西,设计人员们把它搞得形式多样,真可谓龙生九子,个个不同。而且,相比较于硬件开发,软件设计更加个性化,折腾空间更大。于是乎,在这令人眼花缭乱的设计背后,有一个直击工程师灵魂的问题——兄台是遵循什么样的设计理念开发产品的?
设计理念是一种让菜鸟们摸不到头脑的存在,但是大佬们说,它实实在在地贯穿于产品的整个设计过程,决定了所设计产品的呈现方式、使用方式、便利性、稳定性、质量等一系列要素。
据说,做出过爆品的大公司都特别讲究设计理念问题,对于某个面向特定行业特定人群的特定产品,设计理念往往对产品的成败起着决定性的作用。坊间经常流传大公司内部高管之间狗血般的内斗,但是又据说,有些人身攻击和对立完全是技术层面,是在产品设计理念上存在不可调和的冲突延伸而来的斗争。
设计理念既然如此重要,对于人微言轻、处于嵌入式行业最前线的设计人员的我们,同样要贯彻正确的设计理念来指导我们的设计工作。
02
软件设计非常灵活,几句代码敲下去,功能就“阿里阿里巴巴”变身了,这种极强的可变性导致它很容易出质量问题。在建筑领域有个口号说‘质量问题重于泰山’,这样的话同样适用于航空航天、军工、医疗电子、汽车电子等安全攸关的领域。
远的就不说了,我就问问诸君,您还敢坐波音的飞机吗?
可是,软件质量问题又有着太多不可控的因素,设计人员的身体状况、心情状态、编码习惯、编码水平、工作态度、思维方式、创造能力甚至人生观、价值观、世界观等等看似与软件设计无关的要素都会对软件最终的实现起到或多或少的影响。如此这般灵活,使得软件质量问题成为业界最为关注的因素。
目前在软件质量的控制上,有管理制度的支撑、工具的支持、过程控制的约束,这些都对改进软件质量起到了一定的作用。但是,软件设计更多的时候是一项依赖于设计人员自身禀赋天性的技能,而不是一种纯粹的科学,任何外在的支持,其作用都无法代替软件设计者自身的技能和专业素养。
来源:千库网
从技术需求分析出发,到架构的选定、模块的划分,到代码的最终呈现,不同专业水准的设计人员,其设计过程及最终代码层面的实现都有着显著的差别,这些也会对后续的维护、升级产生深远的影响。
故而,在软件设计的整个过程中,秉持正确的设计理念对软件设计起着决定性的作用,它不仅对当前设计过程的推进和控制起到正向作用,还会简化产品在整个生命周期内的维护与升级工作。
OK,设计理念很重要,那么,到底要在嵌入式软件设计中遵循什么样的设计理念,或者说主义呢?
03
我今天想向大家掰扯掰扯的设计理念就是大家都听说过,但是可能没有认真深入研究过的“极简主义”。
极简主义是建筑设计领域的一种设计理念和美学概念,它强调摒弃一切无用的细节,追求最纯粹最本真的呈现,已经应用到建筑设计、工业品设计、服装设计、家居设计等领域中,而在软件设计领域,贯彻极简主义的设计理念同样会对软件开发过程起到巨大的推动作用。
下面我就不惜眉毛,从需求分析、设计方案两个方面给大家剖析一下极简主义的作用。
[需求分析]
把复杂变简单
需求分析是软件设计的重头戏,在审视所设计产品的功能性能需求时,在繁杂多样的需求规格说明书中迅速把握和区分产品核心功能和细枝末节,对于产品的深入理解及设计方案的选择制定有着至关重要的指导意义。
在需求分析过程中坚持极简主义的设计理念,会让我们厘清思路,迅速把握产品基本架构、功能的基本剖面,避免陷入纷繁条目的泥淖,犯下不识庐山真面目的错误。
通过化繁为简,设计人员可以把主要精力牢牢关注在核心要素上,在有限的人力物力资源下,为必要的核心要素建立严格的性能指标和测试标准,避免为了一些细枝末节的小功能,而在主要功能、基本要素上做出设计上的妥协。
[设计方案]
最简单的实现方式更容易贴近功能的本质
条条大路通罗马,但是两点之间,直线最短。
在多种设计方案的权衡和选择上坚持极简主义,就是在功能和实现之间“走直线”,便是以结果为导向,始终追求最高效、最简洁的方法。体现在软件设计中,便是贯彻最简原则,秉持“若无必要,勿增实体”的奥卡姆剃刀原则,挥舞锋利的奥卡姆剃刀,化繁为简,寻求最简单的实现方式,同时从极简中寻求可控,增强对软件的掌控感。
它背后的逻辑是:对所实现功能的理解越深刻,实现方式越简单,设计方案与功能逻辑的距离越短,也更能体现功能的内在逻辑。随意的、通常也是复杂的实现会占用我们过多的精力,把眼界限制在与功能逻辑有相当距离的设计实现上,从而把问题的本质拉远、掩盖,把本来简单清晰的东西搞得复杂起来,使人迷失在逻辑的迷宫里。
但是,把简单变复杂很容易,把复杂变简单很困难!
舍繁就简,不仅考验设计者的专业功底,更考验设计者的发散思维和创造能力。它需要我们深入理解功能的含义、条件、内部细节、上下文,在初次设计的基础上反复斟酌,花心思考虑怎样以比当前简单的方式实现。
软件设计从来就不是一蹴而就的,在迈向其最终实现的路途中,要充满耐心地一次次迭代、重构和优化,从复杂而模糊的代码泥淖中,找到前行的路。以清晰的软件结构、与逻辑相近的设计语言描述,寻求最简的功能实现。
苦心人天不负,三千越甲可吞吴!极简主义带来的回报同样是丰厚的,首先它会让软件质量更好控制,因为复杂的东西会扩散风险,只有简单的东西才能做到风险可控。其次,前人栽树后人乘凉,它会使得之后的维护工作更加简单易行,从而助你早日摆脱996。
后 记
极简主义不是片面追求简单、偷工减料,相反,它要求在特定的需求下、具体的设计中,将性能做到极致、实现做到最简,这种对性能的追求、对最简实现方式的苛求对设计工作提出了更高的要求。
极简主义在设计实践中的体现及应用不是宽泛的,而是非常具体而微的,它体现在你的软件结构设计、模块划分和接口的定义、每个函数的实现、每条语句的权衡甚至每个变量的选择上。在孜孜不倦得对代码进行优化再优化、重构再重构的过程中,极简主义帮助设计者更加洞察产品,更加快速得由必然王国迈向软件设计的自由王国。
↓↓↓↓点击阅读原文,查看更多新闻