專訪|《編寫高質量代碼--web前端開發修煉之道》作者@阿當

前言

前端早讀課第十三期專訪來了。曾回憶2010年時候看過他寫的書,近段時間微博上的各種“撕逼”,以及廣開收徒事情,讓他站在了風口浪尖,有人支持,有人反對。那麼今天我們就來看看阿當前輩在自己的前端生涯的經歷。

正文從這開始~

自我介紹,所服務的公司

我是曹劉陽,圈裏的朋友們叫我阿當。現在在崗嶺集團工作,互聯網醫療領域。

你是基於什麼情景上選擇了前端工程師,以及在所服務的幾個公司來看,你覺得哪一段經歷對你影響最大,爲什麼?

說來話長,大學時我的專業是計科系,學校裏教些c啊、java啊、軟件工程啊什麼的,死活提不起興趣,總覺得這玩意兒離看得見摸得着的“作品”有太大的距離。直到開了網頁設計和photoshop這兩門選修課,才眼睛一亮,覺得能做些什麼了。另外,我讀大學那會兒流行flash,閃客。我覺得這東西很好玩,就自學了flash。雖然很多人覺得c語言是最好的入門語言,但於我來說,真正爲我打開編程之門的,卻是as2,沒錯,flash的腳本語言。flash方便快捷,加上as2寫腳本,不用太多的知識儲備就能做出些好玩的東西了。如果不是因爲flash在今天已經快退出歷史舞臺了,我仍然覺得它是編程入門最好的選擇。

大學時我非常喜歡讀書,主要是ps、flash和網頁製作,當時網頁製作方面的書low到不像話,經常都只告訴你如何操作dreamweaver,偶爾有一點講js的也是xxx特效300例之類的,只有代碼片斷,沒有基礎講解。這種非常虐心的局面一直持續到06年下半年,人郵出版社引進了一堆國外的優秀前端書籍進來,比如《dom javascript編程藝術》《javascript高級程序設計》《ajax基礎教程》《css基礎教程》,同時國內也有了非常好的原創書籍《css網站佈局實錄》。這些書都在講“基礎”,比之前我讀到的那些代碼片斷類的書好太多太多了。我開始大量吸收這些書的知識。我有個習慣,就是喜歡把未知的東西全部補齊後,在腦子裏有個清晰的系統化的脈絡後,再開始動手練習,書沒讀完我就像欠了債一樣不舒服,拼命讀,快的話一週一本,慢的話一個月一本。我覺得這些書上的知識比學校里老師講的東西好太多,課都懶得去上了,除了去喫飯,就趴在牀上看書。我有另一個習慣,就是喜歡自己按照自己的理解和記憶去練習,不喜歡照着書敲代碼,哪怕自己寫的效果比書上的效果差也不要緊,重要的是通過練習去驗證我的理解是否到位。

雖然我的興趣在前端,但當時市面上並沒有前端工程師這個崗位。當時要麼是網頁設計師,要麼是工程師。我想做工程師。大學畢業前一年,我花了大量時間在後臺方面,主要學j2ee,但出去找工作時發現當時市場上對j2ee的需求量非常少,不得已換了定位,乾脆找網頁設計師的工作好了。然後大學時自學的flash、選修的網頁製作和photoshop反而幫我找到了第一份工作。然後第一份工作的title就成了網頁設計師,從ps、ai、flash到網頁製作全包。我大量的時間花在了設計上,配色啊、佈局啊、點線面、冷暖色什麼的。離後端越來越遠,離前端也是若即若離。當時前端做網頁,主流的做法其實還是dreamweaver里拉表格,還流行什麼1*1透明png的黑魔法。公司的兩位老前輩用的是asp + table佈局,我跟公司推薦說改用css佈局吧,說這是未來趨勢,老闆問我說,爲啥要用css佈局呢?有啥好處呢?我balabala說了一堆,但老闆是生意人,不懂技術,沒有聽到什麼他感興趣的點,不置可否,然後這事就不了了之了。曾經一度我想過乾脆轉設計師得了,當時流行兩種設計風格,1是簡潔的歐美風,2是漂亮花哨的韓國風。我買了一堆的美術設計方面的書,一心想做個一流的設計大師,走韓國風!

