summary-in-my-first-week-of-being-a-salaried-worker

正式成爲上班族後一週小結

今年年初開始找工作,在 4 月結束時成功入職了一家我覺得會有作爲空間的公司。沒有收到我簡歷的公司也不必着急,這只是我靠別自由職業生涯之後的第一站,所以暫時只考慮了深圳一座城市,很多北京和上海的優秀的公司從一開始就沒有納入候選名單。以後的路還很長,有機會的話你們在未來會見到我的簡歷。

工作體驗

首先,成爲上班族後第一個感覺就是編程方法的不適應。我並不是指方法論之類的玩意兒,而是:我在家裏一般都是站着編程,而在辦公室坐着編程感覺真的很不適應,在人體工程學椅子上坐着是分分鐘要睡着的節奏。以後估計會買一個站立編程的桌子來幫助我克服這個問題。

是的,你也許從上面這一段看出來了,這家公司福利並不是業界一流的——畢竟站立編程的桌子屬於工作道具,還需要員工自行購買。另外我工作的電腦也是 iMac 21 而不是 iMac 27 + 第二台顯示器,iMac 21 的配置也被預算部門砍了一刀,固態變了 Fusion Drive。但是爲什麼我還要選擇這家公司呢?

爲何選擇這家公司

首先,我的自由職業階段過長,高中考大學的時候也沒考得好,並不是 985 和 211,又沒有讀研究生和博士,所以簡歷並不好看,這就註定了我不太可能一開始就跳到一個很好的平臺。實際上我非常心儀的字節跳動 EE 部門就拒絕了我,而我只考慮深圳這座城市最後又沒進騰訊,也是因爲騰訊拒了我。

然後,我現在選擇的這家公司正準備在 iPad Pro 平臺發力,而 iPad Pro 平臺也是拓展其桌面平臺的產品線。其桌面平臺的產品在海外有着不錯的用戶基數,如果 iPad Pro 版本做得不掉價的話,轉化率應該是很不錯的。而 iPad Pro 版本的研發有我的一份力在裏面,所以這個產品掉不掉價是我可以控制的因素的。於是這就規避了去一些互聯網初創企業說不定等不到第一批用戶就 GG 的悲劇。

另外,從面試過程中可以看出,這家公司的開發實踐依然是 seeing is believing 的路子,對自動化單元測試的依賴不高。而對自動化單元測試依賴不高又反映出一個問題就是工程師可能普遍沒有從定量分析到定性判斷的思維習慣,最後就是整個開發節奏都被這種 seeing is believing 實踐方法拖慢,開始堆砌人力。那麼也許你就要問了:既然這樣,你爲什麼還要加入這家公司?

辯證唯物主義告訴我們,挑戰與機遇並存。如果我能夠帶領這樣的團隊轉型自動化、最後駛出 seeing is believing 開發實踐的路子,那麼在未來 5 年內,我將會非常吃香——因爲這基本會是中國 IT 企業的一個趨勢,而在這個趨勢內,一旦我完成了這個挑戰,我就可以複製我的經驗,獲得更多的機遇。這就是「挑戰與機遇並存」的本質。

再者,從面試過程中還可以看出,這家公司的員工可能普遍對算法不太熟悉——面試過程中楞是沒考我一道算法題。爲了準備字節跳動的面試,我可是把「劍指 Offer」上 80 道題目都刷了一遍,結果在這家公司的面試中根本沒用到。入職第一天後近桌的同事就遇到了一個文件唯一性比較的問題。他們說要用 MD5 來做。可是我們可以想想:比較文件不同是需要讀入文件的全部內容的,而我們可以將文件的全部內容合成一個特殊值方便以後快速比較——這就是 MD5 的本質。但是 OS 在文件創建的時候也會將文件內容全部讀入一遍,然後產生一個特殊值——文件大小。在很多時候我們比較文件大小就能夠求出文件唯一性。在文件大小一樣時,再去尋找兩個文件中第一個不同的字節,也會比 MD5 計算要快。但是我在和他們講解我的思路時我是不敢用 O(n) 這種術語的——因爲面試沒考這些東西我就不確定他們到底懂不懂這些玩意兒——於是這就帶來了更高的溝通成本。

工作困擾

推廣算法的學習我真的沒有什麼好辦法。大家都覺得面試造火箭,上班擰螺絲,可是我卻不這麼認爲。

我入職後接到的第一個任務是優化一個現有實現的內存佔用。爲了瞭解這個實現內存佔用的具體情況,我就先寫了一個內存足跡探測器,然後設計了一堆指標,最後用這個內存探測器來探測這個實現在各個指標下的內存足跡。

這個內存足跡探測器的原理非常簡單:

  • 在 Darwin 中一個進程在 Mach 3.0 內核中對應一個 mach task,而我們可以取出這個 mach task 的內存佔用信息,這就獲得了該進程的內存大小。

  • 我們要每隔一段時間就獲取該 mach task 的內存佔用,這就必須要保證每隔一段時間就要調用一次內存足跡快照函數。而如果在主線程或者任何系統創建的背景線程幹這個活都有可能會因爲線程被阻塞而導致時間間隔失真。於是我們要創建一個 NSThread 實例,然後在該實例上綁一個 NSTimer 實例,再讓這個 NSThread 實例對應的 NSRunLoop 實例 run 起來。至於爲什麼在這種情況下我們自己創建一個 NSThread 實例就不會被阻塞、爲什麼綁在這個 NSThread 實例上的 NSTimer 實例可以穩定地定時發動而不需要 CADisplayLink 大家可以看看 Mach 內核的工作機制或者複習一下操作系統多線程調度方面的基礎知識。

