天天看點

矽谷工程師:關于工程師成長的一點思考

這是一名在矽谷工作的工程師朱赟在自己的微信公衆号嘀嗒嘀嗒上新釋出的一篇文章,聊到了自己對于工程師成長的一些思考。

下周公司要舉辦一個活動,找了矽谷一些比較 senior 的技術女性一起做一場分享。請來的人包括 google 的 vp of engineering,linden lab 的 director,rackspace 的 board director,medisas 的 vp of engineering 等等。我有幸代表 airbnb 去主持這次分享。主持的主要工作就是準備一些問題,以及在活動中引導每個 speaker 的分享。

在做準備工作的過程中,自己不禁也對很多相關問題有了更多的思考。

我進入職場不到四年,總體說來,應該還屬于一個初期的階段。但是這四年,從周圍的不同的人身上學習了很多東西,終身受益。這篇文章,着重談兩點體會。一是哪些外部因素會促進我們的成長;二是哪些方面是我們自身可以努力,以加快成長的速度。

先說成長的外部因素

有很多讀者問過我,矽谷的工程師拼不拼。這個問題确實不好回答,因為方差太大。不過我身邊有不少特别拼的小夥伴,每天有效工作時間都在十二到十六個小時之間。公司并沒有任何加班的要求或者機制。這種勤奮是完全自發的。每個人的情況可能不完全一樣,但是有兩個外部因素不容忽略:一是來自團隊的回報和肯定,二是在工作中獲得的成就感。

先說正面的回報和肯定。這不一定是做了多麼了不起的事情,或者是公司給了什麼特别的榮譽。但在整個體系裡,對個人的貢獻和努力能表示出認可,這在很多時候,會不斷激發團隊裡的正能量。一些簡單的例子:可能是一封 email 對某個人在面試上花的精力表示 appreciation;可能是某人解決了一次線上事故後在組會中點名表示感謝;可能是老闆與其 1:1 的時候直接表示嘉獎;甚至是簡單的,平時組裡互相調侃時大家的一句 “你太猛了” 等等。在一個互相對彼此的努力和成就表達認可和鼓勵的氛圍裡,大家更容易開心地一起進步。

再說成就感。我覺得工程師這個群體還是更容易對自己 “做了什麼” 産生自豪感,而不是自己 “得到了什麼”。是以這裡說的成就感就包括兩個方面:一是他/她得覺得自己做的事情很重要;二是他/她覺得自己不斷地有産出,完成了一些事情。

做的事情是不是重要,很多時候和團隊的上司人息息相關。之前在《論一線技術上司者的基本素養》中提到過:一個好的上司人要善于 “挖坑”,也就是定義項目,安排各種工作的優先級,決定要做什麼。換句話說就是長期的戰略眼光。有了這樣的眼光并對團隊的工作有很好的計劃和安排,把重要性傳遞給每個成員,這樣,每個成員才能知道自己做的事情的戰略地位,知道自己做的事情對團隊乃至公司的發展是重要的。此外,适當地安排一些技術分享,讓組員有機會去展示自己的工作,讓他知道其實很多人對自己做的東西感興趣,也是一個很好的手段。

而關于 “讓工程師覺得自己不斷地有産出,完成很多事情” 這一點,最近有一些切身的體會。我們組,總體說來每個人每天工作的激情很高,做事的效率也很高。前兩天和老闆聊天偶爾提到此事,他說的話我覺得很有道理:“一個團隊應該有一些稍微 aggressive 但又可行的 milestone(裡程碑),而且大裡程碑分成小的,盡可能每兩個裡程碑之間間隔時間不要過久。這樣,每隔一段時間,大家就會完成一個目标,就會有成就感。最糟糕的,就是定一些不切實際的目标,或是不斷 miss 預定的目标。這樣的話,慢慢地每個人都會開始疲憊和迷惘,很難看清楚自己到底做成了什麼。”

再說成長的自身因素

寫公衆号後,接觸到很多的工程師。我朋友圈裡面,和軟體開發、計算機技術相關的人絕不少于一千。加上身邊同僚、朋友等各路大牛,我也不好大言不慚說我成長地很快雲雲,這裡分享的僅僅是個人的看法和思考。可能也并不能對所有人、所有技術崗都适用。

我覺得技術人的成長還是要做到三個方面的平衡。哪三個方面呢?

一是思。也就是思考。你說是業務邏輯也行,說是系統架構也罷,我說的思考,是你需要不斷地去想:你到底要解決一個什麼樣的問題?你的目标是什麼?根據你的現有資源(時間、已有代碼)和限制(各種業務邏輯、已有代碼),你能做的最優的解決方案是什麼?換句話說,我們的工作還是應該以解決問題為出發點。

一個人是不是真牛,不是看他會什麼不會什麼,而是看他是不是真的能把每一件交給他的事情妥妥地做成。

二是學。也就是學習。這不僅包括流行的新語言,新工具,還包括和自己工作相關的計算機理論。而這些學習的目的,就是讓自己從技術出發,知道哪些事能做,哪些事不能做(比如 cap 理論,np 理論);知道自己想解決的問題是不是可以抽象成一個經典的問題,或是已有類似的解決方案(比如三次握手、二段送出等);知道别人走過的橋踩過的坑,自己是不是可以借鑒(比如關于并發、安全、性能),等等。

三是踐。也就是實踐。工程師的動手能力尤為重要。很多存在某種問題或陰謀的、坑人的、虐心的問題,如果沒有親身交戰過,你永遠不能體會它的奧妙。而且經常動手會增強自己寫程式的熟練度,提高自己的開發效率。另一個就是增強自己對問題的敏銳性。很多耗在 debug 和 troubleshooting 上的時間,其實從長久來看,會增加自己看問題的深度,尤其是對程式設計語言的熟悉度。很多時候,一個 junior 問 senior 一個程式相關的問題,senior 信手就解決的,其實,沒有其他,不過是因為練過經曆過。

而這三方面,如果隻注重任意兩個甚至一個方面,你就會發現自己很努力卻不見太大的進步。木桶盛水,水深總是受限于最短的一塊木闆的高度,就是這個道理。