今天发了一条微博:
会原生 JavaScript 不代表什么,懂 jQuery、YUI 等才真正好。怎么这么多人有原生主义情结呢?走出那点小天地,海阔天高。
很多人已经猜出,这是为了晚上的文章而发,提前收集大家的想法。这个话题,很早就想谈,肯定会引起口水仗,但有些事不辩不明,不理不清,与其和谐社会,不如辛亥革命。
奇怪的现象
平时工作,时不时能听到一些困惑、感慨:
jQuery 虽好,但只会 jQuery,不会原生 JS 是不被大公司认可的。
最近半年对原生 JS 有些生疏,得补一补。
得好好看看 ECMAScript 规范,把 JS 语言学透彻。
和原生情结对应的,是国内程序员特别喜欢研读源码,比如:
jQuery 源码分析系列
YUI 源码分析
Backbone 及 Underscore 源码解析
国内程序员对源码的热衷,可以拿 SeaJS 的数据来看:
fork 数高达 500 多,但 watch 数只有 1000 多,这其实是不正常的。相比而言,RequireJS 的数据正常很多:
简言之,国内与国外相比,有比较明显的两个特点:
- 对原生 JS 的学习心更强。
- 对类库、框架的源码更感兴趣。
这两点看起来很好,可是:
- 研究原生 JS 的优秀文章,大都出自国外程序员。
- 类库、框架,国人好像一直在研究,鲜有产出。
这肯定跟我们是社会主义国家有关,但我越来越怀疑这一点。
语言高手们
真正的语言高手不多,我不是,正在看这篇文章的你,很可能也不是,而且这一辈子可能都和我一样成为不了语言高手。
JavaScript(纯语言,不含 DOM 等)高手,在国内屈指可数。周爱民、白露飞、老赵、winter、月影、hax 等等等等,还有一些非常低调的隐士,这些人读 ECMAScript 规范像磕瓜子一样轻松,甚至能花几个晚上就像 BE 大神一样造出一门新语言来。你我等闲之辈,除了佩服之外,只能去谈恋爱。
工作中,我们需要语言高手吗?肯定的说,需要!可是,我们需要大量语言高手吗?除了特殊岗位,我相信很多公司都不需要!
题外话:目前为人知的 JS 语言高手里,除了周爱民,我最看好白露飞。这是一个有能力也有潜力造就 SuperScript 的人,最佩服的是他有实际行动,虽然方向未必正确。
我们的价值在哪
除了重新投胎,我们大部分人这辈子都不大可能有兴趣、有能力、有机缘去成为 BE 大神了。这是个残酷的现实,之所以残酷,只因视野太狭窄。
跳出来,天大地大。妹子多着呢,而且更漂亮。
Douglas Crockford 的 JS 能力很可能不及 winter,但 Douglas 规范并布道了 JSON 格式,天下留名,惠泽全球。
Jeremy Ashkenas 的 JS 能力可能还不如老赵,但 Jeremy 用很裸的代码写就了 Backbone,至少影响了一万人,给各个公司创造的价值总额很可能过千万美刀。
更不用说 Isaac Z. Schlueter,这小伙的 JS 功力很可能还不如我,但 Isaac 打造了 npm 生态圈,而我至今只有精力玩玩 Ant 和 Grunt。
有幸还看过 Google Docs 的前端源码,那代码和 Java 一样中规中矩。但在 RTE 领域,Google Docs 是王者,里面的专利都一堆一堆的……
特别想提及的还有开发 Evernote Clearly 的前端工程师,这小伙子的代码,我眼睁睁看着其从很生涩的 JS 代码,逐步演化成上万行牛逼代码还保持了相当好的可维护性。这份代码就像 Clearly 产品一样奕奕生光。
以及把 jQuery 用得出神入化的 Amazon!前不久那个秒杀国内互联网公司的悬浮菜单,可不是研究原生 JS 能想出来的。
还有 Facebook 的工程师们,Twitter 的工程师们…… 这些故事大家并不陌生。
不是总结的总结
不贬低语言高手们,也不反对去研究编译原理、ECMAScript 规范等。作为技术人员,我们需要这种精神。但是,这仅仅是很小很小很小很小很小的一个领域。并且在这个领域里,永远有比你更聪明的人。
具体对 JavaScript 语言来说,会用就好。搞清楚数据类型、作用域、闭包、原型链等基本概念,足矣。再深入进去,对绝大部分人来说,除了能满足下心理上的优越感,对实际工作不会有任何实质性帮助。
语言的本质和互联网一样,只是工具,是剪刀、石头、布。让张小泉去研究怎么做剪刀就好,我们用好剪头,去剪出各种窗花,更有意思。还有一个有趣的事实是,张小泉会造剪头,但剪不好窗花。
跳出很小很小很小很小很小的语言领域之外,天大地大。永远不要妄自菲薄,每个人身上都背负着独特的使命。去努力寻找自己的,不要老盯着别人的,否则就会成为观众。
好像跑题了。前面那个奇怪的现象,还有很多想吐槽的点。比如
- 源码只是很小很小的一部分。直接读源码往往无法领会类库框架的精髓。不读源码,用心去用,用时间去体味,偶尔针对性看看源码,往往更能掌握一个类库框架的真谛。
- 对社区的贡献可以有很多很多。你的使用经验、用心的 bug 提交、入乡随俗的 pull request、一个认真的评论等等,这些都比去研究什么狗屁源码更有价值。
- 一个 Java 高手如果说他会原生 Java,那一定会遭来很多人的围观。我还会谭浩强教我的 C 呢,那几个 if else 还有结构体、指针等谁不会。语言之外的领域知识,才真正造就了高手。对于前端来说,会原生 JS 只能打 20 分,另外 40 分需要你深入使用 CSS、DOM、HTML5 等领域知识,还有 20 分需要你对业务需求、架构设计等有真正的运用,这已经 80 分了,不要太贪心。剩下 20 分,只有两个字:勤奋。
题图:我的网名射雕的来历,喜欢郭靖,无底线。