以上這些在我看起來都很簡單,都是基礎中的基礎,然而肯定有人覺得這就是造火箭,那麼問題來了:這到底是造火箭還是擰螺絲?

其實我個人認爲實際工作中造火箭和擰螺絲其實是交替存在的。在完成了內存足跡探測之後,我再設計完優化方案,那麼最後的編碼工作不過也就是擰螺絲了。

又比如 UICollectionViewLayout 的 subclassing 的工作:要 subclass UICollectionViewLayout 可以做得很「擰螺絲」——直接暴力懟 layout attributes 唄,也可以做得很「造火箭」——加入計算幾何的算法進行 layout attributes 緩存。可是你若是沒見識過「造火箭」,那麼也就只能幹幹「擰螺絲」的活了。鄧小平說的:「聽過砲響的兵和沒聽過砲響的兵是不一樣的」也就是同樣意思。確信了你擁有「造火箭」的能力,那麼工作成果的上限便保證了。未來中國的 IT 企業一定是追求更卓越的工程實踐,加上本來中國人就多,競爭就激烈,那麼面試「造火箭」應該會是一個普遍的趨勢。

但是我還是對如何向同事普及算法的重要性非常沒有譜。目前只能是先做出一個優秀的範例出來,然後勸誘同事入算法的坑。至於要推廣形式化的分析和證明,這個可能會更加困難。

另外,我的職級也感覺比我的水平低,我投的是「資深工程師」(相當於國內互聯網企業的「技術專家」吧),然後定級卻是「高級工程師」——這可能也是吃了簡歷不好看的虧。

生活困擾

現在我坐在剛裝好的 IKEA Bekant 書桌前用我的 iMac 寫着這篇文章,身後是堆積如山的還沒來得及處理的 IKEA 的傢俱盒子。我剛裝好我的書桌便支起了我的 iMac 來寫這篇文章,這種節奏真的是趕得要命。

我曾經看到左耳朵耗子在他的博客中提到過,以前在阿里的時候每天 11 點回到家後還會堅持學習一個小時,後來聯想到他說工作五年內搞定「TCP/IP 詳解」三件套和「UNIX 網絡編程」三件套時才想到,可能他是花了五年時間,工作日每天一小時看完的這幾本書。雖然說學生階段的話,這兩套書看完也就兩個暑假的事,但是意識到以上這些才知道左耳朵耗子在自主學習上的不容易。然而我目前的狀態而言,用日語來說真的就是「ギリギリ」了(這句話在這個語境下我還真不知道怎麼用中文表達,所以沒有翻譯見諒)。

今天回家剛裝好自己的書桌,支起我的電腦,想打開 Xcode 寫點東西。這時候,我自己對自己說:今天還剩幾個小時,是寫 Swift on ECS 還是研究 Swift 編譯器源代碼?然而問完自己這幾個問題後才發現自己的腦子已成漿糊。於是這才發現,對於上班族而言,要堅持自己的 side project 需要比自由職業時期擁有更加強大的時間管理能力。

另外,一個人出來之後是真的寂寞。租的房子裝了新傢俱之後也不知道和誰分享喜悅。中島美雪有一首歌叫「with」的,裏面有一句這樣的歌詞:

ひとりきり泣けても ひとりきり笑うことはできない

翻譯成中文就是:

雖然可以一個人哭 但是一個人笑這種事是做不到的

我算是理解讀書的時候一位海歸而來的老師對我說的「國外很寂寞」是什麼意思了。我當時還反駁她:「孤獨和寂寞」是不同的,現在想想還真是幼稚。

我孤獨嗎?我一直孤獨。可是當我打開書本與賢哲進行精神交流時我就不孤獨了。我寂寞嗎?我之前在家鄉,一直不寂寞,但是現在卻真正感覺到寂寞了。

這樣以來,也算是理解出門在外的很多人爲什麼會選擇「工具型」男友/女友了——找個人消遣寂寞、分擔房租和家務事,在我們中國人的實用主義看來是非常合理的選擇。當然,我不想這麼做。

自由 / 不自由,其實不是問題

很多人可能覺得我告別自由職業狀態,去公司上班是非常不明智的事。「你把我們想做的全都做了」,在面試過程中我曾經聽過這樣的話。然而那真的就是說這些話的人嚮往的自由嗎?不見得。

自由和不自由是一對辯證而統一的概念,當你處於不自由的狀態時,你選擇抗爭,根據你的意志達到了自由的狀態,最後就會進入一個新的穩定狀態,而現在又回到了新的不自由的狀態——因爲你已經被這個新的狀態束縛住了。

人的一生中在自由和不自由中反覆,我們並不能確實地保證自己永遠自由,只能確實地保證我們一直持有「自由意志」——而我們自身就被我們的「自由意志」所驅使着。

大多數人嚮往的「自由」其實是中國傳統文化中的一個概念——逍遙。或者說隨性而動。然而隨性而動不就是動物嗎?一個人是有意志的,要根據自己的意志而動,克服自己的天性,抗爭他人的意志,這才是真正的「自由」。

所以只要我們持有「自由意志」,並且跟隨我們的「自由意志」而動,那麼我們就永遠處在通往自由的路上,而我又剛剛說了——一個人不可能永遠處於「自由」的狀態,所以這其實就是我們能做到的「最自由」的狀態。



Freiheit ist Wille, Handeln ist Fähigkeit.
Built with Gatsby.js.