[翻譯] 領導專案走向成功的資深工程師之路

Denny
The Bayesian Trap
Published in
7 min readSep 1, 2017
source: https://9gag.com/gag/aDzgNWO

原標題:Ten Principles for Growth as an Engineer
原作者:@daniel.heller

看到覺得太有感觸就試著翻了,裡面每個建議感覺都是從血淚中提煉出來,在經手過幾個 Project 跟產品歷練的軟體工程師一定會更有感覺,看完後不免對著鏡子問自己:「你是 Senior Engineer 嗎?還是工作比較久的垃圾而已?」

「嗚嗚嗚嗚⋯⋯」

這是我第一次翻譯文章,如果有什麼辭不達意的地方請見諒並告訴我,有些地方我並沒有逐字翻,主要是意譯,還是推薦各位能去看看原文。

在二月的時候,原本在我團隊中的一位工程師轉調到另一個新單位去。在某一次我們的 1:1S*(註1)中,我提到他最近在專案管理上表現得很好。而這位工程師的回答讓我印象深刻,他說他最近對自己未來的方向有了一個頓悟;他下定決心除了 code 之外,還要為他工作上的所有事「負起責任」(註2),如此才能確保他的專案能夠成功。在替他感到開心之餘,卻也不免因為想到自己的作為而感到洩氣——我一直認為對於年輕的工程師來說,「Ownership」是最重要的 ,但身為一個主管的我卻讓這個工程師自己去發現這件事情,而不是提早告訴他這個道理。

所以我決定寫下一這篇文章總結這十幾年來的工作經驗,這些習慣能將「新手軟體工程師」的水準從業餘提升到專業,a.k.a「一個只會修 bug 的工程師路人甲」到「領導專案走向成功的資深工程師」之路。

