寒冬 winter:程式碼無捷徑,只怕有心人

李冰_發表於2019-03-22

enter image description here 2018年初冬,在淘寶996樂隊的《持續迭代》的餘味中,winter 在 Vue Conf 上以“挖掘 Vue 的宣告式互動能力”為題做了演講

winter,本名程劭非,前手機淘寶前端負責人,阿里高階技術專家,JavaScript 專家,帶領團隊開發了阿里巴巴開源專案 Weex 移動前端開發框架。

說到前端圈內的技術大牛,winter 這個名字就不得不提。

winter 是誰?有人抓取GitHub中國區前100名使用者,他排在第18位。

知乎三大程式設計師「溫趙輪」中的「溫」。

2016年的雙十一會場,他帶領團隊開發的 Weex 前端框架覆蓋了99.6%的會場頁面,開啟速度和頁面流暢性都保障了完美的使用者體驗。

餘晟評價他:「真正的全棧工程師不是什麼都會,而是有足夠的知識和能力,遇到什麼問題就能解決什麼問題。我第一次接觸這個說法的時候馬上想到,程劭非應當就是前端出身的全棧工程師。」

堅持自己喜歡的事,是一種什麼樣的體驗?

winter 出生於 1985 年 10 月 24 日,恰巧是我國的程式設計師節。江湖人稱「計算機之子」。

winter 的父母是最早的一批程式設計師,受父母影響,他很早就開始接觸計算機。

但小時候主要是以玩兒為主,他真正接觸程式設計是高中的時候,在文曲星上面編寫小遊戲。

那其實是個開玩笑的稱號。當時還是在盛大的時候,同事說我爸媽都是程式設計師,就說我是計算機之子。本來應該說是程式設計師之子,是吧?我覺得程式設計師之子挺好,比計算機之子要好一些。

我爸的工作偏硬體一些,我媽的工作偏軟體一些。我爸在大學裡面教書,我媽後來轉銷售、市場了,他們那個時候市場和銷售不怎麼分。她還自己創過業,經歷比較豐富,但是也沒有什麼特別的成就吧,哈哈。

我很早就開始接觸計算機,從記事開始我家裡就有電腦了,因為我爸媽都是幹這個的。但是那個時候主要是以玩兒為主,真正接觸程式設計還是高中弄了一個文曲星,當時它提供了一門非常簡陋的語言——GVBASIC。

我憑藉各種研究出來的奇技淫巧,跨越了它的記憶體侷限,在上面編遊戲,形成了一套方法。後來發展到大家有新型號的觸屏版文曲星,我根據記憶體的變化狀況,研究出來觸屏的位置怎麼讀取。高中的時候幹了很多這樣的事情。

enter image description here

除了程式設計之外,winter 高中大學的時候還經常玩黑白棋。

他自己寫了個黑白棋 AI,據說趙劼有一次把它某個版本的子吃光了,然後 winter 表示這是個 bug。

有人說喜歡一樣東西是不需要理由的,但每個人對興趣的選擇其實並非出於偶然。

其實有一些興趣是消耗型的,比如遊戲你玩兒完了就結束了。但是程式設計不同,它是一種累積型的興趣。你可能一開始不是特別爽,一開始很艱難。但是隨著你不斷地投入時間,它給你的成就感和滿足感是越來越高的。所以,我還是會把更多的時間放在這種興趣上。

玩遊戲我也會比較偏愛這種發展型的遊戲,而不是那種短時間、快速的遊戲。所以呢,我覺得這是性格的導向吧。我很喜歡這種所謂的厚積薄發或者運籌帷幄,我喜歡做很有把握的事情。

高中開始對程式設計有了一些基礎的能力和興趣,再往後就是大學參加 ACM 競賽。當時成績也算不上有多好吧,亞洲區域賽入圍,省級比賽的金獎,前幾名這樣。

所以大學的時候算是走上了正軌。後來自己到網上去找技術論壇開始學,然後參加工作,逐漸地有了更明確的方向。一直到現在也差不多做了十幾年了。

