曾探:愛JavaScript再多,它也只是生活的一部分

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/199456前端

曾探,2007年畢業於吉林大學軟件學院,目前就任於騰訊AlloyTeam前端團隊任高級工程師, 著有《JavaScript設計模式與開發實踐》一書。他曾參與WebQQ、QQ羣、Q+開發者網站、微雲、QQ興趣部落等大型項目的開發。有Java、Python和JavaScript的開發經驗,業餘做品有HTML5街頭霸王等。平時喜歡電影和音樂,業餘時間是一名健身教練。程序員

圖片描述

問:你是從何時開始編程的?什麼樣的契機讓你成爲了一名前端工程師?web

我是07年大學畢業以後纔開始編程。剛工做的時候作的是Java開發,當時幾乎尚未公司提供純粹的前端開發職位。若是作的是web項目,那麼在項目中程序員的工做都是從前端到數據庫一鍋端。數據庫

剛接觸JavaScript的時候,以爲開發很方便,不須要搭建任何環境,新建一個記事本就能夠開擼了。第一次接觸JavaScript時用2天時間寫了個貪食蛇,在IE6上跑的很歡快,當時以爲很神奇,也很開心。編程

我09年我開始專職作前端開發,在以前的工做仍是以Java爲主,有次恰好看到了一家公司招聘前端開發,就有了後來的事情。雖然如今偶爾還會用其餘語言寫點東西,但本身自己最喜歡的語言仍是JavaScript,這也是爲何我會從事前端開發的緣由。後端

至於爲何我會喜歡JavaScript,而不是別的語言,我倒沒有認真從語法、語言歷史什麼的角度去想過。也許就跟四月清晨遇到的百分百女孩同樣,總之你一眼就認定是她。設計模式

問:在學習設計模式的過程當中是否遇到過困難?你是如何克服的?對於正在閱讀《設計模式》和《JavaScript設計模式與開發實踐》的讀者,你有什麼建議?移動web開發

有時候我在QQ羣或者論壇之類的地方聽見一些新人說:「接下來1個月我要把設計模式學完。」其實設計模式這種東西很難用學完來做爲衡量標準。前端框架

若是你剛成爲程序員不久,實際上是沒有必要刻意去學習設計模式的。若是沒有必定程度的積累,看設計模式那些東西跟背書的效果差很少,結果都是無根的浮萍。設計模式自己是從代碼中總結而來的一些設計技巧,若是沒有代碼量的積累,咱們很難去真正理解這些模式。微信

在無數行代碼的積累以後,天然而然咱們會發現已經使用過一些模式,但缺乏一些總結,使用的方式和場景或許還有改進的餘地。這時候再去看一看設計模式之類的書籍或者文章,纔會有一種茅塞頓開的感受。

《設計模式》這本書自己仍是比較難懂的,這本書自己很薄,但字字珠璣,正由於如此,不少重要的知識和思想可能就在一、2句看似不起眼的話中。若是是閱讀這本書,建議精讀和反覆讀。暫時看不懂也沒有關係,先放着過一段時間再來看,或者是工做中遇到了相似的問題,再來翻翻這本書。

相反的是,《JavaScript設計模式與開發實踐》這本書寫得很是簡單,從讀者的反饋來看,這也是一本容易閱讀的書。裏面舉的例子並不複雜,並且大多都是跟實際開發相關的,因此閱讀起來也會有種親切感。這本書沒有特別的閱讀建議,從第一頁開始,或者從某一頁開始均可以。但最靠譜的,仍是從前言開始。

問:如何正確地使用設計模式? 如何避免過分設計?

這個問題在《JavaScript設計模式與開發實踐》的前言部分已經提到過。設計模式被一些人認爲只是誇誇其談的東西,他們認爲設計模式沒有太大的用途,畢竟一個徹底沒有接觸過設計模式的程序員,也許亦經歷過許多不錯的軟件系統開發。他們以爲刻意去使用設計模式反而可能會增長程序的複雜度。

對於開發中的一些狀況來講,咱們也許在一些特定的場景裏,一眼就能看出來使用什麼模式。另一些模式則是在代碼重構的時候才加上的。

咱們沒必要去糾結一開始就應該使用什麼模式,在首先完成功能需求的前提下,若是使用某種模式會在未來的項目維護階段爲咱們帶來好處,則能夠用這些模式來重構代碼。若是之前的代碼就完成了需求,並且在維護階段不會帶來大的變化,那咱們就沒有必要非得往模式上面套。

若是要避免在程序中形成過分設計,首先得熟悉這些模式的用途和場景。

