趙望野:前端工程師的困惑

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/133104前端

趙望野,現任豌豆莢Front-end Team Lead。他2011年加入豌豆實驗室,曾負責豌豆莢 Windows 版的前端架構設計和主要開發工做,以及 Front-end Infrastructure 的研發工做。當豌豆莢從一家初創公司成長爲一家得到上億美圓投資的企業的時候,趙望野也在他的職業道路上不斷成長着。隨着業界對前端工程師價值的逐漸承認,愈來愈多的人才開始進入這個領域,而趙望野卻認爲這一切都「有點晚了」。他的困惑來源於變化的環境和前端工程師這個有些特殊的羣體。而他,也逐漸從一個單純的工程師變成了一個以解決問題爲目的的人。面試

圖片描述

新路

「我以爲我不傻,這個公司到底靠不靠譜,我幹一陣是可以判斷出來的。」算法

問:你從何時開始編程的?編程

我第一次寫代碼應該是七八歲,由於我爸爸是哈工大的教授,因此計算機是做爲年輕的科研工做者得的獎。寫程序我第一次用的是Basic,而第一次作有界面的東西,用的是Visual Basic。我是在初二的時候第一次接觸互聯網,那時候接觸了一點點Web開發。後端

問: 你大學學的是什麼?跟計算機有關嗎?瀏覽器

我是在中國傳媒大學上的數字媒體藝術專業,算是相關。由於本質上專業培養目標是可以利用新媒體技術、藝術結合去作一些事情。雖然咱們專業到目前爲止也沒給新媒體一個準確的定義,可是互聯網確定算是新媒體之一了。而我本身的我的興趣是作一些網絡、Web開發方面的事情。微信

問:你如今從事的工做都和你的專業相關嗎?網絡

算是相關。你很難肯定某個東西究竟是不是網絡多媒體,由於這種交叉學科口徑很寬泛,包括咱們專業課的設置,學的東西也是很是雜的。我前兩屆的學生還在學數字電路、模擬電路這種純工科的課程,到我這屆就刪掉了。我這個專業比較新,我研究生的導師是這個專業的創始人,2002年是第一屆,因此我入學的時候尚未畢業生。這個專業到底應該是幹什麼的、怎麼發展,也是在一個逐漸摸索的過程。但本質上,我如今作的這個其實算是Web前端,就是UI,那UI算不算網絡多媒體呢?我以爲是算的。前端工程師

問:其實你如今用的不少技術都不是在學校學的吧?數據結構

對。我以爲這是一個普通現象,不僅是前端,甚至不少的後端工做,好比作Windows客戶端或者作iOS客戶端開發都是。由於本科教育相對仍是一個比較基礎性的教育,我以爲不會有專業去教你JavaScript,有的話也都是像選修課這樣的形式。專業基礎課大部分仍是比較經典的教學語言,像C,或者是Pascal,也有多是C++。更重要的是基礎,好比數據結構、算法、操做系統這些。不會有一個大學專業課教你一個框架、教你一個具體的技術平臺、怎麼去作移動開發、怎麼去作Web開發。因此我以爲這應該是個廣泛現象。

問:你是怎麼加入豌豆莢的?

在2010年年末的時候,我當時已是研究生了,帶着咱們的本科生來創新工場參觀,當時有人接待了咱們,說:咱們在招人,有想來實習的同窗能夠留個簡歷。本科生沒有一個留的,但我留下了個人簡歷,至關於我把簡歷扔給了創新工場的人力資源庫。當時大概面了兩三個項目,除了豌豆莢,剩下的我都不記得了,。我面試的時候豌豆莢還沒搬出創新工場,我入職的那一天是他們剛剛從創新工場搬出來到本身獨立的辦公室。

問:選擇一家初創企業其實仍是頗有風險的,你是如何決定的?

我以爲這首先是個我的選擇問題。第1、風險確定是和收益並存的。第2、由於我當時也只是實習,其實對創業這事自己並無什麼概念。包括創業會有多大風險,到底會面臨什麼樣的困難,會有多少收益,其實並無一個很直觀、很明確的判斷。我周圍的師兄師姐,包括個人同窗,也沒有人蔘與過創業,你們對互聯網創業這事也都不很瞭解。本質上,首先我以爲我不傻,這個公司到底靠不靠譜,我幹一陣是可以判斷出來的,當時也是實習,對我來說風險並無那麼大,由於我並非畢業找工做,因此先幹着唄。大概幹了一個Q吧,就以爲這裏還挺好的。

