类固醇的开源与抽象

让我们面对现实:开源非常抽象。 几年前,如果您问某人到底什么是开源,那么您会收到一个相当简单的答案:“哦,是的,开源是使您的代码免费可用的嬉皮概念”(带有一点星号提醒)我们认为这是免费的,如言论自由,而不是免费的啤酒)。

但是在过去十年左右的时间里,整个想法已经改变。 为什么? 因为我们为此投入了数千名工程师。 开源在各种软件开发人员,企业家,大公司,微软等公司中广受欢迎。开源社区人口的增加确实很棒,因为它允许使用和框架的概念变得更加实用。 我们已经能够从翻阅教科书和聘请专门的工程师以支持特定的框架,转而采用一种由社区驱动的方法,几乎​​可以使用文档和直观的界面。

但是应该吗? 源代码热潮出现的第一个问题是,开放源代码越来越与过度装饰的代码概念联系在一起。 开发人员经常担心,如果他们还没有编写出色的文档或在自述文件中放一些漂亮的粉红色花朵,那么对他们仍在增长的项目的反应将令人心碎。 结果,进入开放源代码的社会障碍增加了。 当您意识到您正在谈论的是一个定义为零进入门槛的概念时,考虑一下这有点荒谬。 具有讽刺意味的是:

或与Visual Studio Code一样具有讽刺意味:这是基于100%开源软件构建的开源软件的最受欢迎的代码编辑器之一,这种软件直到发行很长时间才被开源。 但是,也许这并不完全是微软努力打破旧习惯。 也许这是一种营销策略,因为他们认为,如果该编辑器的源代码不够美观,社区的吸引力就会减少。

现在,“营销您的开源项目”实际上已经成为一件事情,因为再也没有人愿意使用不受欢迎的开发人员编写的软件。 成为开源开发者并发布开源软件是如此困难。 究竟有多少开发人员真正想花时间为没人使用过的业余项目编写文档?

开源软件出现的第二个问题是,开源成为成为提供类固醇特征抽象的药物领主的方式。

在讨论功能抽象之前,让我们看一下流行的开源社区工具(到目前为止,也许是我最喜欢的开源产品),即节点包管理器。 npm是与node.js捆绑在一起的不可思议的工具,并充当发布到官方npm存储库的软件的软件包管理器。 它变得如此流行,以至于现在有一些公司计划可以用来运行自己的私有npm注册表。

npm背后的想法非常简单:使用开源为node.js平台提供强大的工具。 而且有效。 现在,npm作者可以将他们想要的任何node.js代码作为正式节点模块发布到npm注册表中,并且该代码立即可用于整个node.js社区。 该概念以令人难以置信的方式通过诸如express(使您可以创建健壮的Web服务器的轻量级http框架)和gulp(面向流的构建系统)之类的软件包加以利用。

但是,它很快成为特征抽象的媒介。 发生这种情况时,各种各样的帮助程序库和框架(如underscore.js和lodash)便开始出现。 特征抽象很棒,但是和往常一样,jQuery效果开始出现。 3行模块到处弹出。 或者弹出正在下载的1000行模块,因此一个项目可以使用3/1000行。 从这里开始,消除死代码对于每个项目都至关重要,没有它,项目从3kb迅速增长到100kb。

这里要解决的问题是:您在哪里与真正需要抽象的内容划清界限? 功能抽象与库和框架具有相同的好处:每个开发人员可以只专注于自己的任务,而将其他任务的调试留给其他开发人员。 但是确实需要画一些线,并且在不需要使用库的情况下,编写自己的代码也不是一件坏事。

基于这些问题和烦恼,我想向您提出两个问题,在阅读和编写开源软件时,您应该始终问自己:

  1. 如果我认为这个项目真的很酷,但是文档不令人满意,那么是否有什么我可以帮助开发人员的,而不是为拥有好的文档的其他项目提供支持? (关于开源的伟大之处在于团队合作,使用您自己的文档提交PR或针对无法解决的问题提交问题。)
  2. 我的咖啡杯真的需要鼠标吗?