進階的方法論:態度與技能

程式設計是一種創造性的腦力勞動,這場漂流的大潮,它的規則就是不進則退。

我在上大學的時候,選計算機專業,因為我媽是做這個的,她其實很嚴肅地問過我一個問題。她說計算機這個事兒你選了以後一輩子跟著跑,你覺得你 ok 嗎?我當時也沒有想太多,我說好,可以。雖然我至今仍然覺得 ok,挺好的。但是想一想,當時這個問題可能比我感受到的要更嚴肅一些。

計算機的任何一個科目其實都是在拼命跑的,除了那些瀕臨淘汰的職業。我覺得其實前端並不快。客戶端技術永遠比前端技術發展得要快。只不過我們的某些領域,今天看似很穩定,但是可能真正革新的時候,你看不到那些變化。

前端的好處就是這些變化都在標準裡面,你就盯著這個標準去走,就可以了。所有的東西都會有人告訴你它變了,推著你向前走。而且前端社群比較活躍,能夠把這些變化直接地傳達給你。所以前端很快是個誤解。我覺得其實前端很慢,因為標準發展得很慢,一定比私有的技術要慢。

所以我倒是覺得前端工程師還是要更有危機感,就是不能跟著標準的節奏走,反而應該超在前面,看客戶端裡的那些技術能不能進到前端。不然就是很危險的事情。如果說有些工程師,他覺得連標準都跟不上,那我覺得可能這個人真的不太適合這個行業。

enter image description here

如果世界上有一種萬能的天賦,那一定是長久的熱愛與堅持。

關於勤奮的定義,winter 認為有兩種。

我覺得天賦談不上,但是勤奮呢,我也談不上。但是這裡面有一點,就是說我們怎麼樣去定義這個勤奮吧。如果我們把勤奮定義為積極思考的話,那我覺得我是勤奮的。如果我們把勤奮定義為夜以繼日地在這上面投入,那我覺得我已經懶得不行了。

有些人是思想上的勤奮,有些人是行動上的勤奮。我覺得我思想上還是夠勤奮的,包括新的技術也好,還是新的標準也好,這方面我始終沒有落下過。我從來沒有對自己講過,你這個東西就不用學了。在我這裡沒有不用學,都用學。只是你有沒有空,有沒有更重要的事情去做,有沒有更重要的東西去學。

我特別煩網上的有一些言論,就是說:哎呀我這個東西不用學了。這個東西學了是浪費時間。其實最後你會發現,這些人把時間都浪費在逛街看電影上了。我不是說他們不應該幹這些事,而是說,這些人不學這個並沒有節省出來時間。

怎麼說呢?不管你出於什麼動機去學習,原理都是一樣的。有些東西是你必須要去學的,你總給自己找藉口,其實什麼都可以不學。計算機就是這樣,你只會簡單的 if、else、while 迴圈,你是可以寫出來一切東西的。那麼這樣好不好呢?那我覺得肯定是有問題的。

有些東西你可以學了之後很討厭它,我覺得這是另一回事。但是你因為討厭它,你不想學,這個事情就很奇葩。任何新的技術,你還是要把它研究明白的。比如 React 最新出的 Hooks,我也把它評價得一文不值,但是我仍然認真看了它的實現和它的一些想法,我覺得這是個態度問題。

enter image description here

除此之外,一些細節也體現了 winter 對待技術的態度。

網上傳言 winter 用記事本寫程式碼。因為他非常注重軟體設計和可除錯性,所以他敲程式碼時更在意思考的時間,不會過於依賴工具。

有一次,因為和趙劼 PK 白紙寫程式碼,他還改了飛機航班。

他也很樂意分享自己的經驗,關於前端工程師需要具備的能力,他系統性地總結出了一篇文章。

首先我覺得前端分為三大基本能力:程式設計能力、架構能力和工程能力。在這個基礎上具備一些前端的領域知識,更往上是對前端特有的構成體系的一些認知,就是說工具鏈,比如前端的效能問題,其實是這些實踐中的體系。

