對話《JavaScript高階程式設計》作者Nicholas C. Zakas

ituring發表於2012-09-17

注:以下根據Nicholas C. Zakas回覆圖靈社群訪談郵件的原文翻譯。譯者:李鬆峰。

Zakas:很高興收到你的郵件,而且聽說我的書那麼受歡迎也很開心。以下是對問題的回答。

Q1:對各種JavaScript庫的優點和缺點一直存在很多爭論。在您看來,開發人員應該怎麼選擇合適的庫?

Zakas:選擇JavaScript庫的時候,有幾個非常重要的方面要考慮。首先,就是時間問題,也就是你的專案多長時間必須做完?如果時間很短,那最好選擇你最熟悉的JavaScript庫。如果時間不那麼緊迫,那你可以研究一下別的庫。此時,必須要回答幾個問題。還有誰在使用這個JavaScript庫?這個庫有人在不斷完善嗎?這個庫的文件是否完整詳細?這個庫的背後有沒有一個社群,假如你遇到了問題,能不能獲得該社群的支援?是否容易找到具有使用這個庫經驗的工程師?這個庫能不能解決你的所有問題,還是隻能解決其中一部分?所有這些都是在選擇某個JavaScript庫時需要考慮的重要因素。

Q2:你對HTML5的未來怎麼看?現在的宣傳是不是太過分了?

Zakas:HTML5對Web發展是一件好事兒。但不好的是,一些外行的非技術人員,不分青紅皁白地給很多無關的東西都扣上“HTML5”的帽子,這才搞得HTML5這個概念滿天飛。這與幾年前“Ajax”的情況非常相似。從某種角度看,確實宣傳上有點過了,彷彿HTML5會徹底改變每個人的生活。事實並非如此。HTML5的意義在於為開發人員提供了更多的工具,利用這些工具能夠建立更有吸引力的使用者體驗。

Q3:看來,Mobile Web(移動網際網路)開發會成為下一行業焦點,你覺得呢?

Zakas:移動網際網路開發已經是焦點了。今天,誰不關注移動使用者,誰就要被時代拋棄。移動網際網路可不是曇花一現,它將是一個時代。如果你真是在開發Web應用,那麼就必須考慮移動體驗,否則就會讓別人搶佔先機。

Q4:現在有很多基於JavaScript改進的語言,比如Dart、 CoffeeScript,等等。你認為JavaScript今後的路會朝著哪方面發展呢?是更加類似於JVM這種的中間層,還是仍然維持一個強大靈活的程式語言存在?或者說,對於專注於JavaScript的前端工程師來說,是否應該投入大精力去研究和使用CoffeeScript這種語言來簡化工作,而不是糾結於JavaScript本身可能的繁複解決方案呢?

Zakas:我沒覺得JavaScript有一天只會被當成一箇中間層。Dart和CoffeeScript很引人關注,這說明開發人員可能更希望JavaScript能多適應一些應用場景。最終,我想JavaScript會博採眾長,吸納其他語言中更流行的正規化,從而使語言核心更完善。但我不認為將來的Web開發人員會只用Dart或CoffeeScript或者其他能編譯為JavaScript的語言寫程式碼。

Q5:你覺得Node.js怎麼樣?它會在伺服器端開發中發揮重要作用嗎?將來,Web前、後端開發真能只用一種語言來做嗎?

Zakas:我認為Node.js對未來Web應用的重要性難以估量。開發人員一直在尋找一個可以替代PHP的方案,以便更迅速、更容易地介入伺服器端開發。而在伺服器上寫JavaScript程式碼就是一種方案。Node.js不只是一個伺服器端的JavaScript引擎,它更為高效能、高擴縮的Web應用提供了一個解決方案。正因為如此,很多JavaScript愛好者可能會轉型為後端開發工程師。這樣一來,前、後端的溝通會更加順暢、直接,無論是面對面溝通,還是通過程式碼交流。

Q6:請問用JavaScript實現一些實用演算法——比如壓縮ZIP格式,是否可行?

