本文僅用於學習和交流,不用於商業目的。非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/Art...前端
通往360的酒仙橋路真是名副其實的「堵」,難到是大公司感召人才的魅力所致?採訪當天,恰巧碰到高校畢業生面試大軍。這麼想來,李鬆峯老師特地下來直接把我領進辦公樓,確實有種「走了後門兒」的竊喜。以後,李老師帶我來到了360著名的「南瓜車」型休息區,坐在裏面有種"公舉"的感受。不久,傳說中的月影大大進入了視線。筆記本加手機,嗯,夠專業!等真正進入了採訪,月影大大的談吐、邏輯徹底顛覆了我以前對技術員的偏見。後期整理雖然枯燥,時不時能被他廣博的知識和獨特的視角給驚醒,揉揉眼又是智慧一眼。程序員
早年曾在微軟亞洲研究院作過訪問學生,在金蝶軟件有限公司前後擔任核心開發工程師和項目經理,在百度電子商務事業部作過Web開發項目經理。在盛大創新院搜索主題院作太高級研究員。目前擔任奇虎360副總監、360技術委員會委員兼前端技術委員會主席,前端最大團隊——奇舞團負責人,w3ctech顧問。web
多年來致力於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、線上質量、潛在風險,等等。
另外,我以爲組建團隊的一個重要原則,就是多元化。針對不一樣產品選擇不一樣的技術,團隊成員也會有更高的自由度。開發一個特別大的項目,或者帶一個特別龐大的團隊時,尤爲團隊人員的水平又良莠不齊的時候,你是不得不去採用統一的架構作規範的。也許這個架構並非最適合、最高效益的方案,但它有一個很是大的優勢,就是保證技術人員不會寫出一些破壞性的東西來把整個項目毀掉。
圖靈訪談:如何支持底下技術人員的職業發展?
技術人員的發展有幾個階段,分別是學習、沉澱、分享和影響力。具體來講,你要先學習,而後在工做中沉澱,等有了必定的知識沉澱之後去分享,而後打造你的影響力。影響力對於我的的職業發展頗有幫助,奇舞團鼓勵中高級工程師具有必定的我的影響力。確實,有的同窗可能有產生惰性的時候,奇舞團的人比較多,也沒辦法一一照顧到。可是還有另一種狀況,有的同窗我的是有意願的,可是最近項目太忙根本沒時間去規劃發展本身。這個時候咱們會介入處理的,不然他就會徹底陷入到業務裏面,對我的的發展一點好處都沒有。咱們可能經過調配資源、增長人員、跟業務方溝通,或者其餘的管理手段去解決問題,我以爲,這也是團隊管理的價值所在。