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

jopen 10年前發布 | 22K 次閱讀 前端

趙望野,現任豌豆莢 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 年年底的時候,我當時已經是研究生了,帶著我們的本科生來創新工場參觀,當時有人接待了我們,說:我們在招人,有想來實習的同學可以留個簡歷。本科生沒有 一個留的,但我留下了我的簡歷,相當于我把簡歷扔給了創新工場的人力資源庫。當時大概面了兩三個項目,除了豌豆莢,剩下的我都不記得了,。我面試的時候豌 豆莢還沒搬出創新工場,我入職的那一天是他們剛剛從創新工場搬出來到自己獨立的辦公室。

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

我覺得這首先是個個人選擇問題。第一、風險肯定是和收益并存的。第二、因為我當時也只是實習,其實對創業這事本身并沒有什么概念。包括創業會有 多大風險,到底會面臨什么樣的困難,會有多少收益,其實并沒有一個很直觀、很明確的判斷。我周圍的師兄師姐,包括我的同學,也沒有人參與過創業,大家對互 聯網創業這事也都不很了解。本質上,首先我覺得我不傻,這個公司到底靠不靠譜,我干一陣是能夠判斷出來的,當時也是實習,對我來講風險并沒有那么大,因為 我并不是畢業找工作,所以先干著唄。大概干了一個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 技術去解決他的問題。這兩年我們也看到很多大公司成功地把自己在移動終端上面的客戶端,從混合形式轉成了純原生形式。比如 非死book,這是大家都公認的比較優秀的產品,他們曾經在早期的時候選擇用混合的技術形式做移動客戶端,但是最終放棄了,都轉成了純原生的開發。而 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 歲寫的代碼創造的價值是一樣的,那活該嘛。寫不寫代碼這不是決定你有多大影響力和有多少收入的根本項,關鍵是你創造多少價值。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!