但生活總是愛和人開玩笑,我陰差陽錯還是回到了前端圈。我的第一份工作是在深圳,華強北,我很喜歡兩站地之外的深圳購書中心,經常下了班走兩站地去深圳購書中心看書,當時薪水低,沒錢買,我就坐在地上看,翻看過大量前端相關的書。工作快一年之際,通過大量閱讀書籍,我的前端和flash編程能力都進步飛快,當時的年輕人和正在的年輕人也差不多,總喜歡加入些同行的羣吹牛逼,吹的內容無非3個:公司、薪水、作品。我的作品總能在羣裏引起很多人的讚歎,猜測我的薪水應該很高,但事實上我的薪水卻比很多能力一般的人少,這引起了我極大的心理不平衡。終於在一次心理極度不平衡下,我產生的跳槽的念頭,我要找識貨的東家給個對得起我能力的薪水。07年下半年,我找遍了51job、智聯招聘,藍色理想的招聘版,在深圳這個大城市卻找不到前端工程師這個崗位需求。然後我將目光轉到了北京,發現北京這時有大量的前端工程師需求,很多公司也開始有了UED團隊。然後我就到了北京。

一開始去了家小創業公司,兩個老闆和我一個打工的,一共三個人。兩個老闆,一個是寫php的,另一個是設計師,然後我就成了前端。北京的技術圈還是識貨的,他們能理解到前端工程師的作用,很爽快地double了我的薪水,然後我就終於心理平衡了,成爲班上同學裏薪水上漲最快的一位。這份工作是我真正前端之路的開始,這家公司做的是web2.0的網站,對富媒體應用要求很高,各種效果,mp3音樂播放器、flash相冊、多文件上傳、自定義皮膚、各種js效果。然後這家公司爲了生存也接外包需求。然後我就從前端開發、flash開發、flex開發到php開發,除了設計不需要,全部鍛鍊了個遍。平時加班、週末加班、多的時候三個項目並行開發,其中有的項目是我一個人全棧完成。而當時我雖然看過不少書,但其實剛從一個拉table的網頁設計師轉型過來,壓力和挑戰可想而知。也許確實是我對編程有天賦吧,也許是我很會挑書和讀書,我抗了過來。這段時間對我的編程能力和抗壓能力有了質的提高。不逼自己一把,永遠完不成質變的,就是在這段時間我認識到這個道理。之前看過再多書,也不如在這段時間我成長得快。值得一提的是,正是在這段時間jquery纔開始紅起來的,所以從深圳時開始我前後寫了一年的原生js,這讓我對js底層有了更深的理解。

之後有機會去了雅虎。沒去過大公司的人,會特別嚮往大公司,特別是QQ羣裏一羣人整天拿大公司說事,一個人自報家門“淘寶”“新浪”“騰訊”,然後一羣人各種跪舔。我很嚮往去大公司,管它哪家大公司,我也要一個招牌,降薪去都行。然後很幸運去了雅虎,hr問我你薪資要求多少啊,我說你們看着給吧,沒有要求。去雅虎對我來說,有非常重要的意義,不是公司光環,而是我遇到了YUI。當時YUI還是YUI2,雅虎內部強制要求所有前端使用YUI,不能使用jquery之類的其他庫。而在遇到YUI之前,我以爲jquery已經非常強大了,比原生js強了太多了,就像魔法一樣,我以爲不會有比它更好的東西了。然後遇到了YUI2,純英文的一個官方網站,花了近一個月的時間去啃它的各種文檔,然後驚爲天人,和jquery的差異實在太大了,完全不同的思路。做內部分享的時候,我說jquery就像古龍的小說,江湖是二維的線,兵器譜排行,而YUI像金庸的小說,江湖是個立體的面,東邪西毒南帝北丐中神通,沒有一個jquery對象那樣的絕對主角。YUI的設計思路讓我徹底知道了什麼是框架,什麼是庫。直到後來YUI3的升級,我發現YUI就像apple一樣,是個極致的封閉的完美的寶貝。我一直以爲它會火,會大火。

