360前端負責人月影:賽跑專案和跳水專案的金牌含量其實一樣(圖靈訪談)

劉敏ituring發表於2016-09-22

月影(本名吳亮)

enter image description here

早年曾在微軟亞洲研究院做過訪問學生,在金蝶軟體有限公司先後擔任核心開發工程師和專案經理,在百度電子商務事業部做過Web開發專案經理。在盛大創新院搜尋主題院做過高階研究員。目前擔任奇虎360副總監、360技術委員會委員兼前端技術委員會主席,前端最大團隊——奇舞團負責人,w3ctech顧問。

多年來致力於JavaScript技術和Web標準的推廣,曾經活躍於國內極有影響力的JavaScript專業網站——無憂指令碼(www.51js.com),並擔任JavaScript版的版主。

平時熱愛文學、寫作和圍棋。著有暢銷書《JavaScript王者歸來》、網路火爆技術文章《寫給想成為前端工程師的同學們》《前端動畫原理與實現》等。

圖靈訪談:我知道月影大大在前端方面特別有名,圖靈社群的好多留言也都感嘆終於有機會訪談到月影大大了。是什麼時候開始接觸JavaScript的?

我接觸的時間算是比較早的了,如果從寫網頁開始的話,那時還沒上大學,在高中的時候,大概1996年左右。我們家上網比較早,算是第一批網民,那會兒我自己就寫一些網頁,只是簡單地用一些HTML寫一寫,不是很專業,就做著玩。那個年代,很流行個人站長,我也跟著玩。後面接觸到了動態網頁技術,我記得當時用Perl寫了像聊天室、留言本之類的頁面。基本上不是很體系,就是瞎玩。

當時還是以C語言為主,寫一些小程式。大學的時候,學校並沒有專門的前端專業,但社團裡面需要做一些網頁,包括一些其他的宣傳。

畢業以後,我的第一家公司是深圳金蝶,做ERP軟體的。挺有意思的是,我們那一屆有一個半年輪崗的實習期。派到分公司後,我接觸到的不全是開發,也做過售後、售前等各種東西。半年以後回到總部,參與了總部正在開發的一個內部web系統。當時的話,我還考慮是用.NET還是Java,最後選擇了Java。

當時看來,Java是比較適合的,因為這種企業級的系統用Java比較成熟,而且金蝶是一個Java很強的公司,所以也就學了Java這一塊的東西。

涉及web系統就不可避免地要用到前端,我自己又沒有系統地學習過前端,所以就用了Java的一些前端框架。之後,我發現用後端程式設計師使用的Java工具開發前端很不方便,於是迴歸到了標準的HTML、CSS、JavaScript 上,開始系統地學習JavaScript,比如說看犀牛書(《JavaScript權威指南》)、混跡無憂指令碼。

圖靈訪談:對,還是51.JS論壇的版主。

因為經常發一些技術知識,參與一些討論,算是比較活躍。

圖靈訪談:應該說IT行業挺看重分享、開源的?

對,做技術的話,我挺看重分享的,這是一種網際網路行業的精神。網際網路早期的時候,可能比現在更純粹一點。雖然現在的網際網路,表面上看,存在一些開放精神,其實很多時候這些產品都已經商業化了,講的更多的,是流量、變現、價值。

我希望做技術的同學能夠繼承早期網際網路時期那些草根站長們身上的網際網路精神。不一定為了訪問量,才去做產品。迴歸到初心,我覺得通過技術把產品做出來,分享給大家,享受分享的過程,這本身就很美好。

圖靈訪談:你的微博暱稱“十年蹤跡”,讓我想到了納蘭性德的詞“十年蹤跡十年心”。不知道是否出自這裡?

對,確實出自納蘭容若的詞。雖然是理科出身,其實我蠻喜歡文學,尤其是古詩詞。像詩經、楚辭、宋詞、元曲,我都會去涉獵一些。雖然小時候常吟誦的唐詩宋詞大多遺忘了,但接觸到這些詩歌都還挺美的。當成愛好跟朋友分享、拿來自己欣賞或是寫寫都挺有意思。