有時候咱們將一些模式用在了錯誤的場景中,或者說在不應使用模式的地方刻意使用模式。特別是初學者在剛學會使用一個模式時,巴不得把全部的代碼都用這個模式來實現。錘子理論在這裏體現得很明顯:當咱們有了一把錘子,看什麼都是釘子。拿足球比賽的例子來講,咱們的目標只是進球,「下底傳中」這種「模式」僅僅是達到進球目標的一種手段。當咱們面臨密集防守時,下底傳中或許是一種好的選擇;但若是咱們的球員得到了一個直接面對對方守門員的單刀機會,那麼是否還要把球先傳向邊路隊友,再由邊路隊友來一個邊路傳中呢?答案是顯而易見的,模式應該用在正確的地方。而哪些纔算正確的地方,只有在咱們深入理解了模式的意圖以後,再結合項目的實際場景纔會知道。

問:JavaScript設計模式和其餘語言設計模式的主要區別是什麼?

關於設計模式的大多數討論都是源自C++,Java這些靜態類型語言,而JavaScript是一門動態類型語言。許多設計模式就是爲了解開對象之間的類型耦合而生的,而做爲動態類型語言的JavaScript沒有這種困擾,這說明JavaScript語言中的設計模式和其餘語言是很是不一樣的,從結構上已經沒有什麼可借鑑的東西了,可以借鑑的只有思想和解決問題的場景。

人類飛上天空須要藉助飛機等工具,而鳥兒天生就有翅膀。在Dota遊戲裏,牛頭人的人生目標是買一把跳刀(跳刀可使用跳躍技能),而敵法師天生就有跳躍技能。由於語言的不一樣,一些設計模式在另一些語言中的實現也許跟咱們在《設計模式》一書中看到的截然不同,這一點也不使人意外。

Google的研究總監Peter Norvig早在1996年一篇名爲「動態語言設計模式」的演講中,就指出了GoF所提出的23種設計模式,其中有16種在Lisp語言中已是自然的實現。好比,Command模式在Java中須要一個命令類,一個接收者類,一個調用者類。Command模式把運算塊封裝在命令對象的方法內,成爲該對象的行爲,並把命令對象四處傳遞。但在Lisp或者JavaScript這些把函數看成一等對象的語言中,函數便能封裝運算塊,而且函數能夠被當成對象同樣四處傳遞,這樣一來,命令模式在Lisp或者JavaScript中就成爲了一種隱形的模式。

在Java這種靜態編譯型語言中,沒法動態地給已存在的對象添加職責,因此通常經過包裝類的方式來實現裝飾者模式。但在JavaScript這種動態解釋型語言中,給對象動態添加職責是再簡單不過的事情。這就形成了JavaScript語言的裝飾者模式再也不關注於給對象動態添加職責,而是關注於給函數動態添加職責。

問:JavaScript有不少框架和庫,對於初級學習者來講,怎麼能在這些資源中選擇適合本身的來建立我的技術棧?

相比於其餘語言的開發者,JavaScript程序員確實會顯得比較「辛苦」。前端框架和庫的發展太快了,好像jQuery的流行仍是昨天的事情,今天又涌現了Backbone、Angular、React這些框架。對初學者來講,很容易讓人迷茫,不知道學習哪一個框架。個人建議是,優先根據項目需求選擇,若是你接手的項目正在使用Angular.js,那就是學習Angular.js的好機會。

若是還有一些業餘時間,能夠選擇一些最流行的框架來學習,它們之因此可以在浩瀚的框架海洋中脫穎而出,確定是有它們的優勢的。好比咱們找準了Angular.js來學習,能夠先用Angular.js來作幾個demo頁面,而後想辦法在一個合適的項目中使用。熟悉語法以後能夠閱讀它的源代碼,若是有時間和精力,能夠模仿它寫一個相似的框架,在這個過程以後,或許你還能夠對它加以改進。

問:AlloyTeam如今有多少人?由什麼樣的工程師組成?

AlloyTeam目前有50多人,團隊既有94後的小鮮肉,也有70後的大叔,女前端工程師則既有美麗師姐、也有全民校花,還有萌妹子。你們的技術從Web前端、後端到客戶端,端端精通,既有對基礎框架有研究的同窗,也有對計算機圖形處理感興趣的同窗,既有喜歡作工具的,也有喜歡作遊戲的,技術專長可謂兼容幷包。

問:AlloyTeam的名字從何而來?大家團隊的主要工做內容是什麼?

