紫升

图片来自民族学局提交给史密森学会秘书的年度报告(1881)

我最近重新阅读了 艾伦·维尔福斯·布洛克 的论文 编程语言的标准化和参与模式,同时为即将到来的讲座做准备。艾伦在编程语言标准开发、研究和文档方面有20多年的经验,这对 JavaScript 社区来说是非常有价值且不能被低估的。这篇论文为那些刚开始从事标准制定工作的人提供了学术性的指导方针和模式;为了使其更具有可操作性,并为我们的社区提供现代化的语言,我在下面更新了他的指导方针,以及一些改善大家参与标准委员会体验的有用建议。

技术标准委员会的性质决定了用户、实施者和供应商都在挤在同一个房间里,他们的需求或利益往往是相互冲突的。亚历克斯·罗素 在他的 有效的标准工作 系列文章中对网络驱动的标准组织中的这些紧张关系做了很好的说明。重要的是我们要明白,最终大家都在努力做正确的事——挑战在于就什么是正确的事达成共识,并以一种包容和尊重的方式去执行。这些指导方针是关于鼓励社会活动,促进专业(和个人回报)的标准制定过程。

首先寻求理解…

做一个积极的倾听者:艾伦的指导意见是,只有当你确定你有有价值的东西需要说的时候才可以发言。我完全同意,对于一个新人来说,在第一次会议上应该专注于倾听和观察。然而,我认为有必要对这一准则进行修订,如果你有不明白的地方,绝对可以提出问题并得到解释(当然是在适当的时候)。为了提出问题,你必须真正倾听别人说的话——无论是技术上的还是背景上的,这也是快速融入小组的好方法。

做好研究工作:这不仅适用于你可能有兴趣提出的具体建议和想法,而且也适用于整个团体的组织、个人和历史。但有时候知易行难,反馈或电子邮件中的文档很难再找到,或者对某件事情有真正了解的人可能已经离开了。Ecma TC39(以及大多数 W3C 工作组)已经通过 GitHub 将大量的背景资料放在网上,并且正在努力为社区呈现更多的组织历史。如果你偶然发现某个领域的历史不为人知,这可能是一个很好的机会,你可以通过填补空白做出有意义的贡献。

认识你的团队:艾伦建议了解其他玩家,但我更愿意把它看作是认识和了解你的新团队的其他人。所有的技术都是其社会环境的产物,所以你越是了解这个社会环境并能对其做出积极的贡献,就越能帮助你的事业。如果你不认识小组中的其他人,请发送电子邮件介绍自己并分享你的想法。邀请某个组员吃顿烧烤或喝杯星巴克。和你的新伙伴一起参加或组织会后活动。了解他们来自哪里,哪些问题对他们来说是最重要的。当面建立这些联系更容易——我强烈建议,如果条件允许,你应该每年都参加一次或多次会议。

…然后被理解

明确你的目标:如果你想实现一个新的功能,请准备好你要解决的明确的问题和任何相关的用例。如果你的解决方案的形式足够好,也要记得为它写测试。请记住,根据语言在其生命周期中的位置,实际问题要比理论问题更有说服力。

正如艾伦所指出的,“语言标准的制定不是一种绿地开发活动……语言标准委员会的存在是为了解决语言现状所产生的问题”。因此,如果你的目标是以某种方式发展一种语言——比如说,这样它就可以在区块链上实现——你就必须要有耐心。反之,如果你已经达到了你的目标,就可以继续做其他事情了。要有目的性。

译者注:绿地项目在软件开发领域,一项绿地工程可能是在全新的环境内开发一个新系统,不需要考虑与其他系统,尤其是与老旧系统(Legacy system)的集成问题。这里作者指的是语言标准的制定是有历史包袱的。

对变化持开放的态度:标准工作尽管其名声在外,但这并不是关于竞争性的争论(我喜欢说,TC39 不是关于“竞争性的 JavaScripting”)。小组中的任何两个人都可能以不同的方式解决同一个问题,但是并不会自动抉择哪个人是正确的。在制定让你的功能得到实施的策略时,艾伦建议寻找盟友、选择你的战斗并有一个备用方案。与他人合作交流想法,可以提升你对问题和语言的理解,并帮助你发展对其他组织关心的问题的敏感性(从而可能影响你的提案的成功机会)。这也有助于你避免在特定背景下不重要的争论和辩论。另一个重要的策略是:对自己的错误持开放态度,并愿意说出来。毕竟,大多数想法和设计都不好,而我们最终接受的大多数想法和设计在开始时也是不好的。1营造一个可以安全地提出、讨论、推进或撤回想法的环境,对于健康的技术对话至关重要——这需要所有各方都愿意改变他们的想法。

成为贡献者:艾伦和亚历克斯都认为,从历史上看,团体越老,新人和新想法就越难进入该团体。幸运的是,在这些团体中,有一个明确的向新的想法和工作方式开放的文化转变。

有很多方法可以开始为标准工作做出贡献,而不需要写技术提案。事实上,这往往是最重要也是最缺乏服务的领域!

你如何为一个标准工作做出贡献,最终应该是你的优势、目标和团体的需求的中一个因素。这里有一些方法可以让你成为一个伟大的贡献者,提高你的可信度,而不需要写新的提案。

  • 会议笔记记录志愿者。
  • 组织或共同组织社会活动。
  • 帮助策划会议。
  • 为委员会的其他工作做出贡献,如编写文件。
  • 阅读提案并提供关键的反馈或使用案例。
  • 帮助编辑或支持其他提案,或为功能和提案编写测试。
  • 帮助识别现有技术和被忽略的声音——是否有可以借鉴的例子,或者可以咨询的人,以帮助推动一些事情的发展?

力求达成共识:大多数网络标准委员会使用共识模式进行决策,如何衡量共识,各小组会有所不同,但一般意味着小组的大多数2支持该决定,其余人愿意接受该决定。分歧和辩论是可以的,也是需要的,但必须是专业和尊重的。在某些时候,作为代表,你必须决定你是否应该积极反对一项决定,但这应该是一种罕见的情况。并非每项提案都会被纳入最终规范——事实上,大多数都不会,这是件好事。

无论你是第一次参与标准制定并希望找到自己的立足点,还是你是现有的参与者并希望提高你目前工作的成功率,上述准则都适用。任何组织、委员会或运营联合开源软件项目的团队都可以直接从这些指南中受益,或者进行修改,使其更适合你的团队。我们的目标是快乐地制定标准!

  • 1: 亚历克斯·罗素的 穿针引线
  • 2:大多数的定义因组织而异。它通常需要三分之二或更多的投票来通过一个问题。

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