實習小記
明天就要回學校了,不知不覺在 PingCAP (一家研發分散式資料庫的初創公司,如果你不知道的話) 已經實習了半年多了,在這裡記錄下自己半年來的一些實習經歷和思考。
經常會在知乎上看到一些答主介紹自己的實習情況,關鍵詞經常涉及零食、交通、健身、租房……之前一直覺得這回答信息好豐富,看得很投入。但是等到自己真正實習之後,才發現,這些回答雖然內容比較多樣,但是似乎缺少了一些核心的內容,比如如何寫好工作上的代碼、如何成為一個合格的實習生、對於工作的思考等等。
當然,我自己並不是一個好的實習生,再次強調只是分享一些自己實習的經歷和思考。
我在 PingCAP 的 TiKV(分散式存儲引擎) 組,職位是分散式存儲實習生(卧槽,這個頭銜似乎有點厲害),按照知乎上的前後端劃分,應該屬於 後 後端。日常工作主要是提升 TiKV 的性能以及維護其穩定性。工作的關鍵詞有:TiKV, RocksDB, Raft, Rust, C++。
初到 TiKV 組,第一印象就是 彈性工時 和 遠程工作 在 TiKV 被完美踐行了。就彈性工時來說,有8點多到公司的,比如我的 mentor;有下午來公司的,比如我司「亞洲第一 Rust 程序員、PingCAP 周杰倫」 jay。(這兩個外號簡直無敵)就遠程工作來說,我們組10多個人常年分布在 >= 6 個地點工作。是不是感覺很有意思??。
另外一個關於我工作比較有意思的點就是不需要接觸產品經理,所以並不需要處理一些奇怪的需求,每個任務都是可理解的,這應該是作為後後端程序員的好處吧。
我覺得實習就是在一次次嘗試中去學會做事的過程,這個過程並不專屬於程序員,適用於任何行業。對於程序員來講,做事也不並簡單的意味著寫代碼,而是同事之間的溝通、寫代碼、測試、debug、review 代碼這一系列的過程,每個環節都必不可少。
就具體工作來說,這半年多來的總結就是一句話:以低耦合的方式對現有系統引入高聚合的新模塊。這裡面有很多細節,和在學校寫代碼是不一樣的,比如在我自己的項目里,「指針在手,天下我有,這塊地址我說是 int32 它就不能是 int64」。
但是在公司里,代碼應該是越簡潔易懂越好,並且需要配合適當的注釋,而不為了一些沒有太多實際意義的性能提升進行一下炫技;使用的數據結構越簡單越好,儘可能簡化問題的處理;合理的代碼架構非常重要,每個模塊都需要合理安排,為什麼放在這一層而不是上一層或者下一層;每個參數的命名每行代碼的書寫都需要進行仔細的考慮;測試需要覆蓋每一個可能出現錯誤的點;和同事需要進行有效的溝通,你的想法Ta的意見都很重要。
對搞資料庫的人來說以上內容就更加需要注意了,要不然極有可能出現以下情景。小明買了一台 IpHONEx,付完錢了,但是在資料庫中訂單記錄沒了,這合適嗎???小明銀行卡里的錢在資料庫里無緣無故少了1000,他能接受嗎;要是多了1000,銀行能接受嗎, 能嗎?開個玩笑??。
別問我為什麼知道,現在已經患上「code review」恐懼症了。寫了3天的代碼用3個禮拜 review (大家都會有多項任務同時展開,所以並不代表3個禮拜什麼都不幹光 review 了 ??)。這其實反映了好幾點,完成功能的速度得到了很大的提升,放在以前很可能需要寫一個多禮拜;還有就是代碼設計能力不夠,代碼質量不夠高;最後就是 code reivew 真的好嚴格,相應的 review 質量很高。有時看到 review 意見,內心 os 「這 tm 都要改,這 tm 還要改」,改完後內心 os 「大佬大佬」,確實同事個個能力都很強。
明天就要回到遠程實習的狀態了。回顧半年多來,遇到了很多困難,在同事的幫助下,解決了不少的問題,同時自己也得到了很多的鍛煉(這段話好催淚)。
推薦閱讀:
※設計數據密集型應用-DDIA中文翻譯
※手把手教您解決90%的自然語言處理問題
※深入淺出hbase和bigtable
※七周成為數據分析師:SQL,從熟練到掌握
※循序漸進學習如何在 MariaDB 中配置主從複製