? ? 歷時兩年多道批,我的書終于付梓出版了。應(yīng)各方面的要求入撒,寫軟文一篇隆豹,隆重介紹一下此書對各位程序員的錢途有什么幫助及閱讀順序等疑問。作為國內(nèi)第一本講述前端框架構(gòu)的書茅逮,它里面充斥著許多大家前所未聞的知識璃赡,這些知識有50%只見于github的issue,講述各種隱秘的瀏覽器兼容性問題及各種神奇的修復(fù)方案献雅,或者是某些危險但美麗的黑魔法碉考,另外50%我深夜夢游般在外國某些大牛(不局限于英語,有日語惩琉,俄語豆励,韓語等夺荒,不同的語言的人瞒渠,受制了他們的語法結(jié)構(gòu)良蒸,他們的思考回路是與我們不同的,給出的答案有時真的是拍案叫絕)的博客或網(wǎng)站瞥見的神奇東東伍玖。在我通過編寫dom Framework, mass Framework這兩大框架(dom Framework是老式的金字塔式的基于類的大框架嫩痰, mass Framework是擁有AMD加載器的開放式框架,再后來的avalon窍箍,是鬼怪式的分層構(gòu)架的MVVM框架串纺,黑魔法滿滿的),建立完整的知識樹后椰棘,開始狂熱如征服六國后的秦王纺棺,熱衷于收集各種奇珍異寶于我的博客——你們看的部分,只是我未公開的十分之一而已邪狞,本書將額外開恩公布另外的十分之二祷蝌。
這里寫的很霸氣呀。就是要有這種自信帆卓。
其實(shí)這世界很奇妙的巨朦,當(dāng)你水平上去后,就算你不想繼續(xù)剑令,這世界也推動著你前進(jìn)糊啡。就像jQuery1.3通過Sizzle大獲成功后,成為世界的明星吁津,就算John Resig想撒手棚蓄,但這么多pull request,它也只能從更好變成更加好腺毫!三年前癣疟,當(dāng)我寫了三百多篇的博文,出版社已經(jīng)找上門來了潮酒。在那半年內(nèi)睛挚,總共有三四家來找我,讓我看到前端的希望急黎。于是我的重心由ruby慢慢轉(zhuǎn)向javascript扎狱。待到我加入盛大創(chuàng)新院后,我已經(jīng)確保我能hold住《javascript框架設(shè)計》這個大題目勃教,于是簽約寫書淤击。不過,在最初我提交給出版社的目錄里故源,我有著更為恢宏的目標(biāo)污抬,包含拖放組件, 路由系統(tǒng), 及各式UI組件印机,但最后由于篇幅的問題矢腻,只好說聲抱歉了。
野望總是被現(xiàn)實(shí)所掣肘射赛,亞歷山大想證明世界多柑,可他的HP也是這么短,經(jīng)不起長途跋涉楣责。實(shí)體書與博客是不同的竣灌,它必須要形成一個體系,文體也有要求秆麸,不能太口語化初嘹,什么喜樂哀痛必須收起來,板著臉正正經(jīng)經(jīng)地對大家宣講沮趣。錯別字也要收殮一下削樊,雖然我找了許多高手審稿了⊥枚荆可惜個個都開寫輪眼漫贞,自動過濾掉錯別字,最終還是讓出版社的張濤大大幫忙處理了大部分錯別字與病句育叁,太專業(yè)的東西他也無能為力迅脐,但愿不影響閱讀。幸好各位大神貢獻(xiàn)了不少冷癖有用的知識點(diǎn)豪嗽,讓本書充實(shí)了不少谴蔑,因此才一改再改,三番四次龟梦,導(dǎo)致兩年多才交稿隐锭。在盛大創(chuàng)建院時,不斷有人(同事或群友)問我的書什么時候出來计贰,人家半年就搞出一本了钦睡。我今天終于不為這問題煩惱了。
在繼續(xù)這篇軟文時躁倒,我腦海真的是閃現(xiàn)許多詞匯荞怒,什么大教堂與集市,造輪子與DRY秧秉,公司利益與個人成長……一個個來吧
大教堂與集市說的是如何構(gòu)建一個軟件工程褐桌,是大教堂式的專制主義還是開放式的以眾包方式讓大家貢獻(xiàn)源碼。前者象迎,緩和一點(diǎn)地說荧嵌,是英雄主義,jQuery之于John Resig, Node.JS之于Ryan Dahl啦撮,他們單人匹馬開創(chuàng)了一個新天地恋技。后者,最杰出的代表是Linux逻族。但在這個互相浸透學(xué)習(xí)的世界,絕對的東西是不存在的骄崩。jQuery與Node.JS現(xiàn)在也是在眾多的項獻(xiàn)者的努力一下前進(jìn)聘鳞,原作者向新目的地進(jìn)發(fā)了。在國內(nèi)要拂,你懂的抠璃,每個人都自命不凡,一開始只能是你一個踽踽獨(dú)行脱惰。只有你真正成為明燈式的人物后搏嗡,才有人追隨。
造輪子與DRY這問題也新浪微博上也吵過許多次了拉一。有個軟件設(shè)計原則叫DRY采盒,防止組員們隨意克隆代碼,或在不知情的情況下重復(fù)發(fā)明相似的功能模塊蔚润。公司出于利益的考慮磅氨,也不愿給時間組員自己去造輪子,上網(wǎng)找一個jQuery插件了事嫡纠。因此烦租,小中公司的頁面非常恐怖除盏,允斥著大量第三方插件叉橱,而相對而言,大阿貍能用的基本自己做者蠕,這正是游擊隊與正規(guī)軍的區(qū)別窃祝。從國內(nèi)看,最重視JS的公司也恰恰是大阿貍踱侣,他們擁有國內(nèi)最龐大優(yōu)秀的前端團(tuán)隊(700多人)锌杀,小公司還是一個前端對20個后端的節(jié)奏。招這么多高手干嘛呢泻仙?造輪子糕再!當(dāng)然,這不是一個輪子所代表的玉转,這涉及一整套的工具鏈突想,目的是實(shí)現(xiàn)前端自動化集成布署。寫框架與UI組件保是其中一個很少環(huán)節(jié),這也是一般人能理解的東西猾担,更多高大上的東西袭灯,大公司也不會公開出來。但你起碼擁有創(chuàng)造UI組件這樣的能力绑嘹,才能讓你碰更底層的工具稽荧。
公司利益與個人成長,這個更不用說工腋。只有目光短淺的公司姨丈,才會用雜牌的組件寫碼。大公司早已為你準(zhǔn)備一整好東西了擅腰。而你的任務(wù)就是成長到具有寫UI組件的地步蟋恬,進(jìn)入架構(gòu)師,為公司的未來挑戰(zhàn)做好更多準(zhǔn)備(工具)趁冈。HTML5對于一般人而言歼争,好像是非常遙遠(yuǎn)的事,但大公司早已有一幫人用它做出許多好東西渗勘,為公司產(chǎn)品的用戶體驗(yàn)添磚加瓦沐绒。為了積聚這實(shí)力,你必須自己暗暗發(fā)力旺坠,偷偷自己寫一套東西洒沦。之前人家寫過的彈出層,富文本編輯器价淌,語法高亮插件……你一套也不能少申眼,這樣你才能接觸到之前碰不到的原生API與知識點(diǎn)。如彈出層有關(guān)垂直居中的CSS知識點(diǎn)蝉衣,select穿透問題括尸,富文本編輯器用到的iframe知識點(diǎn),Range與Selection對象的知識點(diǎn)病毡,語法高亮則是你正則的大檢驗(yàn)濒翻!如果寫業(yè)務(wù)代碼,你寫十年啦膜,水平還是那樣有送。因此有句話說——“用一年的經(jīng)驗(yàn)混十年”
最近在微博看到一件可怕的事:
【我所了解的一個精神失常的程序員】http://t.cn/8sinEOr不久前我們公司有個程序員精神失常。他走進(jìn)經(jīng)理辦公室開始大喊大叫僧家,說著一些奇怪的事情雀摘。如果我不是像了解自己一下了解他,就會以為他磕了藥八拱。但是事實(shí)上他簡直就是精神失常了阵赠!
他是我在編程行業(yè)見過的最勤奮員工涯塔。他經(jīng)常在下班后加班,周末的時候清蚀,當(dāng)管理人員需要人手去處理緊急工作時匕荸,他總是隨叫隨到。在這個階段公司并不賺 錢枷邪,老板需要盡可能快的完成項目榛搔,所以任何被客戶急催的軟件開發(fā)都會自動分配給他。他很樂意地全心投入把工作做完正是老板喜歡的地方东揣。
"我能力強(qiáng)践惑,我效率高,我應(yīng)該是公司的關(guān)鍵人物"救斑,其實(shí)那是錯的,不可替代性才是最重要的真屯。如果靠“賣力”增加不可替代性脸候,作用是微乎其微的,還是得靠“高門檻”绑蔫。我認(rèn)識的工程師里运沦,越是技術(shù)好的工程師越會意識到這個問題,然后去做一些"深度"的發(fā)展配深,這也算是工程師的自我保護(hù)吧携添。說什么做IT沒前途,30歲要轉(zhuǎn)行篓叶,這只是無能者的藉口烈掠。
古人說——“人無遠(yuǎn)慮,必有近憂”缸托。你平時有這么多空閑時間左敌,為何不努力提升一下自己的水平呢。不去認(rèn)真閱讀一下大師們的框架俐镐,不自己寫一個框架矫限。記得當(dāng)初我在博客宣傳我的框架,被某個嫉妒的人罵個狗血噴頭佩抹,兩年過去叼风,他消聲匿跡,而我棍苹,從一個公司的核心前端變?yōu)榱硪粋€公司的核心前端无宿,現(xiàn)在是去哪兒網(wǎng)的前端架構(gòu)師。因此要相信自己枢里!不要怕這怕那懈贺,有努力就有回報经窖!
再回來說我的書,前端的知識點(diǎn)是非常龐雜的梭灿。但知識只有串起來画侣,形成知識樹才是你自己的。現(xiàn)在市面上的書堡妒,基本上抄來抄去配乱,還是依照老舊的方法教人,一開始總是歷史回顧皮迟,然后是各種數(shù)據(jù)類型介紹搬泥,然后是語法(條件分支,循環(huán)分支)什么的伏尼,最后再來幾個“真實(shí)案例”忿檩。這對于90%半路出家的前端來說,未免太悶了爆阶。而且前端不單單是javascript燥透, javascript只是水泥, 或者說儲如化學(xué)分子這東西辨图,而我們工作是為了構(gòu)建一整座大廈班套!只有肉眼看到的物理級別的東西才是主角。它們就是本書的重點(diǎn)故河, DOM與BOM吱韭。javascript通過特性偵測或傳參等,進(jìn)入不同的分支鱼的,來解決前端臭名昭著的兼容性問題理盆。本書介紹了大量這樣的黑魔法,如何知道當(dāng)前瀏覽器是支持這個事件呢凑阶? 為何在這里要劫持this呢熏挎? 怎么樣讓選擇器引擎跑得更快。于是這一個個疑問晌砾,便化解成本書所介紹的知識點(diǎn)坎拐,什么AMD加載器, 選擇器引擎养匈,批量生成一堆元素節(jié)點(diǎn)……
所有前端框架面對的問題都是一樣哼勇,不同的是解決手段的高下程度。于是Prototype死了呕乎,jQuery火了积担。 angular爆發(fā)了, jQuery沉寂了猬仁!本書的章節(jié)就是按照編寫一個多文件框架的順序來寫帝璧。最開始肯定是種子模塊先誉,定義框架的名字與版本號,與一些最核心的方法的烁,還有加載器褐耳。然后通過加載器,添加一些常用的工具模塊渴庆,對javascript語言進(jìn)行擴(kuò)張與修復(fù)铃芦。之后是數(shù)據(jù)緩存什么的,再之后是主菜襟雷,各種DOM問題刃滓, 節(jié)點(diǎn)啊, 樣式啊耸弄, 事件啊咧虎, 動畫啊……最后是MVVM,當(dāng)前最強(qiáng)大的前端解決方案计呈。通過引入雙向綁定與分層架構(gòu)砰诵,完全脫離DOM進(jìn)行前端開發(fā)。
你或者有過激情震叮,你或者有過夢想胧砰,但當(dāng)你的KPI考核點(diǎn)是PM那些荒唐的改來改去的功能點(diǎn)鳍鸵,多熾熱的火焰也會被澆滅苇瓣。因此你必須要搞出一點(diǎn)東西出來,努力爬上去偿乖。是廢命于加班击罪,天天寫業(yè)務(wù),還是專注于底層框架的研發(fā)贪薪,為某個難題而苦惱媳禁,完全在于你一念之差』校“是金子總會發(fā)光的”竣稽,或“是石頭到哪都不會發(fā)光的”,也完全在于你一念之差霍弹。本書將為你提供了一個可能性及一大堆技能點(diǎn)毫别,打開了一個美麗的新世界,提供了一個X年不遇的機(jī)會典格,準(zhǔn)備了一個迅速上升的渠道岛宦。
可能有些人會嫌它貴,也有些人怕自己看不明白這么“高大上”的東西耍缴。我說一個故事吧砾肺。
一個特別喜愛昆蟲的人做了這樣一個實(shí)驗(yàn):他將跳蚤放進(jìn)敞口的瓶子里挽霉,它立刻便跳了出來。當(dāng)把瓶子蓋上時变汪,跳蚤還是會竭力跳出瓶子侠坎,它不停地撞擊著瓶蓋的內(nèi)側(cè)。一個多小時后疫衩,他還在那樣跳著硅蹦。差不多三個小時后,它依然在跳闷煤,只是它不再撞著瓶蓋了童芹,此時它跳的高度離瓶蓋大約1厘米左右,而且每一次都是如此鲤拿。這時假褪,瓶蓋被拿掉了,但是跳蚤并沒有跳出瓶口近顷,它依然保持著有瓶蓋時的高度生音,再也跳不出瓶口。
同理窒升,如果你缀遍,總嫌這個貴那個貴,你又不努力改變現(xiàn)狀饱须,過了一段時間域醇,你就會習(xí)慣了,就會安于貧困了蓉媳。就像瓶子的跳蚤那樣安于天命譬挚,永遠(yuǎn)困死在瓶子里。
怕自己理解不了這東西酪呻,這雖然是一個理智的考量减宣,但只要是人就會遇到瓶頸,但問題是如何突破瓶頸玩荠。瓶蓋又不是總是蓋上的漆腌,有機(jī)遇你得抓住阶冈!
我也曾畢業(yè)找不到工作闷尿,潦倒到當(dāng)了一年保安。但我相信“是金子總會發(fā)光的”眼溶,我終會一鳴驚人悠砚,我現(xiàn)在只是一只受傷的野狼,我不會被命運(yùn)所屈服馴化堂飞。因此跟我咆哮吧——
無名的生命之花 已慘遭摧殘踐踏
一度墜地的飛鳥 正焦急以待風(fēng)起
一味埋頭祈禱 卻不會有任何改變
若想有所改變 就請起而奮戰(zhàn)吧
踏過尸體前行的我們
嘲笑這進(jìn)擊意志的豬玀啊
家畜般的安寧 那虛偽的繁榮
請賜予誓死之餓狼以自由灌旧!
……
——進(jìn)擊的巨人OP《紅蓮の弓矢》
閱讀順序绑咱,原則上沒什么要求,但第2章枢泰、第6章描融、第14章、第16章是非常有挑戰(zhàn)性的衡蚂,大家可以延后閱讀窿克。如果基礎(chǔ)不太好,可以先從第3章看起毛甲,跳過我說的那些比較難的章節(jié)年叮。本書已經(jīng)很把寫一個前端框架所需要掌握的知識點(diǎn)與細(xì)節(jié)全部挖掘出來了,剩下的就是靠你們的造化玻募≈凰穑總之,盡快形成自己的知識樹七咧,才能獨(dú)檔一面跃惫。