豌豆莢的文化和睦場如今對於不少人來講是頗有吸引力的,你去的時候,有這樣成型的文化和睦場嗎?
有,可是我以爲公司文化這件事,並非你刻意想要一個什麼樣的文化。本質上說,早期加入的人少,跟你一塊兒工做的人你喜不喜歡,若是你喜歡的話,說明大家的氣場是類似的,大家作事的方法、態度,包括三觀應該是一致的,慢慢地這些人聚在一塊兒天然而然造成了這樣一個文化。可是可能到一兩百人以後,纔會有意識地回來把這個東西總結一下,「咱們的公司文化是什麼樣的」,纔去對外傳達這樣的思想,而並非很早的時候就說咱們要一個什麼樣的東西。好比像豌豆莢的三個創始人在一塊兒,我加入他們以後,會以爲之前這幾我的作事的方法、價值觀跟我都是相符的,我天然也喜歡他們,因此就加入這了。

前端工程師的困惑

「若是Web技術在移動設備上面的消亡是一個不可避免的技術潮流的話,那可能前端工程師真的要好好考慮一下怎麼去規劃本身的職業路徑了。」

問:幾年前,不少人對前端工程師的價值並非很承認,你以爲最近這幾年這方面有沒有改觀?

我以爲是有改觀的,可是有點晚了。如今的狀況是,你們並非不承認前端工程師的價值,而是說這個水太渾了。前端工程師數量不少,可是這裏面真正意義上能夠被稱做合格的前端工程師的數量並很少。好比我會切個圖,會拼個簡單的頁面,如今傳統行業也在作內部系統或者本身的門戶站,像這樣的程度不管從工程質量仍是項目複雜度來說,簡單的培訓均可以完成。這有點像專業技能,大部分前端工程師的能力就停留在鉗工、電工這樣的水平,而並非一個真正意義上的軟件工程師。

咱們認爲合格的、符合咱們用人標準的前端工程師是我能把他當成一個真真正正的軟件工程師來對待,這個數量是比較少的。你們以爲前端門檻比較低,不少人都能作,技術含量比較低,但本質上不是這樣的。

近些年有所改善是由於互聯網泡沫破裂以後,行業開始進入了一個健康的發展情況,競爭也進入比較正常的情況了。任何行業都是這樣,行業健康發展的一個標誌就是不少人開始作同質化的事情。這個時候前端工程師的價值就體現出來了,由於前端工程師是最終決定你的產品能不能從80分進到100分甚至120分的人,是體現競爭力的。好比一樣我都是作一個閱讀軟件,或者SNS網站,其中一部分是產品設計師或者PM的工做怎麼樣,若是咱們把變量變成一致的話,差異就在前端工程師上。他們實現的東西究竟是不是用戶便於用的:界面精美,使用體驗流暢,加載速度快。前端工程師會在同質化競爭時體現出競爭力的一部分。

若是一家初創公司不注重這一塊,不把使用體驗看成一個競爭力,那說明這家公司仍是處在一個比較初期的競爭階段,由於沒有競品,他們拼市場、拼功能,當有了競品以後纔會去拼產品。產品競爭力的一部分是由產品設計師和PM來決定的,另一部分就是前端工程師,特別是對Web產品來說。

我爲何說這事有點晚了呢?由於如今已經進入移動互聯時代了,PC上面的Web流量大幅萎縮降低,可是卻並無轉到移動設備的Web上面,而是轉到移動App上面。在移動終端上,Web技術只能做爲一個補充,移動設備並非Web前端工程師的主戰場。因此如今不少前端工程師會比較迷茫,或者說將來怎麼發展,是否是要轉行去作Android開發,或者iOS開發,不少人會有這樣的想法。包括咱們本身的前端團隊其實也在探索前端工程師在移動設備上怎麼去發展,若是要轉型的話,怎麼轉,咱們作一些什麼樣的事情是更能體現出咱們價值的。

