- AngularJS深度剖析與最佳實(shí)踐
- 雪狼 破狼 彭洪偉
- 965字
- 2019-01-01 01:21:30
前 言
新時(shí)代
新挑戰(zhàn)
時(shí)代已經(jīng)不同了!
17年前,當(dāng)我的第一個(gè)作品推入市場的時(shí)候,互聯(lián)網(wǎng)才剛剛傳入中國。
那時(shí)候的軟件不需要聯(lián)網(wǎng),每個(gè)用戶也不需要知道其他用戶的存在。
那時(shí)候只需要考慮PC運(yùn)行環(huán)境,而需要考慮的屏幕分辨率也只有區(qū)區(qū)三種。
那時(shí)候的軟件項(xiàng)目組多則十幾人,少則一人,而發(fā)布周期常常會(huì)達(dá)到半年之久。
現(xiàn)在,一切都不同了。
現(xiàn)在,連一個(gè)手機(jī)電筒軟件都在偷偷聯(lián)網(wǎng),不能聯(lián)網(wǎng)的游戲也已經(jīng)是老古董的代名詞。
現(xiàn)在,軟件不但運(yùn)行在PC上,還要運(yùn)行在智能手機(jī)上,運(yùn)行在各種Pad上,屏幕分辨率更是多到讓研發(fā)和測試工程師發(fā)怵的地步。
現(xiàn)在,外界看到的產(chǎn)品其實(shí)只是冰山一角,它背后還有很多子系統(tǒng)緊密協(xié)作來提供支持,需求和架構(gòu)的復(fù)雜度也暴增。
但最大的挑戰(zhàn)恐怕還是來自發(fā)布周期—一期版本在一個(gè)月內(nèi)上線已是常態(tài),而修復(fù)bug的時(shí)間限制則往往以小時(shí)計(jì),甚至以分鐘計(jì)。
沒錯(cuò),這些都是新的挑戰(zhàn)!好在,我們也有了新技術(shù)!
新技術(shù)
這17年間,軟件業(yè)最大的技術(shù)革命,當(dāng)然首推互聯(lián)網(wǎng)。
互聯(lián)網(wǎng)不但拓展了軟件業(yè)的業(yè)務(wù)范圍,更改變了程序員獲取知識(shí)和解決問題的方式。
如今,一個(gè)不會(huì)Google(以及翻墻),沒上過GitHub,不知道Stackoverflow的程序員很難想象會(huì)有什么發(fā)展空間。
排在第二位的技術(shù)革命,當(dāng)推移動(dòng)互聯(lián)網(wǎng)以及智能終端。這場革命不但把曾經(jīng)的王者諾基亞打落凡塵,而且讓蘋果重新登上王位。
這兩場技術(shù)革命讓開源運(yùn)動(dòng)遍地開花,更催生了無數(shù)的新技術(shù)。
且不提HTTP/HTML/JavaScript/CSS這些耳熟能詳?shù)幕ヂ?lián)網(wǎng)基石,就連在互聯(lián)網(wǎng)革命爆發(fā)之前已經(jīng)就已經(jīng)相當(dāng)成熟的OO領(lǐng)域也有了很大的進(jìn)展。
以MVC為例,它不但衍生出MVP、MVVM等很多變種,而且從后端領(lǐng)域擴(kuò)展到了前端領(lǐng)域。而現(xiàn)在日益火爆的Angular,正是MVC在前端領(lǐng)域的代表作之一。
一個(gè)“極客”總是癡迷于各種“漂亮”的技術(shù),而Angular當(dāng)之無愧地是其中之一,它可供借鑒的地方很多:
? 如何彌補(bǔ)語言的先天不足。
? 如何干凈漂亮地解耦。
? 如何設(shè)計(jì)“小而美”的類/代碼塊。
所以,即使你還沒有下決心把Angular應(yīng)用到項(xiàng)目中,也可以在學(xué)習(xí)Angular的過程中獲得一些啟迪,幫助你重構(gòu)現(xiàn)有項(xiàng)目。
面對技術(shù)的快速進(jìn)步,有人會(huì)感到恐慌,有人會(huì)盲目地追蹤一切新技術(shù),而真正的極客會(huì)看到“新”技術(shù)中那些“不變”的元素,會(huì)在“新挑戰(zhàn)”中看到“新機(jī)遇”,并且把握。
新機(jī)遇
一方面出現(xiàn)了前所未有的挑戰(zhàn),另一方面出現(xiàn)了前所未有的技術(shù),這樣的機(jī)遇并不多,“極客”們歡呼雀躍。
對于公司,它將影響產(chǎn)品形態(tài)、開發(fā)速度和產(chǎn)品品質(zhì),也會(huì)對團(tuán)隊(duì)的組織架構(gòu)帶來改變。比如,伴隨著設(shè)備的多樣化,網(wǎng)絡(luò)服務(wù)的訪問入口變得多樣化:不但需要有供電腦訪問的網(wǎng)站,還需要供手機(jī)訪問的網(wǎng)站、供Pad訪問的網(wǎng)站,對于一些追求極致用戶體驗(yàn)的公司來說,還會(huì)提供給安卓設(shè)備用的App、給蘋果設(shè)備用的App。
作為開發(fā)人員,也許你會(huì)看到或正在經(jīng)歷一個(gè)工作量暴增的時(shí)代,但是,不要緊張,事情沒那么壞。在新時(shí)代,有一項(xiàng)重要且迅速成長的技術(shù)革新,那就是“前后端分離架構(gòu)”,它可以有效遏制工作量的暴增。“前后端分離架構(gòu)”正是伴隨著“前端MVC”的成長而成長的。
它的原理很簡單:雖然多出了很多訪問入口,但是其背后的業(yè)務(wù)邏輯并沒有本質(zhì)性變化,那么,我們是否可以讓這一套業(yè)務(wù)邏輯為多種不同形態(tài)的終端服務(wù)呢?答案是肯定的,那就是讓后端只提供跟業(yè)務(wù)邏輯緊密相關(guān)的那部分API,而用戶交互等非核心邏輯則交給前端程序來完成。
這樣,我們的工作量并不會(huì)成倍增長,而是可以先著重開發(fā)一個(gè)版本,讓后端API和一種形態(tài)的前端應(yīng)用變得成熟,然后再去開發(fā)其他形態(tài)的前端應(yīng)用。而這些其他形態(tài)的前端程序的工作量和風(fēng)險(xiǎn)都比較容易得到控制。
但是,根據(jù)康威定律,在新的程序架構(gòu)下,項(xiàng)目的組織架構(gòu)甚至整個(gè)公司的組織架構(gòu)都將發(fā)生相應(yīng)的變化,而最顯著的變化就是出現(xiàn)了專門的前端工程師。前端工程師往往不是零基礎(chǔ)開始的,一小部分來自原來負(fù)責(zé)切圖或?qū)慗avaScript特效的工程師,不過大部分是從以前開發(fā)Web應(yīng)用的程序員轉(zhuǎn)型而來的。
無論對于公司還是個(gè)人,“前端MVC”以及相應(yīng)的“前后端分離架構(gòu)”都是一個(gè)新的機(jī)遇。不思進(jìn)取的王者終會(huì)沒落,勤奮好學(xué)的新星將會(huì)崛起,希望本書能有幸成為你的助力。
致讀者
寫給想轉(zhuǎn)職或兼修前端的Web工程師
本書面向的讀者,第一大群體是Web工程師。“前后端分離架構(gòu)”出現(xiàn)之前,在大多數(shù)Web應(yīng)用中,無論是核心的業(yè)務(wù)邏輯,還是表現(xiàn)層的交互邏輯,都是完全運(yùn)行在服務(wù)端的。寫這類程序的程序員就是這里所說的Web工程師。
隨著“前后端分離架構(gòu)”的普及,原來的開發(fā)方式將主動(dòng)或被迫轉(zhuǎn)變。本書將通過實(shí)例引導(dǎo)你完成到“前后端分離架構(gòu)”的思維轉(zhuǎn)變,以及與此相關(guān)的技術(shù)。
如果你是個(gè)Web工程師,在讀本書的時(shí)候請留意用戶交互邏輯是如何完全移交給前端程序的,而后端程序又做了哪些精簡,特別要注意體會(huì)模塊職責(zé)的單一化、專業(yè)化趨勢。
對于部分轉(zhuǎn)職過來的Web工程師,除了轉(zhuǎn)換思維以外,還有一大挑戰(zhàn)是前端龐雜的知識(shí)體系:HTML/CSS/JavaScript/前端工具鏈/瀏覽器兼容性等,每一個(gè)領(lǐng)域都相當(dāng)龐大。
在本書中,我們無法對此展開講解,但這些知識(shí)對于做實(shí)際項(xiàng)目又是必需的。所以,我們只能在附錄中提供一些重要的技術(shù)要點(diǎn)和“坑”,并且給出一些在線學(xué)習(xí)資源和書單。這些大部分都是從我們開展培訓(xùn)時(shí)所使用的課件改編而來的,具有很強(qiáng)的實(shí)戰(zhàn)性、實(shí)用性。希望可以為你提供一些第三方資料,作為進(jìn)一步學(xué)習(xí)的起點(diǎn)。
寫給想進(jìn)階為專業(yè)前端的切圖師
在很多開發(fā)組中,切圖師往往由初級(jí)程序員或美工擔(dān)任,有沒有想過自己將來向哪里發(fā)展?除了面向?qū)ο蟆㈨?xiàng)目管理等必學(xué)的基礎(chǔ)技能之外,還可以學(xué)習(xí)數(shù)據(jù)庫、后端框架、安全技術(shù)等,轉(zhuǎn)職為后端工程師。也可以學(xué)習(xí)HTML/CSS/JavaScript、用戶體驗(yàn)、交互設(shè)計(jì)、前端框架等,轉(zhuǎn)職為前端工程師。
當(dāng)然,如果你足夠聰明和有足夠的進(jìn)取心,你也可以兩者兼修,成為一名全棧工程師。不過,相對來說,前端這條路徑可能更加平緩。而且,這幾年前端職位正逐漸火爆,從個(gè)人職業(yè)發(fā)展來說,這也是個(gè)不錯(cuò)的選擇,過一段時(shí)間后未必再有這樣好的機(jī)遇。從切圖師到前端,這條路并非荊棘重重。事實(shí)上,沒有傳統(tǒng)Web工程師的思維定勢,這反倒會(huì)是個(gè)優(yōu)點(diǎn)。在筆者的編程、咨詢和教學(xué)過程中,曾接觸過一些對Angular感興趣的人,總體上說,轉(zhuǎn)變思維比導(dǎo)入新思維的難度更大。圈子里還常流傳一些無稽之談,比如,Angular是Google開發(fā)的,面向的是Google中那些妖怪級(jí)程序員。那都是亂傳的,沒那么恐怖。
我寫下這些,是希望你們可以輕裝上陣,Angular的很多設(shè)計(jì)都是遵循“最小意外”原則的,靠直覺就可以掌握,“高估難度”有害無益。
不過,難度仍然是有的。讀本書之前,你至少應(yīng)該已經(jīng)熟悉了JavaScript語法,對Angular的各種概念有了大致的了解。如果你對很多新名詞不知所云,那么建議先去翻閱一下附錄中的書籍,瀏覽一下網(wǎng)上關(guān)于Angular入門的文章。
對于切圖師來說,MVC方面的基礎(chǔ)往往會(huì)成為短板,而JavaScript中一些詭異的特性也常常帶來困擾。所以,本書會(huì)穿插一些這方面的簡短知識(shí)。但是,對于一個(gè)立志成為“極客”的初級(jí)程序員來說,這仍然是不夠的,所以,在附錄中我們還提供了一些網(wǎng)址和書單,希望本書能幫你開啟職業(yè)生涯的新階段。
2.0要來了,本書會(huì)過時(shí)嗎?
Angular 2.x已經(jīng)進(jìn)入了Alpha測試階段,那么,不免有人擔(dān)心,等到2.x推出的時(shí)候,本書會(huì)過時(shí)嗎?從實(shí)現(xiàn)細(xì)節(jié)上來講,會(huì)的。從思想上來講,不會(huì)。從實(shí)用性上來講,不會(huì)。
1.x和預(yù)計(jì)2016年推出的2.x在語法甚至一些底層實(shí)現(xiàn)上是截然不同的。
據(jù)目前得到的消息,2.x將使用TypeScript和ES6作為主體語言,那時(shí)候,本書的很多代碼將不再適用于2.x。而由于2.x徹底拋棄了IE11之前的低版本瀏覽器,它可以借助最新的瀏覽器特性進(jìn)行底層實(shí)現(xiàn),不用為了向后兼容而使用“臟檢查”等技術(shù)來彌補(bǔ)瀏覽器的不足。在這些細(xì)節(jié)上,1.x和2.x幾乎沒有共通之處。這一點(diǎn)一直被人詬病,也是一些人對Angular的前途深表擔(dān)憂的原因。不過,從另一個(gè)角度來看,2.x的這種改進(jìn)也是一種勇敢的改革,可以讓它輕裝前進(jìn),更有利于長遠(yuǎn)發(fā)展。
好消息是,2.x不是1.x的替代品。官方已經(jīng)宣布,即使2.x推出,也仍然會(huì)對1.x進(jìn)行長期維護(hù)。這就有點(diǎn)類似于Query 2.x不再兼容IE8,而Query 1.x仍然兼容IE8并繼續(xù)向前發(fā)展一樣。這種版本策略可以防止Angular背上向老舊瀏覽器兼容的包袱。
1.x和2.x在編程模型上并沒有太大的差異,它們都基于MVVM模型,都具有雙向綁定功能(即使底層實(shí)現(xiàn)方式已經(jīng)變了),都具有相同的設(shè)計(jì)哲學(xué)—利用高內(nèi)聚的小模塊組合出最終程序。而這些在我們的書中都有所體現(xiàn)。在目錄結(jié)構(gòu)、指令的分類等方面,本書也從2.x中引入了很多更好的實(shí)踐。
從實(shí)用性上來說,本書更不會(huì)過時(shí)。2.x的瀏覽器兼容性起點(diǎn)就是IE11,這不是因?yàn)榧?xì)節(jié)層面的問題,而是從底層原理上就不可能—它依賴太多的新特性。而在國內(nèi)市場上,徹底拋棄IE11以下的版本恐怕還會(huì)是一個(gè)長期的歷程—即使最樂觀的估計(jì),至少也需要兩年。當(dāng)然,手機(jī)端的瀏覽器版本更新要快得多,所以,預(yù)計(jì)2.x最早會(huì)被用在手機(jī)版上。
固然,2.x是個(gè)高大上的版本,但目前在國內(nèi)還是個(gè)屠龍之術(shù)。如果要在現(xiàn)實(shí)中使用,還是先學(xué)好1.x吧。按照本書的指引,你可以提前領(lǐng)略2.x的優(yōu)點(diǎn),而不用付出兼容性的代價(jià)。當(dāng)然,等本書的2.x版推出時(shí),這種熟悉的味道也會(huì)讓你有一個(gè)更高的起點(diǎn)。
閱讀指南
Angular的學(xué)習(xí)曲線大概是這樣的:入門非常容易,中級(jí)的時(shí)候會(huì)發(fā)現(xiàn)需要深入理解很多概念,高級(jí)的時(shí)候需要掌握Angular的工作原理,而想成為專家則很難,需要經(jīng)過很多工程實(shí)踐的磨練。
本書的主體結(jié)構(gòu)也是針對這樣的學(xué)習(xí)曲線設(shè)計(jì)的。
首先,初級(jí)階段,實(shí)戰(zhàn)演練
我們會(huì)帶你在實(shí)戰(zhàn)中逐步體驗(yàn)Angular的開發(fā)過程,并隨著進(jìn)度的推進(jìn),逐步引入所需的技術(shù)和概念。
然后,中級(jí)階段,概念介紹
在實(shí)戰(zhàn)中提到的一些概念不會(huì)就地展開,而是只做簡介,到了這個(gè)階段,會(huì)對概念進(jìn)行深入講解:是什么,為什么,怎么用,什么時(shí)候用,什么時(shí)候不用等。
接下來,高級(jí)階段,工作原理
學(xué)習(xí)了這些概念,我們還要把它們串起來,向你揭示Angular的工作原理,看看這些概念之間是如何協(xié)作的。
最后,專家階段:最佳實(shí)踐,技巧
前面主要是入門和理論,而這部分將主要以實(shí)戰(zhàn)經(jīng)驗(yàn)為主。
只把Angular用熟了是不夠的,我們還要把它整合進(jìn)更宏觀的開發(fā)過程中,不但要考慮開發(fā),更要考慮維護(hù)。我們要如何開發(fā)容易維護(hù)的Angular程序?請看第4章。
專家還需要掌握一些技巧去把復(fù)雜問題簡單化,發(fā)掘一些不常用但很有用的API,把看起來平淡無奇的框架特性運(yùn)用得出神入化,第5章將集中展現(xiàn)這一點(diǎn)。
坑
在前面的章節(jié)中零零散散提到了一些需要注意的地方,但是這樣不方便查閱,所以我們把需要注意的地方作為獨(dú)立的一大章,把我們幫別人解決過的一些典型問題收集在一起。當(dāng)然,我們也會(huì)在讀者社區(qū)繼續(xù)維護(hù)并更新這些“坑”,而不是等再版時(shí)才發(fā)布。我們希望能把這本書做成“活的”,讓這本書更加物超所值,不辜負(fù)讀者對我們的信任。
工具
工欲善其事,必先利其器。充分發(fā)揮工具的力量是開發(fā)人員的重要素質(zhì),日常用到的工具你真的用熟練了嗎?有沒有更好的工具?我們會(huì)把實(shí)戰(zhàn)中覺得對自己幫助最大的工具及其使用經(jīng)驗(yàn)分享給你。
更多
在實(shí)戰(zhàn)中,有很多需求是不顯眼但很重要的,比如SEO、訪問統(tǒng)計(jì)等,在實(shí)際項(xiàng)目中,這些往往是不能忽視的。我們會(huì)專門通過一章來講解如何結(jié)合Angular和第三方軟件干凈漂亮地解決這些問題。
Hybrid應(yīng)用和手機(jī)Web越來越普及,手機(jī)版開發(fā)的需求也越來越高,在Angular的基礎(chǔ)上,開發(fā)手機(jī)版變得容易多了。而且,也已經(jīng)有了比較成熟的工具和框架,我們會(huì)簡要講解一下手機(jī)版開發(fā)的方法和框架。
附錄
軟件開發(fā)需要很多綜合技能,但本書容量有限,我們也不可能是每個(gè)領(lǐng)域的專家。因此,我們會(huì)“授人以漁”,給出一些在線資源和書單,供大家深入學(xué)習(xí)或作為備查資料。
關(guān)于隨書代碼
書中所摘錄的只是全部代碼的一小部分,大部分代碼都放在了GitHub上。地址是https://github.com/ng-nice/code。
如果你查看GitHub歷史,會(huì)發(fā)現(xiàn)總的提交數(shù)并不多。這是因?yàn)橐奖憬虒W(xué),所以在提交前進(jìn)行了合并。所保留的這些提交大都和書中的主要進(jìn)度有關(guān),略去了細(xì)節(jié)提交。所以,本書中代碼的提交粒度不能代表實(shí)際項(xiàng)目中的提交粒度,在實(shí)際項(xiàng)目中,其提交粒度通常比本書中所示范的更小。閱讀代碼時(shí)請記住這一點(diǎn),以免養(yǎng)成“大粒度提交”的壞習(xí)慣。
另外,文中的JavaScript代碼(包括摘引的Angular源碼)全都使用了兩格縮進(jìn)模式,這主要是考慮到圖書排版問題,希望少一些不必要的換行。你們在現(xiàn)實(shí)項(xiàng)目中愿意用兩格或四格均可,只要項(xiàng)目組內(nèi)保持一致即可。
關(guān)于內(nèi)容的重復(fù)
仔細(xì)閱讀,可能會(huì)發(fā)現(xiàn)有些內(nèi)容會(huì)在多個(gè)不同的章節(jié)中重復(fù)講解,這當(dāng)然不是湊字?jǐn)?shù),而是盡可能符合人的記憶規(guī)律—把重要的內(nèi)容在不同的場景下重復(fù),對于深入掌握重點(diǎn)是很有幫助的。
關(guān)于寫作風(fēng)格
這是一本多人協(xié)作的書,雖然我們進(jìn)行了后期統(tǒng)稿,但在語言風(fēng)格等方面仍難免會(huì)有不一致的地方,我們期待你們的反饋,以便將來改進(jìn)。
你的好,我永遠(yuǎn)記得!
雙狼的感恩
雙狼的本次合作起于機(jī)械工業(yè)出版社編輯吳怡的邀請。作為ThoughtWorks的Tech Lead,雙狼都有很多工作任務(wù),原定6個(gè)月的寫書計(jì)劃,被拖到了8個(gè)月,感謝吳怡的耐心與推動(dòng)。
還有很多ThoughtWorker為本書做出了貢獻(xiàn):
? 張逸,資深ThoughtWorker,很多技術(shù)書籍的作者或譯者。一直在鼓勵(lì)我們,并給了我們很多幫助。
? 彭洪偉,本書的第三作者。在交稿壓力最大的時(shí)候,承擔(dān)了“工具”篇的撰寫工作,保障了本書的盡早交稿。
? 陳嘉,幕后的貢獻(xiàn)者,全棧式工程師。幫我們設(shè)計(jì)了“雙狼說”微信公眾號(hào)的Logo,從技術(shù)的角度幫我們審稿,并提了一些非常有用的建議。
還有很多ThoughtWorker和社區(qū)朋友幫助我們從技術(shù)層面和語言層面進(jìn)行修改。他們有的是Angular專家,有的是新手,給了我們比較全面的反饋。能將枯燥、乏味的技術(shù)平易近人地展現(xiàn)在這本書中,一定要感謝他們所作出的奉獻(xiàn)。他們是(排名不分先后):馮爾東、朱本威、李科偉、楊琛、彭琰、葉志敏、ng群as。
還要感謝Angular中文社區(qū)QQ群和關(guān)注“雙狼說”微信號(hào)的網(wǎng)友們,是你們的鼓勵(lì)給了我們寫作的信心和動(dòng)力!
雪狼的感恩
開始寫書的時(shí)候,剛剛認(rèn)識(shí)我的女友娜娜,今天,我們即將走進(jìn)婚姻的殿堂。我這樣一個(gè)負(fù)情商的程序員,生活有多么枯燥乏味,不問可知。感謝你點(diǎn)亮了我的人生。你的好,我永遠(yuǎn)記得!
能專注開發(fā)17年,要感謝我父母和弟弟的支持。人到中年,本應(yīng)是最糾結(jié)的時(shí)代,特別是我這樣的前“單身狗”。我無法經(jīng)常回家,是弟弟經(jīng)常回去探望父母。父母的樂觀與健康,讓我可以心無旁騖地工作。你們的好,我永遠(yuǎn)記得!
能走入軟件開發(fā)這一行,要感謝我的伯樂何戰(zhàn)濤和王勇的幫助。還記得那個(gè)沉默而不自信的“小汪”嗎?當(dāng)初,他什么也不會(huì),犯過很多錯(cuò)誤;如今,他在盡力為別人的職業(yè)生涯提供幫助。你們的好,我永遠(yuǎn)記得!
在這17年間,我嘗試過很多角色,從寫文檔、測試到小公司的CTO,走過了豐富多彩的人生。特別需要感謝的是林先生和余姐等前同事,我們追隨林先生走過8年創(chuàng)業(yè)之旅,這一過程讓我具備了更開闊的視野和更堅(jiān)韌的性格。雖然因?yàn)樯顗毫Σ坏貌浑x開,但,你們的好,我永遠(yuǎn)記得!
最后,感謝ThoughtWorks!作為“敏捷”的倡導(dǎo)者,ThoughtWorks處處體現(xiàn)著敏捷思想,這是一個(gè)把“敏捷”變成“文化”并滲透到骨子里的公司。這是一個(gè)很“奇葩”的公司。這一點(diǎn)從“全球CEO和中國區(qū)程序員撞衫”事件就可見一斑。這是一個(gè)很“簡單”的公司。引用我們一位HR的說法:“進(jìn)了ThoughtWorks,我感覺自己的情商都下降了!”這是一個(gè)很“技術(shù)”的公司。每年兩期的技術(shù)雷達(dá)都來自全球近3000名工程師的實(shí)踐總結(jié)。這里幾乎會(huì)涉足每一項(xiàng)前沿技術(shù):大數(shù)據(jù)、React、Scala等。僅以Angular為例,我們在工程實(shí)踐中使用它是在4年前,那時(shí)候Angular還是0.6版呢。
還差一句話就變成招聘軟文了,索性補(bǔ)上吧:ThoughtWorks,你的好,進(jìn)來才知道!
破狼的感恩
在寫作本書之際,我作為ThoughtWorks高級(jí)敏捷咨詢師、架構(gòu)師,因?yàn)轫?xiàng)目曾輾轉(zhuǎn)多地,沒有太多時(shí)間投入到這次的寫作之中。在此之前,已經(jīng)有很多的出版社聯(lián)系我寫本國人自己的深度解析Angular的書籍,但都被我婉言拒絕了。直到雪狼告訴我他希望寫一本關(guān)于Angular的書籍的時(shí)候,恰巧吳怡編輯也跟我提起了寫書的事。這次我們應(yīng)承下來了。在這里首先感謝吳怡的知遇之情和寫書過程之中的包容與耐心。還有雪狼大叔的最終推動(dòng)。
我是一個(gè)具有承諾“強(qiáng)迫癥”的人,一旦應(yīng)承下來的事情,我就會(huì)盡自己最大的努力把它做好。特別在快截稿的幾個(gè)月里,每天寫作到凌晨1~2點(diǎn),次日還需要準(zhǔn)備與客戶7∶00的站會(huì)。和老婆結(jié)婚已經(jīng)一年多了,可是由于工作原因,我也出差在外一年多了。加上寫作此書的時(shí)候,連陪伴父母和老婆的時(shí)間也被我擠出來寫作本書了。所以在此,首先要感謝我的父母和老婆,感謝你們的支持和包容,在這本書的背后也包含著你們對我的一份寶貴的愛。爸媽、老婆:我也愛你們!
還要感謝我大學(xué)的導(dǎo)師劉繼光老師和柳翠寅老師,是你們讓我學(xué)到了軟件開發(fā)的技能,以及幫我尋找到一份實(shí)習(xí)的機(jī)會(huì),給了我比別人多3年的實(shí)戰(zhàn)機(jī)會(huì),因此我才能獨(dú)自闖蕩成都這座大城市,并開始了軟件開發(fā)之路。還有你們對知識(shí)的追求和堅(jiān)強(qiáng)的毅力,深深感染了我。至此堅(jiān)持了6年多的博客寫作和回饋開源社區(qū),因此才有了本書的順利完成。你們是我一輩子的良師益友,謝謝你們的付出!
同時(shí)還要感謝我在ThoughtWorks的同事們。是我的Sponsor張逸一直鼓勵(lì)我寫書,是熊節(jié)每年的閱讀數(shù)量激勵(lì)我更加堅(jiān)定地持續(xù)獲取更多的知識(shí)來武裝自己。還有很多的twer,同樣在這里感謝你們長久以來對我的幫助和鼓勵(lì)。
我常常告訴自己:要么讀書,要么旅行,身體和心靈總有一個(gè)在路上。與君共勉。
彭洪偉的感恩
首先,我要感謝我父母!即使是在家境最困難的時(shí)候,他們也時(shí)時(shí)刻刻鼓勵(lì)我、支持我,讓我能堅(jiān)持走自己的路。
我第一次接觸到計(jì)算機(jī)是在2003年。那時(shí)剛上初中,正是CS和傳奇火爆的時(shí)候,想自己申請一個(gè)QQ號(hào)都感覺很困難。直到2006年初中畢業(yè),莫名其妙地開始了信息學(xué)奧林匹克競賽的培訓(xùn)之路,用C語言寫出了人生的第一行Hello World代碼。
感謝張宗弋老師的悉心教導(dǎo)和高中三年對C語言、算法、圖論、數(shù)論的培訓(xùn),還記得大家都叫您小弋(誤讀作:Ge)子。是您激發(fā)了我的“程序員夢”。以至于后來在報(bào)志愿的時(shí)候,第一志愿寫的都是計(jì)算機(jī)信息科學(xué)與技術(shù),雖然那時(shí)候并不知道這個(gè)專業(yè)是干什么的。
在大學(xué)里,特別要感謝的是鄧芳老師,是您鼓勵(lì)我們,除了學(xué)好課堂上的東西,更要積極去探索自己感興趣的東西。您“授人以魚,不如授人以漁”的教學(xué)思想,讓我逐漸養(yǎng)成了自學(xué)的習(xí)慣,至今讓我受益匪淺。后來,您幫我引薦了兩位讓我受益良多的導(dǎo)師:陳宇副教授和王海軍副教授。是他們把我?guī)У搅宋锫?lián)網(wǎng)的領(lǐng)域,讓我對計(jì)算機(jī)的領(lǐng)域產(chǎn)生了更濃厚的興趣。三位老師的指引,讓我接觸到了更多課堂上沒有的東西,終于有幸加入ThoughtWorks這個(gè)大家庭中。
在這里,我認(rèn)識(shí)了有黑客范兒的馬偉和段子手Jojo(周哲武),是他們給了我建設(shè)性的意見,讓我感覺到了ThoughtWorks 的不同。不得不提的還有Jojo幫我推薦的Sponsor—破狼,是他不斷地在開源的世界里給我指出新機(jī)會(huì),鼓勵(lì)我大膽嘗試。不然我也不能堅(jiān)持翻譯完Scala構(gòu)建工具SBT:http://www.scala-sbt.org/0.13/tutorial/zh-cn/index.html的使用文檔。如果沒有破狼的引薦,我也不會(huì)認(rèn)識(shí)前端牛人雪狼和參與本書的編寫。
最后,如果沒有未婚妻韓盼盼的愛、支持與鼓勵(lì),我也難以完成這么多富有挑戰(zhàn)性的工作。謝謝,我愛你!
- 高手是如何做產(chǎn)品設(shè)計(jì)的(全2冊)
- DevOps for Networking
- CentOS 7 Server Deployment Cookbook
- Learning ArcGIS Pro
- Julia Cookbook
- Windows Server 2016 Automation with PowerShell Cookbook(Second Edition)
- Java Web程序設(shè)計(jì)任務(wù)教程
- Python Data Analysis Cookbook
- Access 2010中文版項(xiàng)目教程
- Creating Data Stories with Tableau Public
- Emgu CV Essentials
- Python Machine Learning Blueprints:Intuitive data projects you can relate to
- RocketMQ實(shí)戰(zhàn)與原理解析
- Clojure Web Development Essentials
- ServiceDesk Plus 8.x Essentials