「InfoQ」怎样才能实现软件架构的“代代相传”?( 二 )


随着这种发展 , 即便出于让工具更易用、更易得的角度 , 行业级标准化也应得到更大重视 。
企业之所以要为软件付出更大代价 , 很大一部分原因就是软件无法像真正的工业制品一样批量化制作与获得 , 以及提供售后 , 甚至是其中无需太个性化的部分 。 当企业、行业越来越依赖于软件时 , 软件中的主要部分需要被标准化和真正量产 。
当过度强调软件使用和软件生产中的个性化因素 , 这会让软件行业面对与工业化早期类似的问题 , 尤其是在“B”端 , 过度的“自由”可能会带来“不自由” 。 这些过度之处对“创新”的意义也许被夸大 。
工业标准化没有让工业变得死板和缺乏创新 , 反而减少浪费 , 让创新能更好地分层次进行 , 比如设计创新、零件创新、材质创新和集成创新等 , 而无需经常从头开始 。 软件行业也应该通过行业级标准化减少“创新浪费” , 这样才有可能让软件走出现在这种“大规模小团队手工作坊”的阶段 。 所谓的 AI 设计 , 需要的不也正是基础性的标准化吗?
也许满足标准化 , 我们才能把精力花在更有价值的创新上 , 而不是整天修改别人也改过的 BUG , 成天担心踩别人踩过的坑 。
标准化是工业成熟的体现 , 也是其在整个社会生产中基础性地位增强的必然结果 , 这也是软件未来必须要走的路 。
2. 架构设计的开放性不足
在发展的大部分时间中 , 软件设计更多处理的是封闭边界内的封闭问题域 。 当处理复杂问题时 , 软件设计者的思考习惯是尽可能将复杂问题拆分成更小的独立问题 。 处理“封闭”空间会令软件设计者感到“舒适” , 而“开放”空间则容易让软件设计者失去“焦点” , 也会带来更大的知识负担 。
处理好边界是软件设计的原则之一 , 不定义好边界的软件很可能无法交付 。 这种方式本身无可厚非 , 其隐含的问题在于 , 多数软件设计缺乏企业间的横向联通和行业级的定义 。 很多承载行业统一概念的行业术语虽然在设计过程中被软件人员学习和思考 , 但并没有发挥其在标准化方面应有的作用 , “封闭”也成了一个一个软件实例的“封闭” 。
现有的各类技术标准多数无法帮软件形成标准化的设计结果 , 它们更多是对工艺和技术的要求 。
工业在发展早期 , 企业间的标准化和连通性也不强 , 一度出现囊括生产链条大部分环节的超大型企业集团 。 但是 , 随着精细化分工的发展 , 企业最终放弃这种不经济的“全都干”模式 , 采用供应链、生态圈模式 。
标准化在提升企业协作上发挥至关重要的作用 。
早在 1926 年 , 拥有国家级标准化组织的 25 个国家在国际上成立国家标准化协会国际联合会(ISA) , 由此 , 标准化活动从企业行为演进为国家管理 , 进而成为全球事业 , 活动范围从机电行业扩展到各行各业 。 标准化扩散到全球经济的的各个领域 , 从保障互换性的手段 , 发展成保障资源合理配置、降低贸易壁垒和提高生产力的重要手段 。
软件行业现在也有些类似工业早期的状况 , 优秀开发资源的集中 , 从上到下的完整、个性化开发比比皆是 。
此外 , 企业习惯于“封闭”设计成果 , 因为软件一旦跟核心生产领域接触 , 就自然地牵连上各类“商业秘密” , 导致成果“封闭” , 甚至包括设计过程中产生的模型资产 , 这也是大家需要重复建设的原因之一 。
综上所述 , 软件开发中 , 思考方式、设计范围、设计成果方面都具有不同程度的“封闭”倾向 。 当然 , 这其中有其处理现实问题方面的必要性 , 但是 , 这也导致架构在设计标准和视野上不够开放 , 标准化发展缓慢 。
现在 , 随着互联网技术对企业连接能力的进一步加强 , 生态圈构建从业务层面将下沉到软件层面 , 要求软件层面更多地支持联通和协同 , 这不仅仅是对 API 的关注 , 还需要在架构设计方面有更多的全局视野和开放性 。 各类新兴技术 , 无论是出于对应用成本的考量 , 还是对应用速度的考量 , 都需要其在转换为软件时 , 提升通用性 , 提升标准化水平 。