摘要:趕上時(shí)代的第一年我畢業(yè)后加入的第一家公司是科大訊飛。畢業(yè)的第一年里,我的工作以實(shí)現(xiàn)訊飛開放平臺(tái)的部分前端需求為主。以此為契機(jī),我推動(dòng)了團(tuán)隊(duì)的前后端分離實(shí)踐,后來也有幸被評(píng)為了那一年的部門最佳新人。記得訊飛的內(nèi)部可以顯示每天的打卡排名。
時(shí)間回到 2016 年,彼時(shí) 996 還不算福報(bào),比特幣單價(jià)也還遠(yuǎn)遠(yuǎn)不到 1000 美元。那時(shí)的我懷著對(duì)大廠的敬畏和對(duì)前途的迷茫,拿著一紙畢業(yè)證告別了校園。這第一份名為 Web 前端開發(fā)的工作,代碼寫著寫著就到了今天。
一晃三年過去了,從純粹的趕需求到造輪子、做分享和帶團(tuán)隊(duì),許多剛畢業(yè)的自己只能仰望的事情,現(xiàn)在看來也并非那么遙不可及了。簡(jiǎn)單地說,我這三年中我換了三份工作,而每份工作的年終績(jī)效都是所在部門里最高的。不過這種說法未免太功利、太乏味了。我相信這段經(jīng)歷并不只是周報(bào)和簡(jiǎn)歷上刻板的流水賬,把它在我滿 25 歲之際整理下來,也許對(duì)大家來說可以是個(gè)好故事。因此也就有了這篇文章。
趕上時(shí)代的第一年
我畢業(yè)后加入的第一家公司是科大訊飛。雖然這不是家小公司,但科大訊飛對(duì)于一個(gè)科大學(xué)生來說,想入職幾乎就像藍(lán)翔學(xué)生去開挖掘機(jī)一樣容易。記得面試流程大致就是和幾位在訊飛身居高位的科大校友聊聊,然后就收到 offer 了。
現(xiàn)在的技術(shù)社區(qū)里,常常因?yàn)榕嘤?xùn)班與科班的出身之爭(zhēng)吵個(gè)不停。但那時(shí)算是半個(gè)科班出身的我,并不覺得當(dāng)時(shí)的自己除了學(xué)歷,和培訓(xùn)班的學(xué)員有很大的區(qū)別:那時(shí)我還不清楚絕對(duì)定位和相對(duì)定位有什么差別,基本只會(huì) jQuery 加 Bootstrap 把功能堆出來而已。不過沒關(guān)系,總有不差錢的公司愿意雇 985 的同學(xué)來切圖寫頁(yè)面,這也就是我在訊飛主要的工作內(nèi)容了。
畢業(yè)的第一年里,我的工作以實(shí)現(xiàn)訊飛開放平臺(tái)的部分 Web 前端需求為主。這期間我的精力除了實(shí)現(xiàn)各種業(yè)務(wù)需求,主要還是放在了對(duì)開源技術(shù)的學(xué)習(xí)和個(gè)人項(xiàng)目上。在我剛?cè)肼殨r(shí),我所在的開發(fā)團(tuán)隊(duì)技術(shù)棧還是前后端不分離的 jQuery + JSP 模式,前端代碼上傳到靜態(tài)服務(wù)器還需要靠 FTP,而團(tuán)隊(duì)同學(xué)還在調(diào)研 Knockout 作為下一代基礎(chǔ)庫(kù)的可能性——即便是那時(shí),離 Knockout 誕生也有將近十年了。其實(shí),只要能接觸到社區(qū)的主流技術(shù),許多過時(shí)的工具都是很容易被替換的。正因?yàn)槿绱?,我很快地就?yīng)用了 Gulp 全家桶來處理一些很容易自動(dòng)化的工作,并在那一年的十一假期起,開始試水現(xiàn)在如日中天的 Vue 2.0 和 Webpack。而后,我又搭建了內(nèi)網(wǎng)的私有 NPM 倉(cāng)庫(kù),發(fā)布了腳手架在內(nèi)的十余個(gè)包來幫助大家向新的技術(shù)棧遷移。這套現(xiàn)在對(duì)于前端同學(xué)司空見慣的技術(shù)在那時(shí)還是頗有點(diǎn)新鮮的。以此為契機(jī),我推動(dòng)了團(tuán)隊(duì)的前后端分離實(shí)踐,后來也有幸被評(píng)為了那一年的部門最佳新人。
剛畢業(yè)的那段時(shí)間,能學(xué)的和想學(xué)的東西都實(shí)在太多了。記得訊飛的內(nèi)部 App 可以顯示每天的打卡排名。如果你在晚上 12 點(diǎn)準(zhǔn)時(shí)打卡,那么你就有機(jī)會(huì)搶到第二天的打卡第一名——這個(gè)時(shí)段的打卡截圖,我的手機(jī)里存著三十多張。當(dāng)然,即便訊飛確實(shí)是我呆過的公司里強(qiáng)制加班最多的,但其實(shí)也遠(yuǎn)遠(yuǎn)沒有忙到這個(gè)量級(jí)。真相是自從那時(shí)我就發(fā)現(xiàn),只要你對(duì)著一屏幕的代碼又能按時(shí)交差,沒人關(guān)心你到底寫的是什么。借著那時(shí)候高漲的興趣,我鼓搗出了不少現(xiàn)在看來基本純屬娛樂的東西。比如:
Ove Lang 編程語言,可以解釋執(zhí)行形如 (表態(tài) (欽點(diǎn) 董先生 特首) (= 特首 董先生) 哦。 的代碼。
Merry8 虛擬機(jī),可以模擬運(yùn)行用上古的 Chip8 匯編指令寫出來的 PONG 游戲。
Sinomap 地圖庫(kù),可以用麥卡托投影算法把 GeoJSON 數(shù)據(jù)渲染到 Canvas 上。
Flylog 遠(yuǎn)程調(diào)試工具,可以將其它設(shè)備頁(yè)面中的 log 信息推送到 PC 端的后臺(tái)上。
CSS Emoji 示例,可以用兩個(gè) div 畫出 Emoji 表情。
你當(dāng)然可以指責(zé)那時(shí)的我只醉心技術(shù)而不管業(yè)務(wù)(這確實(shí)是某家大廠對(duì)我的面試評(píng)價(jià)),不過折騰起這些有趣的項(xiàng)目,讓我感覺那時(shí)的生活比起在每個(gè)周末都要痛苦地趕(抄)作業(yè)的大學(xué)要自在得多。從旁觀者的角度來看,我在訊飛成長(zhǎng)得并不慢,也有許多科大校友歷經(jīng)多年成為了那里的技術(shù)骨干。然而事實(shí)是,我在訊飛并沒有呆滿一年,留下了篇《小記在訊飛的 300 天》作為紀(jì)念之后就告別了合肥。為什么離開呢?非要用一句話概括的話,應(yīng)該是我感覺自己并不屬于那里吧:合肥這座城市對(duì)我這個(gè)南方人來說并沒有那么多歸屬感,而我熟悉的前端技術(shù)對(duì)于一家并非互聯(lián)網(wǎng)公司的科技公司來說,更偏向于錦上添花而非雪中送炭。出于對(duì)地緣和個(gè)人價(jià)值的向往,我選擇了告別這家食堂至今讓我十分懷念的公司。感謝勁東、芳姐和家軍等不少人的關(guān)照,希望有緣能夠江湖再見吧。
一張調(diào)試 2016 年會(huì)大屏 Demo 的照片。那是我在訊飛最忙的 24 個(gè)小時(shí),也是唯一一次直接和董事長(zhǎng)匯報(bào)工作。
參與社區(qū)的第二年
我在自我介紹的時(shí)候,常常說我呆過的地方好像都是「假的」:我在科大讀書,但它不在北京;我畢業(yè)前水到了鵝廠的實(shí)習(xí),但 base 不在深圳;我離開訊飛后去了美團(tuán)點(diǎn)評(píng),但部門卻在廈門。直到現(xiàn)在,我暫時(shí)也還沒有離開這座城市的打算。只要不去為了那些庸俗的同齡壓力去束縛自己,廈門呆起來就是個(gè)既離我的家人很近又很容易看到海的舒適城市。2017 年,美團(tuán)點(diǎn)評(píng)的廈門研發(fā)中心在搬家前還能看到游艇,每天騎著單車上下班都能吹到海風(fēng),有時(shí)下班還能和小伙伴們?nèi)ド碁┳ンπ?:)
我加入美團(tuán)點(diǎn)評(píng)的面試很順利,最主要的流程就是我把上面的一些各色玩具和相應(yīng)的博客和前端老板虎哥秀了一下吧。在那里,我的主要工作是開發(fā)一個(gè)名為學(xué)城的內(nèi)部知識(shí)庫(kù)系統(tǒng)。雖然我為這個(gè)項(xiàng)目提交的代碼占比可能已經(jīng)所剩無幾,但我相信只要它還活著,就總會(huì)和我有著點(diǎn)微妙的關(guān)系——學(xué)城的名字就是我起的??催^《權(quán)力的游戲》的同學(xué)應(yīng)該都知道容納維斯特洛大陸七國(guó)學(xué)士的 Citadel 吧,這個(gè)聽起來就很有智慧的名字是不是挺適合一個(gè)知識(shí)庫(kù)的呢?
對(duì)類似 Wiki 的知識(shí)庫(kù)系統(tǒng)來說,Web 前端的富文本編輯器就非常重要了。稍有經(jīng)驗(yàn)的同學(xué)都知道,富文本編輯是個(gè)長(zhǎng)期以來被認(rèn)為是天坑的領(lǐng)域,相關(guān)主流基礎(chǔ)庫(kù)從啟動(dòng)到成熟的時(shí)間都是以年為單位來計(jì)算的。我們顯然沒有必要重新發(fā)明輪子,可以基于社區(qū)已有的成熟框架來開發(fā)。在這個(gè)背景下,我首先接觸了 Slate,這是一個(gè)可以讓你以編寫 React 組件的形式來定制自己的富文本應(yīng)用的框架,它的 API 之優(yōu)雅、文檔之完善與源碼之整潔使我很快就決定上車了,甚至都沒有太在意它還屬于 Beta 狀態(tài)的友情提醒。
在學(xué)城的最早的幾個(gè)版本中,我們基于 Slate 編寫的代碼還算工整。但很快問題就來了:它還不能算一個(gè) battle-tested 的框架,我們定制的組件在編輯時(shí)暴露出了很多狀態(tài)問題,bug 數(shù)量非常高。在我之前的工作經(jīng)歷中,對(duì)于框架用著不順手的問題,基本都可以在業(yè)務(wù)中變通或繞過。但這對(duì)于富文本編輯器來說不適用,因?yàn)樵S多 bug 本身就在框架層,即便反饋到社區(qū),也沒人有義務(wù)馬上替你解決。所以該怎么辦呢?下載一份源碼自己改吧。
修復(fù)框架的 bug 和修復(fù)業(yè)務(wù)代碼的 bug,其實(shí)并沒有本質(zhì)的不同。畢竟只要能穩(wěn)定復(fù)現(xiàn),幾乎所有 bug 最終都是能被修復(fù)的,只是業(yè)務(wù)代碼中更容易出現(xiàn)骯臟的修復(fù)代碼而已。但修復(fù) bug 之后呢?在我第一年工作的時(shí)候,我在 GitHub 上還幾乎沒有為其他人的項(xiàng)目提交過代碼,但我知道只要代碼合并入主干分支,你就會(huì)成為這個(gè)項(xiàng)目的貢獻(xiàn)者。雖然這沒有任何物質(zhì)獎(jiǎng)勵(lì),但這作為貢獻(xiàn)過開源項(xiàng)目的證明仍然讓我十分心動(dòng)。抱著這種向往的心情,我為社區(qū)提交了第一個(gè) PR。
到現(xiàn)在我還記得很清楚第一個(gè) PR 的內(nèi)容:給 .npmignore 文件增加了一行,來解決 Babel 默認(rèn)重復(fù)編譯的問題。雖然只有一行代碼,但出于我對(duì)開源項(xiàng)目的敬畏,我還是寫了相當(dāng)詳細(xì)的描述來表達(dá)我為什么需要增加這一行代碼,以及它會(huì)通過什么方式來解決問題。作者也很快就合并了這個(gè) PR。在發(fā)現(xiàn)貢獻(xiàn)開源項(xiàng)目原來也就是這么回事之后,我有了很大的動(dòng)力將更多我的改進(jìn)提交到上游。到我離開學(xué)城項(xiàng)目為止,我把包括 bug 修復(fù)、測(cè)試、文檔在內(nèi)的近 20 個(gè) MR 合并入了 Slate 的主干,并維護(hù)了一份 0.24 版本文檔的完整中文翻譯。今天 Slate 已經(jīng)有接近 1.5 萬個(gè) star 和超過 200 名貢獻(xiàn)者了,而我在它的 contributors 排行榜里仍然可以排在前十。
可惜的是,即便我盡力改進(jìn) Slate,它對(duì)于表格、列表等存在嵌套的 UI 組件,其穩(wěn)定性仍然難以滿足學(xué)城的需求。再加上它較為激進(jìn)的更新方式,我們很快就遇到了難以繼續(xù)同步上游更新的問題。在充分地向公司上層拋出問題并給出備選方案之后,我們將富文本框架遷移到了架構(gòu)相似但更為穩(wěn)定的 ProseMirror 上,它應(yīng)該已經(jīng)在學(xué)城上沿用至今了。雖然 Slate 的落地時(shí)間不長(zhǎng),但在對(duì)它的使用與改進(jìn)過程中,讓我充分地理解了開源項(xiàng)目的運(yùn)作和參與方式,我在 GitHub 上也終于不再僅僅是自?shī)首詷妨恕?/p>
2016 年和 2017 年我在 GitHub 的貢獻(xiàn)對(duì)比。
到了第二年,我在 GitHub 上提交的代碼雖然還是有不少玩票成分,但也不再是清一色的玩具了。大致有這些:
異步的數(shù)據(jù)遷移工具 Bumpover,它實(shí)現(xiàn)了 100% 的單元測(cè)試覆蓋率。
通過提取語法樹節(jié)點(diǎn)來比較 Vue 與 Angular 相似度的 naming-style-demo 示例。
HTML 字符串轉(zhuǎn)虛擬 DOM 的解析器 html-toy-parser。
40 行的 MVC 框架 nano-mvc。
在美團(tuán)點(diǎn)評(píng)的那段時(shí)間里,除了在 GitHub 上提交代碼外,我在一些技術(shù)社區(qū)里也相當(dāng)活躍。記得剛?cè)肼殨r(shí)需要把 Vue 切換到 React,對(duì) Vue 的懷念促使我去 SegmentFault 上回答了許多 Vue 的問題,一度是某幾周內(nèi)這個(gè)話題下的第一名。并且,我還發(fā)現(xiàn)掘金是個(gè)很適合發(fā)(新手向)前端技術(shù)文章的地方。在 2017 年結(jié)束時(shí),我的 掘金專欄 已經(jīng)有了 3000 以上的關(guān)注者。不過,我可不是純粹只貢獻(xiàn)技術(shù)正能量的傻白甜。如果那段時(shí)間你在掘金發(fā)文章講如何深入理解 this 的四種指向和寄生混入繼承之類老掉牙的糟粕內(nèi)容,那么我多半會(huì)在評(píng)論區(qū)義無反顧地站出來吐槽 :) 只是現(xiàn)在的我已經(jīng)沒有興趣參與這些口水話題了而已。
由于遇到了更適合我的機(jī)會(huì),我也沒有在美團(tuán)點(diǎn)評(píng)工作超過一年,不過我還是很留戀剛剛?cè)肼殨r(shí)的那支團(tuán)隊(duì)。不論是晚上飯點(diǎn)時(shí)小伙伴們吃遍菜單的日常聚餐,還是不定期能蹭到的虎哥牌星巴克,都是相當(dāng)有趣的回憶。也還要額外感謝佳立、根龍、春雨等接手學(xué)城的同學(xué)們。多虧了你們,鄒老板才沒有找上門來追殺我啊。
圖中多邊形風(fēng)格的大樓就是美團(tuán)點(diǎn)評(píng)廈門研發(fā)中心的前所在地,我們的團(tuán)隊(duì)曾在照片拍攝地捕獲螃蟹。
突破瓶頸的第三年
在離開美團(tuán)點(diǎn)評(píng)前,我確實(shí)可以 hold 住一些基礎(chǔ)框架的開發(fā)了。但富文本編輯器的性質(zhì)決定了它在基本穩(wěn)定后的迭代方式,更多地只是修修補(bǔ)補(bǔ)而非開疆拓土。這讓我感到焦慮,感覺自己處在一個(gè)為了四處救火而疲于奔命,技術(shù)進(jìn)步開始放緩的瓶頸狀態(tài)。在這個(gè)時(shí)候,新的機(jī)會(huì)出現(xiàn)了。
2017 年底的某一天,我在掘金上灌水時(shí)發(fā)現(xiàn)了一篇名為《我們?cè)诤_厡懘a》的軟文,署名糖餅,看起來出自個(gè)頗有底氣的前端團(tuán)隊(duì)。巧的是它的 base 也在廈門,并且實(shí)際地址剛好在我的上班路上。本著聊一聊反正不虧的心態(tài),我騎著單車拜訪了這家當(dāng)時(shí)名叫歡樂逛的公司。
接待我的兩名面試官,一位說自己花名就是糖餅(真人和頭像畫風(fēng)不符),另一位說自己花名叫小米。他們兩個(gè)人看起來蠻樸素的,但對(duì)我的長(zhǎng)篇大論卻出奇的有耐心,中途還有一名穿著黃拖鞋的男子參與了旁聽。那是我經(jīng)歷過的最久的一輪面試,總共和我扯了應(yīng)該有兩三個(gè)小時(shí)。我本來以為這就是一次初面,尋思著這公司的一線同學(xué)還蠻經(jīng)得住忽悠的。但其實(shí)我已經(jīng)把技術(shù)面該遇到的全部 Boss 都過了一遍,沒想到說好的青銅局里來了一群王者啊。
必須說,如果糖餅沒有貼出他合并到 Webpack 的并行構(gòu)建支持 PR,我是不會(huì)輕易選擇在畢業(yè)還不到兩年的時(shí)候被他慫恿著換第三次工作的。當(dāng)然,我們一般的日常也并不都是那么高大上的 Rocket Science。我在這里的工作,主要集中在當(dāng)時(shí)還沒有獨(dú)立出來的稿定設(shè)計(jì)項(xiàng)目里。我負(fù)責(zé)維護(hù)這個(gè)設(shè)計(jì)站點(diǎn)中的平面編輯器 SDK,以及相關(guān)的 UI 組件。最開始,我還以為稿定就是個(gè)較為邊緣的新業(yè)務(wù),直到公司搬家后前臺(tái)都掛著稿定設(shè)計(jì)的招牌,才發(fā)現(xiàn)我在這大概相當(dāng)于在中國(guó)郵政分拆之前進(jìn)了名叫中國(guó)移動(dòng)的部門。
平面設(shè)計(jì)編輯器與富文本編輯器有許多相似之處,并且這個(gè)細(xì)分領(lǐng)域中當(dāng)前的主流開源項(xiàng)目,其設(shè)計(jì)思想還達(dá)不到 Slate 那種高度可擴(kuò)展的靈活性,這無疑給了我很多發(fā)揮的空間。在過去的一年多的時(shí)間里,我從細(xì)小的 bug 修復(fù)開始一步步熟悉這個(gè)編輯器,終于在上個(gè)季度上線了我最想從 Slate 中借鑒的特性:組件化的可編輯元素。Slate 賦予了我們只要用 React 聲明一個(gè)
我們的平面編輯器,歡迎大家訪問 gaoding.com 體驗(yàn)噢。 除了在較高的層面上,將框架按照自己的設(shè)計(jì)思想重構(gòu)之外,我還在較低的細(xì)節(jié)層面上做了些有意思的工作。比如,我使用坐標(biāo)系變換的思想,將圖形旋轉(zhuǎn)后的 裁切拖拽限制算法 從上百行的 if else 判斷簡(jiǎn)化為了十余行數(shù)學(xué)變換;基于節(jié)點(diǎn)序列化數(shù)據(jù)的哈希值,實(shí)現(xiàn)了更細(xì)粒度的歷史狀態(tài)結(jié)構(gòu)共享,并開源了歷史狀態(tài)管理庫(kù) StateShot;使用 CodeMod 自動(dòng)將 ES5 代碼重構(gòu)為 ES6;設(shè)計(jì)實(shí)現(xiàn)了編輯器的特效調(diào)節(jié)機(jī)制,并作為第一發(fā)明人提交了專利申請(qǐng)等等?,F(xiàn)在我是 Web 工具團(tuán)隊(duì)名義上的負(fù)責(zé)人(吉祥物),工作至今寫了 80 篇左右的技術(shù)博客,掘金專欄的閱讀量也超過了 20 萬,看起來似乎還過得去吧? 但這些工作并沒有讓我感覺突破了瓶頸。 很早之前我就問過小米,我們做的事情比起 Adobe,有什么特別的優(yōu)勢(shì)嗎?小米的回答是我們需要主打內(nèi)容與細(xì)分的場(chǎng)景,做到對(duì)普通用戶更高的易用性。從商業(yè)角度來講我很認(rèn)可這個(gè)答案,但我在純粹的技術(shù)角度上,總覺得這是更適合市場(chǎng)部門負(fù)責(zé)人的回答而不是屬于技術(shù)部門的覺悟。并且,我也一直覺得我自己的技能體系還差了一些什么,使我雖然在一家主打商業(yè)設(shè)計(jì)而特別重視前端技術(shù)的公司里,做的事情卻還不夠酷。到底還差了什么呢?我的答案是渲染。 我們前端同學(xué)們所擅長(zhǎng)編寫的 JavaScript,只是在 CPU 里執(zhí)行的單線程代碼而已。別忘了我們還有 WebGL 這個(gè)雖然非常繁冗,但能讓我們釋放 GPU 潛力的武器。這個(gè)領(lǐng)域常常被認(rèn)為是游戲開發(fā)者所專屬的。而大家對(duì)于應(yīng)用 Web 上的 3D 能力,首先想到的可能也都是套用 Three 等充分封裝后的成熟開源渲染引擎。因此,在這個(gè)領(lǐng)域就沒有必要重新發(fā)明輪子了嗎?恰恰相反,我發(fā)現(xiàn)這是一片巨大的藍(lán)海,它在 Web 設(shè)計(jì)領(lǐng)域的應(yīng)用幾乎還是白紙一張,存在著非常大的定制、優(yōu)化可能性和應(yīng)用前景。限于篇幅和本文的主題,這里不再詳細(xì)展開,只展示一下我們自研的渲染引擎在投入開發(fā)一個(gè)月之內(nèi)所得到的一些渲染效果就足夠了:
在我前一段時(shí)間選擇深入 WebGL 的時(shí)候,幻神提醒過我這基本相當(dāng)于刪號(hào)重練了。確實(shí),在學(xué)習(xí)曲線的初期,圖形學(xué)晦澀 API 的門檻讓我感到非常艱難,但在堅(jiān)持不使用現(xiàn)成引擎來實(shí)現(xiàn) Demo 的一段時(shí)間后,某個(gè)時(shí)間點(diǎn)上我感覺自己終于可以把那些零散的點(diǎn)連接起來了。而這時(shí)再加上前端框架的設(shè)計(jì)經(jīng)驗(yàn),我確實(shí)找到了非常適合我們應(yīng)用場(chǎng)景的一個(gè)自研方向,具體的內(nèi)容暫時(shí)沒有辦法在這里詳述,只能說我和小伙伴們正在緊張的開發(fā)中,非常希望能讓我們的新特性早日和大家見面 :) 在 25 歲的今天,我感覺終于走出了之前幾年在 CPU 上編寫邏輯的瓶頸。從最早的玩具編程語言和游戲模擬器,再到現(xiàn)在的渲染引擎,所謂「編程語言、操作系統(tǒng)和計(jì)算機(jī)圖形學(xué)」的程序員三大浪漫,我也能吹牛說自己都略有涉獵了。對(duì)我來說,從事一份工作三年之后仍然保持高漲的熱情和找到值得繼續(xù)鉆研的技術(shù)領(lǐng)域,可能不是件很容易的事,因此現(xiàn)在的狀態(tài)對(duì)我來說已經(jīng)很好了。當(dāng)然,要想在未來在技術(shù)上還能夠繼續(xù)深入,所需要的應(yīng)該就不僅僅是傳統(tǒng)的 Web 前端的領(lǐng)域知識(shí),還需要更多跨領(lǐng)域和學(xué)科的知識(shí)了。感謝稿定這里鉆研游戲引擎和圖形學(xué)的大佬們,和他們的交流讓我獲益匪淺。現(xiàn)在我實(shí)在有太多需要做的事情了,因此我的博客和專欄也可能不能再維持月更的節(jié)奏,希望日后能用更多的干貨來彌補(bǔ) :D 后記與致謝 從第一年編寫展示頁(yè)和后臺(tái)業(yè)務(wù)邏輯,到第二年活躍在開源社區(qū),再到第三年開發(fā)自研框架并嘗試往圖形學(xué)領(lǐng)域轉(zhuǎn)型,畢業(yè)以來的這些經(jīng)歷讓我覺得我確實(shí)還在成長(zhǎng)。我雖然已經(jīng)不再是團(tuán)隊(duì)里最年輕的成員了,但現(xiàn)在我還遠(yuǎn)遠(yuǎn)沒有到轉(zhuǎn)型完全的管理者去分配需求和任務(wù)的時(shí)候:還有這么多有趣的代碼可以寫,放棄了豈不可惜? 雖然這篇文章主要和技術(shù)相關(guān),但我的生活其實(shí)也并不只有技術(shù)啦:我有微單和無人機(jī),玩通了 Switch 上的塞爾達(dá)和馬里奧,花名(雪碧)和公眾號(hào)名(彩色相簿)都來自白學(xué),畢業(yè)以來除了公費(fèi)游歷了北上廣滬杭等大城市,也去了臺(tái)灣、新加坡、捷克、法國(guó)(包括白學(xué)家的圣地斯特拉斯堡)等相當(dāng)有趣的地方。只要在生活里保持開放的心態(tài),總能認(rèn)識(shí)到許多比自己更厲害的人并向他們學(xué)習(xí)。如果按照論文致謝的方式列出個(gè)名單,那么我感覺對(duì)我影響最大的是這么幾位,即便其中的一些人我還未曾謀面: 我司的小米和糖餅在對(duì)技術(shù)的態(tài)度和團(tuán)隊(duì)管理上都給我起到了很棒的「模范帶頭作用」,在這個(gè)團(tuán)隊(duì)的成長(zhǎng)體驗(yàn)是最好的。 Slate 的作者 Ian Storm Taylor 在我初入開源社區(qū)時(shí)給了我很多熱情而不失嚴(yán)格的 Review,他的框架設(shè)計(jì)理念對(duì)我有很深的影響。 攜程的工業(yè)聚向我展示了代碼邏輯所能達(dá)到的優(yōu)雅水平。聚聚總結(jié)的 GSP 編碼風(fēng)格即便在編寫渲染引擎時(shí)都十分適用,扭轉(zhuǎn)了我對(duì)函數(shù)式編程矯枉過正的態(tài)度。 Photopea 的作者 Ivan Kutskir 在布拉格熱情地招待了我,他的作品對(duì)圖形學(xué)的應(yīng)用給了我巨大的信心來深入這一領(lǐng)域。 一位不愿透露姓名的女性在我遇到困難時(shí)給了我很大的安慰,我已經(jīng)習(xí)慣在每個(gè)周末去見她的動(dòng)車上安心地寫代碼了。
在斯特拉斯堡巡禮時(shí)拍下的照片。 我還要感謝畢業(yè)到現(xiàn)在遇到的很多很多人,畢竟終歸是和大家因緣際會(huì)的無數(shù)選擇才能成就一個(gè)人。在生活這個(gè)巨大而混沌的系統(tǒng)里,幸運(yùn)的是我們可以作出選擇來結(jié)識(shí)他人、追求理想并作出改變——We are what we choose. 最后,同樣感謝你的閱讀噢 :D 本文首發(fā)于我的公眾號(hào)「彩色相簿」,不圖流量不圖廣告,純屬交個(gè)朋友,歡迎關(guān)注 :)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。 轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/6671.html 摘要:在這種情況下,跟繼續(xù)死熬下去相比,轉(zhuǎn)行,或許是最不壞的選擇。轉(zhuǎn)行是個(gè)不容易的過程,轉(zhuǎn)行之后的技能積累和學(xué)習(xí)過程也是不容易的。最好是有經(jīng)驗(yàn)的人帶你,有大腿抱,學(xué)習(xí)效率極高,這個(gè)我深有體會(huì)。 如題,本人一個(gè)普通二本大學(xué)機(jī)械專業(yè)畢業(yè),14年畢業(yè),16年轉(zhuǎn)行,目前做IT行業(yè)的軟件測(cè)試已經(jīng)有3年多,... 摘要:更多更頻繁的測(cè)試在回歸測(cè)試階段,如果是每天每天都要發(fā)布一個(gè)版本供測(cè)試人員測(cè)試,一個(gè)系統(tǒng)的功能點(diǎn)有幾千個(gè)上萬個(gè),手工測(cè)試將是非常的耗時(shí)和繁瑣,而且非常的枯燥,這樣必然會(huì)使測(cè)試效率低下。 ... 摘要:專業(yè)專業(yè)這一塊肯定是計(jì)算機(jī)專業(yè)最好,計(jì)算機(jī)專業(yè)其實(shí)也包括很多,包括計(jì)算機(jī)科學(xué)網(wǎng)絡(luò)工程,包括我看到現(xiàn)在還有專門的軟件測(cè)試專業(yè),我們以前那一會(huì)都沒有。次優(yōu)勢(shì)是什么呢就是說你雖然不是計(jì)算機(jī)專業(yè),但是你學(xué)過一些計(jì)算機(jī)相關(guān)的一些內(nèi)容。 ... 摘要:兩年半的時(shí)間完成了一次晉升,順利地從一個(gè)職場(chǎng)小菜鳥轉(zhuǎn)變?yōu)榱艘幻Y深打工人額。。后來隨著工作經(jīng)驗(yàn)的積累,我發(fā)現(xiàn)這個(gè)想法其實(shí)是非常錯(cuò)誤的。不可否認(rèn),互聯(lián)網(wǎng)行業(yè)在這一點(diǎn)上確實(shí)不如公務(wù)員等體制內(nèi)職業(yè)。后面的工作基本是在吃老本,沒有主動(dòng)學(xué)習(xí),。 先簡(jiǎn)單說一下背景,某不知名 985 的學(xué)生,18年畢業(yè)進(jìn)... 摘要:西游記可以讓你了解社會(huì)是如何運(yùn)作的深刻的理解社會(huì)規(guī)則與政策的制定以及人性的冷漠。無論是工作還生活中,凡事都多問三個(gè)為什么。要兼顧家庭和工作,但是要知道,其他的女性也和你一樣。針對(duì)其個(gè)性的管理,使其快速融入團(tuán)隊(duì)。前言你的未來時(shí)刻因你現(xiàn)在的努力而改變!在努力不夠的時(shí)候,永遠(yuǎn)不要談天賦! 工作三年,時(shí)不時(shí)會(huì)和身邊的朋友、同學(xué),談?wù)撻_發(fā)這個(gè)崗位的前途性,總覺得事多且累,學(xué)不完的新技術(shù)?! 同學(xué):... 閱讀 2647·2021-10-09 09:44 閱讀 720·2019-08-30 15:44 閱讀 3063·2019-08-29 18:46 閱讀 1204·2019-08-29 18:38 閱讀 635·2019-08-26 10:44 閱讀 2502·2019-08-23 16:07 閱讀 1203·2019-08-23 15:38 閱讀 4329·2019-08-23 14:02 組件,就能在富文本編輯器中編輯表格的擴(kuò)展能力。我將這個(gè)思想應(yīng)用到了我們基于 Vue 的編輯器上?,F(xiàn)在我們只需要提供基于 Vue 編寫的 UI 組件,就能輕松地為編輯器組裝出新的可編輯元素類型支持,而無需改動(dòng)框架核心源碼。再加上小伙伴在前端出圖上的不懈努力,我們的編輯器做到了兼取 Canvas 與 DOM 二者之所長(zhǎng),目前暫時(shí)還沒有主流的開源編輯器能滿足這一點(diǎn)。
相關(guān)文章
程序人生 | 0基礎(chǔ)成功轉(zhuǎn)行IT軟件測(cè)試,坐標(biāo)上海薪資2w,分享下我本科畢業(yè)2年轉(zhuǎn)行的經(jīng)歷!
大學(xué)渾渾噩噩度過四年;畢業(yè)做過行政、人事、繪圖等工作;也沒呆多久,選擇軟件測(cè)試成功逆襲達(dá)到月薪25K
學(xué)習(xí)容易找工作難??應(yīng)不應(yīng)該轉(zhuǎn)行軟件測(cè)試?。?!
在頭條干了兩年后含淚整理的職場(chǎng)經(jīng)驗(yàn),太真實(shí)....
(二)工作三年的一些感悟
發(fā)表評(píng)論
0條評(píng)論
zlyBear
男|高級(jí)講師
TA的文章
閱讀更多
Python【賦值語句】專講,可不能只會(huì) a=b ??!建議掌握!
前端面試每日3+1——第103天
重學(xué)前端學(xué)習(xí)筆記(六)--JavaScript類型有哪些你不知道的細(xì)節(jié)?
關(guān)于程序員寫好 ppt 的幾點(diǎn)總結(jié) - 前端張大胖
第一次構(gòu)建react前端項(xiàng)目
Vue+Vue-router+Vuex項(xiàng)目實(shí)戰(zhàn)
學(xué)習(xí) PixiJS — 交互工具
Cesium的3D在多個(gè)單頁(yè)面應(yīng)用中,內(nèi)存只增不減致內(nèi)存溢出問題的解決