區區一年的時間足夠發生太多事情。去年的這個時候,我肯定不會想到現在的我會在廈門去往杭州參加 D2 的高鐵上寫下這篇總結。回顧 2017,有太多的事情值得記下,這裡謹挑出和前端相關的地方和大家分享吧。
小事記
今年年中,我辭掉了畢業後的第一份工作,來到了廈門的這個團隊。這個過程裡的細節不太值得在此提起,不過在過了半年多之後回顧這段經歷時,從中確實能看到一些有趣的東西:
關於離職
上一家公司 X 有著美味的食堂、融洽的團隊和穩定的前景,那麼為什麼我選擇在畢業不到一年之際離開呢?當時的我其實並沒有完全想清楚,但現在對於『什麼時候應該選擇離職』這個話題,我的理解是,只要考慮清楚下面這三個問題就足夠了:
- 你在公司的發展前景好嗎? 雖然這麼說有些自負,但大概在入職三個月轉正的時候,我感覺在純粹的前端技術上,已經沒有人能夠『指導』我了——潦草的 jQuery 麵條程式碼沒有學習價值;沒有人有 Scale Up 前端專案的經驗;調研中的新技術選型,結果還是早就落伍的老框架……這些技術細節其實都不是什麼問題,但靠譜導師的缺乏,使得我作為新人很難獨立判斷好技術的趨勢和學習的方向。這麼說來,去年那頂『最佳新人』的帽子背後其實還是挺涼的 ?
- 你的發展對公司有價值嗎? 很遺憾,就好像庫克在基因裡就不需要看 AV 一樣,這家標榜著 AI 驅動的技術公司在基因裡其實也並不需要重視前端。作為例子,我能想到這幾點:
- 在離開以前,我負責的專案比起和它對標的老專案,減少了一半的程式碼量,弱網下載入速度翻了一番——但這有什麼用呢?畫的這幾個破網頁也沒多少人看呀。
- 我搭了內網的私有 npm 倉庫,在上面釋出了十多個私有依賴——但是它掛了的時候從來不會有人提起:複製一下
jquery.min.js
不就行了嗎? - 離開前的最後一個專案裡,我花了一個月左右從頭實現了一個埋點分析庫,附帶了大量的文件和測試用例。QA 測試後認為質量不錯,於是在績效裡多了 100 塊錢作為獎勵——是的,整整 100 塊人民幣,我非常感動。
- 你工作得開心嗎? 絕大多數時間還不錯,只不過對 Leader 的吹捧和一幫普通同事之間動輒
x 總、x 神
的互吹式稱呼感到比較尷尬。另外,我感興趣的什麼函式式、什麼編譯原理之類的東西都不是同事們熱衷的談資,他們更喜歡討論股價、房價和掙外快一類的話題。當然了,和家裡人聊這些也挺有趣的,不過和技術同事不能聊技術,多少會有些不合群的感覺吧。最後,一些管理的混亂也讓我不知道對誰負責、向誰彙報,還會有攪屎棍希望為了專案的控制權來做一些莫名其妙的技術方案……現在回想起來,可能這就是傳說中的辦公室政治吧。
我還記得去廈門面試的那天是我這個『優秀新人』畢業以來第一次請假,那天老東家的大樓還史無前例地停電了——這就是所謂的緣分吧。對於老東家每一位個體層面的同事,我還是非常尊敬並希望他們過得越來越好的。不過我和這個巨集觀的群體,可能不是那麼合適吧。
關於二線城市
從某種角度說,我來到廈門只是從一座二線城市換到另一座而已。為什麼不選擇網際網路資源集聚的北上廣呢?下面是一點點自己的考量。
畢業前我在上海的鵝廠實習了一段時間,雖然作為區區實習生沒有負責多麼重要的工作,但在光鮮之外,大城市不那麼美好的一面也給了我很深的印象。除了老生常談的住房問題外,漫長的通勤時間是最難以容忍的:每天在班車或地鐵上花費兩小時是一筆巨大的時間成本——每天花一小時學外語都很難堅持了,更何況強制性的兩小時。
不過,在前端這個領域裡,幾年內一線城市應當仍然是第一流人才的第一選擇。有人整理了一份 Github 上中國開發者的 Top 1000 排行,在這 1000 人中,城市資訊寫著 Beijing / Shanghai / Shenzhen / Hangzhou 的各自有 100 到 200 人,而在其餘城市的人數則是數量級地少於這幾個超級城市。作為例子,這裡面 Xiamen 的人數大約是十幾人。按照目前的趨勢,明年我應該可以讓榜單裡 Xiamen 的人數加 1,不過這是在順應歷史的程式嗎?我不知道。
技術積累
上面記錄的只是一些個人的變故。而在技術層面,這一年來我還是做到了不少進步值得分享,正如本文的標題:『從增查改刪到貢獻開源』。
參與開源
我倒是很早之前就在使用 Github 了,在上面也放了不少玩具級的編譯器、直譯器、模擬器之類的專案。但要真正參與到一個活躍的大型開源專案裡併成為主要貢獻者之一,這件事我才剛剛做到。
做到這個事情的動機,和我們團隊專案中用到的富文字編輯器有直接的關係:我們選擇了定製性很強的 Slate.js 框架,這個框架雖然 star 數量不少(目前已經超過 6k)並且 API 非常強大,但穩定性一直不夠。很快我們就發現等待上游的更新是不現實的,必須自己動手。在投入一些努力後,我在這個框架的 100+ 貢獻者裡獲得了前十的排名,修復了一些關於歷史記錄棧、輸入法和文件變換 API 的 bug,並且翻譯了一份中文文件。要說貢獻開源對個人有什麼幫助的話,我體會最深的大概有這幾點吧:
- 我瞭解到了正經維護開源專案和往 Github 上扔作業程式碼和玩具程式碼的區別,明白了一個細分領域最優秀的框架程式碼維護方式原來也不過如此。
- 維護者對 PR 常常會給出詳盡的 Review 意見,這些來自頂級開發者的 Review 能讓人跳出寫業務邏輯的一畝三分地,更完善地考慮程式碼質量——雞湯地說,進步的最好方式就是向比自己更優秀的人學習。
- 直接地和框架作者討論的過程給了我更多的自信。作為副作用,我在懟人(吵技術架)的時候有把握多了 ?
- 程式碼併入主幹給了我很大的成就感。如果說今年我最滿意的程式碼是什麼,應該是這個一行解決 4 個 Issue 的 PR 吧。
去年的這個時候,只有幾個月經驗的我還非常仰望那些向開源專案貢獻各種 PR 的開發者們。而今天我更覺得他們也沒有那麼高不可攀,這應該就是一種進步吧。
部落格分享
我同樣在很早之前就開始寫技術部落格了,但要說在掘金一類的技術社群上發表專欄,這還是半年以來才剛剛開始的。在分享技術的這個方向上,今年的成果還是挺讓我自己滿意的。
在半年前剛剛開始寫專欄的時候,我對關注者數量還是沒有任何要求的——我寫我想寫的東西就夠了,並不圖這些虛的東西。不過剛好在今天,掘金上的關注者數量已經突破 3000 人——我沒有網紅的個性,這個數量非常非常多了!我絕對沒有把關注者數量作為自己的 KPI 指標,但還是非常感謝大家的認可……?
而在部落格的數量和質量上,今年除了做到了年初所希望的月更,還有一些細微的不同:
- 部落格沒有更新任何《XX 入門》和《XX 新手教程》一類的內容。這些動輒上千讚的新手向內容不是我所感興趣的,在可見的未來也不會有,除非介紹我們團隊造的新輪子。
- 部落格沒有更新任何《XX 原始碼解析》一類看似高深實則難讀的內容。相反,我專門寫了一篇文章指出這類內容的問題。這是我對技術寫作的另一個要求:不寫膚淺的新手向選題,但只要決定了題目,就一定要產出對讀者友好的內容。
- 部落格開始更新了一些『把技術和人文結合』的內容(雖然都還很幼稚)。比如,我討論了程式設計的變數命名和文科的語言學有什麼關係、新前端框架的出現是否符合《黑天鵝》裡的隨機性、變數的生命週期如何類比到《尋夢環遊記》裡的死亡和遺忘(這個想法居然帶來了一篇小說)等等。這些選題的主要來源是近期我閱讀的一些『雜書』,把各個領域的書籍內容和當前的工作相結合時,那種 connecting the dots 的感覺還是相當有趣的!有機會的話,希望能和大家分享一份有意思的書單吧 ?
- 部落格開始關注批判性的技術討論,而不是單調的新技術介紹。比如,我會抨擊炫技的爛程式碼、定量分析 Vue 是否抄襲了 Angular、提出對技術寫作行文方式的問題…現在太多平鋪直敘的技術文章讓社群顯得單調,我相信這個方向裡能寫的雜文還有很多。
- 部落格裡對於真正的『技術乾貨』,我希望更多地以 Github 上的 Issue 和 PR 的形式去沉澱,而不是寫一些在社群裡沒什麼人看的『深度』文章。
總的來說,在部落格的更新上,我所面臨的最大問題其實和去年的這個時候相比,已經從『找不到有什麼好寫的』慢慢變成了『選題太多沒空寫』了……也許這確實是一種進步,不過也帶來了新的問題。作為解決方案,我的部落格原始碼里加入了 Idea Pool 的概念,有時間的時候會從中選出題目來寫,有靈感的時候也會更新這個 Pool。至於效果如何,感興趣的同學不妨關注下我期待一下吧~
總結與展望
到這裡,自吹自擂的部分應該就結束了。最後就是一些體會,和對即將到來的下一年的期望吧。
成長心得
這裡還是列出感受最深的三點吧:
- 持續地關注程式碼的質量可以培養出一種鑑別程式碼的『品味』,目前我的水平還不足以將這種抽象的概念完整地總結出來,但寬泛地說,在完成工作之外多做思考,多去考慮如何改進,這條路不會錯。
- 不論是公司還是開源社群,廣義上的交流都非常重要。除了工作中和 QA、PM 等夥伴的交流,在社群要推進一件事情,所需要的 Issue 描述比例一點也不少。從這個角度上說,公司的會議和社群裡的 Issue 等東西都是在程式碼之外,非常重要的溝通渠道。我們需要承認它們的價值,再去考慮如何做得高效。
- 個人成長事件非常的『黑天鵝』,隨機性非常強,我無法把握幾年後和我共事的人會是誰,但個人的技術進步能夠讓我們對這些事情有更多的把握:不被面試刷掉就是這樣的把握。這就是在這個階段,我對『且行好事,莫問前程』的理解了。
下年目標
不想立太多 flag,明年的我在技術上能夠做到這些就很夠了:
- 學習一門舒適區外的新技術(比如學習某個前端框架就不算)。
- 部落格保持月更(忙起來的時候這其實很難)。
- 能參與做出(而不是維護)一個在社群內有價值的開源專案,以個人或團隊的名義都算。
- 保持工作和生活的平衡。之前閱讀到的一篇校友 Linux 大牛的訪談對我很有觸動。我希望能在更長的時間段裡保持的興趣和熱情,而不是在長期的加班下最終 burn down。
總之希望明年還能繼續成長,最後在此與君共勉吧~