在雅虎剛轉正不久,遇到了雅虎裁員2/3,我這個新人理所當然被裁了。然後我內部面試成功轉崗到了淘寶,我是淘寶北京的第一位前端員工。然後挑戰了我這輩子的第一個spa,一個非常有挑戰的項目。項目的核心部分我現在還保留着:http://t.cn/RbrJFM8 對於當時的我來說,這是個很考驗前端編程能力的任務,而且時間要求非常非常緊,這個核心demo我花了不到3天時間完成。各種拖拽啊、換膚啊很複雜,而且沒有任何人可以諮詢可以幫手。我通宵着加班,完成了這個挑戰。在這段期間我看了設計模式相關的書,理解了面向對象編程的思路,然後這個SPA項目正好逼着我用上了OO編程。這個階段我完成了第二次質變,也變得非常討厭加班。另一件重要的事是,我開始寫書了。感謝我的朋友周裕波幫我介紹了華章優秀的編輯楊福川。

書寫到一半,我離職去了新浪。在新浪,進入到的項目組也是個特殊的項目組:即時通訊部,新浪聊天室和web uc。新浪聊天室和web uc全是spa,面向對象組織代碼,多人合作維護同一份長期維護的項目。這段時間其實蠻閒的,我學了ruby、rails、python、linux、django、wxpython、敏捷開發等知識。然後html5來了,移動開發也來了。因爲2010年被稱爲移動開發原年,是一個嶄新的,光明的平臺,機遇很好,很多小夥伴在開始往ios或android轉了。我也買了android的書,準備轉android了。但當時我已經有點船大難掉頭了,一是因爲我在web上積累了很多經驗,二是我的書出版了,也去參加了很多大會的演講,圈內很多人認識了我。最終讓我下定決心留在前端圈的原因是,想起了asp、delphi的沒落,和iphone4對flash不支持,flash的窘境,以及移動平臺崛起,windows平臺的衰落,我想還是web這種公開的非私有的技術纔會是安全的吧,再說html5比html4強大很多了呀,未來大有可爲。

在新浪的時間我惡補了大量知識,隨着能力越來越豐富,我開始反思兩個問題:爲什麼我要聽產品經理的,我能自己做自己想做的嗎?以及我大學時選擇it這個專業的初心,我想做遊戲開發,想開發出讓人喜歡的遊戲,讓人可以津津樂道於上上下下左右左右BA的祕笈。我覺得自己足夠強大了,能做前端能做後端能做項管,我想做點自己喜歡的事了,我要做遊戲去。然後很巧的是,我的老朋友周裕波當時在盛大創新院工作,他跟我推薦這家在國內已經名氣不小的工程師樂園,說這裏想做中國的google,院長是陳大年,盛大九千歲,工程師出身而且出非常文藝的一個人。我非常向往這種傳說中的工程師文化烏托邦,更何況盛大是以遊戲出名的,這麼理想的環境簡直就是在爲我量身打造的呀。然後我毅然離開了生活4年的北京,到了上海,加入了盛大創新院。

創新院當年是真的不錯,自底向上自主立項,基本上項目負責人全是工程師,沒什麼產品經理。或者乾脆說這家公司就基本沒有產品經理也沒有運營,全是工程師。大城小胖、flashlizi 、winter、hax、月影、正美當時都在創新院。記得我和小胖、flashlizi老吵架,吵不完的架,這倆又想做遊戲又不想和我一起做,卻偏偏都在我的項目組裏。也是這段時間我發現傳說中的微軟大神,51js版主winter知識結構真奇葩。然後發現在線上咄咄逼人的hax,其實線下即視感居然有點憨憨的。真想不到是這樣的人拍了我兩次磚(一次是爲朱印宏的《征途》連帶被拍,另一次是拍我的書)。月影大俠說話結結巴巴的,還特別繞 @_@ 。正美一直到離開創新院一直到今天也沒見過真人,不喜歡走動的一個技術癡。米糉從那時就已經在討厭我了,我也不知道爲什麼,可能是因爲技術理念不一樣?(聳肩)創新院的回憶其實大部分是不太開心的,最美好的部分,大概是和winter聊洪荒流的神話吧,比如佛啊、太上老君啊、原始天尊啊,誰比誰狠之類的。在創新院期間我立的項目是一個跨pc和手機、pad的實時聯機遊戲平臺,我們基於YUI3 + websocket + twisted + mongodb + 自主研發的html5遊戲引擎開發了瘋狂坦克、檯球、鬥地主、五十K共4款遊戲。然後盛大創新院就倒閉了。。。這期間我的收穫是學習了mongodb、redis、twisted、html5各種api,canvas2d和webgl。另外,也完成了技術人到產品負責人的轉型。