我在淘寶工作的時候,其實已經總結出來了幾個比較通用的體系,比如中後臺體系,就是怎樣去快速地生產這些給專業人員用的中後臺的操作介面。這個可能要形成一套方法。關於前端的架構體系,就是怎樣建立一套基礎庫,建立基本的研發能力,去幫助整個團隊去複用和快速地生產。

然後,工具鏈和持續整合體系。這是通過工具統一提升團隊的效率,幫助我們線上上減少問題,這裡面也包括了監控與運維。效能體系,怎麼產出效能更好的網頁,怎樣去建立從監控到人員的培訓,再到跟其他端的配合,建立起這種真正提交給使用者的高效能的網頁。還有就是搭建體系,我們怎麼用工具,就是用非程式碼的形式快速生產一些網頁的系統。

這大致就是我們前端工程師應該特別關注的幾個大體系,加上通用能力。我覺得這就是衡量前端工程師的一個技能模型。

程式設計師教育出了什麼問題?

winter 在手機淘寶一直負責前端工程師的面試與培養,這讓他對程式設計師的教育問題有了更多的觀察和思考。

校招的時候我們去看通過的人,非常明顯的一點就是他們都是主要靠自學的。沒有一個人說我的學校教得特別好,都是說我自學了什麼,我做了什麼。我覺得這本身就是個問題。反映了我們的大學其實跟真正的行業需求匹配度挺低的。我不能說大學教得不好,但這個問題很明顯。

因為這個事情實在是太明顯了,像阿里招聘的通過率很低很低,招不到。

我覺得大學時其實應該更多地去寫程式碼。我在大學的時候這方面感覺還不錯,因為我參加了ACM競賽,那個競賽會寫很多程式碼。它實際上是非常小的片段,類似一個個演算法,並不能夠成為很大的工程。我也看到大學裡的老師很明確地發現了這些問題,在努力去解決。大家其實都有感覺的,我相信這個問題在幾年之內應該至少會有所改善。

不是說徹底解決,但是一定會變好。因為有很多優秀的人已經投入其中。

我覺得這件事情有兩個關鍵,一是怎樣解決教育成果的評判問題,二是怎樣解決師資的問題。我也聯絡過一些大學,其實他們最大的問題是沒有好的師資。這個師資的問題是不是可以通過技術手段來解決;而評判的問題,我們可以通過商業模式去解決。我們應該能夠去設計一種因為效果而賺錢的商業模式,通過這種方式拉回成本。否則的話,如果你去向學生收錢,因為學生缺乏評判能力,所以誰講得幽默風趣,那就誰就能得到更多的生源。

但是這樣最終只會變成大家都去說相聲,然後把教育變成德雲社小劇場。

我覺得最終教育這件事的解決,一定會變成受益者去買單,可能是企業去買單的這種教育模式。我們今天還有很長的路要走,所以首先應該是一些企業裡的人開始關注教育這件事情。

enter image description here

他認為程式設計不僅僅侷限於 IT 領域,也是未來職業發展的趨勢。

我有時幫人家教教課,其實就是幫同事帶帶孩子,也有一些朋友會定期找我來學一下。很有意思,我有些朋友,比如獵頭、律師他們想學學程式碼。所以,這符合我對未來職業的一種看法,將來各行各業都是需要寫程式碼的。反而程式設計師可能會逐漸地變成一個很小的群體。

因為其實程式碼可以更高效地表達和執行,值得去學習。

律師要學到能分析卷宗是不是要很長時間?我覺得可能比你想象的要簡單,因為我們有大量的庫可以用。我們首先要建立程式設計的基本能力和思維,接下來只需要去理解這個庫就可以了。我們並不需要自己真的去把這個東西做出來,所以實際上不會特別困難。

當然我們如果想要更進一步,覺得開源的東西不夠好,我們想給它貢獻,那是需要很長時間,這也不是我能夠教出來的。我覺得,可能100個程式設計師裡有1個人會去嘗試貢獻這些開源的庫,這已經是很不錯的比例了。