圖靈訪談:從“十年蹤跡”“月影”到你寫的《JavaScript王者歸來》這些名字,可以看出作為“技術界的一股清流”你是很喜歡文學的。除了文學,平時你還喜歡寫作、圍棋。

之前會寫一些包括技術的、非技術的文章,最近幾年比較少了,但會堅持寫技術部落格。

圖靈訪談:你怎樣平衡生活跟工作呢?

其實剛畢業那段時間,平衡這塊也不是很好。因為從事了自己興趣愛好方面的工作,很開心。腦子裡沒有把工作和生活區分開的概念,平時下了班也想寫寫程式碼,寫一點其他的東西。但是後來慢慢意識到,還是要花些時間多陪陪家人、週末健身、休息旅遊,合理安排自己的生活。

我在這方面還是挺有代表性的。以前沒有關注過這些東西,現在會關心身體鍛鍊。週末的時候,固定時間游泳健身,也會在家做做菜。

圖靈訪談:其實圖靈出過一本書叫《程式設計師健康指南》,但是受歡迎程度遠不如技術書。從你這邊說,是否應該注重一下?

應該注重一下健康問題。很多人可能有意識到,但改變多年養成的習慣也挺難的。

身體鍛鍊很重要,中午到公司健身房做些不太劇烈的運動,比如跑步機上慢跑一會,哪怕是樓下走一圈、散散步,保持更好的狀態、更高效率地工作。

不要覺得年輕、身體好,所以這些東西無所謂。當你工作了一段時間以後,你會覺得每天熬夜、長時間久坐,很不舒服。

現在帶團隊的話,我不希望底下的同學因為工作導致身體方面的問題。我鼓勵大家都運動運動,原則上也不鼓勵過多的加班。做產品研發,所以專案都是有周期的,有忙有閒,是很正常的一個狀態。如果遇到忙的情況,可能會出現週末加班,佔用大家的一部分時間,但等到專案上線,後面會有一個調整期,大家可能相對的閒一點,個人學習時間也多一點。

圖靈訪談:有人說前端的門檻低,切個圖,搞個動態,拼個頁面就行了。你覺得優秀的前端開發人員應該具備怎麼樣的技能?

前端很有必要分成兩塊:一個是專業的領域,還有一個是業餘愛好者的領域。其實,我不反對把前端的門檻變得更低,因為前端實在太有用了,它的重要性決定了它的普及廣度。舉一個最簡單的例子,把時間倒回20年前,誰會想到如今幾乎每個人甚至說一個家庭裡面的孩子,都可以熟練使用電腦。20年前PC剛出現的時候,這是沒法想象的。

當時,只有專業人士經過專門的培訓之後,才能夠上手使用,但現在的門檻已經變得很低了,PC就像家庭電器一樣,已經普及成每一個家庭必備的工具了,它影響和改變著我們的生活方式。

前端也一樣,前端在未來太重要了。過去的話,我們可能把前端只看成是在瀏覽器上面展現UI的東西。未來隨著網際網路(IOT)、萬維物聯網(WOT)的迅速的發展,包括所有虛擬現實在內的各種智慧終端可以幫我們做很多事情。像智慧手錶、智慧手環、智慧家居,會需要越來越多的終端與人來互動。

智慧自動化洗衣機可能是大家用的第一臺智慧裝置,未來發展的方向是把這些裝置組合起來用。舉一個簡單的例子,我吃早餐的時候喜歡看新聞節目。假如我家的智慧電視能夠在我開啟微波爐加熱牛奶的時候,自動幫我切換到早間新聞的話,是不是就不用手動操作了?這其實是很生活化、個性化的需求。如果物聯網做得足夠發達,就是沒有經過太專業培訓的人,也可以實現這種類似於簡單程式設計的活動:通過一些圖形化,或者是一些簡單的直觀方式來控制不同品牌、不同廠家製造的家電來完成這種自動化的邏輯。這也是未來前端普及的方向。