咱們團隊的代號叫AlloyTeam,不少人很好奇騰訊AlloyTeam名字的含義和由來,其實這裏還真有一段小歷史。2008那年咱們團隊開始研發WebQQ,WebQQ是業界首個將WebOS、雲計算、AppStore和Web開放平臺整合在一塊兒的產品,因此咱們就給WebQQ起了一個開發代號——AlloyOS。Alloy是合金、合鑄、合成、聚合的意思,正好寓意咱們的WebQQ是將公司內、外的各類互聯網服務產品合鑄成一個爲用戶提供一站式的在線生活的WebOS平臺。因此咱們的團隊也就天然成了AlloyTeam,同時AlloyTeam這名字還有一個寓意:就是將不一樣成員的聰明才智,以及不一樣技術聚合在一塊兒,以產生更強的合金特性,從而成爲堅如盤石的團隊。

目前咱們團隊主要負責手機QQ中的移動Web業務以及Hybrid App的開發工做,好比:興趣部落、QQ羣等等。除了平常業務開發以外,也鼓勵你們作一些各個方面的自由開源項目,無論是能夠提升你們工做效率的開發工具,仍是能對業界產生影響力的開源項目,小到組件,大到遊戲,咱們都很是支持你們去作。團隊內部很是平等和自由,也鼓勵你們分享、佈道、寫書。另外,AlloyTeam也隨時歡迎優秀的Web前端小夥伴加入。

問:現在,移動互聯網已經變得愈來愈重要,在這種狀況下前端工程師會面臨什麼樣的機會和挑戰?

的確是這樣,就我我的而言,除了上班時間已經不多打開電腦了。原先用PC能作的事情,如今手機幾乎所有能夠完成,能夠預見這個趨勢在未來還會更加明顯。在這種狀況下,原先在PC上開發的前端工程師不少都轉向了移動web開發。包括AlloyTeam也是這樣,如今絕大部分時間都在作移動端開發。對於前端工程師來講,可能要學習一些新的知識,這不是壞事,也不難,程序員應該保持學習的心態。無論是PC開發仍是移動開發,咱們都在用相同的方式來改變人們的生活。

問:程序員給人的印象一般都是不善交際、不善運動,生活習慣不規律,這些習慣也潛移默化地影響着程序員羣體的健康。你在業餘時間是一位健身教練,請問運動帶給你的好處都有哪些?

我認識許多很是有才的程序員,程序員是一個至關聰明的羣體,聰明的人能作好許多事情,而不是僅僅寫代碼。不過也許大部分人都把太多重心放在了工做上面,這是好事,但也不全是好事。程序員的職業特色註定對健康的損害比較大,從25歲開始人的器官開始不可逆轉的老化以後,久坐和不運動帶來的危害更大。因此程序員更要有意識地多運動,至少運動會給你一個跳動更強烈的心臟,能夠背女友越過某個路上的小水溝。固然,加班趕項目的時候也比別人抗得久。

問:請問對於程序員來講,工做和運動是否有能夠兼顧?對於想要積極鍛鍊的程序員來講,你有哪些建議?

IT行業基本上只能在大城市生活和工做。大城市的房價物價註定咱們工做得努力和辛苦。這種狀況下,許多人徹底把太多精力放在了工做上面,而忽略了生活自己。工做本該只是生活的一部分,也許咱們應該有一個更加平和的心態,努力工做和享受生活並不矛盾。在業餘時間有一些本身的愛好,或是找一點適合本身的運動,不光是爲了更好的工做,還由於這些愛好自己也是生活的另外一部分。

對於開始有意識開始鍛鍊的程序員,這是一個很好的起點。不過現實中的大部分人狀況都是三天打魚兩天曬網。若是真想經過運動來改善體質或者豐富業餘生活,首先必定要保證本身能堅持下來。不少人剛開始鍛鍊的時候很是有激情,一段時間後就被本身以各類理由說服放棄了鍛鍊,好比要加班,有約會,感冒了,有聚餐各類各樣的緣由。這些事情確定是會遇到的,但無論怎樣,一週抽出5個小時來鍛鍊身體其實確定是沒問題的。

其次,無論什麼運動都是一門科學。拿健身來說,首先要搞清楚身體跟新陳代謝有關的基本知識,搞清楚動做標準,這樣纔會有效果並且不容易弄傷關節和肌肉。若是有條件的話,能夠去健身房裏面請一個專業教練,有教練和沒有教練的區別太大了。相信堅持一段時間後,都能看到本身形貌和精神的改變,直到健身成爲一種習慣。


更多精彩,加入圖靈訪談微信!

圖片描述

相關文章
相關標籤/搜索