Backbone Conf 2012
有幸去美国波士顿参加了2012年的 Backbone.js Conference,见到了coffeescript、underscore.js 还有 backbone.js 的作者 Jeremy Ashkenas。会议内容围绕前端MVWTF和社区进行了很多有趣的讨论,有很多有价值的观点。我希望在这里面与大家分享我从里面学到的东西。
这系列博客其实是我整理的会议笔记的汇总,是我对每个话题中比较有印象或者比较重要的内容的摘抄,这些观点几乎都不是我的,我仅作为一个传声者。我是希望把所有的Credit交给演讲者自己,我最多只是一个翻译者,碰巧幸运的在现场。Backbone.js Conference和O’Reilly的Fluent Conference 碰巧同时进行,#BackboneConf 更加草根,但是也更有观点。
How to Argue about Javascript by 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 就反驳说我就这样写你怎么地吧?
另外一个例子是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的发生对社区有益。
知乎里面就有这个争论的延伸,虽然这里没有脏字,但是大部分人也一样是被卷入这个争论……
我的回答:
加与不加是风格问题,风格争议不需要有个定论。关键的问题在于如何“争论”,处理好冲突,学会组织语言减少争议是最重要的。因为分号问题在社区内部造成了很多况日持久的口水战,这些口水战是社区的损失……因为大家在这个时候可以写更多的代码带来更多的功能。