另一塊是更專業的領域,就是如何在這些家電的底層,在人機互動的介面,做出更好的展示、更炫酷的東西。舉個例子,最近3D列印的話題很熱門。其實,3D列印技術和螢幕的工作原理從本質來講都一樣。你可以把在瀏覽器上顯示網頁理解成定時地、快速地、不間斷地把內容列印在瀏覽器介面上,只是速度非常快,可能一秒鐘列印幾十次。所以CSS的媒體查詢(media query)裡面包含了印表機。從2D列印跨到3D列印,最大的難題,是我們需要一個3D的表現模型,無論對於CSS還是JS都是更高的要求。

虛擬現實的話,像3D眼鏡、還有我在上海科技館看到的那種球幕電影,未來都可能作為個人影音產品進入到我們的家庭。這種情況下,如何把元素展現在這種球幕上,其實需要有更專業的技術。所以說前端的水很深,我們要把它分成專業的和不太專業的。

最近在開奧運,可能大家對體育相對比較關注,我就用體育專案來做類比解釋下“門檻高低”的問題。入門門檻高的領域,你可以把它理解成像跳水、體操的專案,因為不是所有的人,只要身體素質好就可以上去在單槓、雙槓上面轉幾圈的,體操需要有專業的訓練才能實現。入門門檻低的領域就像跑步專案一樣,任何人都可以,只要身體健康、四肢健全的話,其實都可以跑步。但是我們也知道愛好者的跑步和專業運動員的跑步是不一樣的:奧運賽場上的專業運動員,其實不誇張地說,在賽場上能夠很精準地控制每一塊肌肉,他能夠追求很細節的、屬於毫秒級的速度提升,這些不是普通人能夠達到的。所以,跑步專案的金牌含量和跳水專案的金牌含量其實是一樣的。

前端跟跑步差不多,你可以用記事本、用簡單的標籤隨手寫一個網頁,很簡單,但是從專業的角度來看,一個專業的產品很可能需要專業前端工程師追求毫秒級效能提升、畫素級設計稿還原。這就是一種專業精神,只有真正從事這個行業,真正進入這個行業的專業領域的時候,你才能感受到;只有經過長年累月的積累和修煉,你才能達到這樣的專業度。

圖靈訪談:如何理解“計算機不僅是一門科學,而且是一門藝術”?相比其他的領域,其實前端領域對這句話的感受應該更強,因為前端就是要做出一些使用者體驗良好的介面也好,東西也好。平時工作的時候,怎樣操作這門藝術來符合使用者的胃口?

電腦科學是一種科學,它的本質是提高生產力。提高生產力的一個非常重要的方法就是合理抽象,只有把功能抽象到足夠高,這個功能模組才能適用於越廣泛的領域。

程式設計沒有太多的訣竅,不管你是物件導向、程式導向、還是函數語言程式設計,不管採用哪種設計模式,本質上是在做抽象工作。當你把現實生活的模型轉變成一種數學模型,並反應在程式裡面的時候,就能夠提高生產效率,這也是程式最核心、最本質的價值。但是前端很難做到這一點,因為每一個人的操作習慣都不一樣,每個人想看到的東西都不同,每個產品向使用者傳達的東西也不一樣,人的活動是很自由的,你沒辦法去抽象。如果把個性的要求過度抽象,它們就會更貼近機器而對人不友好了。當你對人友好的時候,其實就沒法對機器很友好,這是一個矛盾。前端的使用者互動領域,一直存在這樣的矛盾,不管是模組化開發還是採用像MVC框架、MVVM框架,我們只是在做有限的抽象:把一些複雜的互動活動拆解成一個一個的原子,包括HTML提出的標籤、屬性,CSS的樣式。本質上是對渲染層做一些原子級的拆分和抽象。

