#BackboneConf2012 How to Argue about Javascript by Andrew Dupont

Backbone Conf 2012

有幸去美国波士顿参加了2012年的 Backbone.js Conference,见到了coffeescriptunderscore.js 还有 backbone.js 的作者 Jeremy Ashkenas。会议内容围绕前端MVWTF和社区进行了很多有趣的讨论,有很多有价值的观点。我希望在这里面与大家分享我从里面学到的东西。

这系列博客其实是我整理的会议笔记的汇总,是我对每个话题中比较有印象或者比较重要的内容的摘抄,这些观点几乎都不是我的,我仅作为一个传声者。我是希望把所有的Credit交给演讲者自己,我最多只是一个翻译者,碰巧幸运的在现场。Backbone.js Conference和O’Reilly的Fluent Conference 碰巧同时进行,#BackboneConf 更加草根,但是也更有观点。

How to Argue about Javascript by Andrew Dupont

Andrew Dupont

Links

Notes

Andrew说话比较慢(尤其是没有预先准备的时候),但是他的语言很睿智。他的话题也很睿智,讲的不是具体的框架或者技术,而是软技巧“如何争论?”。他讨论了如何好好的辩论,而如何辩论是不好的。

核心的事件就是社区内火热的Semicolon问题~

How not to argue about semicolons?

  • Our arguments should be purposeful

要有目的,就是说为了解决实际的问题。比如科学研究符合这点,不过很多政治争论不符合这点(政见之争是狗屁?)。他引用了Carl Sagan说的一段话,大意是科学家比较可能会放弃自己的立场并被说服,但是政治和宗教之争很难看到放下武器站到对方一边的场景。

这些是常见的一些场景:

  • “Whoe the hell are you?” – 你微不足道
  • “Whre do you get off censoring me, you fascist?” – 你凭什么管我,你个法西斯
  • Motives for having a code argument:那么我们为什么在代码问题上争论呢?

其实不应该是为了显摆你自己,也不应该为了说服别人认同你的想法。

争论的目的应该是更好的了解你们争论的主题

有一本很有名的书叫”Getting to yess”,副标题是Negotiating agreement without giving in。

An argument has 3 goals:

  • It should produce a wise agreement, if possible 应该达成聪明的一致
  • It should be efficient 有效率
  • It should not damage the relationship between parties 不破坏各方的关系

Tactics for arguments: 争论的战术

  • Separate the people from the problem 就事不对人,必须区分问题的目的(本质)和你对这件事的情感因素
  • Focus on interests, not positions 注重共同的利益,而不是自己的立场(位置)
  • Invent options for mutual gain 创造一些方案来达到共同受益
  • Insist on objective criteria 只坚持客观的条件(如标准、benchmarks)

这个例子很逗,分号之争来自github上面的一个bug。有人报了bug,然后 @fat 说这不是他代码的bug,而是 JSMIN 的bug。然后 douglas crockford大神 蹦出来说这不是 JSMIN 的bug,而是 @fat 对js分隔符理解有问题(其实不完全是),然后 @fat 就反驳说我就这样写你怎么地吧?

zzzzing! 这梁子就算是结上了!

另外一个例子是Selector引擎战争,这源自moo.tools作者写的一个benchmark,职责JQuery的selector引擎比较弱,因为它的选择器在这个benchmark的很多场景下都是比较慢的。

然后John Resig就写了一篇犀利的博客 “Selectors that people actually use“,职责这个benchmark里面的很多场景并非人类常用……

那我们应该怎样办呢?我们应该以愿意被说服的态度去讨论,思考对方为什么持不同的简介,考虑品味的不同,考虑情绪的问题。

他举了John的另外一个例子,他如何回答 “JQuery steals code” 和 “JQuery hates developers, love companies” 这两个问题。他的博客犀利、幽默,是解决这种问题的一个典范。他没有直接争论,而是用有趣的方式去化解自己的被动。

后面回到例子的主线,就是Bootstrap是否应该为了 JSMIN 去增加一个分号呢?库的作者是否应该为了 JSMIN 兼容性去做一些让步呢?还是 JSMIN 应该主动改变(Crockford 觉得那样做很没品)。

有趣的句子:

“People who don’t use semicolons are Javascript hipsters.”

“No, people who are fanatical about semicolons are just spreading FUD.”

“@fat is being a jackass and a bad project steward.”

“No, people like you are bitching about a library they got for free.”

“Semicolon or not, that line should still be rewritten.”

“JSMin sucks anyway. People should use some other minifier.”

“Who cares about minification? Everyone’s got a fast connection now.”

争论愈演愈烈,慢慢变成各种人身攻击和开玩笑,很多人抱怨这个ticket不停的给他发邮件……

最搞笑的是 @fat 本人在中间留言,新版的Bootstrap已经修正了这个问题了……后面还是继续 shit storm

但是后面还是各种人身攻击……

作者用了一个特别贴切的形容词”Shit-storm”!

这说明跑题了,如何不跑题呢?

要温和一些(和谐),be nice! 说话要精确,不要扫射……

作者举了一些委婉的表达的例子……很委婉。

javascript社区还有很多例子

  • Ember vs. Backbone
  • Mico-frameworks
  • Coffeescript!
  • Douglas Crockford vs. the world 这个是开玩笑的

总的来说,社区里面争论真的是一个非常重要的事情,避免Shit-storm的发生对社区有益。

知乎里面就有这个争论的延伸,虽然这里没有脏字,但是大部分人也一样是被卷入这个争论……

我的回答:

加与不加是风格问题,风格争议不需要有个定论。关键的问题在于如何“争论”,处理好冲突,学会组织语言减少争议是最重要的。因为分号问题在社区内部造成了很多况日持久的口水战,这些口水战是社区的损失……因为大家在这个时候可以写更多的代码带来更多的功能。

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.