《程式員》于 2000 年創刊,其理念為技術改變世界,創新驅動中國,2021 年,《程式員》2.0
全新起航,首期以「開發者的黃金十年」為主題,以音視頻、圖文專欄等豐富的多媒體形式為載體,立足當下,放眼未來,為讀者帶來全方位的技術和產業解讀,本文為《程式員》2.0 第一期內容,在 UNIX 開發者 Brian W. Kernighan 之后,我們采訪到 Vue.js
的作者尤雨溪,與其共談精彩程式人生、共論頂級開源專案的成功之道,
從復雜的 jQuery 插件化開發到模塊化及組件化,現代前端技術在迭代的程序中不斷推陳出新,派生出大量的模式和工具,Vue.js 作為前端框架中的一匹黑馬,從首個 commit 的提交,到破繭重生的 Vue 3、Vite 2,它備受前端從業者的青睞,同時憑借輕量級、簡單易學等優勢榮登 GitHub Repo TOP 3,且獲得了 182k 個 Star,Fork 數達到了 28.6k,
而提及 Vue.js 背后的作者——尤雨溪(Evan You),這位可文可武的開發者、開源愛好者、設計師,想必很多人也并不陌生,今天,《程式員》將與大家一同走近尤雨溪的「開掛」人生,深度分享他在將 Vue 專案打造成為業界主流框架的八年間鮮為人知的心路歷程,