小夥伴們都四散去了不同的公司,除了小胖很倔強地自己開始了屌絲創業之路,捆着褲腰帶過日子,其他人都找到了不錯的歸宿。我沒有離開盛大,調崗去了盛大遊戲創新院。再然後和江湖大佬出去聯合創業,做html5遊戲平臺去了。再然後創業因爲一系列的原因,我退出了。但這期間的收穫是真真實實地看到一個公司在經營的過程中會遇到的問題,將我徹底帶出了工程師思維,開始用更接地氣地方式看待很多事情,包括人、公司運作、向上管理向下管理的藝術等等等等。發現工程師真的是羣太單純太單純的動物了。說單純一方面是工程師簡單善良,另一方面是工程師真的愚蠢。這個世界並不是圍繞工程師在轉的,工程師的世界雖然別有洞天深不見底廣闊無限但終究只不過是哆拉A夢的四次元口袋,它並不是真實世界,它的遊戲規則出了那個圈子什麼也不是。我本以爲我能做個劍客的,卻發現我不過是劍客手裏的劍,哪怕我是倚天劍,我也不是劍客。創新院那樣的烏托邦再也不會有了。這個很打擊我,非常打擊。。。

我的編程之路到這裏差不多就結束了。再後面的故事,我就已經徹底轉型管理路線了。帶着技術驅動產品創新的夢想和出師未捷身先死的遺憾,我離一線編碼越來越遠了。不是叛逃程序員圈,也不是我編程編不下去了,而是我的初心就並不是想當一輩子程序員,編程於我來說,是個工具,實現我的遊戲夢想的工具,學前端學後端學軟件工程全是爲了有能力開發遊戲。我從一開始就把程序當做工具,只不過一不小心發現我居然還有點編程天賦。

我發現一個很嚴重的問題就是,很多人在進入職場後忘記了初心,或者乾脆就沒有初心,什麼掙錢學什麼,往前怎麼走完全是被圈子的思潮所帶動的,比如圈子裏鼓吹geek文化,鼓吹傳說中的大神,鼓吹白鬍子白頭髮寫一輩子程序,然後很多人就被這種文化給洗腦了,誤以爲這是他自己的追求,還被這個文化綁架了,鄙視甚至***不認同這種文化的人。真的完全沒必要。

我的每一段經歷都有不同的收穫,我也不知道哪一段經歷對我影響最大。回首來路,我想我的路線其實從一開始就註定了吧?性格決定命運,無論路線怎麼變,到了某個階段,我的位置和方向可能都差不多。不謙虛地說,如果當年堅持走設計師路線,沒準今天也是個很棒的設計師,也轉型做管理做產品了,哈哈。

在當前前端技術更新這麼快的情景上,你覺得前端開發工程師應該注重哪方面的學習?在學習過程中遇到瓶頸了應該如何突破呢?

