向后兼容

积木一文中提到了兼容的重要性,今天展开说说。

在编程领域,代码每次迭代 —— 比如修复漏洞、增加新特性乃至重构 —— 都会形成新的版本,为了让使用早期版本的程序在升级至新版本后运行不报错,迭代过程中会附加额外的代码,这个过程叫做向后兼容。

向后兼容的意义在于服务早期版本的使用者,同时让观望者有信心花费时间和精力去学习、使用它,因为它有向后兼容的信用。

扩大范围,对架构进行向后兼容则有着更深远的意义,技术发展快,但项目维护者没有精力去追新,因为那样不经济并且太冒险。设想,如果新技术可以一点一点、一块一块地替代旧技术 —— 允许新旧技术并存 —— 那么尝试的成本就小多了,如果新技术足够好用,人们会逐步迁移过来,随着社区内信心的提升,迁移数量和速度会成指数级增长。jQuery 和 React 正是借此策略大肆扩张,GraphQL 也将同理。

迁移一下,如果作为积木的我们提供的服务是向后兼容的 —— 即便没有背景知识也能享受我们的服务 —— 那么受众面一下子就拓展开了。更进一步,如果允许受众的背景知识一点一点、一块一块地更新升级,那么相应的,迁移数量和速度也会成指数级增长。

你可以将向后兼容这一概念结合至你的专业领域,看看有没有什么新发现。

结合至 Unschooling,当今学校教育的低效正是因为没有做到向后兼容 —— 绝大多数学生的知识构建存在多处断层 —— 这受限于人均教育资源的低质与匮乏。我认为未来的教育必然是以学习者个体为单位进行向后兼容,而不是以年级、等级作为分割单位,根据学习者个体已知的背景知识和兴趣目标来提供精准的学习计划,并且这个学习计划会随着背景知识与兴趣目标变得愈加丰富而动态更新。