
2018年初冬,在淘寶996樂隊的《持續疊代》的餘味中,winter 在 Vue Conf 上以“挖掘 Vue 的聲明式互動能力”為題做了演講
winter,本名程劭非,前手機淘寶前端負責人,阿裡進階技術專家,JavaScript 專家,帶領團隊開發了阿裡巴巴開源項目 Weex 移動前端開發架構。
說到前端圈内的技術大牛,winter 這個名字就不得不提。
winter 是誰?有人抓取GitHub中國區前100名使用者,他排在第18位。
知乎三大程式員「溫趙輪」中的「溫」。
2016年的雙十一會場,他帶領團隊開發的 Weex 前端架構覆寫了99.6%的會場頁面,打開速度和頁面流暢性都保障了完美的使用者體驗。
餘晟評價他:「真正的全棧工程師不是什麼都會,而是有足夠的知識和能力,遇到什麼問題就能解決什麼問題。我第一次接觸這個說法的時候馬上想到,程劭非應當就是前端出身的全棧工程師。」
堅持自己喜歡的事,是一種什麼樣的體驗?
winter 出生于 1985 年 10 月 24 日,恰巧是我國的程式員節。江湖人稱「計算機之子」。
winter 的父母是最早的一批程式員,受父母影響,他很早就開始接觸計算機。
但小時候主要是以玩兒為主,他真正接觸程式設計是高中的時候,在文曲星上面編寫小遊戲。
那其實是個開玩笑的稱号。當時還是在盛大的時候,同僚說我爸媽都是程式員,就說我是計算機之子。本來應該說是程式員之子,是吧?我覺得程式員之子挺好,比計算機之子要好一些。
我爸的工作偏硬體一些,我媽的工作偏軟體一些。我爸在大學裡面教書,我媽後來轉銷售、市場了,他們那個時候市場和銷售不怎麼分。她還自己創過業,經曆比較豐富,但是也沒有什麼特别的成就吧,哈哈。
我很早就開始接觸計算機,從記事開始我家裡就有電腦了,因為我爸媽都是幹這個的。但是那個時候主要是以玩兒為主,真正接觸程式設計還是高中弄了一個文曲星,當時它提供了一門非常簡陋的語言——GVBASIC。
我憑借各種研究出來的奇技淫巧,跨越了它的記憶體局限,在上面編遊戲,形成了一套方法。後來發展到大家有新型号的觸屏版文曲星,我根據記憶體的變化狀況,研究出來觸屏的位置怎麼讀取。高中的時候幹了很多這樣的事情。
除了程式設計之外,winter 高中大學的時候還經常玩黑白棋。
他自己寫了個黑白棋 AI,據說趙劼有一次把它某個版本的子吃光了,然後 winter 表示這是個 bug。
有人說喜歡一樣東西是不需要理由的,但每個人對興趣的選擇其實并非出于偶然。
其實有一些興趣是消耗型的,比如遊戲你玩兒完了就結束了。但是程式設計不同,它是一種累積型的興趣。你可能一開始不是特别爽,一開始很艱難。但是随着你不斷地投入時間,它給你的成就感和滿足感是越來越高的。是以,我還是會把更多的時間放在這種興趣上。
玩遊戲我也會比較偏愛這種發展型的遊戲,而不是那種短時間、快速的遊戲。是以呢,我覺得這是性格的導向吧。我很喜歡這種所謂的厚積薄發或者運籌帷幄,我喜歡做很有把握的事情。
高中開始對程式設計有了一些基礎的能力和興趣,再往後就是大學參加 ACM 競賽。當時成績也算不上有多好吧,亞洲區域賽入圍,省級比賽的金獎,前幾名這樣。
是以大學的時候算是走上了正軌。後來自己到網上去找技術論壇開始學,然後參加工作,逐漸地有了更明确的方向。一直到現在也差不多做了十幾年了。
進階的方法論:态度與技能
程式設計是一種創造性的腦力勞動,這場漂流的大潮,它的規則就是不進則退。
我在上大學的時候,選計算機專業,因為我媽是做這個的,她其實很嚴肅地問過我一個問題。她說計算機這個事兒你選了以後一輩子跟着跑,你覺得你 ok 嗎?我當時也沒有想太多,我說好,可以。雖然我至今仍然覺得 ok,挺好的。但是想一想,當時這個問題可能比我感受到的要更嚴肅一些。
計算機的任何一個科目其實都是在拼命跑的,除了那些瀕臨淘汰的職業。我覺得其實前端并不快。用戶端技術永遠比前端技術發展得要快。隻不過我們的某些領域,今天看似很穩定,但是可能真正革新的時候,你看不到那些變化。
前端的好處就是這些變化都在标準裡面,你就盯着這個标準去走,就可以了。所有的東西都會有人告訴你它變了,推着你向前走。而且前端社群比較活躍,能夠把這些變化直接地傳達給你。是以前端很快是個誤解。我覺得其實前端很慢,因為标準發展得很慢,一定比私有的技術要慢。
是以我倒是覺得前端工程師還是要更有危機感,就是不能跟着标準的節奏走,反而應該超在前面,看用戶端裡的那些技術能不能進到前端。不然就是很危險的事情。如果說有些工程師,他覺得連标準都跟不上,那我覺得可能這個人真的不太适合這個行業。
如果世界上有一種萬能的天賦,那一定是長久的熱愛與堅持。
關于勤奮的定義,winter 認為有兩種。
我覺得天賦談不上,但是勤奮呢,我也談不上。但是這裡面有一點,就是說我們怎麼樣去定義這個勤奮吧。如果我們把勤奮定義為積極思考的話,那我覺得我是勤奮的。如果我們把勤奮定義為夜以繼日地在這上面投入,那我覺得我已經懶得不行了。
有些人是思想上的勤奮,有些人是行動上的勤奮。我覺得我思想上還是夠勤奮的,包括新的技術也好,還是新的标準也好,這方面我始終沒有落下過。我從來沒有對自己講過,你這個東西就不用學了。在我這裡沒有不用學,都用學。隻是你有沒有空,有沒有更重要的事情去做,有沒有更重要的東西去學。
我特别煩網上的有一些言論,就是說:哎呀我這個東西不用學了。這個東西學了是浪費時間。其實最後你會發現,這些人把時間都浪費在逛街看電影上了。我不是說他們不應該幹這些事,而是說,這些人不學這個并沒有節省出來時間。
怎麼說呢?不管你出于什麼動機去學習,原理都是一樣的。有些東西是你必須要去學的,你總給自己找借口,其實什麼都可以不學。計算機就是這樣,你隻會簡單的 if、else、while 循環,你是可以寫出來一切東西的。那麼這樣好不好呢?那我覺得肯定是有問題的。
有些東西你可以學了之後很讨厭它,我覺得這是另一回事。但是你因為讨厭它,你不想學,這個事情就很奇葩。任何新的技術,你還是要把它研究明白的。比如 React 最新出的 Hooks,我也把它評價得一文不值,但是我仍然認真看了它的實作和它的一些想法,我覺得這是個态度問題。
除此之外,一些細節也展現了 winter 對待技術的态度。
網上傳言 winter 用記事本寫代碼。因為他非常注重軟體設計和可調試性,是以他敲代碼時更在意思考的時間,不會過于依賴工具。
有一次,因為和趙劼 PK 白紙寫代碼,他還改了飛機航班。
他也很樂意分享自己的經驗,關于前端工程師需要具備的能力,他系統性地總結出了一篇文章。
首先我覺得前端分為三大基本能力:程式設計能力、架構能力和工程能力。在這個基礎上具備一些前端的領域知識,更往上是對前端特有的構成體系的一些認知,就是說工具鍊,比如前端的性能問題,其實是這些實踐中的體系。
我在淘寶工作的時候,其實已經總結出來了幾個比較通用的體系,比如中背景體系,就是怎樣去快速地生産這些給專業人員用的中背景的操作界面。這個可能要形成一套方法。關于前端的架構體系,就是怎樣建立一套基礎庫,建立基本的研發能力,去幫助整個團隊去複用和快速地生産。
然後,工具鍊和持續內建體系。這是通過工具統一提升團隊的效率,幫助我們線上上減少問題,這裡面也包括了監控與運維。性能體系,怎麼産出性能更好的網頁,怎樣去建立從監控到人員的教育訓練,再到跟其他端的配合,建立起這種真正送出給使用者的高性能的網頁。還有就是搭建體系,我們怎麼用工具,就是用非代碼的形式快速生産一些網頁的系統。
這大緻就是我們前端工程師應該特别關注的幾個大體系,加上通用能力。我覺得這就是衡量前端工程師的一個技能模型。
程式員教育出了什麼問題?
winter 在手機淘寶一直負責前端工程師的面試與培養,這讓他對程式員的教育問題有了更多的觀察和思考。
校招的時候我們去看通過的人,非常明顯的一點就是他們都是主要靠自學的。沒有一個人說我的學校教得特别好,都是說我自學了什麼,我做了什麼。我覺得這本身就是個問題。反映了我們的大學其實跟真正的行業需求比對度挺低的。我不能說大學教得不好,但這個問題很明顯。
因為這個事情實在是太明顯了,像阿裡招聘的通過率很低很低,招不到。
我覺得大學時其實應該更多地去寫代碼。我在大學的時候這方面感覺還不錯,因為我參加了ACM競賽,那個競賽會寫很多代碼。它實際上是非常小的片段,類似一個個算法,并不能夠成為很大的工程。我也看到大學裡的老師很明确地發現了這些問題,在努力去解決。大家其實都有感覺的,我相信這個問題在幾年之内應該至少會有所改善。
不是說徹底解決,但是一定會變好。因為有很多優秀的人已經投入其中。
我覺得這件事情有兩個關鍵,一是怎樣解決教育成果的評判問題,二是怎樣解決師資的問題。我也聯系過一些大學,其實他們最大的問題是沒有好的師資。這個師資的問題是不是可以通過技術手段來解決;而評判的問題,我們可以通過商業模式去解決。我們應該能夠去設計一種因為效果而賺錢的商業模式,通過這種方式拉回成本。否則的話,如果你去向學生收錢,因為學生缺乏評判能力,是以誰講得幽默風趣,那就誰就能得到更多的生源。
但是這樣最終隻會變成大家都去說相聲,然後把教育變成德雲社小劇場。
我覺得最終教育這件事的解決,一定會變成受益者去買單,可能是企業去買單的這種教育模式。我們今天還有很長的路要走,是以首先應該是一些企業裡的人開始關注教育這件事情。
他認為程式設計不僅僅局限于 IT 領域,也是未來職業發展的趨勢。
我有時幫人家教教課,其實就是幫同僚帶帶孩子,也有一些朋友會定期找我來學一下。很有意思,我有些朋友,比如獵頭、律師他們想學學代碼。是以,這符合我對未來職業的一種看法,将來各行各業都是需要寫代碼的。反而程式員可能會逐漸地變成一個很小的群體。
因為其實代碼可以更高效地表達和執行,值得去學習。
律師要學到能分析卷宗是不是要很長時間?我覺得可能比你想象的要簡單,因為我們有大量的庫可以用。我們首先要建立程式設計的基本能力和思維,接下來隻需要去了解這個庫就可以了。我們并不需要自己真的去把這個東西做出來,是以實際上不會特别困難。
當然我們如果想要更進一步,覺得開源的東西不夠好,我們想給它貢獻,那是需要很長時間,這也不是我能夠教出來的。我覺得,可能100個程式員裡有1個人會去嘗試貢獻這些開源的庫,這已經是很不錯的比例了。
現在各行各業都開始學程式設計,這是一個必然的趨勢,因為這樣整體效率就會更高。就是大家都用代碼,效率就更高。整個生産環節裡隻要有一個是非代碼的,比如手淘的産品經理的文檔,是文檔而不是代碼的話,效率馬上就下來了。
因為人類本身的自然語言是非常不嚴謹的,會存在大量的互相溝通的時間成本。除非它是一個形式化的東西,填空。而這個就已經很接近于程式設計了。
前端如何優雅地進行職業規劃?
winter 一直相信這句話:You are the owner of your career. 你是你職業發展的責任人。
我确實是從一開始就非常認可浏覽器裡面的前端這個方向。而且我從很年輕的時候,就發現浏覽器裡 JavaScript 的能力其實比大家認識的要強。是以從這一點上來講,我應該從大三、大四左右,就基本上認定了前端這個方向是非常有發展的。是以我一直在努力地朝這方面積累。
我在微軟的時候雖然是用戶端工程師,但其實我做的是浏覽器,然後到盛大我在做渲染類相關的東西,同時也會負責一些前端的工作。是以對我來說,還是找一個我認為它有潛力的工作去做。後來我的職業發展的選擇都是經過了一定的思考和設計的,沒有那種非常突然的選擇。
我其實在盛大也不是全職的前端吧,到阿裡算是百分之百的前端,也是個前端 leader(手淘前端的進階開發專家)。我覺得我在阿裡之前,其實腦子裡是沒有線上這個概念的。在我看來整個的研發就是到産品的 deliver(傳遞)就結束了,覺得這個産品出來了自然而然就賣出去了。
在阿裡,我了解了産品的後半段,我真正認識到了什麼叫作商業。業務有營運,技術有運維,還有監控之類的。有了所謂的線上意識。一個産品從它做完的那一刻其實是一個新的開始。我覺得這個是我最大的收獲,了解了很多商業上的邏輯。
另外,我覺得淘寶是我做的第一個真正的面向大量使用者的産品。可能是因為我特别喜歡很挑戰、很創新的東西,是以一直沒有一個真正放到使用者手裡、被很多使用者使用的産品。手機淘寶今天在整個市場也是最大的幾個 App 之一,這個産品也始終會是我的驕傲。我覺得人一生能遇到這樣的産品還是不容易的,雖然我也隻是很多人中間的一個,但是這個真的是讓我很有成就感。
我考慮工作跟考大學時,考慮的問題都是一樣的。這個工作帶給我的 scope 有沒有變大,資源有沒有變多,成長有沒有變好。其實這幾個次元裡面就包含大家平時關心的一切問題,什麼薪資、級别這些東西。是以它是比較全面的考慮,更接近本質吧。
因為如果你錢變多了,你做的事情還是和原來一樣的,那遲早這個公司反應過來是要把你裁掉的呀!
做技術的人日複一日地沉浸于創造,點滴的進步終會彙聚成真實的變革。
其實知識始終都在那裡,隻不過你把它做成什麼樣的形式,去展現出來。是以從這一點來講,我非常相信前端的機會都會在教育和出版行業。
因為社交,你不 care 聊天的氣泡是方的還是圓的,背景是粉的還是綠的,關鍵是誰在跟你聊天呀!而淘寶這種電子商務,主要還是你到底能買到什麼商品,你買到的品質怎麼樣,花多少錢。這個網站做出花來,也不如圖拍的漂漂亮亮,清清楚楚。
我覺得從這個角度,前端在淘寶、騰訊這些領域,永遠不會是一個非常重要的崗位。領域的特征就決定了它的前端隻是一種錦上添花的東西。是以我一直堅信前端應該去做一些教育類的、娛樂的、展現性的事情。就算這次我還是找了一個工作,等兩三年,我将來還是會做這塊事情的。這是一個長期的規劃。