要成為一名高效的程式設計師,光技術牛X 可不夠。除了技術,一名優秀的程式設計師更需要關注其他的一些方面。我認為最重要的就是和專案組其他人溝通的能力。無論專案是做什麼,你都需要通過溝通把事情做完,比如:
- 作為一個開源專案的貢獻者,你需要合作審查別人的補丁或者讓其他人審查你的補丁,你需要解決使用者提出的問題,你需要和新使用者溝通功能,和其他提交者或共同維護者一起做計劃。
- 作為一個自由職業者,你需要同現在的和潛在的客戶進行溝通。你也需要和專案組的其他程式設計師、設計師和測試人員溝通,你還需要明確每個負責人對應負責的專案。
- 當你在一家公司工作,需要協調你的團隊和其他團隊的程式設計師,和你的經理特別是和專案經理進行溝通。
程式設計師和專案經理……通常不會一見鍾情
和專案經理的關係時常會出現一些狀況:作為程式設計師我們很容易去抱怨他們。畢竟他們總是企圖讓我們為了一些改動而在週五的時候加班,也是他們一直逼迫我們去做一些根本說不通的功能。
但我認為專案經理在一個成功的團隊中發揮了至關重要的作用。只有團隊成功,我作為程式設計師才能成功。出於這個原因,我認為和專案經理保持很好的關係,才是交付成果的關鍵。我很幸運可以和那些很棒的專案經理合作,他們給予我很大的幫助。特別是我在 TripAdvisor 工作的時候:我在那裡遇到的專案經理都很棒。但我還時常會和其他程式設計師一起抱怨他們 :)
但我知道正是由於他們的工作,我們才可以沿著正確的方向前進,快速地釋出功能,並在專案上和公司的其他團隊展開合作。
所以我深信專案經理對公司的影響力舉足輕重。但這種影響可以是極其負面的或是非常積極的。我並不瞭解一個專案經理所有的職責,而且我也相信有很多事情他們並沒有與程式設計師溝通。我只是在想專案經理應該如何同程式設計師溝通,以及程式設計師對專案經理有什麼期望。
在我看來,一個專案經理如果做到以下五件事情,就可以幫程式設計師提高效率。
1) 溝通業務重點,思考技術重點
我們都在超負荷工作,我們有一堆希望可以在本週完成的工作。作為一名程式設計師,我需要評估每項要完成的工作所花費的精力,以及它們之間的關係。也許某個重構可以簡化一項功能的開發,因此對這些工作做相應的排序是非常合理的。某項工作可能需要兩週,而其它三個功能每個只需要半天就搞定了。我當然希望可以先完成它們。
但技術方面只是一方面的考量:對這些工作進行排序,需要了解業務的重點。什麼功能對客戶最重要?什麼功能對收入有直接影響?這對我們決定集中精力先交付什麼相當重要。我認為專案經理應該和程式設計師經常溝通專案的優先順序,並且專案經理也得明白:他需要對業務方面和技術方面的專案優先順序都加以考慮,才能決定我們下一步的工作是什麼。
有時候技術的優先順序也是很重要的:不能只考慮業務優先順序而忽視它們,因為如果這樣做會影響我們交付軟體的質量,進而影響到業務。
2) 提前讓開發者知道截止時間
曾幾何時你突然發現有件事情需今天晚些時候就要交活?或者昨天的時候有人承諾客戶會拿到一個新的版本?它們不是驚喜,而是驚嚇。坦白來講就是一旦出現異常我們需要立刻處理。如果應用程式掛了的話,公司每分每秒都在賠錢:所以無論你手頭上有什麼事都要停下來,把它解決掉。比如說發現了一個棘手的新的 bug,或者存在安全漏洞需要儘快解決等等。現實生活中很多事情都不是計劃好的:我們只能見招拆招。
但不能每件事情都這樣,我們不能總是進行應急驅動開發。這是很差的實踐。大家需要討論截至日期並達成共識,開發就可以按計劃行事。程式設計師通常看不到整個專案的全貌,但專案經理又何嘗不是呢:他們會忽視技術的方面,但如果不能提前知道這些,是不可能在截止日期前完成工作的。所以親愛的專案經理們:一旦你們知道截止時間就馬上告訴我們。
提醒:我所說的“讓程式設計師知道截止時間”,是指真實的截止時間。專案經理做的最爛的事情就是給出一個假的、自己強加的截止時間。有的專案經理有自己的小算盤,他們給自己留有一定的時間餘量,比如他告訴開發者客戶希望 1 號交付,但實際上他和客戶承諾的日期是 15 號。他們這麼做可能是因為我們經常晚交付東西,但是……你猜怎樣?程式設計師早晚都會發現,並認為這些無謂的壓力和長時間的工作都是拜你的謊言所賜。你猜他們會有何反應?
3) 溝通管理
我知道這聽起來讓人不爽,但程式設計師或多或少都會有些小缺點。其中一點就是開發者的溝通方式……與眾不同。他們傾向於直言不諱。這樣的性格很適合與機器一起工作,但是對客戶也這樣就會出問題。是的,客戶提供給你的 SDK 是不是看上去不夠……優化。是的,如果我們給一群猴子,提供一瓶廉價的威士忌和一本手冊,上面記載了所有軟體工程上的最差實踐,他們也就做成這個樣子。好了,還是不要讓客戶知道這些。專案經理需要重新措詞再告訴客戶。
每當看到專案經理追著客戶要他們確定需求的時候,或者是他們與其他團隊的專案經理交涉,說服其他團隊回覆我們提出的需求的時候,我都感到異常欣慰。是的,我們很迫切地需要回答,但是往往一個同樣的需求我們轉了三遍,都好幾周了還沒有回覆。
一個出色的專案經理會提供給我們所有工作中所需要的資訊,並且可以確保所有參與的團隊都可以順暢地溝通。我們很可能沒有意識到他為此所付出的努力。
4) 讓程式設計師遠離麻煩
公司裡壓力很大。壓力來自方方面面,所以需要對它進行管理。作為一名程式設計師,我們需要應對很多的技術難題:一個很難復現的 bug,一個和執行緒同步有關的偶發問題,一個改動很大的框架釋出,一段不可靠的、無法通過整合測試的基礎程式碼。我們有足夠的理由感到壓力山大。
專案經理也一樣:他們需要比我們處理更多的內部規章,參與功能開發的討論,還要積極為團隊爭取資源。他們會和其他團隊展開競爭,也要接受客戶對他們的咆哮發洩。對此我深表同情,但如果專案經理把這些壓力轉嫁到程式設計師身上,那我們這些程式設計師就會成為板上魚肉,任人宰割。我們會受到兩方面的壓力,一方面是現實的技術難題,另一方面是瘋狂的客戶和辦公室政治。這些重擔太沉重,所以我們需要達成一個共識:技術上的問題,我們會負責搞定。而其餘的問題——雖然我同情專案經理——但那些都是你們的責任。
5) 確保我們沒做不相關的工作
想要開發對公司產品影響很少的東西是非常困難的。儘管對於那些喜歡長時間開發很酷的東西的人而言,會很享受這一點,但是這對你的職業生涯很不利。如果你一直開發不相關的東西,你很難被升職加薪。相反如果你做的事情可以對於業務開展非常有意義的話,好處是顯而易見的:它為你提供額外的動力,容易讓人注意到你,也更容易在組織內獲得更多的資源和支援。
開發一個不相關的功能並被不是最糟糕的事情。最慘的是工作的專案在完成前或完成後馬上被丟棄掉。想象一下你的努力和汗水就這樣被丟棄掉。感覺很差,不是嗎?所以最好和那些不會把你帶入這種境地的專案經理合作。
結束語
我認為專案經理會為我們擋掉很多問題。他們是我們和客戶以及公司其他團隊的介面。他們保證我們為客戶提供有價值的工作。他們來統籌大局,而我們只需要關注下一個功能的開發、產品測試和交付。
事實上很多時候程式設計師認為專案經理沒什麼大不了的。我相信大多數程式設計師都會低估專案經理。我們只是不理解他們的職責。但是請相信我,如果你和優秀的專案經理和不那麼棒的專案經理都共事過的話,你肯定能發現差距的。
我希望程式設計師和專案經理都可以從良好的關係中受益。我可以告訴大家,這是有可能的。因為我現在就和一位專案經理住在一起,沒錯,她就是我的女朋友 :)
作者居然在末尾炫耀女朋友,是可忍孰不可忍,小編要強制插入廣告:
還單身???來看看「物件導向」唄:http://date.jobbole.com/?sort=latest
祝好運 ~~~^_^~~~
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!
任選一種支付方式