软件开发的硬约束
这篇讲的是作者从超市结账小票的两种打印方式出发,对软件开发中“软约束”与“硬约束”的深刻反思。 作者观察到,收银小票倾向于为同一件商品打印多行记录(每行数量为1),而非合并成单行(数量为N),即使后者更省纸。起初他怀疑是设备性能所限,但通过一次收货管理系统的开发与实地部署,他发现了真正的原因:合并记录会影响仓库作业流程的效率与操作习惯——后续员工需要在纸质清单上手动划销,单件单行才最直观。 这个发现让他意识到,长期从事纯软件开发时,功能、架构与责任划分往往具有灵活性(“软约束”),可以按需调整。但现实世界存在大量“硬约束”,比如设备操作习惯、生产线工艺流程、物理环境限制等。他进一步以工厂生产多语言说明书为例:生产线难以像软件模块一样灵活拆分组合,导致不得不为所有市场印刷包含所有语言的通用说明书,以避免为每种语言维护独立生产线的高昂成本。 作者总结道,随着软件深入物理世界,决定其价值的往往不是复杂的技术架构,而是能否与现实约束融洽相处。开发者需要跳出纯粹的代码思维,直面问题的核心限制。文章最后以快递站利用条码替代键盘操作的巧妙案例收尾,说明了解决方案可以完全跳出技术框架,以极低成本满足场景的真实需求。