問:到底什麼是前端?

我以爲如今前端的概念比之前你們所廣泛認識的範圍要廣。前端工程師是幹嗎的?作UI的。這個詞在英語裏面自己指的是接口, interface自己並不僅是你看得見的,一個能點的按鈕叫interface,USB也是interface,火線的IEEE1394接口也叫interface,因此它指的應該是兩個系統進行信息交互的中介。因此前端工程師作的應該是可以把服務或系統轉換成用戶可以接受的形式。好比我是豌豆莢的前端工程師,豌豆莢能提供什麼樣的服務,我把背後的複雜的技術系統轉換成用戶可以接受的信息形式。好比,我把應用搜索或者咱們如今作的應用內搜索轉換成這樣的信息形態交給用戶。用戶看到的就是我手機上的一個App,或者在Web上面的一個搜索框,同時,可以把用戶輸入的信息,再包裝成系統可以接受的形式傳遞回來,做爲一箇中介在裏面存在。

咱們如今說的前端實際上是指狹義的Web前端。咱們的技術團隊其實也在探索,是否是整個作客戶端開發的,均可以叫作前端。不管Windows開發、iOS,或者作Andriod開發,平臺複雜度都要比Web高一點,可是作的事情是同樣的。好比說用戶給了我一個搜索請求,怎麼去查我並無論,我只是把這個東西扔給後端,後端把結果返還給我,我把它作成一個交互流暢、界面精美的體驗,把這個結果包裝一下還給用戶。前端工程師的視野必定要很是開闊,純從用戶角度看多是更偏向於PM或者設計師,純從技術的角度看可能會偏向於架構師,我以爲前端會在這裏面找一個平衡。

問:你以爲如今前端工程師的發展路徑能夠是什麼樣的?

若是你要說三四年前,可能仍是PC上面的Web會佔主導,那個時候客戶端徹底沒有辦法跟這些作互聯網的公司競爭,作互聯網最主要的就是在瀏覽器裏面落地。如今這兩年,移動互聯網的發展很快,前端工程師會有點迷茫,不知道本身該幹嗎了。由於若是一個公司只作移動端的話,那頗有可能前端工程師在這裏面就是一個非主導的地位,在工程團隊也會比較邊緣化。但這個題怎麼解,咱們沒有辦法給出特別好的答案,由於咱們本身也在探索。但我也並不以爲這是一個問題,由於若是你是一個工程師的話,就知道任何事物都有發展的天然規律,若是咱們有一天認爲Web技術不適合移動終端這種使用場景的話,那前端工程師就轉行幹別的吧,能夠去作Andriod開發或者作iOS開發。

問:關於Web應用和原生應用爭論,你有什麼見解?

如今整個前端圈子裏面有一小撮人,有點像原教旨主義者,他就以爲Web是一個神聖不可侵犯的既有體系,「客戶端已死,Web永生」,他們以爲在移動設備上面,Web終有一天會趕超原生應用。但我以爲這不是目的,Web只是一個技術手段,爲何必定要在移動設備上趕超原生技術呢?

全部的工程師仍是首先應該把用戶放在第一位,你要解決的是用戶的問題,而不是用一個特定的技術手段去解決用戶的問題。我見過不少人,他們處處去跟人爭辯,說Web如今發展得很快,必定會在移動設備上大有所爲的。可是沒有辦法迴避的是,Web確實性能沒有原生應用好。也有人反過來講,過幾年隨着硬件的發展,手機CPU變得更快,內存更大,那Web技術可能就會變得更快了,可是他們忽略了一點,Web變得更快的同時,原生技術也更快了。

雖然我是豌豆莢的前端工程師,但首先我是豌豆莢的工程師,因此我要解決的是用戶在使用移動設備時遇到的問題,而個人目的不是用Web技術去解決他的問題。這兩年咱們也看到不少大公司成功地把本身在移動終端上面的客戶端,從混合形式轉成了純原生形式。好比Facebook,這是你們都公認的比較優秀的產品,他們曾經在早期的時候選擇用混合的技術形式作移動客戶端,可是最終放棄了,都轉成了純原生的開發。而iOS開發和Andriod開發又徹底分紅了兩條技術路線。