前面說了這麼多我的成長經歷,就是爲了現身說法,從我的經歷中給出一些建議:

  • 不要迷信大公司出品的技術,google和facebook等大牌公司出品的東西多了,別見着是名廠出品就覺得一定是正確的。google出品的GWT死了、微軟出品的silverlight死了、IBM出品的dojo也和死了沒區別吧.

  • 別看今天熱鬧,經得起考驗的纔是王道。曾經flash、flex、silverlight、as3、extjs、YUI、mootool、prototype、air、phonegap、jquery mobile、coffeescript、javascriptMVC、backbone、標準語義化、seo、殘疾人可用性、flash全站、RIA等等等等也都熱鬧過一陣啊,今天這些還有幾個人提?把時間拉長了看,只有活下來的,纔是王道。而什麼樣的技術能活下來呢?以我的經驗看是:極致的性價比。所以我一點不看好angular和react。哪些東西具有極致的性價比,哪些東西纔可能存活下來,歷史總是驚人的相似。我說這話的意思,並不是讓大家不要學習,多學習總是好的,學習下框架裏的思想。就像YUI一直沒火起來,但我非常感謝它對我的幫助。我說這話的意思是,要小心這些框架,要辯證地看問題,而且要做好充分的心理準備,它們很可能會被新的東西替換掉,不要陷入“不停追趕,不停放棄”的陷阱,精力會顧不過來。

  • 別盲從意見領袖。對於很多技術人來說,他們追求的是“大神”之名,或“技而優則仕”之實,技術不過是工具,滿足這些不甘寂寞的阿甘的陪跑教徒而已,他們纔不管性價比高不高,纔不管你們跟不跟得上,纔不管你們基礎扎不紮實學習效率高不高,也不管技術會不會淘汰,反正他們江湖名聲起來了再互相賣個面子,不愁找不到好僱主要不到好薪水。還一羣人大神大神地叫,可high了。

  • 喜歡叫別人大神的,其實不少人心裏也有個大神夢,也希望自己可以早點出點名氣。所以呢,對別人總是巴不得別人和盤托出,然後直接拿來主義。有點成績之後呢,端起碗喫飯放下碗罵娘。覺得看你教程、關注你、給你點贊是看得起你,是公平買賣。學到了知識之後呢,還會罵罵咧咧的,說你哪兒哪兒不對,說你誤人子弟。然後問他們看不看書,答說,看,只看國外的書,叫扔個書單出來全是國外的書,顯得有逼格。其實國產書有很多不錯的,絲毫不出國外的書差,比如說《大話設計模式》《html5和css3權威指南》等等等等,非常棒,卻很少看見他們出現在國人的推薦書單裏,盡是些國外的書,有不少書其實跟實戰離得老遠,比如犀牛書,我覺得一點不實用,實戰經驗足夠以後,再拿來當字典查查還行,也就那樣。早些年的《網站重構》《css禪意花園》都什麼玩意兒,看了和沒看沒什麼區別。我對國人追求逼格的做法非常討厭,不接地氣,該成長不了就成長不了,活該。想學習的同學,別被這幫人綁架,什麼東西對自己有用,相信自己的真實感覺。

  • 看書非常重要。別整天東學一點西學一點,遇到問題查查百度(別跟我提你不用百度用google,這不是啥逼格,我不會***,你愛用啥用啥)。看書是最系統地學習知識,將零散的知識點串成面的方法,沒有之一。看書,看好書。

  • 算法、數據結構啥玩意兒離前端實戰很遠,別聽人瞎BB。我寫了這麼多年前端代碼,遇到過的挑戰非常多,越是基礎的css、dom api、bom api對我的幫助越大。別的都是扯。讓那些整天提算法、數據結構重要的人舉幾個例子出來看看,是什麼場景下這些重要,一準舉不出幾個常見場景。還不如好好學學css去實用。

  • css是前端的基礎,比js更基礎。沒學好css前,不瞎折騰js,更別折騰框架、工具、編譯啥的。更別折騰node,媽的離前端越來越遠。搞成了僞後端也解決不了你的實際項目問題。先學css、再學原生js、再學js框架、再學工具、最後學node後端。真想學後端的話,也不推薦用node,玩什麼不好玩這個坑貨。

  • 別迷信大公司光環,幻想大公司的大牛如何如何牛逼,大公司的工作流程如何如何正規、大公司的技術選型如何如何正確。以我這麼多家互聯網大公司的親身經歷,和對其他大公司的瞭解,大公司其實也亂得一塌糊塗。都是混口飯喫,某些人喜歡裝神弄鬼的,顯得與衆不同,公司光環既是他們的靠山,他們也爲公司的光環添磚加瓦,相得益彰,或者說狼狽爲奸吧。還是那句話,有用還是沒用,相信你自己的感覺。別一邊跟在人後面跪舔,一邊發現這些玩意兒落不了地,該加班你還得加班。

  • 別隨便聽任何人的意見,包括我,別搞偶像崇拜啥的,相同自己的判斷。盡信書不如無書,盡信人言不如別聽。

對你的瞭解,你做過工程師,創過業,那這些經歷對你現在的感受時什麼?