Zakas:不僅可行,而且已經有人做到了!斯圖爾特•奈特利(Stuart Knightley)就建立了一個叫JSZip(http://stuartk.com/jszip/)的專案,讓我們能夠用JavaScript來壓縮檔案。我認為未來還會出現很多類似實用演算法的JavaScript實現。在實現某些複雜的演算法時,可以不使用JavaScript,但這種可能性是永遠存在的。

Q7:是否有必要強調JavaScript編碼風格的一致性?在構建一個大型B/S系統時,如何以最佳方式劃分HTML、CSS和JavaScript人員的職責?

Zakas:我覺得任何語言都需要強調編碼風格的一致性。只要是團隊開發,每個人都以相同方式編寫程式碼就是至關重要的。這樣大家才能方便地互相看懂和維護對方的程式碼。在一個團隊中,HTML、CSS和JavaScript的編碼風格都應該保持一致。這也是我為什麼要寫《可維護JavaScript》(Maintainable JavaScript)這本新書的原因,這本書裡就解釋了作為團隊一分子,應該怎麼寫JavaScript。不過,同樣的原則也適用於任何語言。

Q8:非同步、回撥程式設計方式正被廣泛使用,但很容易出現複雜的回撥函式。雖然有deferred和promise這些模式,但對開發人員還是不小的挑戰,請問未來是否有可能在語言層面有所改觀?

Zakas:經常有人提出建議,希望新增一些語言特性來簡化非同步程式設計工作。JavaScript語言層面到底會不會增加這種特性,現在還說不好,只能拭目以待。目前,有很多人認為回撥和非同步程式設計值得提倡,但我不那麼認為(這句話這樣譯,對否?——譯者注)。如果幾乎所有方法都需要一個回撥,那會導致程式碼很難除錯和維護。我確實希望在不久的將來,JavaScript能在語言層面給出一些解決方案。

Q9:今天,你涉足Web開發已超過15年,你當初怎麼會選擇這個行業呢?能否給中國的開發人員一些職業規劃方面的建議(有朝一日也能成為像你一樣的專家)?

Zakas:我進入這一行,純屬誤打誤撞。上大學的時候,我的專業是電腦科學,但Pascal和C語言這些課讓我感覺很無聊。我討厭整天坐在黑底白字的電腦螢幕前。當時,我想跟高中同學保持聯絡,有人告訴我有一種新技術,說是叫Web。於是 ,1996年我在AOL上建立了自己的第一個網頁,然後把網址發給同學,以便他們知道我的近況。我還想知道大家希望通過這個網頁瞭解點其他什麼情況,結果維護這個網頁就成了我的業餘工作。我不斷研究、嘗試,在此期間自學了JavaScript。結果大學一畢業,我就知道自己得在網際網路行業謀份差事了。

我對Web開發人員最大的建議就是:熱愛你的工作。熱愛跨瀏覽器開發帶來的挑戰、熱愛網際網路技術的種種異端,熱愛業內的同行,熱愛你的工具。網際網路發展太快了,如果你不熱愛它的話,不可能跟上它的步伐。這意味著你必須多閱讀,多動手,保證自己的才能與日俱增。下了班也不能閒著,要做一些對自己有用的事兒。可以參與一些開源軟體的開發,讀讀好書,看看牛人的部落格。經常參加一些會議,看看別人都在幹什麼。要想讓自己快速成長,有很多事兒可以去做,而且付出一定會有回報。

Q10:迄今為止,你已經寫了4本JavaScript書。你怎麼會想起來寫這些書呢,眼下還有沒有寫書的計劃?

Zakas:我從來沒有真正有過寫書計劃。我第一份工作只幹了8個月就下崗了(因為公司散夥了)。這就是我當時的處境,大學畢業才8個月,而且又失了業。我感覺真正的學習才剛剛開始。於是我就給自己找事兒做,也就是把以前做過的事兒都寫出來。寫一篇,就在我的網站(http://nczonline.net)上貼一篇。然後告訴以前的同事都來看。一個朋友回信說:“嘿,你寫得非常好,為什麼不給雜誌投稿呢?“於是,我就上網找到幾個徵稿的線上雜誌。第一篇文章發表在DevX,後來又有幾篇投給了WebReference。我的文章很受好評,因此我也非常樂意接著寫下去。後來有一天,我看了WebReference的一篇文章,說有另一位作者,她把自己寫過的文章集合起來出了一本書。我心想:“等一下,把文章集合在一塊就可以出一本書?這事兒我也能幹吶!”於是,我就給自己定了一個目標,堅持寫,寫本書出來。這就是後來的《JavaScript高階程式設計》(Professional JavaScript for Web Developers)。

寫另外三本書則隔了很久。《Ajax高階程式設計》(Professional Ajax)實際上是Wrox的編輯策劃的一個選題,因為我出版過一本書,所以他就找到了我。一開始我拒絕了,因為覺得可寫的東西還不夠多。但他堅持讓我寫,我最終還是應承下來。我很高興又寫了這本書,因為它後來也非常受歡迎。《高效能JavaScript》(High Performance JavaScript)是通過雅虎出版的,當時是雅虎內部人員聯絡我寫的。顯然,另外一些人也希望寫點相關的東西放在書裡,但當時大家都沒有時間動筆。所以,我就在他們已有成果的基礎上做些修改,改到自己覺得舒服為止。後來又找了幾位合著者,共同完成了這本書。

《可維護JavaScript》(Maintainable JavaScript)是我最近才出版的一本書,內容源於6年前的一次演講。我一直都認為這個主題很值得寫,寫成一本書都沒問題,但就是不知道從何寫起。去年12月的一個週六,我一覺醒來,突然覺得才思泉湧,滿腦子都是寫這本書的想法。我乾脆起床,在電腦前坐了一整天,終於把腦子裡的想法都落實成了文字。那一天,我寫了大約45頁。12月份剩下的時間我都花在了寫書上,結果不到一個月就寫完了這本書。

目前,我還沒有再寫書的計劃。我準備先擱筆一段時間,因為最近我一直都在寫,都連續寫了一年多了。確實有幾個主題值得寫書,但在此之前,我得等待靈感爆發的那一刻。

Q11:能否談談你的公司Nicholas C. Zakas Consulting?很多中國程式設計師也有創業的夢想,能分享一下你的經驗嗎?

Zakas:我的諮詢公司實際上只有我一個人。我依靠自己的經驗為網際網路公司提供前端技術建議,包括效能評估、架構設計與評審、推行最佳實踐等專業Web開發公司可能需要的各方面幫助。這為我積累了寶貴的經驗,讓我得以接觸各式各樣的公司,結識他們的團隊,瞭解他們正在做哪些激動人心的事情。

對於想自己開公司的人,我可以給出的最好建議,就是要有自知之明。你必須得知道一些事兒,比如自己開公司沒有工資,有時候一連幾個月可能都沒有收入。自己開公司要應對很多風險,如果你後面有家人支援,可能風險會小得多。我創業的時機很好,因為我還沒有成家,也沒有其他經濟負擔,所以我可以承受創業不成功再回頭找工作的風險。但並不是所有人都像我一樣。如果你真心喜歡做點什麼,堅信朝哪個方向努力一定成功,覺得自己能承受得了風險,那就不要猶豫。

Q12:你經常上哪些線上社群?請給中國讀者推薦一些有用的線上資源。

Zakas:我最近沒怎麼上網上社群,我是Twitter控,關注那些能告訴我Web技術發展走向的人。我很願意多花時間線上下跟人交流,比如在公司裡,或者在會場上,這樣可以瞭解到最前沿的東西。

我泡GitHub的時間非常多,有時候是看別人的專案,有時候是弄自己的。我在上面經常看到有人討論程式碼該怎麼寫,這樣寫是為什麼之類的討論,都非常精彩。而通過看別人的程式碼真的能學習到很多東西。在碰巧遇見自己有感覺的專案,而又認為自己可以提供一些不同思路時,我甚至會為這些專案貢獻一些程式碼。

相關文章