但是這種抽象的能力很有限。服務端的話,可能存在一套普適的方法論,有一個很牛的演算法來解決這一類問題。但在前端的話,幾乎沒有一套方法能夠去解決所有的互動問題。我們沒辦法單用程式的思維去解決前端問題,它需要運用各種知識才能把人類的互動體驗帶到一個新的高度。

我一直相信這樣一個觀念,就是程式設計師的工作是創作,寫程式碼不是為了完成某個固定的工作。如果只是為了完成某個固定的工作,這些工作就是沒有意義的,未來肯定會被人工智慧所取代。前端真正解決的是與人打交道的問題,因此差異性特別大。

圖靈訪談:移動網際網路的到來對前端開發人員產生了不小的影響,前端人員應該如何去面對挑戰?

我曾經給團隊設定的目標就是“從前端到端”,前端人員不應該把自己的目光只鎖定在瀏覽器上,還要放眼於移動端和未來更多的終端。前端發展至今形成了一些相對比較成熟的方法論,可以適用於其他領域。

舉個例子,我以前做手機開發的時候,我發現像iPhone、Android下面其實都有一些自己的佈局,比如安卓有自己的layout,有通過xml方式的佈局。沒有前端背景的安卓工程師會用很繁瑣的方式實現哪怕是簡單的佈局。比如說,在手機介面底部放一個bottom bar(一個固定高度的底欄)。考慮到不同型號手機的螢幕高度不同,沒有從事過前端開發的安卓工程師可能會用一些比較複雜的layout組合來實現;但對於前端來說的話,其實只需要用linear layout,把中間layout的高度設定成自適應,再把底下的擠到螢幕外面去,然後用一個負的margin把它浮動上來,就可以很完美地解決這個問題了。

過去的話,前端跟後端還有其他程式領域的交流很少,很多前端工程師並沒有從服務端去學習一些更先進的東西,web 服務端以及手機的原生應用開發者,也沒有從前端學習一些東西。

現在,這個情況在慢慢地改變,邊界也會變得更模糊。各種解析度的螢幕、終端、甚至一些其他的裝置比如非螢幕裝置,包括各種感測器、執行器,其實都可以用前端的方法論來解決互動問題。

圖靈訪談:作為360前端最大團隊“奇舞團”的負責人,主要支援哪些業務?

主要還是支援公司的業務,也有像眾成翻譯、爆米兔這些實驗性的產品。而公司業務的話,我們其實支援的產品線也還挺多的。

圖靈訪談:這麼多年的技術管理經驗,是否可以分享給想要從技術轉向管理的後輩?

其實很多公司都會給技術做的比較好的同學一些機會。但就我的理解,我覺得有一些人可能更喜歡做技術,願意更深入地做技術、寫程式碼。

我帶技術團隊的話,其實優勢還是在技術上。從管理來講,這麼多年也是磕磕絆絆,經歷過很多的事情。我覺得說,做管理其實比做技術更難,你必須去處理很多的雜事。如果你是一個喜歡專注、集中精力投入到一件事的人,剛開始做管理時會覺得挺痛苦,但是慢慢地也會習慣。如果你致力於把前端行業做好,帶團隊能夠做的事情肯定更多。

圖靈訪談:那你覺得,做技術管理一定要像你這樣在技術上見長麼?

其實沒有關係。關鍵的問題,是做管理需要對技術大方向的理解到位、看清趨勢,還有一定的知識廣度。技術見長的管理者要切忌心態狹隘,一定要開放,不要讓自己的技術成為整個團隊發展的天花板;避免保守,相信其他的新技術。我相信一個技術管理者肯定有他獨到的一面,但即便是技術不夠好或者不夠自信,也可以承認這一點、開放一點,鼓勵團隊裡面的技術牛人來發揮他們的價值,甚至可以招聘或者培養一個技術牛人來一起帶領團隊。