問:還有沒有其餘技術路線?

可能會有一些比較特殊的。好比最近Google在公測的軟件叫Inbox,它選擇的一條路是,用Google的GWT和另一個叫J2Obj-C的框架寫了一份代碼,但他們把這份代碼編譯成JavaScript的Web版在瀏覽器裏用。又由於代碼是Java的,因此就能夠直接在Andriod裏用,而後我再把它轉成Objective-C在iOS裏面用。但這些都跟Web沒有必然的聯繫,雖然我寫的代碼能夠在瀏覽器裏跑,但它並非一個Web技術的解決方案。因此這些東西究竟是不是前端工程師的工做範圍,將來會不會轉向這條路,其實我並不知道。若是Web技術在移動設備上面的消亡是一個不可避免的技術潮流的話,那可能前端工程師真的要好好考慮一下怎麼去規劃本身的職業路徑了。

問:爲何Web前端工程師會感受轉行很困難呢?

我遇到過不少人之前多是作Windows客戶端開發或者是作Server端開發的,作Windows的可能轉Server了,作Server的可能轉去作Andriod,或者轉去作iOS,並不會有特別大的困難,由於他們的基礎知識是沒有問題的,就像我剛剛說的數據結構、操做系統原理這些知識體系的基礎。但爲何Web前端工程師如今會以爲轉行很困難呢?緣由在這:他們的基礎知識有缺口。

咱們如今的實踐經驗就是:若是一個頗有經驗的Web前端工程師去作Andriod或者iOS,可能在用戶體驗這塊的感受會比較強,但技術上並無任何優點,由於Web平臺的複雜度比iOS和Andriod低得多。不少公司招Windows客戶端工程師的用人標準是非五年經驗的我不招,爲何?由於Windows平臺複雜度很高。若是你C++代碼寫得再好,可是沒有作過Windows平臺開發,沒有那三五年的時間去摸索Windows平臺的API和特性,你是不可能作好Windows客戶端開發的。Web前端也是客戶端開發的一種,只不過是限制在瀏覽器這個技術平臺裏面,而瀏覽器這個平臺的複雜度是遠低於Andriod和iOS的。這就是爲何不少前端工程師會以爲本身轉崗很困難的緣由,本質上仍是由於基礎知識的缺口。而反過來Andriod和iOS的工程師轉Web,並不會以爲很困難,他可能不知道瀏覽器有什麼API,可是不可能連Javascript這個語言都學不會。

Web技術最主要的編程範式是聲明式,所謂聲明式,就是我寫個HTML的標記,聲明我要什麼,可是這個東西在瀏覽器裏怎麼渲染,我控制不了。另一個比較典型的聲明式範式的語言是SQL,我只描述我要什麼,可是後面會有個很複雜的體系來按照個人描述去實現。它的好處是你很容易抽象你的需求,學習成本會比較低,可是代價就是犧牲了運行時的效率。若是你開發又簡單,運行時又快,那原生技術就沒有存在的必要了。原生技術不是聲明式的,好比界面是怎麼渲染的,你要用代碼去控制渲染的過程,你不能簡單地說我要一個表格,它就給你個表格。而Web是這樣的,Web說我要一個表格,瀏覽器就給它個表格,你再告訴瀏覽器說我要一個5像素的陰影,那瀏覽器就給你一個5像素的陰影,前端工程師根本控制不了這5像素的陰影怎麼畫上去,或者說只能在很小的範圍內控制。這其實和時間換空間,空間換時間這個簡單的哲學原理很類似,不可能二者兼得。

腳踏實地

「我接觸過不少前端工程師,他以爲差一像素就差吧,可是UI質量可能差異就在這一像素上,你差了這1像素,就不是100分了。」

問:對你來講一個優秀的前端工程師須要具有什麼樣的技能?或者什麼樣的知識結構?

前端工程師應該首先是個工程師。如今不少前端工程師,包括我面試的,可能會在基礎知識上有所欠缺,基礎的數據結構、基礎的算法、操做系統原理,這些對一個軟件工程師來說很是基礎的內容仍是要知道的。若是不知道的話,你可能會成長得很快,可是很容易進入到一個瓶頸,而且這個瓶頸是沒法突破的,由於你的知識結構是有殘缺的。