現在各行各業都開始學程式設計,這是一個必然的趨勢,因為這樣整體效率就會更高。就是大家都用程式碼,效率就更高。整個生產環節裡只要有一個是非程式碼的,比如手淘的產品經理的文件,是文件而不是程式碼的話,效率馬上就下來了。

因為人類本身的自然語言是非常不嚴謹的,會存在大量的互相溝通的時間成本。除非它是一個形式化的東西,填空。而這個就已經很接近於程式設計了。

前端如何優雅地進行職業規劃?

winter 一直相信這句話:You are the owner of your career. 你是你職業發展的責任人。

我確實是從一開始就非常認可瀏覽器裡面的前端這個方向。而且我從很年輕的時候,就發現瀏覽器裡 JavaScript 的能力其實比大家認識的要強。所以從這一點上來講,我應該從大三、大四左右,就基本上認定了前端這個方向是非常有發展的。所以我一直在努力地朝這方面積累。

我在微軟的時候雖然是客戶端工程師,但其實我做的是瀏覽器,然後到盛大我在做渲染類相關的東西,同時也會負責一些前端的工作。所以對我來說,還是找一個我認為它有潛力的工作去做。後來我的職業發展的選擇都是經過了一定的思考和設計的,沒有那種非常突然的選擇。

我其實在盛大也不是全職的前端吧,到阿里算是百分之百的前端,也是個前端 leader(手淘前端的高階開發專家)。我覺得我在阿里之前,其實腦子裡是沒有線上這個概念的。在我看來整個的研發就是到產品的 deliver(交付)就結束了,覺得這個產品出來了自然而然就賣出去了。

在阿里,我瞭解了產品的後半段,我真正認識到了什麼叫作商業。業務有運營,技術有運維,還有監控之類的。有了所謂的線上意識。一個產品從它做完的那一刻其實是一個新的開始。我覺得這個是我最大的收穫,理解了很多商業上的邏輯。

另外,我覺得淘寶是我做的第一個真正的面向大量使用者的產品。可能是因為我特別喜歡很挑戰、很創新的東西,所以一直沒有一個真正放到使用者手裡、被很多使用者使用的產品。手機淘寶今天在整個市場也是最大的幾個 App 之一,這個產品也始終會是我的驕傲。我覺得人一生能遇到這樣的產品還是不容易的,雖然我也只是很多人中間的一個,但是這個真的是讓我很有成就感。

我考慮工作跟考大學時,考慮的問題都是一樣的。這個工作帶給我的 scope 有沒有變大,資源有沒有變多,成長有沒有變好。其實這幾個維度裡面就包含大家平時關心的一切問題,什麼薪資、級別這些東西。所以它是比較全面的考慮,更接近本質吧。

因為如果你錢變多了,你做的事情還是和原來一樣的,那遲早這個公司反應過來是要把你裁掉的呀!

enter image description here

做技術的人日復一日地沉浸於創造,點滴的進步終會匯聚成真實的變革。

其實知識始終都在那裡,只不過你把它做成什麼樣的形式,去展現出來。所以從這一點來講,我非常相信前端的機會都會在教育和出版行業。

因為社交,你不 care 聊天的氣泡是方的還是圓的,背景是粉的還是綠的,關鍵是誰在跟你聊天呀!而淘寶這種電子商務,主要還是你到底能買到什麼商品,你買到的質量怎麼樣,花多少錢。這個網站做出花來,也不如圖拍的漂漂亮亮,清清楚楚。

我覺得從這個角度,前端在淘寶、騰訊這些領域,永遠不會是一個非常重要的崗位。領域的特徵就決定了它的前端只是一種錦上添花的東西。所以我一直堅信前端應該去做一些教育類的、娛樂的、展現性的事情。就算這次我還是找了一個工作,等兩三年,我將來還是會做這塊事情的。這是一個長期的規劃。


採訪:樂馨

撰文/排版:李冰

題圖來源:第二屆 Vue.js 開發者大會

插圖來源:Pexels,unsplash

相關文章