我们经常听说,苹果的应用生态系统(或微软、谷歌)都是有围墙的花园。但是,个别应用程序本身又如何呢?
事实上,个别程序甚至是更有害的围墙花园--对真正的表现力、生产力、自由和计算体验的一致性来说是一个令人窒息的障碍。
考虑在表格结构中添加一些数字。这对于大多数编程语言来说都是直截了当的。但是,如果同样的表格出现在网页、移动应用程序或PDF中会怎样呢?它就在屏幕上,它很可能被编码为标记中的表格。因此,数据就在那里。然而,我们不能质疑它。
也许,如果我们复制粘贴它,我们就可以查询它。或者,我们可以下载页面,将其保存到磁盘,编写代码加载页面,解析表,然后将数据转储到数据库中。
但是,我们为什么需要做这些事情呢?为什么我们不能直接查询呢?
每个应用程序周围都有一堵墙,防止这类事情发生。一个程序挡住了我们通往表达和计算自由的道路。就像伟大的国家一样,伟大的软件应该建造桥梁,而不是围墙。
除了独立的应用程序,软件看起来会是什么样子?如果没有围墙,软件会是什么样子?
面向对象编程的概念由来已久且为人熟知。在面向对象的全盛时期,人们对OO将允许更高级别的表达和封装以及更大程度的代码重用和重组寄予厚望。
这一点绝对没有得到解决--再一次,应用程序是问题所在。Photoshop的代码库和Instagram的代码库无疑都定义了复杂的Image对象,但它们都只存在于各自的监狱中。
一个真正有表现力的系统可以让我们无缝地将任何滤镜应用到任何图像上,但这在目前是不可能的。
对于Image的意义和功能,每款应用都有完全不同的概念--每款应用本质上从头开始重新构建了一个对象的意义。如果我们对互操作性、可重用性和一致性感兴趣,这是一个可怕的情况。
我们需要这样的计算环境,在这种环境中,构建块本质上是可互操作的对象--可以直接与之交互,而根本不需要出现应用程序的概念。
当前最引人注目的软件是将大多数功能锁定在其中的软件--在对象环境中,最引人注目的软件将是将最具互操作性、可重新组合的功能暴露给周围对象的软件。
这绝对不是一个新的或原创的想法-艾伦·凯和Smalltalk领域的朋友们几十年来一直在玩弄这样的概念,比如Squeak。类似的想法在使用裸体对象的业务系统实现中得到了相当有效的使用,裸体对象的概念是用户界面应该直接从它表示的对象生成。
也许在软件体验中构建更丰富、一致的含义的最著名的努力就是语义网,然而它的采用受到了限制。
无论这些系统取得了多大的成功,它都没有带来围绕这些概念开发的更通用的系统。
康威的法律最近得到了大量的宣传--这是有充分理由的。它对软件的当代状态有很强的解释力。
康威定律假定,软件的结构反映了软件所处的社会结构--在典型的公司网站上很容易观察到,这种结构反映的是公司的等级结构,而不是围绕用户的需求。
但正是在应用程序和操作系统层面,康威定律最根深蒂固,也最病态。
操作系统的组件--核心操作系统本身、应用程序和网站--是创造它们的经济实体的表现。
界限必须在某个地方划定--Mozilla创建了一个浏览器,但不能创建你需要的所有网站。微软希望允许你使用Windows进行3D建模,但不会自行创建该软件。IPhone也是如此--即使像苹果这样的大公司也需要外部应用开发者来支持iPhone的一系列功能。
解决方案是沙箱--进程和容器、浏览器标签、手机应用。我们日常计算所需的代码位于这些沙盒中,这样做会限制这些代码,阻碍我们前面提到的表现力和一致性。
通常情况下,这些应用程序会有与其他应用程序和更广泛的操作系统集成的功能-但不会太多,以至于它们变得不可见。Instagram仍然希望你看到它的标识,消费它的特定内容,并留在它的生态系统中。再一次,实施和架构是由经济需求驱动的。
我们希望我们所有的对话都集中在一个地方--但必须在几个不同的协议(通常是专有的)和数十个不同的软件客户端之间进行。
可广泛重用的含义:目前,我们共享的原语确实非常原始:字节和套接字等基本元素。我们必须建立更高层次的共享意义--图像、表格、对话等等,建立一个每个人都能使用的共同实现和理解。这不能局限于可选的额外含义,比如语义网共享的含义和互操作性必须作为基本要素加入到操作系统中。
数据无国界:计算机界的事物应该能够在没有任何阻碍的情况下直接对话。例如,用户可以通过操作系统获得的任何两个数据表都应该是可连接的或可合并的,就像它们位于同一数据库中一样容易。
与生俱来的、无处不在的可编程性:目前,编程是一项独立于主流计算的活动--独立的软件、命令行、专业知识和笨重的文本驱动界面。这一切必须结束。真正的表现力要求界面中的每个实体本质上都是可编程的--一个数据表不应该仅仅是一个数据表的渲染图片--它应该是一个表。编程根本不应该是分开的。
毫无疑问,这些概念是非常宽泛和开放的。除了挑战现状计算和推动替代方案的政治问题外,在细节上还存在复杂的设计和技术挑战。
如何在不增加混乱或降低可用性的情况下将无处不在的可编程性构建到界面中?如何消除程序之间的障碍,并在不影响安全性的情况下更紧密地集成数据?
康威的定律告诉我们,要建立一些不同的东西,我们需要建立在不同的社会和政治结构上。
短期的商业现实意味着,把东西打包成可出售的单元--逃离申请监狱需要采取相反的方法。开发一种新的方法将需要与市场的短期需求隔离开来。
学术界过去常常提供这种服务。但在新自由主义的无情前进中,研究的无限可能性受到商业逻辑的限制,资助过程需要狭窄的调查参数,以及忙碌工作的增加,这些都压垮了创造力。以希格斯玻色子成名的彼得·希格斯曾说过一句名言:在当今的学术环境下,他不会有足够的效率。
开放式研究的另一个堡垒是政府--互联网本身就来自美国的军事研究。在这里,长期开放式研究的资金也已经枯竭,就连军方的资金也被更严格地限制在更明显、更短期的军事应用项目上--我们不道德的强国宁愿花费1万亿美元建造新的战斗机系统,也不愿花费新的软件系统。
施乐(Xerox)帕洛阿尔托研究中心(Xerox Parc)等罕见但值得注意的努力也遭遇了类似的命运,它们能够在一段时间内抵挡住算账的人,但不会无限期地。
在这种持续下降的背景下,考虑到软件体验仍然建立在80年代的计算人工制品(如基于文本的命令行)上,这一点也就不足为奇了。
气候变化告诉我们,仅仅意识到我们所处的环境是不够的。真正从灾难中解放出来,需要大胆改变方向,承认金融以外的共同公共目标。
从今天有限的计算概念的限制中解放出来,将需要类似的大胆--大规模的开放式研究,长期的时间表,但最根本的是,愿意改变道路。
如果你对这些想法或如何实现有什么想法,我很乐意听取你的意见。对我发推特吧。
如果你喜欢我的演讲,你可能也会对我的演讲感兴趣:即时反馈、即时调试、Python编码