尤雨溪:從藝術愛好者到年薪百萬的全職開源開發者
尤雨溪,網名尤小右,作為一位「半路出家的程式員」,其實他一開始志并不在編程,
學生時代,對畫畫特別感興趣的尤雨溪,在初中時期偶然間推開了 Flash 影片的大門,他將靜態的畫通過一定的技術方式「動」起來,為自己喜愛的動漫創造出更好的視覺體驗,甚至在某次生物課的演示上,他將演講內容加入了很多科幻效果,而正是這些嘗試,也鼓舞了他日后想要堅持走藝術這條路的決心,
后來,高中畢業后,尤雨溪以接近滿分的托福成績考入美國 Colgate University 大學,在大學期間,尤雨溪堅守自己的愛好,選擇的專業是室內藝術和藝術史,但是,隨著時間的推移,其發現,藝術這條路也并非想象的那么簡單,一方面,在不懂編程的情況下,很難憑借簡單的 Flash、HTML 5、CSS 等知識實作自己的想法;另一方面,也和《黑客與畫家》里面的格雷厄姆所體驗到的現實一樣,“我決定不當畫家了,首先要徹底解決自己的收入問題”,在美國,這個專業的畢業生很難找到作業,
因此,憑借著自學,尤雨溪在本科畢業的時候做了一個完全靠編程來實作的網站,并用它成功進入了美國紐約的 Parsons 設計學院并獲得了 Design & Technology 藝術碩士學位,在此期間,尤雨溪不僅學習了 openFrameworks、影片演算法等技術,還接觸到了 JavaScript 編程語言,同時,除了參加日常的課程之外,尤雨溪在業余時間也經常“蝸居”在各大社區中,并在 TJ Hollowaychuck(https://github.com/tj)、Guillermo Rauch(https://github.com/rauchg)、Substack(https://github.com/substack)等活躍于 Node.js 生態初期的開發者影響下,他在 JavaScript 這條路上越走越深,也基于此開啟了自己的職業生涯:
- 2012 年,尤雨溪花費了兩天的時間,打造了一款 HTML5 版的 Clear(極簡任務管理應用)并將其開源,憑借簡單的操作方式且擺脫了任何形式的按鈕束縛,該應用在上線短短一天后,便登上了 HackerNews 首頁,且受到了 Facebook、Color 等大廠的 Email,
- 2013 年,尤雨溪加入 Google Creative Lab Five Program 專案組,擔任 Creative Technologist,主要負責快速實作可體驗的產品原型,在彼時的環境中,前端框架才剛剛崛起,而起步稍早的 AngularJS 應用也更為廣泛一些,不過,在日常作業中,尤雨溪發現 AngularJS 在某些應用場景中的表現不如人意,以基于前端框架的雙向系結實作為例,AngularJS 有自己的一套模板編譯規則,且需要使用臟檢查,對于開發者而言太過繁重且靈活性不夠,而為了更好地滿足自己的作業需求,尤雨溪決定自己動手開發一個輕量級的框架來練練手,
- 2014 年 2 月,尤雨溪帶著前端開發庫——Vue.js 來了,它可以通過簡潔的 API 提供高效的資料系結和靈活的組件系統,同時,尤雨溪選擇了開源的方式,方便更多的開發者使用并參與其中,

隨著 Vue 用戶規模的不斷增長,正如文藝復興時期的代表人物阿爾伯蒂的一句至理名言:“任何一種藝術,不管是否重要,如果你想要在該領域出類拔萃,就必須全身心投入,”在 2016 年,尤雨溪決定以全職開源開發者的身份全身心地投入到 Vue 專案的維護中,
這一路走來,他的技術成長經歷成為了很多想要跨行以及專業開發者學習的楷模,不過對于尤雨溪自身而言,他并不希望自己成為程式員的個人崇拜物件,因為在他看來,「做腦力作業的人,往往鉆研得越深,越發現自己的渺小和無知」,
尤雨溪認為,「崇拜」和「敬佩」兩個詞其實非常不同,其表示,“過度的「崇拜」另一個人,往往讓人妄自菲薄,覺得自己好像永遠也趕不上對方,甚至放棄了趕上對方的努力,但事實上,這世上碾壓眾生的「怪物」也并沒有那么多,大部分有點名氣的程式員,可能是因為種種機遇才得以成名,單論技術實力,其實也都在凡人努力可及的范圍之內,相比之下,「敬佩」一個人,則心態上更多地會去思考這個人身上有什么東西值得我學習,我如何才能拉近自己和對方之間的距離,”
如今,在尤雨溪全身心投入 5 年、Vue 落地近八年的時間里,Vue 從一個“蹣跚學步”的嬰兒成長為一位正在“乘風破浪”的少年,且也取得了 GitHub TOP3 Repo 的優異成績,對于尤雨溪個人而言,也在摸索中找到了最適合自己的作業與生活節奏,
《程式員》:從最早初接觸 JavaScript 到 Vue.js 的研發落地,每個階段,你通過什么樣的方式不斷提升自己的技能?
尤雨溪: 多看多嘗試!一直呆在舒適區往往就得不到提升,程式員能力的提升往往都發生在嘗試解決一個從沒解決過的問題之后進行反思的程序中,
《程式員》: 你曾談到在 Meteor 作為一名開發者沒有高層決策能力,這其實是我們常常面對的問題,從 Unix、Linux 等到今天,偉大的專案往往由一個人或者一個極小數量的群體發起并成長起來,而在企業里,專案的開展往往講求完美的計劃、多人頭腦風暴,你認為這兩者之間是否存在“矛盾”?
尤雨溪: 會有一定的矛盾,決策程序的參與人并不總是越多越好,有時候意見分歧會導致事情反而沒法順利推進,但沒有一定數量的互相反饋也很容易忽略一些重要的問題,
個人認為,需要有完善的計劃和探討,但在決策上還是要有一個敢于承擔責任并且有能力拍板的人去確保專案不陷入無止境的“扯皮”中,
《程式員》: 從 2013 年提交了第一個 Commit 到今天,Vue.js 已經快 8 歲了,你有著怎樣的心路歷程?遇到過的最大的難題是什么?
尤雨溪: 時間過得還是很快的,一開始 Vue 只是一個興趣使然的小專案,現在它是我的全職作業,真的可以說是陪伴著我一步步從初出茅廬到成家立業了,這程序里最大的難題并不是技術問題,而是在 2016 年考慮是否要辭職,全職做開源,當時沒有太多可以參考的案例,也沒有十足的把握,可以說是完全憑著熱情做出了這個決定,不過幸運的是這可能也是我這輩子做得最成功的決定之一,
《程式員》:8 年過去,你認為前端發生了哪些變化,如何看待今天三足鼎立的局面,前端發展的未來走向將是怎樣的?除此之外,你還在關注哪些技術?
尤雨溪: 我個人覺得,主要的變化就是前端從相對 “手葉訓” 的定位變得更加工程化了,已經有了大量成熟的工具和模式,生產力大大提高,目前在前后端分離的場景下已經沒有太多潛力可挖了,所以在生產力和性能方面的探索開始分裂為兩個方向:
- 一個是 JavaScript 全堆疊,打通前后端資料和型別(比如 React Server Components 以及 Next/Nuxt 這樣的全堆疊框架);
- 一個是對傳統后端更友好,但保留現代前端部分開發優點的方案(比如 Phoenix LiveView、Laravel LiveWire),
具體來看,JavaScript 語言在 ES2015 大躍進之后慢慢穩定,隨著微軟停止支持 IE11,我個人希望看到的情況是現代 JavaScript 語言特性的支持能夠徹底普及,這樣無論是框架還是工具層面都可以少浪費些精力在兼容方面,TypeScript 會越來越普及,型別會成為大部分非玩票前端專案的標配,
另一個嶄露頭角的趨勢就是用非 JavaScript 的語言去寫支持前端的工具,自從有了 Node.js,前端工程師們自然而然地用 JavaScript 去寫給自己用的工具,但現在我們發現在構建性能這塊,JavaScript 依然是完全沒法跟 Go 或者 Rust 這樣的編譯型語言比的,esbuild 和 swc 已經用優于 JS 工具鏈幾十倍甚至上百倍的性能證明了這一點,某種程度上來說,接下來幾年非 JavaScript 語言對前端的影響可能更多會體現在工具鏈方面(相比 WASM 而言),
《程式員》:對于工程師來說,在最初的 5 年、10 年等不同的職業階段,什么樣的技能或者思維最為重要?
尤雨溪: 不同路線的側重點是完全不一樣的,大公司 vs 創業公司,純技術崗 vs 管理崗,沒法一概而論,尤其是我自己走的是獨立路線,需要關注的東西又跟在公司里發展不一樣,非要說共通的一點,可能就是想清楚自己擅長什么,想要什么,選一條適合自己的路線吧,
一個人頂起一個專案,Vue 的構建與重寫!
如果用一句話總結 Vue 今日的成功,尤雨溪認為,「時機,堅持,基于用戶去思考」三者缺一不可,抓住前端發展的浪潮,不斷地嘗試與改進,從根本上解決開發者日常作業中的痛點,是 Vue 的不斷向前的驅動力,而重寫 Vue 3 的根源也是在此,
《程式員》:2020 年 9 月,Vue 3.0 正式發布,這一版本為什么要重頭開始寫?亦或說重構之后的 Vue 3 解決了此前哪些必須解決的問題?
尤雨溪: 重寫的主要原因一個是型別系統,一個是內部邏輯分層,Vue 2 專案先基于 JavaScript,中期加入了 Flow 做型別檢查,導致型別覆寫不完整,Flow 本身又破壞性更新頻繁,工具鏈支持也不理想,所以決定轉為用 TypeScript 重寫,Vue 2 的內部邏輯分層不夠清晰,對于長期維護是一個負擔,這也是一個不重寫就很難徹底改善的問題,
《程式員》:這樣的一個大型開源專案重寫,必定耗費了不少心血,此次的重寫主要是你一個人完成的嗎?在 Vue 團隊中,全職開發者有幾位?
尤雨溪: 這個專案初期主要是我一個人,但進入了 Alpha 以后也有很多來自外部貢獻者的 PR,團隊全職的嚴格來說其實只有兩位,一個是我,一個是 @soda 負責 Vue CLI 的維護,
其他成員一部分有自己的全職作業,僅用業余時間參與,但現在也有好幾位是自由職業者,通過 GitHub 或其他渠道的贊助,貢獻部分時間參與 Vue 的開發,
《程式員》:重寫的程序中,你認為最難的挑戰是什么?是否遇到過比較有挫敗感的事情?又是如何解決的?
尤雨溪: 最難的是如何在盡可能兼容 Vue 2.x API 的前提下改善內部架構和性能,同時還要開拓新的能力,比如 Composition API 在剛提出的時候遇到了很大的阻力,但后續根據用戶反饋調整,現在在高級用戶中的接受度還是很高的,算是達成了設計的目的,
《程式員》:Vue 3 版本兼容 2.x,對于想要學習 Vue 的開發者而言,時常在糾結是從 Vue 2 開始學基礎還是直接學 Vue 3,對此,你有著什么樣的建議?
尤雨溪: 直接學 Vue 3 就行了,基礎概念是一模一樣的,
《程式員》:Vite 2 不久前正式發布,未來 Vite 會不會慢慢地取代掉 webpack?
尤雨溪: 完全取代應該不可能,這也并不是目標,webpack 有巨大的存量,功能上也覆寫了一些 Vite 并不打算覆寫的場景(如 Module Federation),但對于大部分應用,尤其是中小型應用來說,webpack 的復雜度和性能代價其實并無必要,
《程式員》:今天,Vue.js 有著非常多的跨時區、跨文化的協作,你采用了哪些方式確保代碼質量和高效協作?
尤雨溪: 其實開源協作未必高效,畢竟大部分成員都不是全職,但好處是因為不是有業務壓力的公司,所以高效并不是一個必須的條件,我們團隊會每兩周開一次例會同步一些進展,進行一些討論,除此之外幾乎都通過 GitHub 協作,
尤雨溪的開源思考與 Vue 的開源路徑
在開源吞噬世界的今天,尤雨溪對「開源」也有自己獨特的理解,
《程式員》:很多開源開發者希望將專案商業化,但很少有開發者能賺到錢,你認為問題出在哪里?
尤雨溪: 根本原因是做好一個開源專案跟做好一個商業專案本質上需要不同的技能樹,同時在這兩個技能樹都具備足夠能力的人其實并不多(或者說很多開發者沒有意識到自己需要在商業技能樹這一塊做更多的投入),
《程式員》:許多成功的開源專案的背后往往都有一個進行商業化的公司,你之前曾分享過成立 Vue Technology LLC 公司只是出于稅務/簽證的需求,2018 年時看到你在招全職開源開發者,現在對于公司的規劃是怎樣的?
尤雨溪: 我個人一直秉持 “Lifestyle Entrepreneurship” 的理念,并不打算做一個追求規模和利潤的純商業化公司,而是希望能夠保持 “賺足夠多的錢,做想做的事” 這樣的狀態,當然這也不排除適當地擴展一下規模,畢竟現在 Vue 的生態也變得更大了,
《程式員》:你如何看待「開源」的發展及它對世界的影響?未來開源還會向哪些方向發展?在這一行程中開發者尤其是中國開發者,有哪些令你期待之處?
尤雨溪: 其實如今開源軟體也已經分化出了很多不同的形態,基于基金會的跨公司合作專案、完全隸屬于一個公司的開源、個人開發者或小團隊的開源,這些不同專案之間的開發動機和運作模式都有很大的差別,我個人很期待看到更多個人開發者可以通過開源軟體養活自己,但這需要獨立開源專案的經濟生態有進一步的改善,開源有一個好處就是只要專案技術過硬,就可以跨越文化和語言的隔閡,希望能看到更多來自中國的開源專案站上世界的舞臺,
One More Thing
《程式員》:你當前正在忙于何事?對于 Vue 有什么新計劃?
尤雨溪: 過去幾個月主要聚焦于 Vite 2.0 作業方面,現在將重心轉回 Vue 這邊了,現階段 Vue 的重點還是 2.x 到 3.x 的過渡,當前對于 Vue 3.1 已經積累不少想法,下半年會有更具體的計劃,
《程式員》:你現在的一天是如何度過的?
尤雨溪: 近一年由于疫情的原因,很少出門,就作息而言,可以稱得上非常規律,
作業方面,每天的內容都不一樣,有時候會專注于處理 GitHub issue,有時候會專注于新功能的開發,事情一直很多,但好處是基本上可以自己決定要優先處理什么,
除了面對電腦進行作業,空閑的時間就是在陪孩子,偶爾玩玩游戲,也會適當地運動,如打籃球,
從 Unix 開發者 Brian W. Kernighan、OpenCV 創始人 Gary Bradski,到 Vue.js
作者尤雨溪……《程式員》2.0第一期以「開發者的黃金十年」為主題,與多位國內外知名的技術引領者和新銳創新者進行了深度對話,希望為中國開發者打開新時代的「機遇之窗」,除了技術引領,我們也希望透過技術對行業進行深入洞察,因此,《程式員》2.0
第一期也邀請到了來自快手、滴滴、貝殼找房、作業幫等知名企業的技術負責人,用技術實踐為讀者闡述直播、出行、居住、在線教育等多個行業變革背后的技術架構和技術引擎,
掃描下方二維碼,添加小助手,即刻加入《程式員》2.0「讀者群」,搶先一步獲取《程式員》最新資訊,精彩內容不再錯過,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/276730.html
標籤:其他
上一篇:我的 Android 學習之路,一位 5 年中大廠的 Android 老哥跟你聊聊
下一篇:在阿里(02):阿里入職記