其次是我的素質,好比說對細節的注意力。前端工程師作的東西,不管是本身實現的,仍是按照設計師的設計稿實現的,差1像素就是差。那這1像素你能不能看得出來,而且把它糾正過來,這其實不少狀況下取決於我的的素質和對細節的注意力和追求。由於我也接觸過不少前端工程師,他以爲差1像素就差吧,可是UI質量可能差異就在這一像素上,你差了這1像素,就不是100分了。

第三部分是你要對用戶體驗有一些基本的瞭解和判斷,什麼樣的東西體驗是好的,什麼樣的東西是體驗流暢的,怎樣可以讓用戶更有效地去接受你想傳達的信息。一些交互設計上的最佳實踐是必定要知道的,這不徹底是設計師的事,前端工程師也要參與進來。

問:你在面試的時候,除了這些技能以外,你還看重別的什麼嗎?

其實我我的會比較看重一我的的視野。不少部門說我也看重視野,可是前端工程師應該尤爲看重,由於前端技術更新迭代太快了,Web技術自己就很是不穩定,你今天會的東西,明天睡一覺可能就已經發生變化了。前端工程師若是視野不夠開闊,你所瞭解的東西廣度不夠的話,就很難跟得上這種進步速度。

另外,前端是最接近用戶的這一端,你不只要能從工程的角度,從站在你背後的產品設計師、後端工程師的角度去跟用戶交流,同時你要能站在用戶的角度,反向地跟你後面的這些設計師和後端工程師交流。好比後端工程師給我一個API,我做爲使用者來講必須能判斷什麼是好用的,我才能把後端想要傳達的信息有效地傳達給用戶,再把用戶的交互反饋給系統。前端工程師要站在兩個角度去溝通,要可以從很是不同的角度去看待同一件事情。

我看你在一個Talk裏面說過「統一的前端研發生態環境可以自生長」,這個大家是如何實現的?
首先「自生長」是爲了作Talk包裝出來的一個概念,但若是要把它說成大白話的話,所謂「研發生態環境」是指的是開發環境、測試環境、生產環境和運行環境,這是你的代碼會跑的一些獨立的物理上隔離的環境。這時候就須要有個工具鏈,能把整個環境穿起來,儘可能減小在整個研發過程當中工程師的一些機械性手工操做。

所謂「自生長」是說,由於一個工具鏈上涉及到不少的小工具,這些工具都像珠子同樣串在一塊兒,可是每一環我均可以獨立地去替換它,「自生長」保證了這些工具都是很是原子的。若是有一個工程師以爲如今咱們在整個研發過程當中某一個環節不夠好,自動化流程不夠,想去優化它,那他就能夠單獨針對這一小塊去優化,而不是給你一個很龐大的技術體系,想要把這個東西使用明白都得花很大的精力。

因此所謂的「自生長」是說每一個人均可以很容易地對你整個技術環節當中的一個小部分進行改進,它就可以日趨完善。可能今天我改一點,明天你改一點,日積月累下來,整個工具鏈就會愈來愈完善。

問:這個體系在大家團隊裏實現起來有沒有遇到困難?

困難卻是沒有。可是這個東西作完了以後,我得Push你們去用,若是你們不用,就很難讓這個東西達到我所說的自趨完善的過程。豌豆莢作事的文化並非上面給你一個任務,你就必定要去作。而是這個東西我痛了,誰痛誰驅動。我把這個解決方案給他了,他一開始可能不用,但時間久了以後,他痛得不行了,就會嘗試一下看看能不能改進痛點。因此這個過程會相對比我以前預想的緩慢。但如今基本上這個事情已經進行完了,咱們如今整個前端的研發都是構建在我以前作的那套系統之上。

問:你剛纔說你很重視視野和學習的能力,那麼你是怎麼更新本身的知識、工具和技能的?

我以爲仍是要保持一個高度的關注吧,首先我訂閱了不少國外的技術博客,包括圈子裏面比較知名的工程師,他們都有寫博客的習慣,我會去關注他們正在作的事情,也包括一些公司的技術團隊的技術博客。比較知名的像Google有本身的Google黑板報,當他們作了一件比較牛的事情,就會放一篇Blog出來,我會長期關注這件事。我之因此不多關注中文世界,是由於會有滯後。

