软件设计面对的环境日趋复杂。对这种日趋复杂、难以驾驭的状况,很多软件人希望能有所改善。而标准化对提升架构设计效率和提高软件开发成功率很有裨益。本文探讨架构演进的另一个趋势,就是行业级标准化。
软件设计面对的环境日趋复杂。背后原因不仅有技术发展本身带来的复杂性,而且也有规模增大带来的复杂性。
从最初面向小型群体、具体领域的程序设计,到面向上亿用户、交叉需求的生态构建,软件设计似乎走上一条以复杂应对复杂的发展之路。我们看到,从方法到概念都日趋复杂。
一开始,很多软件的早期版本较为清晰,后来逐渐走向“大泥球”模式。最终,它们“活成了我们最讨厌的样子”。
“技术债务”成为软件生命周期中的常见问题,所以,对软件设计方法尤其是架构方法的探索始终未停。这些探索与软件工程方法的演进互相作用。
对这种日趋复杂、难以驾驭的状况,很多软件人希望能有所改善。众所周知,标准化对提升架构设计效率和提高软件开发成功率很有裨益。在架构方法发展的过程中,关于这个方面的标准化努力也一直在缓慢推进。这个标准并非指软件开发标准,比如国内的GB8567-88,而是指能直接应用于具体开发的设计参考,比如行业级标准化模型。
本文探讨架构演进的另一个趋势,就是行业级标准化。
1
为何行业级标准化发展缓慢?
行业级标准化之所以较难达成,是因为背后有许多复杂因素。
首先,这是一项带有公益性质的工作。一旦做成功,大家都受益,但推动者的付出与其收益之间不成比例,要靠一定的“奉献”精神支撑。
其次,标准达成需要统一众多观点。而这种统一并非可以强制达成,标准本身的建立过程就会比较缓慢。时间一久,甚至不了了之。
最后,即便建立标准,更新维护的主体通常也难以确定和维持,“保鲜”难度大。
如此困难之事,为何今日应该重提?这又涉及另外两个原因,而它们却是今后软件或者数字化的发展方向。
1.软件在生产、生活中的基础性地位还不够
我们现在常说,软件、互联网改变了人类社会,但实际上,并非所有行业和生活场景都充分线上化了。事实是,大部分行业中,软件的基础性地位还没有达到人们通过宣传所“认为”的水平,并且,软件行业总产值也没在GDP中有很高占比。
这表明,软件还未像工业制成品那样深入到社会的各个角落,软件生产也没像工业生产那样成为广泛的社会性生产。
根据埃文斯数据公司(EvansDataCorporation)2019年最新的统计数据显示,2018年全球共有2300万软件开发人员;到2019年底,这个数字将达到2640万,而到2023年,这个数字是2770万。其中,它对软件开发人员的定义很广泛,甚至包括技术作家。
与之相比,2018年,世界各国青壮年和逐渐进入的劳动年龄段(15至64岁)人口总数约为49.6亿(数据来源于互联网)。也就是说,无论是从行业规模还是劳动人口的数量来讲,软件行业仍处在上升阶段,还没有成为一个像农业或者工业那样可作为时代标志的行业,数字经济仍在发展初期。
从这种状况,我们可以推想,多数对于行业级标准化的真实“焦虑”可能只存在于少数软件从业者心里,还没真正上升为企业“焦虑”,更未成为行业“焦虑”。
所以,在开发中,尽管我们在项目管理中反复强调一些项目级的标准化要求,但这些要求没有真正走出项目以外,没有真正成为企业级、行业级的要求,所以行业级标准化的进程也必然缓慢。
但是,数字经济的发展速度正在加快,不少人认同未来的企业可能都是科技企业。软件会成为主要的生产工具,这也许会改变经济数据的统计口径,从而让数字经济规模得到更准确的计量。
随着这种发展,即便出于让工具更易用、更易得的角度,行业级标准化也应得到更大重视。
企业之所以要为软件付出更大代价,很大一部分原因就是软件无法像真正的工业制品一样批量化制作与获得,以及提供售后,甚至是其中无需太个性化的部分。当企业、行业越来越依赖于软件时,软件中的主要部分需要被标准化和真正量产。
当过度强调软件使用和软件生产中的个性化因素,这会让软件行业面对与工业化早期类似的问题,尤其是在“B”端,过度的“自由”可能会带来“不自由”。这些过度之处对“创新”的意义也许被夸大。
工业标准化没有让工业变得死板和缺乏创新,反而减少浪费,让创新能更好地分层次进行,比如设计创新、零件创新、材质创新和集成创新等,而无需经常从头开始。软件行业也应该通过行业级标准化减少“创新浪费”,这样才有可能让软件走出现在这种“大规模小团队手工作坊”的阶段。所谓的AI设计,需要的不也正是基础性的标准化吗?
也许满足标准化,我们才能把精力花在更有价值的创新上,而不是整天修改别人也改过的BUG,成天担心踩别人踩过的坑。
标准化是工业成熟的体现,也是其在整个社会生产中基础性地位增强的必然结果,这也是软件未来必须要走的路。
2.架构设计的开放性不足
在发展的大部分时间中,软件设计更多处理的是封闭边界内的封闭问题域。当处理复杂问题时,软件设计者的思考习惯是尽可能将复杂问题拆分成更小的独立问题。处理“封闭”空间会令软件设计者感到“舒适”,而“开放”空间则容易让软件设计者失去“焦点”,也会带来更大的知识负担。
处理好边界是软件设计的原则之一,不定义好边界的软件很可能无法交付。这种方式本身无可厚非,其隐含的问题在于,多数软件设计缺乏企业间的横向联通和行业级的定义。很多承载行业统一概念的行业术语虽然在设计过程中被软件人员学习和思考,但并没有发挥其在标准化方面应有的作用,“封闭”也成了一个一个软件实例的“封闭”。
现有的各类技术标准多数无法帮软件形成标准化的设计结果,它们更多是对工艺和技术的要求。
工业在发展早期,企业间的标准化和连通性也不强,一度出现囊括生产链条大部分环节的超大型企业集团。但是,随着精细化分工的发展,企业最终放弃这种不经济的“全都干”模式,采用供应链、生态圈模式。
标准化在提升企业协作上发挥至关重要的作用。
早在1926年,拥有国家级标准化组织的25个国家在国际上成立国家标准化协会国际联合会(ISA),由此,标准化活动从企业行为演进为国家管理,进而成为全球事业,活动范围从机电行业扩展到各行各业。标准化扩散到全球经济的的各个领域,从保障互换性的手段,发展成保障资源合理配置、降低贸易壁垒和提高生产力的重要手段。
软件行业现在也有些类似工业早期的状况,优秀开发资源的集中,从上到下的完整、个性化开发比比皆是。
此外,企业习惯于“封闭”设计成果,因为软件一旦跟核心生产领域接触,就自然地牵连上各类“商业秘密”,导致成果“封闭”,甚至包括设计过程中产生的模型资产,这也是大家需要重复建设的原因之一。
综上所述,软件开发中,思考方式、设计范围、设计成果方面都具有不同程度的“封闭”倾向。当然,这其中有其处理现实问题方面的必要性,但是,这也导致架构在设计标准和视野上不够开放,标准化发展缓慢。
现在,随着互联网技术对企业连接能力的进一步加强,生态圈构建从业务层面将下沉到软件层面,要求软件层面更多地支持联通和协同,这不仅仅是对API的关注,还需要在架构设计方面有更多的全局视野和开放性。各类新兴技术,无论是出于对应用成本的考量,还是对应用速度的考量,都需要其在转换为软件时,提升通用性,提升标准化水平。
从企业内部架构走向开放式架构、推动国民经济数字化转型的过程中,软件架构顺应经济模式的发展,必须要解决标准化短板对开放性、规模化的制约。这不仅有助于将设计人员从重复“搬砖”过程中解放出来,也让“砖”能更方便地盖成“楼”,不能总把软件设计当做个体行为和个别实例。
2
行业级标准化的核心方向
软件设计主要处理的对象就是数据和行为,架构设计的关键其实也在识别数据结构,划分处理数据的不同行为模块。
所以,从设计结果角度出发,架构标准化主要是对数据和行为的标准化,而标准化的范围,从对设计结果应用的角度看,行业级的标准化是较为合适的层级,这个层级具有合适的语境和语义范围,也有行业术语作为统一概念基础。