另外,一些工程師在微博、知乎上抱怨經理“不幹正事淨做些政治鬥爭”。在我來看,大都是些誤會。因為很多技術管理者都是技術出身,相對來說的話,大家還是比較單純的。可能真的是管理者的管理水平問題,才導致了這些不舒服。你可以跟他好好地聊一次,他自己可能都沒有意識到。對於團隊來說,團隊成員間的溝通,leader對團隊成員的絕對信任,以及團隊成員對leader的支援幫助,其實是非常重要的。不是所有的人天生就能面面俱到,不管是技術還是管理,其實都是需要幫助的。

圖靈訪談:團隊面臨多專案集體構建的時候,如何應對專案間共用元件的問題?

奇舞團有自己公共的平臺,像公共元件庫和公共編譯部署工具,供所有專案開發過程中使用。這些是我們結合360的流程特點,給業務定製的,它能夠適應大多數業務的基礎搭建需求。反過來,從業務上收集到的需求也能夠不斷完善公共平臺的建設。

公共元件是由每個業務根據實踐總結、提交上來的。當然我們沒必要說,一定要所有的小組都去採用同樣的標準、同樣的方式去做業務,因為網際網路產品的差異也蠻大的,有PC上面的、移動的、有嵌入式的(嵌入在桌面軟體裡的)、還有混合程式設計的。每個產品的特點都不一樣,選擇最適合的技術就好。不能為了做技術規範而做規範,相對來說,我更看重的是產品技術方案的成熟度,包括文件、Style Guideline、程式碼review、線上質量、潛在風險,等等。

另外,我覺得組建團隊的一個重要原則,就是多元化。針對不同產品選擇不同的技術,團隊成員也會有更高的自由度。開發一個特別大的專案,或者帶一個特別龐大的團隊時,尤其團隊人員的水平又參差不齊的時候,你是不得不去採用統一的架構做規範的。也許這個架構並不是最適合、最高效益的方案,但它有一個非常大的優點,就是保證技術人員不會寫出一些破壞性的東西來把整個專案毀掉。

圖靈訪談:如何支援底下技術人員的職業發展?

技術人員的發展有幾個階段,分別是學習、沉澱、分享和影響力。具體來說,你要先學習,然後在工作中沉澱,等有了一定的知識沉澱以後去分享,然後打造你的影響力。影響力對於個人的職業發展很有幫助,奇舞團鼓勵中高階工程師具備一定的個人影響力。確實,有的同學可能有產生惰性的時候,奇舞團的人比較多,也沒辦法一一照顧到。但是還有另外一種情況,有的同學個人是有意願的,但是最近專案太忙根本沒時間去規劃發展自己。這個時候我們會介入處理的,否則他就會完全陷入到業務裡面,對個人的發展一點好處都沒有。我們可能通過調配資源、增加人員、跟業務方溝通,或者其他的管理手段去解決問題,我覺得,這也是團隊管理的價值所在。

---------------------

通往360的酒仙橋路真是名副其實的“堵”,難到是大公司感召人才的魅力所致?採訪當天,恰巧碰到高校畢業生面試大軍。這麼想來,李鬆峰老師特意下來直接把我領進辦公樓,確實有種“走了後門兒”的竊喜。之後,李老師帶我來到了360著名的“南瓜車”型休息區,坐在裡面有種公舉的感覺。不久,傳說中的月影大大進入了視線。筆記本加手機,嗯,夠專業!等真正進入了採訪,月影大大的談吐、邏輯完全顛覆了我之前對技術員的偏見。後期整理雖然枯燥,時不時能被他廣博的知識和獨特的視角給驚醒,揉揉眼又是智慧一眼。

360前端負責人月影:賽跑專案和跳水專案的金牌含量其實一樣(圖靈訪談)


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

相關文章