前端技術發展實在太快了。若是如今後端一些作Server的工程師,還在用兩三年前的技術方案不會有人以爲是徹底不可接受。但若是如今前端工程師,好比我面試的時候,若是你不知道什麼叫前端MVC,沒據說過Angular,Backbone這些前端MVC框架,那我以爲這是一個徹底不可接受的事情。整個前端的技術體系就是逆水行舟不進則退,基本上以周甚至以天爲單位更新本身的知識體系,要時刻保持關注。

問:那你如今工做中都使用什麼樣的框架和工具?

若是專指前端的框架的話,咱們豌豆莢仍是挺豐富的,咱們並不像不少公司同樣會指定特定的工具,我知道有一些公司如今在用YUI,還有一些可能用Backbone或者Angular。首先咱們並不指定一個團隊只能用一個框架,咱們根據產品的不一樣選擇一個最合適的解決方案。之前我作Windows客戶端的時候,用的是Backbone,後來的海外產品,以及不少內部產品用的是Angular。咱們也但願你們能多接觸不一樣的技術解決方案、不一樣的框架,去了解這些框架背後的設計哲學,解決問題的角度,這會帶來不少的啓示。咱們現行還在維護的產品裏面用的就有Backbone, Angular, React,咱們鼓勵解決問題,但不鼓勵用同一種姿式不停地解決同一種問題。咱們作的一些內部項目,你們會以爲比較機械,不肯意作。可是若是用一種新的技術方案,在解決一個問題的同時還會學一些新東西,這也是一個不一樣的思路。

問:你對本身有沒有什麼規劃?想一直作前端工程師?

我本身其實並無特別明確的規劃,可能也跟我本身所處的環境有關,由於豌豆莢實在發展太快了,我五年以前也不會想到本身會發展到今天這樣。這四年在豌豆莢走過的整個成長路程,並非一步一步規劃過來的。不少時候若是你真的潛心在工做裏面,什麼也無論,可能過了一段時間後你會發現你比本身想象的走得更遠。在互聯網這個外部環境變化比較快的行業裏面,超過三年的規劃我以爲意義都不大,由於一年之後可能整個外部環境就徹底不同了。我本身如今可能會作一些團隊管理,包括產品的研發管理上面的事情,這也是我兩三年前徹底想不到的。之前我以爲本身會一直作工程師,前端作不了,我會去作別的,但如今看來,「作事」對我來說可能更重要,技術只是一個手段,是支撐之一,還有其餘的東西須要保障。

我如今在作的產品,前端只是衆多技術體系的一部分,我想要把這件事作成,只盯着前端這一塊是不行的。之前我只作工程師的時候,一個問題來了,個人反應是這事我前端應該怎麼作,前端能作到什麼範圍,如說一個功能到底應該由前端去作仍是由後端去作,我只能站在前端工程師的角度去考慮這件事。但如今我會更多考慮的是我要把這事解決了,無論是前端仍是後端,首先要把這事解決了。因此思考問題的角度和整個目標會不太同樣。

問:知乎上有相關的討論,碼農35歲之後怎麼辦?

不少人感受如今一些工程師牛了以後就不寫代碼了,底下就會有一堆人站出來反駁,國內的誰誰誰,如今多少歲還在寫代碼,但這只是個例。從總體上看,確實國內的環境相對比較浮躁,位高權重了以後就不愛寫代碼了,這是個廣泛現象。固然也有個例,可是用個例來推導出結論是不科學的。確實國外的情況要好不少,一是競爭環境不太同樣,生存壓力也不同。另外,國內技術驅動的公司很少。人寫代碼能創造多大價值,就是你能掙多少錢和你在公司裏的地位。若是你十年如一日地寫代碼,可是到你40歲寫的代碼跟你30歲寫的代碼創造的價值是同樣的,那活該嘛。寫不寫代碼這不是決定你有多大影響力和有多少收入的根本項,關鍵是你創造多少價值。


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

圖片描述

相關文章
相關標籤/搜索