我深信技能是可以被「教」會的,但就我而言,我卻在矽谷花了十年用最困難的方式才學會這些你待會要在下面就能讀到的想法。在開始之前,先簡單介紹一下自己在這十年裡面做了什麼事情。我在某間在 Cupertino 的水果公司搞 Kernel 搞了六年;後來我丟下之前的所有包袱加入一間新創公司一年,全心全意去追尋我的新興趣——分散式系統,後來這間公司成了獨角獸順利被收購(AppDynamics)。接著我轉職管理階層,在 Uber 管超過 20 人的團隊;但故事的最後,我還是回到了老本行, 回到 Programmer 的這個崗位上。希望讀完以下這個可能還不夠完整的清單後,能讓你別犯下相同的過錯;我是真的希望有個人能在我 22 歲時就告訴我這些事情。

  1. 理解商業價值 (Reason about business value): 像公司的 CEO 一樣去理解商業價值。瞭解你的工作對於公司的價值,並且學著對更多 coding 以外的事情負起責任,像是產品的質量、功能的豐富性,以及速度。(*註 3)你的工作絕對不只是 coding 而已,一位好的軟體工程師的工作應該是做出能讓公司邁向成功好決策,而這件事的前提是你能明白哪些事情重要、哪些不是。
  2. 別讓自己停滯不前 (Unblock yourself): 學著永遠不要接受任何桎梏;找到方式去突破阻擋你進步的所有人事物,不管是用嘴砲的、自我提升,或是用你的技術來發揮創意。再強調一次,你的工作不僅僅是把 code 寫好然後就閉上眼祈禱其他事情會順利到位;你的工作是搞清楚你到底要怎麼透過你的努力來創造出價值來。
  3. 主動 (Take initiative): 在軟體開發中,最常見的誤解就是以為會有一群大人幫你做決定、幫你負責任,甚至還會幫你擔起團隊以及公司的使命。不要再等別人來叫你做事了,想想到底有什麼該做的,想到就勇敢說出來吧!管理者不可能靠自己想明白所有事情,他們需要仰仗各位工程師的聰明才智以及創意啊!
  4. 提升你的寫作技巧(Improve your writing): 好的寫作技巧除了讓合作更順暢之外,對於說服別人、通知、教學也都非常實用。記得誰是你的受眾以及他們知道些什麼。寫的清楚、精確,最好總是能加上 tl;dr 在最上方用精簡的文字總結一下你到底想表達什麼。(*註4)
  5. 擔起專案管理的責任 (Own your project management): 瞭解各個 Project 間的相依性(最好能畫出 Dependency Graph 來),確定每個關鍵的部分都有人為其負責。為每個計畫以及專案的狀況寫下摘要,並且主動通知相關的人計畫內容以及進度,練習去安排會議吧!這些跟專案管理有關的所有事情,都能訓練你去掌握更大的專案,同時也是為你的領導能力在做準備。
  6. 替你自己的學習負起責任 (Own your education): 在你專業的領域追求卓越。你的職涯應該是一段不斷向上發展的旅程,但是除了你之外沒有人能擔保你能一直成長。所以,找到一個好的方式讓學習成為你日常生活的一部分。(就算是一天只有五分鐘也沒關係); 找到值得你讀的 mailing lists、papers 或是書,把你平常工作上看到的技術文件從頭到尾讀一遍。關鍵在於「持之以恆」,建立好習慣能確保你的職涯不斷提升。
  7. 精通你的工具 (Master your tools): 編輯器、debugger、compiler、IDE、Database、network 工具,還有 Unix 指令,熟練上述這些東西都能讓你自己的實力有顯著的提升,也可能是提升開發速度最好的方式。當你遇到一個新的技術或是指令時,比你以為你必須的再鑽的深一些;你會在這些經驗中一次又一次學到讓你受益匪淺的技巧。
  8. 主動溝通(Communicate proactively): 經常並且有組織地去跟你的合作對象溝通,建立起善意以及互信,習慣性地去讓專案中的每個人知道目標、進度,以及所遇到的障礙。除此之外,跟同事互相分享知識,也能創造一個友善的學習環境。最後,在會議中明智地發言。(*註6)
  9. 找尋合作機會 (Find opportunities to collaborate): 優良的合作關係在職場上是一個好槓桿,同時也能提升你在組織中的能見度。要讓你的工程師生涯更進階一些就得發揮影響力,這在某個程度上來說就是要在你的公司裡面建立起屬於你自己的個人品牌。Cross-functional 的專案(*註5),以及專業、互相尊重的合作兩者同樣重要。
  10. 當個可靠的專業人士 (Be professional and reliable): 思想跟行為都要像個專業人士。有備而來並且準時地參與會議,除此之外在開會時還要夠專心。對那些你答應要完成的事情給出交代,在事情出錯(事情總是會出錯)的時候,主動的去進行溝通;保持冷靜地帶著尊重說出你的反對意見;最小化你自己的抱怨;讓身邊的人向上提升,而非往下沈淪;所有人都會欣賞一位真正專業的人;最後也最重要的是,這是一件對的事,你應該去做。

註1: One-on-One meeting,通常是主管或老闆定期找員工一對一單獨談一下最近工作的狀況,讓員工表達自己的建議或問題。就以往經驗來看,有好好執行的話對於團隊的幫助是巨大的,可以參考這篇

註2: 原文是 Own,對應到後面的 Ownership ;只是翻成擁有很奇怪,直接說 Own 感覺很像假 ABC 我不喜歡 XD 而工作上的「Ownership (所有權)」指的就是為事情負責、做決定,所以這裡才這樣翻譯。

註3: 這裏的速度可能指的是開發速度或是 Performance,但更可能指的是公司成長或運轉的速度;因為開發速度以及 Performance 是軟體工程師本來就要注意的事情。

註4: tl;dr = too long, didn’t read 作者原意應該是希望不管你想表達什麼,最好都能有個精簡的總結能讓讀者看懂,這點非常非常的難。

註5: Cross-functional 指的不是團隊中的每個人都十項全能能做所有事情,而是不只負責自己工作,還能 cover 其他部分。比如說你可能是 Java 高手,但願意幫忙寫一些 Test 以及學習當個 Scrum master,而你旁邊的肥宅可能很會寫 php,同時熟悉 Server 的維運。(Is your team cross-functional enough)

註6: 明智、發言,兩者一樣重要。

翻譯結束。

你可以 follow 我在 medium 上的 publication: The Bayesian Trap,除了想法之外也會有一些學習心得或筆記,偶爾也會有奇怪的東西。

--

--