這些經歷告訴我,工程師30歲轉型危機是真實存在的。每個人都需要做未來5年計劃,你希望5年後在做什麼?很多人能回答出來未來2年計劃,但回答不出來未來5年計劃。這點值得引起足夠重視。在職場時間真的過得很快,特別是IT圈,5年工作經驗就敢自稱老人,10年工作經驗不管願意不願意都會被當做老人。你真的以爲你到30歲時不會遇到30歲危機?你真的以爲你想做白鬍子白頭髮編程老頭?你真的以爲你做得了這樣的老頭?今天你在做什麼,取決於5年前你的計劃,而5年後你在做什麼,取決於今天你的計劃。如果今天的你沒有5年後的計劃,那麼等着5年後的危機吧。

市面上前端相關的書很多,在這塊上你的書單上有哪些呢?

html5和html4是個升級關係,不是個替換關係。html5相關的書,或者說當下流行的書,其實講的是html5於html4的增量部分,而html4的書可能已經不再流行甚至不再出版了。這是很危險的,書斷層有可能引起技術斷層,特別是連互聯網上的知識也是這種傾向的時候,非常可怕。不知道5年內工作經驗的同學,基礎紮實的有多少。我說的基礎紮實是從html4開始算的。我個人的建議是,找找老書看,補補基礎知識,從html4開始補,補到html5。也許這其中會遇到某些知識已經被淘汰了,但不重要,知道被什麼淘汰了,以及爲什麼被淘汰了很重要。

希望直接就有現成的書,把最佳實踐直接告訴你,這是不可能的。一是有能力寫這種書的人很少,二是有能力寫的人不見得願意寫。我建議是從html4時代的書看起,一路看到html5,移動前端開發。

那除了自己補,還有什麼別的辦法嗎?也許你可以參加我的收徒計劃。準備好這6個問題:

  • 怎麼看所謂高手、大牛?

  • 如果錢不是問題,自己想做什麼事?

  • 如何看待工程師30歲轉型問題?

  • 自己和大多數人觀點不一樣的一件事是什麼?不限於技術

  • 如何看待拜師一事?

  • 覺得我能教你什麼?然後將答案投到 [email protected]

  • 另外,入我門下還有拜師禮節和拜師費,詳情看這裏吧:http://t.cn/RGQ0g5i

爲什麼會想到收徒呢?自己想吧。

在前端技術的深廣度上,要如何去權衡呢?

09年我在寫自己的書的時候說過,欲精一行,必先通十行。深度當然是最核心的html、css和js上。廣度上可以學學服務端編程、面向對象、代碼重構技巧、軟件工程、native開發、webgl等等。權衡嘛,注意你的崗位是前端,所以什麼是珍珠什麼是盒子要分清楚。盒子可以換可以扔,珍珠不能扔。

從技術崗轉到管理崗,你切身的體會有哪些呢?

team leader和geeker是不一樣的,team leader的定位是保證團隊合作的流暢與效率,團隊成員的能力成長和穩定性。geeker並不適合當管理,甚至會成爲團隊合作的障礙。技術崗是第一人稱視角,是打cs,而管理崗是上帝視角,是玩魔獸爭霸。

但有意思的一點是,編程中的很多智慧放到真正世界來運行也是非常適用的,比如敏捷迭代的思想,先完成後完美,比如面向對象的思想,高內聚內耦合,放權與團隊合作,比如抽象不足與抽象錯誤,團隊分工協作,比如api封裝需要考慮易用性,文檔編寫要儘可能對用戶友好。總之,編程的思想在做團隊管理時也是幫了我很多大忙。

只是這樣仍是不夠的,需要掌握的知識還有很多,比如時間管理、心理學、性格研究等等。另外,我在負責產品,所以最近一年在惡補大量的經濟心理學、社會心理學、產品營銷、銷售技巧等等等等。活到老學到老,做個技術出身的產品人,在互聯網+時代,廣闊天地,大有可爲。

後語

大家看完阿當前輩的經歷之後有什麼問題要提問的嗎?

歡迎大家在下方留言評論,我們老規矩,獲贊數最多的童鞋可以得到由@人民郵電出版社異步社區贊助的《JavaScript函數式編程》圖書一本,時間截至當日22點。如贊數相同的,將取排序上方的評論。

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