
环境至关重要。为了发挥最佳工作效能并享受美好生活,我们需要能够表达独特潜力的空间。
在物理世界中,打造环境是本能。吉他手会精心布置工作坊,家庭厨师会调整厨房布局以适应工作流程。这些微小的调整——从移动家具到翻新厨房——无需征得他人同意即可立即完成。正如斯图尔特·布兰德在《建筑如何学习》中所言:“年龄加上适应性使得一座建筑受到喜爱。”
然而,在由代码构建的数字环境中,我们失去了这种适应能力。
大规模生产软件的僵化困境
现代软件赋予了瞬间协作和搜索的能力,但也剥夺了用户适应环境的自主权。
一个典型案例是团队从物理索引卡片转向基于网络的缺陷跟踪器。物理卡片的流动性允许团队随意演化追踪方式,而软件系统却因缺乏灵活配置,导致流程变更停滞。以前尝试新想法只需几分钟,现在则需数小时摆弄配置,甚至完全无法实现。
这种僵化不仅带来不便,更可能导致职业倦怠。医生兼作家阿图尔·加万德指出,医疗软件的计算机化迫使医生填写无关字段,这种“无意义感”比耗时更令人沮丧。由于集中式开发团队无法满足所有用户的长尾需求,优秀产品往往选择拒绝大多数定制请求,导致软件日益臃肿且缺乏个性。
尽管大规模生产软件在可靠性、安全性和普及度上优势明显,但其不灵活性已成为阻碍重要工作的障碍。当用户特定需求与通用软件发生冲突时,自主权显得尤为重要。
愿景:可塑软件生态系统
我们提出“可塑软件”概念:一个任何人都能以极小摩擦将工具适应其需求的软件生态系统。
- 软件生态系统:涵盖围绕软件的技术与文化环境,不仅是技术问题。
- 任何人:目标是广泛可达性,鼓励个人自给自足与社区合作并重。
- 适应工具:包括从微调到深度翻新,再到创建新工具,而非必须从头开发。
- 极小摩擦:编辑工具应快速、轻盈,能在产生需求时即时完成。
现有方案的局限性
当前的自定义手段均存在局限,无法完全实现上述愿景:
- 设置:仅提供开发者预设的控制项,缺乏连贯的心智模型,无法解决未预见的需求。
- 插件:依赖官方API,若缺乏对应接口则无能为力。且安装与开发插件之间存在巨大鸿沟,不同应用间插件难以共享。
- 模组(Modding):虽无需许可,但面临反编译繁琐、维护困难、兼容性差等问题。且受限于平台能力(如浏览器扩展无法修改服务端行为)。
- 开源:拥有源码不等于低摩擦。修改严肃的代码库需要大量专业知识和精力,即使是微小更改也构成障碍。
- AI辅助编码:虽能降低编程门槛,但仅靠生成代码无法解决现有工具的调整、数据共享及工作流组合问题。将AI引入闭源生态,如同让名厨在美食广场做饭,受限于底层平台的封闭性。
实现可塑软件的三大设计模式
1. 从用户到创作者的平缓坡度
可塑软件不应要求用户从零开始。理想路径是从被动使用现有工具开始,随着需求变化,逐渐过渡到编辑者和创作者。
Allan MacLean提出的“平缓坡度”模型指出每次定制权力的增加,只应要求技能的小幅投入。电子表格是典型例子:用户可从查看数据开始,逐步尝试格式化、调整公式,直至编写脚本,无需切换开发环境。HyperCard通过显式模式层级,让用户在安全护栏下探索编程。
填平“悬崖”的策略包括:降低右侧技能门槛(如友好语法、实时环境),或从左侧逐步增加权力(如Notion、Airtable等具有可选可编程性的媒体编辑器)。关键在于,并非每个人都需到达坡顶,但每个层级都应对业余爱好者可访问。
2. 工具,而非应用程序
“应用程序”概念本身导致了隔离。如同专用的“牛油果切片器”,应用针对特定用例捆绑功能,缺乏通用性且难以协同。
我们需要更像“刀”的通用、可组合工具。这涉及两个子问题:
- 数据共享:打破应用数据孤岛。桌面文件系统允许不同工具编辑同一文件;Smalltalk通过对象图像共享状态与行为;Webstrates等平台支持多用户在各自偏好工具中实时协作编辑同一数据。
- UI组合:打破应用对交互环境的垄断。复合文档系统(如OpenDoc)允许嵌入不同媒体类型的编辑器;“纠缠器”(Entanglers)等技术可动态连接UI元素;Dynamicland则利用物理空间关系组合物理对象携带的代码与数据。
3. 社区创作
个人主义视角有限,软件本质上是社会性的。医院部门或产品团队需要共享解决方案,而非每人单独定制。
适当的基础设施应支持跨层级协作。全球社区可交换作品,本地社区(如公司、家庭)可构建维护适合自身需求的软件。Clay Shirky称之为“情境化软件”,Robin Sloan将其比作“家常饭”。自由软件社区(如Mastodon实例)已证明,小型社区可通过编辑代码实现特定功能。未来需解决小代码片段的共享、协作开发及互操作性问题。
Ink & Switch的原型探索
Ink & Switch通过研究原型探索可塑软件的技术栈,主要分为基础设施与动态文档两条主线。
基础设施原型
- PushPin:基于Web的协作媒体画布。采用“文档函数式响应式编程”(DFRP),将工具表示为React组件,由Automerge同步的JSON文档支持。降低了扩展接口工作量,但面临视图调度与组件协调挑战。
- Cambria:解决架构兼容性。通过解耦读写架构,实现不同工具间数据的实时转换与互操作,避免中央权威规定统一格式。
- Farm:代码即数据。使用本地优先数据层托管代码与数据,允许用户用Elm语言编写工具并同步源码,简化共享但面临协作冲突挑战。
- Patchwork:版本控制+自举。建立在PushPin和Farm之上,引入通用版本控制理念,支持历史视图与简单分支。Ink & Switch内部知识工作已在Patchwork中进行。实践中,AI辅助在可塑环境中显著提升了工具构建速度,但分支管理、质量期望管理及UI嵌入模型仍需完善。
动态文档原型
- Potluck:用于食谱规划的动态纯文本。允许用户以自然文本记录信息,通过探测器解析结构并添加动态行为。AI可辅助生成探测规则,但任意文本解析结构较为繁琐。
- Embark:用于旅行规划的动态大纲。采用结构化大纲格式,支持对象提及(如地图位置)及丰富视图嵌入。关键发现是:具有丰富共享上下文的嵌入模型能实现连贯交互,如地图与大纲的双向同步高亮。
走向更美好的未来
重塑计算基础以赋予用户自主权是一个雄心勃勃的目标。尽管面临隐私安全、商业模式及文化转变等挑战,但变化是可能的。
研究者应重新想象计算隐喻,平台开发者应将用户视为有能力参与者,产品制作者应赋予用户更多掌控权。可塑软件可能缺乏工业级的一致性,但会像老房子一样,随着时间演变出独特的魅力,见证并适应用户的每日需求。
每个人都有权演变其数字环境。这是在代码定义的世界中履行创造潜力、保持自主感的重要方式。