工作的感悟
入職前以為自己以后的工作就是天天寫碼,從早寫到晚。但實際上出于組里項目的安排,到現在我也沒寫多少代碼(想了想還是不要說我寫了多少行了)。前幾個月還在和我的小伙伴們半開玩笑地說,我作為 SDE 終于從 Ops 的工作中脫身出來,開始做 PM 了。
?
一
入職的前幾個月安排我做 migration 的事情,大體來說就是一些 service 之間相互通信的 protocol 需要更新,需要升級一些相關的 package。這件事聽起來很容易,也的確是可以按照步驟一步一步完成的,但問題在于,我們組有很多繼承下來的老系統,大多“年久失修”,改動這一部分可能會影響另一部分,這讓我遇到了層出不窮的問題。我一開始由于對系統不了解,像一只無頭蒼蠅一樣,全靠內部版的 stackoverflow 來解決問題。雖然也能解決一些問題,但是這個過程非常痛苦,需要一個方法一個方法嘗試,而且常常是越試越絕望。
這讓我想到了很早以前看到的兩個圖。(用 Google 圖片搜索找到最開始的出處應該是這里)
我覺得這還是理想情況 —— 新手花了成倍的時間,終于還是找到了出口。但真實的情況很可能是,由于現實過于復雜,在找到出口前就已經餓死在迷宮里了。即使找到出口了,也有可能找到的不是真正的出口,而是另一個深淵的入口(會在未來引發更多更大的問題)。
所以,與其期望“瞎貓碰到死耗子”,倒不如靜下心來,花時間去了解事情背后運行的機制,在懂得原理之后,就能對目的地的大致位置有譜了。
這讓我想起吳軍老師經常提到的“鳥飛派”和“空氣動力學派”。說人類很早就夢想著自己能像鳥兒一樣飛翔。于是人們就開始模仿鳥類,比如將鳥的羽毛做成翅膀的樣子然后綁在胳膊上往下跳,結果自然不必多說。后來人們將這樣的方法論稱為“鳥飛派”。我們都知道,最后懷特兄弟發明飛機靠的是空氣動力學,他們根據科學原理設計了飛機,而不是簡單地模仿鳥類。
這種解決問題的方法說起來都懂,但做起來并不容易。至少對于我自己來說,我很容易就直接 copy-paste 別人的解決方案,畢竟簡單、快捷。但要知道,這種方法的弊端除了前面說的 —— 這個方案可行很可能只是因為你幸運罷了,它可行很可能是問題本身就比較簡單;如果問題復雜,變量太多,很難說別人遇到的問題和你遇到的問題一模一樣 —— 另一種更嚴重的危害就是,這樣做其實學不到任何東西。Copy-paste也許能讓我們解決眼下的問題,但是這不能賦予我們解決未來類似問題的能力(也許能提高一些搜索能力),說白了也就是這種方法論不能產生復利效應。
這是我最大的收獲。后來我遇到比較復雜的問題,往往會要求自己靜下心來研究。我還會在草稿紙上將子問題一個一個列出來,然后一個一個找答案。就像在黑暗中慢慢地牽著這些小問題的繩索往前走,一步一步來,就能找到答案。
二
很不巧,做完了上面一個 migration 的任務,我們組出現了一些人員安排上的變動,將大組拆成了兩個小組。而我被分到的小組所負責的新項目 v1.0 正好 code complete,于是我就要做一些 production readiness 的事情。說白了就是,set up infrastructure、deploy、set up monitors and alarms 等等。每一件事基本上都是手動在內部工具上點鼠標。最要命的是,因為我們要在全球 launch,所以每一個地區都要重復一遍類似的事情。當時每天工作無聊至極,一度懷疑自己工作的意義。
后來我找大老板聊,我說,你看我入職那么久,都沒寫什么code,現在又在做這些比較機械式的事情,別的小伙伴一個月能寫好多代碼…… 他的回答讓我印象很深。他說,你不能僅僅把關注點放在“我寫了多少code”上面,能不能到下一個級別,關鍵在于你做的事情的復雜度以及影響力。 就比如說這樣簡單的事情,你能不能想辦法自動化,能不能開發一個工具簡化流程,能不能更有效率地完成這些事情,能不能把經驗分享出去從而為別人創造價值?
吳軍老師在得到的專欄里經常講 “一流的人能夠把二流的項目做成一流的”。與此類似的,買土豆的故事你一定聽過。后來我就換了一種思維,不再百無聊賴地做著這些看似無聊的事情,而是主動去思考怎么樣換一種做事的方式。于是我發現,除了點鼠標,其實很多內部的工具是提供 CLI 或者 API 調用的方式來做的。這些方式往往支持批處理,特別適用于我的情形。有了這個認識,在后來的工作中,一旦我發現我做的工作比較機械化的時候,我就會寫一個 script 來自動化完成這些小任務。
我當時意氣消沉的另一原因是總覺得這些活兒不該 SDE 來做,SDE 的主要工作難道不是寫代碼嗎?從這段經歷得到的另一個收獲是對軟件工程的認識。這個認識的提煉要感謝陳天老師的知乎LIVE談談工程師常常忽視的軟件開發能力。陳天老師將軟件系統類比于人的成長,分為
我們在學校里其實只學了“嬰兒期”的工作。當然這是最重要的,也是最有意思的部分,但這僅僅是一個軟件系統最初的一個階段,我們再后來還要面臨很多問題要解決。而我只是正好錯過了產品的嬰兒期,但并不意味著我做的事情不重要或者毫無意義。后來我意識到,如果一開始的一些 configuration 沒有調好,到后面可能會面臨很重的 operations 的任務。這些都是 technical debt,而出來混遲早要還的。
當然,對于前面的類比我想補充的是,不同于人的線性的成長(雖然我很羨慕有些人越長越年輕),軟件系統發展的各個階段是相互交融的,很多情況下我們既要面臨開發新 feature 的任務,也要面臨運維和優化的任務。
三
第三件事是最近發生的,簡單解釋一下我為什么還當了會兒PM。兩個月前我們組 database migration 的任務快結束了,剩下都是一些零碎的活兒。跟我 mentor 聊,他就建議這時候要提前準備準備我們組 roadmap 上的新 project,提前自己做一些研究。可問題是,我們的PM還忙著其他事情,項目的很多 requirements 還沒有明確。我跟老板聊,也大老板聊,他們也都很支持我,說現在沒有,那么你可以去做。于是我就開始聯系別的組,做了很多超越 SDE I 范圍的事情。
這件事情也是我入職前想象不到的。入職前總是被販賣著一種焦慮,說大公司就像一個龐大的機器,而剛入職的我們就是一顆顆螺絲釘,說平時的工作哪有多少你自己發揮的東西,上面說什么你就做什么,云云。但我個人的感覺并不是這樣,因為小組非常自治,很多時候都有自己發揮的空間。翻看一年前的日記,老板當時就跟我說,千萬不要覺得什么東西是理所當然的,要想辦法打破它,改進它,要主動去發現問題,然后解決問題。我也不知道是不是其他公司也這樣,但這樣的文化的確能讓我有更多的動力去“搞事情“。
上面所說的其實還是做事要主動 (proactive),不過我還想說的是,還要去想怎么主動、在什么事情上主動。對我來說,我會在對自己職業發展上有利的事情主動,會在對整個 team 有利的事情上主動。像有一些事情,比如說突然來了個需要立即處理的事情,如果不是我 oncall,我一般會抑制住好奇心而讓自己專注在正在做的事情上。可以插一手的事情很多,我們總不能什么事都管一管。畢竟到最后,功利一點來說,能寫在 promotion doc 上面的也就那幾件事情。其實人生也如此。主動并不是要做很多很多事情,主動是要把關鍵的事情做好。
尾聲
說了這么多,我覺得我還是很幸運的。雖然之前做的事情讓我一度想換組,但現在看來我們組還是挺好的,每一個人也都特別好相處,大家也很樂意不斷改進流程和提高標準。這一年也與很多人交流過,得到過很多人的幫助(謝謝大家!)我從交流中學到了很多,比如最近就會去了解別的組的 best practice,然后借鑒到我們組。當然才入職一年,我覺得在技術/coding上的鍛煉還不夠,也還有好多問題沒想清楚(比如一個好組的定義是什么,知道那么多業務邏輯有用嗎等等),還需要更多的見識和經驗。總而言之,我覺得這是很好的開始,相信接下來也會有更多的收獲和成長。
總結
- 上一篇: 8个我希望早点意识到的学生思维
- 下一篇: 如何活着:欲望、外界、标签、天才、时间、