今天發了一條微博:
會原生 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 分,只有兩個字:勤奮。
題圖:我的網名射鵰的來歷,喜歡郭靖,無底線。