现代软件工程讲义 5 项目经理 Program Manager
在一個軟件團隊里, 不同的人有不同的投入, 我們在 豬,雞和鸚鵡 的故事里已經說明了. 不同的人還要在團隊中擔負不同的任務, 我們也要講一下.
開發人員 (大部分內容在:?? 現代軟件工程講義 2 工程師的能力評估和發展)
項目經理?? ( 這篇博客 )
測試人員? ( link )
?
?
0. PM
我碰到的不少大學同學都有一個想法 - 先做幾年技術, 然后做管理; 也有一些同學說 - 我技術不行, 希望直接找到一個管理的工作, 就像PM 那樣。
PM 的M 就是 manager, 但是 P有這幾種: Product Manager, Project Manager, Program Manager, 在不同的行業和公司它們的作用不一樣。 下面說說微軟的PM - Program Manager:
1. 微軟PM 的來歷
大部分公司的項目經理叫 Project Manager, 微軟的經理叫 Program Manager, 這有什么本質的區別么?
微軟曾經也是一個創業公司, 兩個創始人都是 dev, 招聘的新成員也大多是像他們一樣的開發人員, 這其中就有一個叫 Charles Simonyi 的超級程序員 (當然還有像 Steve Ballmer 那樣的超級銷售人員, 這里按下不表)。
?
?
1974 年, Charles Simonyi 在Xerox PARC 開發了 WYSIWYG (所見即所得) 的字處理軟件 Bravo, 成為 PARC 的 Alto 個人電腦的重要應用軟件。?
作為參照:
??? 同一年, Steve Jobs 從印度回來, 加入Atari 公司打工, 因為其他員工不能忍受他的傲慢態度和衛生習慣, 他只好上夜班。
??? 同一年, Bill Gates 在哈佛大學讀 2 年級, 第二年, 他看到了個人電腦的曙光 – MITS Altair 8800, 于是退學創立了 Microsoft.
?
1981 年, Charles 加入了微軟公司, 領導 Word 和其他辦公軟件的開發。?? 很多開發人員聚集在一起, 怎么工作呢?? 如果大伙做的是搬磚的體力勞動 (我很喜歡用搬磚的例子),? 那么在一定限度內, 人員的增長和項目復雜度的增長是線性的關系; 程序開發就有些不同, Charles 發現項目管理的復雜度似乎是和人員數量的平方成正比。? 一個團隊里有 4 個成員, 就有 6 種雙向依賴和交流的途徑, 然后增加一位新成員, 就要增加 4條新的雙向依賴交流的途徑。 對于 N 個成員的團隊來說交流的途徑總數是 n * (n-1) /2, 這種 N 平方的增長意味著這樣的交流對人類來說是不可持續的。
?
?
怎么辦?? Charles 想到了一個辦法 - 他提議把程序員分成 Master Programmer (MP) 和 Slave Programmer (SP), MP 和其他成員交流, 了解需求, MP 只寫抽象的偽代碼, 或者對功能的描述; SP 根據MP 的文檔, 實現具體的功能。 SP 只用和 MP 交流。? 這樣不就大大減少了交流的成本么?
這個想法在理論上是好的, 但是在實際上, 沒有人想做 Slave Programmer, 剛加入團隊的成員問 - 為什么我們不能當 Master Programmer?? 這次改革最后不了了之。
?
但是, 隨著軟件復雜度的提高, 用戶需求的多樣化, 市場競爭的日益激烈, 光有程序員和銷售人員是不夠的。 我們需要專門人才來做下面的事:
怎么讓軟件變得可用 (usable), 有用 (useful)
銷售人員把顧客的需求直接告訴開發人員, 但是開發人員往往聽不懂。 我們需要專人來把市場/銷售人員那一套 MBA 的套路翻譯成程序員能懂的功能說明 (spec)?
一個產品團隊要做很多事, 這些事往往是程序員不愿意花時間的:
誰都不愿意做, 誰都沒有能力做好, 大家寧愿盯著屏幕寫代碼。? 怎么辦呢?? 這時候有另一個聰明人出現了, 一個叫 Jabe Blumenthal 的程序員提出了 Program Manager (PM) 的頭銜, 并成為了微軟第一個 PM (1984年, Excel 團隊)。 和不少早期微軟公司員工類似, Jabe 從微軟退休, 當中學老師, 做公益活動去了。 (鏈接)
PM 做什么呢??
2. PM做開發和測試之外的所有事情
有些同學說,我寫的代碼都不用測試, 我真想不到除了開發和測試之外,還有什么事情可做。? 我們看看 微軟公司有哪幾類的PM:
- 有做功能設計的PM; 有些需要很深的計算機科學各個分支的專業知識 (如 Visual Studio 各種語言,框架, TFS 的項目管理, SQL Server, Windows Server, Windows Azure,?Bing Search 等團隊的PM );?
- 有些需要對商業和客戶很強的了解能力 (如 Office 應用軟件的PM );
- 有些需要廣泛的經驗和知識面, 商業拓展能力 (如 MSN 部門的 PM);?
- 有些是驅動流程的PM, 例如推動幾百人的團隊完成一個版本的開發, 又如保證 Windows Phone?在幾十個不同硬件上能發布;
- 也有專門深入某一領域的 PM (如國際化/本地化 localization/globalization);?
- 還有和研究人員合作, 琢磨前沿技術如何能進入主流產品,做技術轉化的 PM。
?
Program Manager 和一些公司的 Project Manager 的區別:
?
| Project Manager | Program Manager |
| 是團隊的行政領導, 帶領大家在項目中工作。 | 和大家平等工作, 推動團隊完成軟件的功能。 |
| 通常是團隊和外界打交道的唯一代表 | 一個團隊可以有很多PM |
| 對項目的功能有最后的決定權 | 和其他團隊成員一起形成決議 |
| 管事也管人 | 管事不管人 |
| 不一定做具體工作 | 一定做具體工作 |
?
在別的團隊中, 也有產品經理的職位, 例如這個博客 (和書) http://iamsujie.com.?
問: 既然PM 這么厲害, 為什么不讓他們領導開發人員和測試人員, 這樣 PM 工作起來不就是更有利了么?
答: 首先, 我們認為好的產品設計是在平等討論 (甚至爭論) 的基礎上產生和完善的, 如果討論的一方同時又是另一方的老板, 則無法進行平等和無拘束的討論。
其次, PM 的產品是 spec (規格說明書), PM 要憑自己的能力, 把用戶的需求展現成 dev/test 能夠了解, 能夠執行的語言, 從而贏得同伴的信任和尊敬。 如果PM 同時又是其他人的老板, 則不必寫太好的 spec, 用命令即可說服別人。 再次, PM 不一定是很好的行政經理, 硬把管理不同專業的 dev/test 的任務加到PM 頭上, 反而會壞事。 關于這個問題, 這里也有一篇討論.
?
問: PM 最大的, 最獨特的貢獻是什么?
答: 保持團隊的平衡。
?
一個軟件產品幾乎做不到同時又多又快又省。 在別的領域也類似,? 中國在大躍進期間提出了 多快好省 的要求。 最后只得到一個 “多” -? 人多。 (參見 軟件工程的估計)
?
大部分優秀的團隊可以做到兩個:
多, 快, 但是不省
多, 省, 但是不快
快, 省, 但是不多
PM 要帶領團隊選擇哪兩個是最重要的, 哪一個是可以犧牲的。
?
還有許多不那么優秀的團隊也許勉強可以做到一個:
多, 但是不快, 不省
省, 但是不多, 不快
快, 但是不省, 不多
?
當然還有一些團隊一個目標也達不到, 中途作鳥獸散了。
?
問: 我們團隊有幾個程序牛人, 參加過 ACM 比賽什么的, 他們寫的程序都不用測試, 為什么還要 PM? 如果PM 也來開發, 是不是項目進展更快?
答: 程序 和 軟件有區別,? 請看:? http://www.cnblogs.com/xinz/archive/2011/05/22/2053838.html
???? 其次,在下面的圖中, 團隊有很多劃船的牛人, 還有一個拿著話筒的舵手. 如果這個舵手也開始劃船, 后果會怎么樣?
?
?
可能小船的速率會快一些, 但是小船的方向, 穩定性會出問題。 船快了一些, 但是劃槳的隊友很累, 船不穩, 而且最后到了一個計劃外的地方,你愿意么??
?
在軟件行業發展的最初, 軟件都是為維持機器本身的運作服務, 或是做科學計算, 這時候也許看不出 PM 的作用。隨著產業的發展, 軟件應用的深度和廣度, 軟件的復雜度, 軟件團隊的復雜度極大地提高了, 這時候我們需要一些人來起著溝通, 交換, 影響, 潤滑, 討價還價的作用 - 就像商業社會的金錢一樣 – PM 就是這樣的角色。?
?
問: PM 文化的盛行有副作用么?
答: 任何方法或文化都有優點和缺點,? PM 太多了以后,? 由于大部分決定都是經過平等而反復的討論協商折中的到的, 一個后果是 “design by committee”, 一些產品不能很快跟上市場變化, 在需要個人特色的方面, 如設計/UI, “committee”設計出來的東西大多中規中矩, 但是很多方面了無新意。
牛人主導的項目,往往有大起大落,在PM主導的產品中,“不犯大錯”成了一個特點,微軟的很多產品在長期的競爭中, 靠“不犯大錯”,從第三版開始,趕上并超越對手。這也是一個了不起的能力。 [注8]
?
Scott Berkun 也談到了一些副作用:? http://www.scottberkun.com/blog/2009/the-lost-cult-of-microsoft-program-managers/?
3. PM 的能力要求和任務
成為一個團隊的PM, 需要哪些能力呢?
學習能力: 在一個新領域中能很快上手
觀察理解能力: 能理解用戶, 站在用戶的角度上考慮問題, 觀察發現用戶不善于表達的需求, 觀察團隊成員的言外之意, 老板/客戶/利益相關人的弦外之音.
????????????????????? 什么是同理心? 就是能夠理解別人的處境, 心理, 動機的能力。 西諺有 – put yourself in other people's shoes, 正是此意。
分析管理能力: 每天項目中發生的事情千頭萬緒, 能夠分析出重點, 找到優先級, 做決定…
一個項目和個人一樣, 每天都會碰到各種問題:
??? 重要而緊急的???????? - 網站崩了!??
??????????????????????????????? - 程序員二柱突然說他要離職!?
??? 重要而不緊急的????? - 按照流量和內容的發展趨勢,? 三個月后, 目前的架構似乎撐不住, 但是現在還湊合…?
???????????????????????????????? - 程序員們都不寫文檔, 他們三個月前說等忙過之后會寫的, 但是…
??? 不重要而緊急的????? - 老板的老板問到了項目的進度!? 要寫一個PPT,請若干人征求意見
??? 不重要且不緊急的?? - …
PM 如何處理這些事情呢?
?
銷售能力:? 能滿懷激情地向用戶兜售產品, 向團隊兜售希望。 請看 Steve Ballmer 的銷售能力展示.
交流能力, 處理沖突的能力: 其他角色碰到沖突一般會來找 PM. PM 也要鼓勵團隊成員保持斗志。
一定的專業能力: 寫代碼, 玩轉Excel, PPT, Visio, 甘特圖, 會PS, 有文字功力, 能寫有人讀的博客, 總得有幾招絕活吧!
轉換角色的能力:?? 一個PM 能玩轉很多高技術的工具, 但是當工作需要, 她能突然把自己變成一個完全不懂技術的菜鳥用戶,從用戶的角度來看問題 …
自省的能力: 一個PM 做第一個項目的時候可以拍腦袋定工期, 拍胸脯打包票, 最后拍屁股走人 ?(誰沒年輕過呢?)。 但是失敗之后要有自省和自我改進的能力 (看這個例子)。
?
在生活中能不能鍛煉PM 的能力呢?
可以,?裝修房子,?組織一個大型活動, 等等。?
在一個項目中, PM 的具體任務是什么呢?
帶領團隊形成團隊的目標/遠景, 把抽象的目標轉化為可執行的, 具體的, 優美的設計。
管理軟件的具體功能的生命周期 (需求/設想/設計/實現/測試/修改/發布/升級/遷移/淘汰)。
創建并維護軟件的功能說明書 (specification), 讓它成為開發/測試的及時準確的指導, 而不是障礙。
代表客戶和用戶的利益, 主動收集用戶反饋, 預期用戶新的需求。 協調并決定各種需求的優先級。
分析并帶領其他成員形成對缺陷/變更需求的一致意見, 并確保實施。
帶領其他成員確保項目保持 功能/時間/資源 的合理平衡, 跟蹤項目進展,? 確保團隊發布讓客戶滿意的軟件。
收集團隊項目管理和軟件工程的各種數據, 客觀地分析項目實施過程中的優缺點, 推動項目成員持續改進, 從而提振士氣。
?
成功的PM 如果得到團隊成員的支持, 會是什么樣?
成為項目流程的主人 - 驅動流程, 會議, Scrum, 進度
代表團隊, 向上級/伙伴團隊/客戶/市場部門 報告項目進展
團隊成員都樂意和你交流,? 你贏得大家的尊重
你不用自己寫一行代碼,也同樣可以積極地影響項目和產品
?
PM 如果得不到到團隊成員的支持, 會是什么樣?
在各種會議或流程中浪費大家的時間,? 發一些大家不讀的 “Status Mail”.
不能凝聚團隊, 形成共識
對團隊的狀態不了解, 也不能有效和準確地向有關方面報告團隊的情況, 獲得支持,但偏偏還不斷打擾團隊成員,糾纏一些過時的問題。
對項目和產品造成負面的影響。
PM 還會和團隊成員因為對投入的認識不同而產生誤解, 參考 豬,雞和鸚鵡,當隊友期望你是“豬”的時候 , 你偏偏當個“雞”;當隊友期望你作為“雞”而搞定某一事情 , 你卻偏偏當個飛來飛去的”鸚鵡”!
?
4. PM 們的故事
講了這么多條條框框, 我們還是講幾個故事吧:
?
A) 是不是所有的好功能都是由PM 主導, 一步一步根據用戶需求,按照用戶場景設計,然后可用性測試等等步驟之后得來的?
功能本天成,妙手偶得之——一個來自微軟的故事。[注3]
約摸在1985年,微軟的一個叫Steve Hazelrig的工程師正在寫Mac Excel 版本的打印功能,那時候激光打印機很貴,而且離辦公室也不近。他懶得經常跑到打印機那兒取打印紙,檢查打印效果,就寫了一個小程序,把要輸出到打印機的圖像顯示在屏幕上,還有一個放大鏡功能可以把局部放大以檢查每個像素的位置及效果。這時一個PM路過看到了這個小工具,說,這么酷的東西,為啥不做成一個功能呢?
所以后來微軟的編輯軟件都有“打印預覽”這一功能。然而,用戶們并沒有正式地要求這一功能。
B) PM 怎么說服聰明的同事 這個故事在 [注4, 注5] 中都提到了. 在Macintosh 研發的過程中, 由于計算能力的限制, 計算機的圖形顯示非常緩慢.? 一位聰明的程序員展示了他的新算法, 能很快地畫圓形和橢圓. 當他得意地展示給 Steve Jobs 看的時候,? (作為一個不懂編程技術的 PM,Steve 應該表示仰慕才對…) Steve 看了之后, 反問 - 你能繼續改進, 讓圓角的矩形框顯示速度加快么??? 程序員說: 這個太難了, 也沒有必要.? 橢圓不是挺好的么?? Stevel 為了說服同事, 建議兩人到外面散步, 然后指出現實世界中的各種告示牌都是用 圓角的矩形框 來實現,走了一圈, 同事就被說服了。 過了幾天, 圓角的矩形框也可以很快速地在屏幕上顯示了。 C) PM 如何找到需求 一些人常說PM 負責提需求,??Dev?就管實現就好了, ?那需求從哪里來呢?? <Social Network> 這部電影提到這樣一個情節: Mark在忙著寫早期的 "the facebook"?網站, 一個同學來打聽他認得的某女生有沒有男朋友,? Mark 聽了, 趕緊把 "顯示交友狀態" 這一功能加到了網站上。 你說他是不是一個好的PM?? ? D) PM 的分析能力和韌性 能把市場, 我方的優勢和劣勢, 創新的機會講得頭頭是道, 也是一種能力。 在軟件工程課上我們講過 NABC 方法。? 喬布斯在 NeXT 公司時那樣也做過很有說服力的分析: http://v.youku.com/v_show/id_XMzE1Mzc2NTE2.html? 注意, 這么厲害的 PM, 分析的這么透徹, 但是 NeXT 的產品還是失敗了.? 但是喬布斯沒有氣餒, 又投入了另一個公司的運作 – Pixar.?? 你有這些能力么?微軟的PM 有獨特的歷史和價值, 正如 Steven Sinofsky 講的: 一直被拷貝, 但很少成功復制… [注6]? [注8]。新的技術浪潮和商業模式給 IT 人士提供了一波又一波的機會,了解PM 的特點和要求,對要想進入這一領域的同學來說很有好處。
?
?
?
[注1: PM來源: http://www.joelonsoftware.com/items/2009/03/09.html]
[注2: PM 在微軟的工作: http://blogs.msdn.com/b/jmeier/archive/2010/07/03/what-is-a-pm-at-microsoft.aspx ]
[注 3:? 源自微軟的[口述歷史] ]。
[注4:? Revolution in the Valley]
[注5: Steve Jobs, by Walter Isaacson]
[注6: Steven Sinofsky 關于PM @ Microsoft 的博客:? http://blogs.msdn.com/b/techtalk/archive/2005/12/16/504872.aspx ]
[注7: Scott Berkun 也曾是微軟的PM, 他寫了一本很好的PM 手冊: Make Things Happen ]
[注8: Eric Brechner 最近也對微軟的PM 發表了意見: http://blogs.msdn.com/b/eric_brechner/archive/2012/07/01/pm-secret-weapon-or-wasted-headcount.aspx?]
總結
以上是生活随笔為你收集整理的现代软件工程讲义 5 项目经理 Program Manager的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 校园招聘 - 比较容易的面试题
- 下一篇: 百度链接解析_【集合】百度分享链接解析的