前文提及,直面真实可卖的产品,才会品味到真正的架构设计。真实可卖的产品有一个很重要的特点:有很多约束条件,其中最主要的一项约束条件就是团队人员约束。
作为项目经理,我做产品时肯定希望自己手下人才济济,能人辈出,但现实经常打脸,能给我一两名稍微有点经验的就不错了,其他大多都是新招聘的,很多甚至都没写过几行代码,(꒦_꒦) 。一个公司不可能将优秀的人员都集中到一个项目组,不仅不经济,而且会带来诸多管理问题。现实情况约束下,大多数项目组构成都是一个牛人带着一群新手。
团队能力约束仅仅是一方面,还有专业水平的约束。真实可卖的产品一般都跨越多个专业方向,如本书描述的两款微机保护产品,不仅需要计算机程序员,而且需要电力专业工程师。电力工程师需要编写保护模块的程序,但我们不能指望他们也拥有丰富的编程经验。
我认为,真实世界,人员专业方向和能力水平是产品构建时最基本约束条件。
◇◇◇
职场人员的成长需要时间,不可能将所有人员培养成功了在做产品,破解人员约束条件的最佳策略就是代码分层。
在前面的一些示例代码中,我多次描述过互斥锁机制。在嵌入式系统中,互斥锁是一个很重要的技术难点,如果不认真对待,最终产品经常会出现一些莫名其妙的问题,隐晦且难以复现。嵌入式系统中的互斥锁种类繁多,如中断和主程序的互斥、各任务之间的互斥、各分布式系统之间的互斥等,这导致互斥锁代码不仅不容易编写,而且不容易调试,让新人头疼。
面对互斥锁,我们团队的新人大概会经历如下三个阶段。
第一阶段:无知。新人一开始根本意识不到竟然还需要考虑互斥锁,无知者无畏,直到有一天,产品测试时被各种诡异现象持续打脸,然后才如梦初醒,迈入下一阶段。
第二阶段:害怕。此时新人已经知道需要认真对待互斥锁机制了,但会感觉几乎到处都存在互斥,举步维艰,不知该如何下手。
第三阶段:熟练。掌握了常见的互斥机制,熟悉何种情况下该使用哪种策略最佳,渐入掌控随心境界。
经过多年努力,我们团队的知识库已总结出各种情况下的最佳互斥锁策略