胶水:软件的暗物质

2021-06-14 12:56:51

"软件似乎'大'和#39;复杂'它做了什么"我一直返回艾伦凯的这句话。自从我开始写作软件以来,同样的感觉一直在唠叨我很多。一方面,有魔法,几乎字面意思:我们写一些文字(法术),机器在现实世界中做的事情。另一方面,似乎是制造机器更复杂的东西的方式太多了:几乎就像用拳击手套穿针。如果我们避免不必要的复杂性,即使我们要小心,也是如此。这些数字似乎回到了上面,alan kay提法微软办公室在几亿行代码。从我的个人经历来看,Wunderlist IOS客户不是200克洛夫。对于后者来说,我可以证明团队提出的注意力不要引进臃肿,甚至积极减少它。 (例如,由于诸如存储组合者等一些建筑机制,我们将核心代码缩短了大约30kloc)。我相当确定我不是唯一一个拥有这种体验的机构。六角形架构使我能够在我构建的产品中提取商业逻辑,目前它的代码占少于5%

- 3. 2017年11月25日的余额(@Infinitic)

那么为什么这么多的代码?毕竟Wunderlist只是一个待办事项单,虽然是一个非常好的。我可以' t真的对办公室说了很多关于办公室,我不会' tthink任何人都可以,因为400 mloc就像太多的代码来理解。我认为答案是:胶水代码。它' s连接两件软件的Unglamor游戏不可见的代码,确保数据中的数据达到位置a,从模型中到达位置Buncathed(从DATBase到UI,从模型到模型。到后端等......)。和暗物质,ITIS看不见和巨大。为什么我说它是"看不见的&#34 ;?毕竟,代码就在那里,ISN' t呢?据我所知,有几个相关原因:胶水代码被认为不重要。它'在这里只有几条线,还有其他一条线路......很快就足够了你和#39; re谈论真正的mlocs!

我们不能直接表达胶水代码。大多数语言都是我所说的"算法的DSL和#34; (参见藻类,算法语言),所以胶水不能故意表达,而是仅通过描述用于实现胶水的算法。

它为什么是隐形的为什么,也是为什么它是巨大的:无法直接表达它意味着我们不能抽象和封装它,我们不断重复胶水的轻微变化。它有另一个原因' s大规模:胶水是二次的。如果您有n个功能彼此交互,则您可以获得o(n²)胶水,以使它们彼此交谈。

凯文格里尔在视频比较的视频比较和UNIX开发中的历史思想中展示了最后一点,这是你需要的关键的Insightbeing;编程周边,而不是区域"对于他来说,关键差异是Unix有管子,我会同意。管道是一个字符的胶水:" |"这绝对至关重要。如果您必须在每次连接两个模块时编写一点自定义代码,那么您将处于二次复杂性,这意味着您的功能会使您的胶水代码将压倒核心功能。而且你将只注意到这一点'为此做出任何事情,因为初始增长率将会很低。那么我们能做些什么呢?我认为我们需要粘合胶水,所以我们实际上可以写下胶水本身,而不是实现胶水的算法。一旦我们有的话,我们可以并希望能够创造更好的胶水,像UNIX管道一样,他们可以在一起,经过一般连接组件,而无需每个组件对的自定义胶水。