一名靠譜的JavaScript程序員應備的素質

這篇文章寫於2010年作者工作在Cloudera期間,當時node.js還沒有流行,很多人還瞧不上javascript這門簡陋的腳本,文章提出應該重視JavaScript,並提出成爲一名靠譜前端工程應具備哪些能力。雖然年代似乎已經有些遙遠,但文中的一些觀點但現在仍然適用。

20131221174104919101.JPG

  當我嘗試爲Cloudera招一個JavaScript程序員時,我發現這項任務相當艱鉅。找到一名真正理解JavaScript的人非常困難。不過,這也證明了一件非常簡單的事情,是時侯去研究JavaScript,併成爲這個領域的專家了。過去的幾個月,我發現了一些天才JS程序員並嘗試去錄用他們。顯然他們有非常多的選擇。他們被各種公司的Offer困擾着。作爲一個想招他們進來的人,這讓我想起了第一次互聯網泡沫時侯的一些事。(我承諾給其中一位侯選人一輛凱迪拉克,但最終沒有打動他)。最後他進入了另一家初創型公司。

  比較關鍵的一點是:作爲一名JavaScript專家並不能只知道JavaScript. 如果你想專爲一名靠譜的前端工程師 ,你需要在更多方面做得更好一點, 可能這些都沒有寫在JD裏面,至少那些要求表現得沒有JS那樣突出。有些東西你只需要瞭解一下,但另外一些你需要精通(顯然你需要非常精通JS,如果你想成爲一名真正的專家)。 其實,我只是一個普通人,我有博客,其他方面都跟一般人體差不多,但當我把跟HR說出我的要求時,HR告訴我“這個人根本不存在,你描述的是一個超人” 我又告訴他這是我每天都在乾的。 他又堅持說“你真是大神一樣的人”

  最後能稱上JavaScript專家的人,終究需要一些什麼技術,每天究竟需要做一些什麼事,怎麼判斷哪些是天才,哪些是菜鳥,哪些是一般人,這是我列的一張清單:

  1. 你需要知道HTML, 你需要非常精通它。你需要知道 document types的作用和效果。 你需要知道即使你沒有寫TBODY,瀏覽器也會自動將他補上。你需要關注瀏覽器每一次升級所做的變動。學習這些東西,至少在我這兒你得這樣。在你工作的時侯花點時間去研究下。

  2. 你需要了解CSS, 這樣你才不至於後悔。我工作期間碰到的最多的問題就是跨瀏覽器的CSS兼容問題。一段同樣的樣式在不同瀏覽器中顯示是不一樣的。你添加了一個負的margin-top值去實現排版,猜猜怎麼了? 用戶永遠也點不到這個東西了,儘管你加了一個z-index,儘管你可以看見這個該死的東西。 或者你加了一組可以自動適應的CSS代碼,但你要祈禱你的老闆沒有在IE裏去看你的網頁。最重要的一點,你要了解CSS,這是最有價值的一項技術。你不需要非常精通,但至少能和草圖做得一模一樣,否則其他的事就不用提了。

  3. 你需要了解瀏覽器,你需要明白在IE瀏覽器中,如果你把 “” 放到DIV中,IE不會把它轉換爲DOM元素。但放到header裏就可以,因爲這東西是隻讀的。你需要明白在Array數組和Object最後加個逗號會讓IE出錯。你需要明白IE裏iframes裏的元素會有偏移問題。而且並不是只有IE會出問題,Firefox在清除浮動時也會出問題,Chrome裏沒事。你需要了解最新的webkit那些驚人的特性在手機和safari上面不一定有。

  4. 我提過JavaScript嗎?我們需要了解JavaScript是怎樣工作的,你需要知道傳入方法(function)的參數(arguments)對象是有長度的,而且是可以枚舉的, 但它絕不是數組對象,更進一步,你需要知道如何將他轉換爲數組。你需要知道prototype的工作機制,並且知道在不借助框架的情況下如何使用它,並且知道它的作用和優勢是什麼。你需要知道垃圾回收(garbage collect)什麼時侯起作用,這點很重要,還有它什麼時侯不工作。你需要非常善長抽象(abstraction)。你需要非常善於爲你自己和別人設計API。你需要了解怎樣測試和管理你的代碼。

  5. 你需要有像樣的設計能力(design): 信息流, 圖像設計, 用戶體驗設計, 代碼設計。 你需要能向用戶, 客戶, 陌生人, 專家(隨便什麼人)提出正確的問題並有能力去解決他們的問題。不僅是講出你的想法,你還要想辦法去呈現給他們。你需要能操作Illustrator快速地把各種框架草圖(wireframes)拼出一個方案來,然後你可以到PhotShop中(這個你需要熟練掌握)把設計圖畫出來(visual style)。你不需要成爲世界上最好的設計師,我當然也不是。但你要有能力告訴他們什麼是好的,什麼是壞,什麼是傑出的設計。如果你能管理好你自己好的設計,你就牛了。

  6. 你需要對服務器端非常自信。其實你並不是每天都只是寫寫JavaScript。大多數前端工作都只需要你花一半的時間來寫JavaScript,另外一些時間你需要處理一些其它相關語言的代碼. Python, Ruby, Java, PHP.. 如果你只會一種語言,那根本不值一提。如果你只會JavaScript和PHP, 你馬上會有一些需要用到其他語言的任務(其實這是一個很好學習新事物的機會)。應該會用一種框架,但是隻知道一種的話也不算真正的瞭解JavaScript.

  7. 然後還有許多其他的東西你需要掌握。你需要了解Git。Git很牛,我知道你經常聽別人這樣說,如果你發現一個保守的人拒絕去學新的知識擴展自己,你需要讓他明白他的錯誤。你需要知道一些shell腳本。在沒有記事本,TextMate或其他編輯器的情況下,你需要能夠打開VI或者Emacs去修改一個配置文件(conf)。你需要知道怎麼去編繹一些東西,怎麼樣去截取一個日誌文件,解壓一個壓縮包(tarball),加密一些東西,開啓並配置服務。你需要有能力去關掉(kill)進程並跟蹤調試一個堆棧。

  我甚至算不上一個熟悉敏捷開發流程,參與過開源軟件項目或發佈新版本的程序員,不過如果你認爲你能夠匹配我所列出的7條中的5條,或者全部匹配。那麼,恭喜你,你就是傳說中的大神。

  那麼你成爲大神後你會得到什麼?你怎麼知道多年處理那些乏味的IE6的BUG是值得的?好吧,你得到的是,你會每週都收到HR的郵件和電話。(這其實並不稀奇,他們就像懂你的銷售)。如果你想換工作的時侯,你甚至什麼都不用做,告訴一小搓朋友或者發到你的twitter上,然後很多扇門就在你面前打開了。你會有些新朋友,他們希望你加入他們的事業。當你加入時你會成爲傳說中的元老。你會得到股票,並設計一款產品的最初版本。你會得到一輛1967年的凱迪拉克作爲簽約的報酬。在公司剛起步時我曾經誘惑過這樣的傢伙。大神是一名還不存在的產品的前端工程師。他指出一兩年後這東西值很多美元,然後多年以後,他可以告訴別人,“這是我做的”。現在已經有這樣的一些人了,像已經有無數人使用的Twitter, Facebook, Gamil和Google Maps,像Iphone的界面,Github, YouTube,肯定有人說,“這是我做的”。

  這個人可能就是你。

  原文 clientcide.com


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章