我的工作带给我很多软件正确性技术,比如类型理论、测试驱动开发(TDD)和形式化方法。周围的社区都有同样的问题:他们无法让人们使用这些技术。他们都会问“难道人们不关心正确的软件吗?”对于这一点,业内人士通常会回答“程序员不在乎正确性,他们只关心把垃圾铲出来赚钱!”
我从我考察过的每个社区都听到了这一点,其中许多社区彼此之间存在直接冲突。契约式设计(Design By Contract)的主要推广者伯特兰·迈耶(Bertrand Meyer)1写了一篇文章抨击函数式编程,而许多TDD倡导者则完全反对形式化方法。这些社区中的每一个都可以指着其他社区说“他们不在乎正确性,他们只想把垃圾铲出去”,而那些社区也可以对他们说同样的话。对称性很好,不是吗?
这意味着他们没有看到更大的图景。对为什么程序员“不在乎正确性”的解释不应该仅仅是事后的合理化。对于为什么大多数程序员似乎不关心软件正确性,我的主要论点是:
每当我在讨论中提出这个问题时,我得到的答案都是一样的:每个人都认为根管更糟糕,每天最多有一半的人使用牙线。那太荒谬了!。用牙线清洁牙齿一天大概需要三分钟。但人们不这么做是因为它太麻烦、太烦人、太不方便。如果人们不愿意做一些简单的事情来防止他们的牙齿腐烂,为什么我们要指望人们使用恼人的不方便的工具来改进软件呢?
我有一些纯粹的轶事证据支持这一点,那就是与其他语言相比,我更喜欢在Ruby中使用TDD,这完全是因为RSpec。RSpec是我使用过的最令人愉快的单元测试库。它很容易设置,很容易调整,也很容易读写。除此之外,还有大量的Ruby库,如factorybot和capybara,来处理TDD带来的不便。我没有确切的数字,但我推测使用TDD的Rails项目比使用其他Web框架的项目比例要高得多。当然,部分原因是文化,但RSpec的负担能力肯定会有所帮助。
我也看到我的很多朋友对打字系统更感兴趣,因为他们开始使用Elm或TypeScript。如果你太在线了,你可能看过抨击这两个人的文章,要么是不健全的(在打字稿的情况下),要么是因为缺少类型类(在Elm的情况下)。另一方面,这些语言更多地面向UI/UX,并提供了大量的工具。ELM以其编译器错误消息而闻名,并且TypeScript具有很好的IDE集成。这两个因素在用户采用方面都起着重要作用。然后,许多人从这两种语言迁移到更“核心”的系统,如PureScript或Haskell。有经验的人愿意忍受更多的不便,以换取更多的权力。
这种宽容可能就是为什么内部人士不认为不便是一个严重的问题,而更喜欢“更容易”的解释,比如开发人员的懒惰。但对于初学者和感兴趣的外来者来说,不便是一个严重的障碍。当社区中的不便问题没有得到解决,甚至没有得到承认时,这就是一个信号,表明社区并不关心增长。因此,这不仅仅是因为用户友好性使人们更容易使用这些技术,也使他们更容易提交。他们更有可能相信社区把用户的最大利益放在心上。
我不喜欢“开发人员不关心”这个借口的一个原因是它太虚无主义了。如果是这样的话,我们无法鼓励人们使用更好的正确性技术。改变“开发商不在乎”将意味着改变我们社会的基本文化,这远远超出了我们的工资等级。另一方面,如果领养是一个“用牙线清洁的问题”,那么这是我们有能力改变的。我们可以改进我们的UI/UX,我们可以改进我们的教学方法,我们可以改进我们的辅助工具。我在自己的生活中见过这样的作品。我已经做了很多正规方法的教育推广,并看到了令人惊叹的结果。很多“不感兴趣”的开发人员在学习正式方法变得更容易之后就开始使用正式方法。
我怀疑人们避免对工具采用进行“方便”解释有三个主要原因:2。
一旦你成为某方面的专家,就很容易绕过这些不便之处,所以人们甚至可能没有意识到事情是不方便的。3这有时被称为专家性失明。
便利听起来像是“波兰语”,当预算有限时,它会被推到一边。在时间紧迫的情况下,性能和安全性都被抛弃了,那么可用性又有什么不同呢?
同样,在学术界,UI/UX也是低声望的作品。学者们不能发表关于他们如何使工具更易于使用的论文,即使提高可用性会极大地提高行业采用率。激励结构都是乱七八糟的。
UI/UX真的很难,需要与从技术上解决软件正确性所需的技能完全不同的技能集。这意味着工具的许多核心贡献者和早期采用者并没有准备好让它更方便。
幸运的是,社区可以提供一些容易摘到的果实,而不需要对工具进行根本性的更改。我通过撰写文档进行贡献。还提供了一些小吃和食谱。更高级别的UI抽象也有帮助:我们可能会通过提供比核心原语更复杂的输入生成器,或者通过开发ghostWriter和QuickSpec等测试生成器来增加基于属性的测试采用率。这些不会让工具变得简单,但会让它们变得更容易。一些“勉强”被推迟的人将会冒险一试,扩大社区,并引入一些能够在未来更多地帮助改变可用性窗口的人。
归根结底,采用是一个优化问题:为了社区的利益,您最好将资源投入到哪里?有些社区对增长一点也不感兴趣,这没什么。有些人可能会认为,为现有用户改进东西比寻找新用户更重要,这也没问题。但对于想要成为主流的社区来说,指责外来者没有看到光明是错误的。也许你只是有一扇肮脏的窗户。
我在我的时事通讯上分享了这篇文章的初稿。如果你喜欢我的作品,为什么不订阅呢?
这些不太适用于实践的采用,如TDD或代码审查,但用于执行它们的工具遇到了类似的问题。 [返回]。
这不同于前面提到的“专家承认存在不便,但认为收养无关紧要”。 [返回]