編譯: 伯樂在線/lostmint
如有好文章投稿,請點擊 → 這里了解詳情
【伯樂在線注】:本文作者 Brett Slatkin 是在一位在谷歌工作 10 年的程序員,著有《Effective Python:編寫高質量Python代碼的59個有效方法》。
我專業從事軟件開發工作已超過 10 年的時間,我熱愛這份事業,希望有一天我會被人們稱呼為老程序員。但這一路走來,我經歷了許多可怕的事情,這些事情讓我討厭我的工作。在職業生涯早期,我曾期望有人能給我一份職場指南,這樣當遇到之前未曾遇到的事情時,我就不會感到如此的孤單和沮喪。
從某種意義上說,這篇文章就是那樣一份指南。我寫這篇文章有三個目的。
一、回顧
辨別出我們以往都曾有過的經歷。這些會幫助我們建立一些理解上的共識,可以作為判斷其他不熟悉的問題的參考點。
二、展望
辨別出一些你還未經歷過的新問題,這些問題有可能在你以后的道路上發生。我希望我列舉的這些事項,可以幫助你應對接下來要發生的事情,以及幫助你決定什么才是值得你自己去追求的。
三、幫助你理解你的團隊伙伴,相互尊重,理解彼此面臨的問題
也許你不具備前瞻性的眼界,尤其當你不是一個技術領導或管理者的時候。同樣,如果你是技術領導或者管理者,你或許已忘記當一個程序員是什么感受,無法體會程序員日常的工作狀態。我想幫助大家站到同一個立場來看待事情。
下面列舉的事項不是按優先次序排列的。這其中也包括其他人向我講述的觀察結果,并不都是我自己的親身經歷。所以如果你曾與我共事過,請不要認為某個特例就是關于你。令人感到不可思議的是,大家的經歷都很相似。
需要指出的是,還有一些其他類型但這篇文章沒有提到的可怕的事情:種族主義、性別歧視、年齡歧視,攻擊行為以及許多其他因素導致的敵對的工作環境等。我沒有能力去寫這方面的話題,你們可以從其他地方找到關于這些話題的深刻的描述和分析。
我寫這篇文章的目的是列舉出以下關于團隊軟件開發的特性。如果你認為我遺漏了什么,請告訴我。我可以想象到,這里面提及的許多點,特別是在技術領導和管理者方面列舉的事項,也適用于其他職業。請記住這些角色并不都是只有可怕的經歷,我關于這個主題的下篇文章就是講述好的方面。
軟件工程師(程序員)的煩惱
程序員就是寫代碼的人,受技術領導或者管理者領導。
有太多東西要學但沒有足夠的時間。
代碼寫得很爛。
當前的抽象不好。
換做我,我會以不同的方式完成。
注釋沒有任何意義,也從來不會更新。
沒有任何關于這個程序應該如何構建以及它是如何運行的說明。
構建緩慢。
測試緩慢。
測試碎片化。
根本沒有測試。
架構很爛,需要大量樣本文件、復雜的代碼或者混亂的測試。
管理者讓我犧牲代碼質量來趕上開發進度。
在沒有意識到的情況下依賴關系就改變了。
設備、測試和產品因地域而有差異。
糾結于某個問題或者花費很長時間去調試BUG。
我需要去修正碎片化的測試,這個程序最開始并不是我寫的。
我需要去修正其他人導致的bug或者產品問題,因為他們沒有積極地去馬上修正。
需要在某些人離開后維護他蹩腳的代碼或者系統。
有些事情應該自動化地完成,但是卻沒能做到這一點。
被我的隊友或者上司打斷。
內容切換成本。
我的上司要求我去處理緊急項目。
代碼審查時我的隊友表現地很混蛋,我感覺這是人身攻擊。
其他人沒有及時提供一個功能項但我需要它來完成工作
其他的工程師開發功能或組件太慢。
我總要去等待其他人。
有些產品上的決定我不能認同。
我只能讓干什么就干什么。
沒有自主權。
沒有人尊重我的觀點。
我非常努力的完成了工作,卻被要求重做。
產品經理們改變了對我的要求因為他們過度聽取了其他人的批評或反饋。
技術領導的煩惱
技術領導:技術領導在自己寫代碼的同時還要指導一個小團隊程序員的程序設計和實現工作。這些程序員同時還受其他人管理(不是只聽技術領導的)
產品的方方面面隨時都會出現問題。
太多的郵件和信息要去讀和回應。
工作上有疏漏。
一切都落在后面。
其他人正做出我無法認同的技術設計上的決定,但我沒有能力和權力來說服他們改變想法。
實現是草率的或者忽視了現存的最佳實踐。
事情朝我預期之外的方向發展;之后性能上的要求打破了我之前的預設。
我深切地感受到來自截止日期和從屬關系的壓力,即使下班在家我都沒法放松。
每個人都需要比我預期要多的監督,不管我多努力嘗試去解釋這個計劃的細節和文檔。
公開發起一個計劃總是遙遙無期,它總被一些非技術性的原因阻撓。
在時間和質量之間做著艱難的抉擇。
我很負責任,為什么其他人不能和我一樣?
我落后于我職責上的進度,沒人有幫我。
我不理解我的上司整天在干什么,但是我覺得他在瞎忙活。
我不理解產品經理整天在干嘛,但是我覺得他在瞎忙活。
我感覺我團隊的其他工程師嘗試通過不執行我們之前協定好的計劃來打擊我。當我向他們的管理者談及此事時感覺自己像是在打小報告。
我認為是我負責的項目被移交給了別人,但我不理解其中的原因。
我的項目團隊中沒有足夠的工程師,以至于這個項目沒法以合理的時間完成。
當我說到某件事多難完成時,人們并不聽我的,也不愿降低標準。
管理者的煩惱
管理者:管理者管理一個團隊的軟件工程師,這個人也有可能是一個技術領導,或者技術管理直接向他報告(管理技術領導)
如果不成為一個讓人討厭的人,就很難調動其他人。
似乎隨時都處于緊急狀態。
每個人都在向我抱怨。
沒時間應對郵件。
沒時間瞎扯,即使我因為沒時間社交而感覺自己像一個讓人討厭的人。
當我回到家我感覺自己很失敗,經常有這種想法。當對我很重要的人或者我親近的人想跟我談論事情,而我正要去工作,我沒時間聽他們傾訴,這時我總有深深的挫敗感。
在任何時候,我的下屬工程師或技術領導總是至少占下面情況中的一條:
想放棄。
對團隊中的某人很惱火。
對其他團隊的某人很惱火。
對自己很惱火。
以某個理由被某人冒犯。
無理由被冒犯。
因為合理的理由對代碼庫不滿意。
因為吹毛求疵或者無根據的理由對代碼庫不滿意。
對他們的項目不滿意,想去做別的,即使他們正做的事情是最重要的。
私人問題影響他們的表現,經常導致他們有消極的反應。
厭倦,很顯然如果有合適的機會他們肯定會跳槽。
其他的管理人員的工作就是安排會議。他們不寫代碼,他們就是靠說來影響事情。所以我被拉進了一堆沒用的會議。參加這些會議看起來就是在浪費時間。
代碼寫得少感覺很差勁。我感覺我正慢慢失去棱角。有時我很難做出成績。我不得不改變我的價值觀。從幫助他們變得更富創造性上尋求滿足感感覺很做作。
我將失去做重要決策的機會,事情將朝不好的方向發展。
這個項目就要落后或者失敗了因為我把它委托給了錯誤的人選。
我感覺其他管理者嘗試用政策打擊我。
我面臨的最大問題是信任危機,我無法從其他人那里得到支持和建議。
工程的CTO/VP不知道在干嘛。他們似乎沒有貢獻任何價值。他們問些無知的問題而且通常很無禮。
我的下屬工程師把時間浪費在無關緊要的事情,但是我不敢去阻止他們因為我怕把他們推開,導致他們放棄。
每個人都或多或少不認同我管理團隊上的做法。
看完本文有收獲?請分享給更多人
關注「伯樂在線」,看更多精選 IT 職場文章