程序員與程序經理(轉)

http://tb.blog.csdn.net/TrackBack.aspx?PostId=551203

第二章  程序員與程序經理
 
 
工作在第一線的軟件開發人員是程序員和程序經理,他們決定着軟件的命運。良好的程序員隊伍和出色的管理是軟件項目成功的必要條件。管理不是管制,不是去卡住人家的脖子,因爲程序員不是一羣野鴨子。管理的目的是讓大家一起把工作做好,並且讓各人獲得各自的快樂和滿足。當一個組織被出色地領導時,僱員甚至不知道他們已被領導。在項目完成時,他們會自豪地說:“看看我們通過努力取得的成績吧”。所以管理者不能老惦記着自己是一個官,而應時刻意識到自己是責任的主要承擔者。
我們經常會聽到有經理頭銜的人在高談闊論:“編程我不會,做個項目還不easy?派個人去搞系統分析,回頭再叫幾個程序員把需求譯成程序,不就OK了嗎?”
不懂英語的人准以爲easy和OK是貶義詞。要讓軟件項目失敗很容易,只要符合下列條件之一即可:
(1)項目經理對軟件一無所知;
(2)技術負責人對編程不感興趣;
(3)真真編寫代碼的程序員是臨時僱用的。
如果上述三個條件同時具備,就請放心失敗好了。

讓我們少幻想自己是比爾·蓋茨,先當好程序員和程序經理再說。

2.1  了 解 程 序 員
 
早期的程序員幹活能從軟件直通硬件,個個生猛無比。又因他們的作息時間、言行舉止與常人不太一樣,久而久之就給人們留下了“神祕”、“孤僻”的印象。如今軟件行業被炒得熱火朝天,有能耐的程序員即便躲在大山嶴的軍工廠裏也能被挖出來。而更多原本不是程序員的人操起幾本“速成”、“二十一天通”等書籍也加入了這個行業。現在國內號稱有上百萬程序員,這支大軍魚龍混雜,已搞不清那些是正規軍,那些是民兵游擊隊了。
真正的程序員都有如下秉性:
一、誠實
程序員在學習與工作期間幾乎天天與機器打交道,壓根就沒有受欺騙或欺騙人的機會。勤奮的程序員在調試無窮多的程序Bug時,已經深深地接受了“誠實”的教育。不誠實的人,他肯定不想做、也做不好程序員。
有一名市場營銷員和一名程序員都在新聞發佈會上發言,將一項新技術的消息公佈於衆。
市場營銷員說:“這項技術比電話、晶體管和原子彈三項發明加起來對世界文明的影響都要大。”
程序員說:“這項技術在有限的領域內,在有限的程度上,解決了一些技術性的問題。”
看來爲了讓我們的民族更加誠實,學電腦真的要從娃娃抓起。
二、簡單——實用主義
有人問一個數學家,一個物理學家和一名程序員:“一個盒子有幾個面?”
數學家回答說:“有六個面,因爲盒子是長方體。”
物理學家回答說:“有12個面,分爲6個外表面和6個內表面 。”
程序員回答說:“只有兩個面,裏面放電路板和硬盤,外面放顯示器和鍵盤。”
目前即使最先進的計算機也不具備智能,程序員的基本工作就是把複雜的問題轉化爲計算機能處理的簡單的程序。如果一個問題複雜到連程序員自己都不能理解,他就無法編出程序讓更笨的計算機來處理。所以程序員信奉“簡單——實用”主義。
也有不少做計算機“學問”的人顛倒行事。本來幾句話、幾行程序就能說明白的事,非得要擡高到理論創新的程度,寫成玄乎的文章去評教授或者弄個博士學位。所幸在第一線工作的程序員大多是實幹的。
三、愛憎分明
程序員大都喜歡技術挑戰,不喜歡搞測試與維護。高水平的程序員喜歡與高水平的程序員一起工作,因爲他們怕“與臭棋佬下棋,棋越下越臭”。程序員大都厭惡拉幫結派、耍政治手腕。不信,數一數你認識的程序員,有幾個是黨派人士?
四、工作單調但不乏味
有人問編程大師:“程序設計的真正含義是什麼 ?”
大師回答說:“餓了的時候就吃,困的時候就睡,只要時機恰當就進行程序設計。”
其實程序員的生活和工作已融爲一體,儘管單調卻不乏味,還能獨享孤獨。有詩爲證:
                              我編程三日
                              兩耳不聞人聲
                              只有硬盤在歌唱
 
結論:優秀的程序員沒有理由不讓人喜歡,他們遠比怪僻來得可愛。
2.2  了 解 程 序 經 理
 
這裏程序經理是指一支程序員隊伍的領導者,不管他的職務是開發組長,項目經理,還是部門經理。程序經理是技術性的基層或中層幹部,是軟件企業得以發展的生力軍。程序經理的選拔是不容草率的事。不象有些事業單位,只要政治口號喊得勤快、能左右逢緣不犯錯誤就可混個領導噹噹。也不象一些官僚機構,只有兩個人的辦公室也要設正主任和副主任。如果碰巧正主任姓傅,副主任姓鄭,還會鬥個沒完沒了。
在一個管理混亂的軟件公司裏,如果某個程序員能大喊大叫並且幹勁十足,那他就能成爲一名程序經理。微軟公司在選擇經理人員時,總是把他們的技術知識和運用技術去賺錢的能力放在首位。程序經理一般就是程序員隊伍中最聰明的那個傢伙。比爾·蓋茨曾這樣描述聰明人[Cusumano1996]:
聰明人一定反應敏捷,善於接受新事物。他能迅速進入一個新領域,給你一個頭頭是道的解釋。他提出的問題往往一針見血、擊中要害。他能及時掌握所學知識,並且博聞強記,他能把本來認爲互不相干的領域聯繫在一起使問題得到解決。他富有創新精神與合作精神……
好的程序經理應該具備以下幾個條件:
一、技術水平是程序員隊伍中的最高級別
每個程序員骨子裏頭都有一股傲氣,如果你不能技壓羣雄,他們就不會聽你指揮。一個技術水平較差的人被任命爲程序經理真是個悲劇,就象一個略有權勢的太監,表面上有人對他點頭哈腰,背後卻被人鄙視。
二、能做最多且最難的工作
程序經理編程要快且好。別人要幹一天的活,他半天就能做完,這樣纔會有精力去搞管理。程序經理應負責系統分析、系統設計這類最難的開發工作,並指導不同水平的程序員把各自的工作做好。如果人手不夠,程序經理要能同時幹幾個人的活。
三、有人格魅力
軟件開發是智力創作過程,你不能指望僅通過執行規章制度來產生好的作品。很多軟件公司的程序經理都不是管理專業出身的,他們也不可能爲了搞好管理而成天玩弄心機。技術出色的程序經理一般少有心術不正的,所以管理的重點應是“以身作則”、“公正待人”。如果程序經理在上班時趴在桌上睡覺,其他程序員也會這樣幹。如果程序經理髮現有兩個程序員趴在機器旁睡覺,不能只對其中一個大聲吼叫:“你一編程就想睡覺,看看人家,在睡覺時都想着編程。”
如果管理者沒有人格魅力,就沒有人信服你,團隊就不會有凝聚力,烏合之衆不可能開發出優秀的軟件。
結論:一個有活力的軟件公司的各級經理都不會這樣感嘆,“因爲我啥也不會幹,所以只好當領導。”
2.3  程序員升爲經理後是否還要編程
 
讓我們先看看Microsoft公司的系統軟件部門與應用軟件部門的領導是怎樣看待這個問題的[Cusumano1996]。Windows NT 3.0項目的軟件經理婁·帕雷羅裏讓他手下的經理們像他一樣每天花一半的時間編寫代碼:
我在組內製定了許多規則,其中最重要的一條是每個人都得編程,誰也別想坐在那兒發號施令……我發現管理者很容易失去目標,他們總是無法認識到問題的本質並且反應遲緩。如果你始終不放棄編寫代碼,你就能對項目的進展情況瞭如指掌,及時發現並解決問題……我大概每天花一半的時間編寫代碼並尋找項目的缺陷。
作爲應用軟件領域的經理,克里斯·彼得斯也持同樣的看法。在他任Word項目總經理時就認爲:
在一些大公司內部,各部門經理把具體操作的層次向下移。你一旦當上開發部門經理,很快就會以自己身居高位、日理萬機爲由放棄編程;同樣地,開發小組的組長會以自己重任在肩而不願編程;至於程序員也會覺得自己十分繁忙、分身無術而不再多編寫程序。雖然我是270名員工的領導,似乎不再需要做什麼具體的工作了,但我還是爲Word新版本編寫了一個特性。
程序員升爲經理後一定要編程,這個道理已經說得很清楚了。最怕的是“虛心接受,堅決不做”;或者僅是做個樣子,每天花一分鐘時間編程,編譯器還沒運行完就關掉了。
2.4 經理與技術隊伍的建設
 
如果是經營一個加工廠或一個飯店,經理們可以不必懂技術。因爲他們的常識,以及通過耳聞目睹或者諮詢都能解決實踐中的問題。在軟件領域,技術的力量是無窮的,一天之內就可使整個產業發生鉅變。也許你在商業上很精明,但無法保證自己在技術浪潮中安然無恙。軟件公司的各級經理最好既精通技術又懂管理。
一個出色的領導,加上一支技術過硬的隊伍,纔有可能創造業績。不能光指望請來孫子或諸葛亮當教練,就能讓弱不禁風的男足去捧世界盃。不少人總喜歡自吹中國人很聰明,最適合搞軟件開發。可至今也沒有做出幾個很光彩的軟件來,這與十三億人口不呼應啊。新中國曆來喜歡與可憐的印度相比較來展現豐富多彩的優越性,可是軟件產業沒法與人家比。工作在第一線的程序員與程序經理應該意識到:好兵好將都不是天生的,是後天練出來的;既要學會冷靜地分析問題,又要充滿激情地去工作。
軟件公司總希望能物色到既精通技術又善長商業的優秀人才做經理。但已經出名了的優秀人才難以請到,也難以留住。所以把公司中的普通員工培養成爲優秀人才是重要的舉措。公司的老闆不要對程序員抱有偏見,以爲他們只配與機器打交道。一個高水平的程序員既然能學好數字邏輯,能理得清楚軟件中很多象“嵌套”這類“雞生蛋並且蛋又生了雞”的錯綜複雜的關係,從理論上講當個縣長也不成問題。
現在很多女士不會燒菜,卻能把菜的營養講得頭頭是道。雖然這是個值得哀嘆的社會問題,但我們應該有信心期待:如果她們非得天天燒菜不可,那麼不久就能把菜燒得又好吃又有營養。許多程序員不懂商業,不是智力上的原因,主要是個人興趣和環境所致。軟件公司的老闆應該這樣鼓勵有靈氣的員工:“你能把技術做得那麼棒,還怕搞不好管理?放心幹吧!”的確,很多技術人員是在工作中領悟如何管理的,他們經過挫折與磨練,逐漸升爲組長、項目經理,乃至成爲公司重要的決策者。
優秀的程序員喜歡與優秀的程序員一起工作,這是一種理想的願望。一個普通的軟件公司不可能有非常多的優秀程序員,即便有,他們也不可能天天聚在一起幹同一件事並且和睦得無法形容。中國自封建社會起就有喜好內鬥的風俗習慣,幾千年下來早已滲透到社會各個角落,那怕黃河水流斷了,估計這民風也會延襲下去。要使程序員隊伍穩健,必須有合理的等級制度來維護。等級制度並不限制自由和民主,它能讓自以爲聰明絕頂、誰也不服的人們懂得如何合作與奮鬥。就象有了一架梯子,每個人纔有機會爬上牆頭摘下那嚮往已久的野花。當梯子散成一堆木棍時,只可能造就幾個賣炭翁。
下面我們嘗試着建立一個程序員隊伍的等級制度。
把技術水平分爲四級,第一級最低,第四級最高。第一級技術水平的程序員主要考覈編程基本功,要求質量合格(他們主要來自剛畢業的大學生)。第二級技術水平的程序員編程質量要高,做過幾個軟件項目,有數年的工作經驗,並能指導新手的工作。第三級技術水平的程序員主要考覈系統分析與系統設計的能力,要求其技術有足夠的深度和廣度。第四級技術水平的程序員是成功的軟件產品的設計師,他不僅技術超羣,並且能使技術轉化爲有價值的商品。
把管理(這裏僅指軟件業務的管理,不考慮行政事務)水平也分成四級。第零級最低,第三級最高。第零級管理水平的人沒有管理職務,就是普通員工。第一級管理水平的人是開發小組的組長,可帶領幾名程序員工作。第二級管理水平的人是項目經理。第三級管理水平的人決定某些產品是否要開發,以及如何去佔領市場。
每個程序員都有明確的技術級別和管理級別。技術級別與管理級別有一定的聯繫。一般地,第一級技術水平的人只能做普通員工;第二級技術水平的人可以當一名組長;第三級技術水平的人可以當一名項目經理;第四級技術水平的人可成爲公司產品的決策者。如圖2.1所示。本書作者目前的技術水平當屬第二級,管理水平符合組長的要求。作者在讀中學和大學時就曾美滋滋地當過課代表,也就是組長級別。

2.5 向錯誤與失敗學習
 
不管是生活或工作,人們都應該向錯誤與失敗學習,目的是讓我們在短暫的健康年華中少犯錯誤、少失敗,多做幾件正確的對社會有貢獻的事。
導致軟件項目失敗的因素很多,如果不去找藉口的話,就會發現錯誤的根源在自己身上:知識貧乏、才能低下、經驗不足、驕傲自負……。我們必須正視自身的不足與缺點,纔會學到經驗教訓。可人們常有太多的虛榮,爲了克服心理障礙,白白浪費了很多本該用於創造的精力。
假設犯錯誤的人是誠實的並且是勤奮的。他願意不帶虛榮地改進自己。當這個人突然面對失敗時,可能覺得自己一無是處,也許會不知所措,也許會病急亂投醫。程序員都有一種共同的體會:在調試程序時,時常碰到只有十幾行的程序竟會產生上百個編譯錯誤;最後發現這麼多的錯誤其實是由某一行程序錯誤引發的。當我們在工作中碰到挫折時,先要冷靜地分析問題(事出有因哪),找出問題的內因與外因。內因是最主要的,應該予以最先解決。
前幾年,中國出現了一個叫“FLG”的邪教,教徒達數百萬之多,人民羣衆深受其害。不久前,全國的主要媒體對“FLG”進行連續數月的聲討與揭露。目睹了很多受害人的哭訴後,相信人們能夠明白“FLG”是邪惡的、反動的。但在憤怒與心痛之餘,我們不禁要反思:爲什麼那麼多人輕信邪教?人們是否接受了教訓?
在電視上看到很多人的確作了深刻的檢討:“我真是後悔啊,跟錯了李洪志(FLG的頭頭)這個壞蛋,我對不起社會……。以後我一定要聽黨組織的話,黨叫我幹什麼我就幹什麼,決不上壞人的當。”
我覺得這些受害人一點都沒有醒悟:他只知道FLG是個邪教,並不知道自己爲什麼信了邪教。有些事情只要用腦袋去想一想就能分辨是非,可人們就是不去思考,卻渴望能跟對“福星”,甘願把自己的腦袋拴在別人的褲帶上。難道這就是人民的純樸與可愛嗎?回顧一下歷史,在“文革”時期,億萬人民跟着合法的黨組織大幹傷天害理的事,一干就是十多年哪!可見世界上哪個人哪個組織都不能確保絕對的英明。
所以說“迷信”是傻子碰到騙子的結果。傻是內因,被騙是外因。傻子碰到好人未必能做出好事,傻子碰到另一個騙子就會做出另一件傻事。爲了不讓自己“傻”,善良的人們應該用腦子去多學一些知識,努力讓自己來把握命運,不要急着把一生託給某個人或某個組織。
軟件人員在遭受項目失敗並開始反省時,不要只是就事論事地僅把眼光鎖在特定的項目上,吃一塹應該長好幾個智纔對。本書作者剛剛失敗過,樂意乘熱講講感受。
我在讀本科和碩士研究生時,一直信奉“創造性的事業要靠激情來推動”。我把這個口號貼在辦公室裏,並扔掉物理學專業天天編程。在讀碩士研究生的第一年,我賣出了第一份軟件。到我讀博士研究生的第一年,我心想事成地獲得了全國大學生電腦大賽軟件展示第一名。那時候我自以爲翅膀已經硬了,再回顧前些年的艱苦,不禁有“媳婦熬成婆”的悲壯感覺。於是我在杭州這個小地方略作宣傳,在1997年10月份開了一家軟件公司。
我開始把“振興民族軟件產業”列入日程,並且提前擔憂將來錢掙得太多用不完該怎麼辦。半年之後,我開始爲軟件產品作宣傳,可並沒有出現訂單如潮、接應不暇的形勢(事實上壓根就沒有反應)。我已經意識到市場沒找對,但仍覺得軟件中的技術很有價值,準備再開創“東方不亮西方亮”的新局面。於是我向只有一面之緣尚在北大方正工作的一位朋友求助。他是真真的軟件高手,當我小心翼翼地展示約10萬行C++代碼的軟件時,他競在十幾分鍾內就指出多處重大的設計錯誤,使我目瞪口呆地意識到整個軟件系統的價值爲零。那種心痛啊,就象眼睜睜看着孩子被狼吃掉一樣。
1998年10月,這位朋友再一次從北京飛到杭州,三下五除二替我把只活了一年的公司給關閉掉。他放心不下,覺得我“惡病需用猛藥補”,於是意尤未盡地把我捉到北大方正插在他管轄的部門,讓我學習怎樣做事情。北京寒冷的冬天可以營造一種淒涼的氣氛,衝去一切可以自我原諒的藉口。我並不是太愛虛榮的人,知道這次失敗是我的毛病積累到一定水準忍不住噴發出來的結果。我絕不能以年紀尚輕不太懂市場與管理爲理由輕率地敷衍過去。我把自己察覺到的數十個毛病列出來,日後一個一個克服掉。……本書的大部分內容取自我在一年前的教訓錄。
改錯之後,現在我不僅不難過而且挺快樂。覺得第一次失敗很浪漫,值得懷念。剛開始寫這本書時,我那位北京的朋友把腳伸到杭州來散步,順手又給了我幾帖藥,可以用到我畢業。看來缺點是改不完的,補短和揚長要一起來。
2.6 提高綜合素責
 
      前面給軟件開發人員加了過多的讚譽。一個技術出色的程序員可以自豪,但不可以目空一切。上天不可能賦於一個人太多的優點,以致於他沒有表示謙虛的餘地。
我們在求學時可能太功利太挑剔,導致知識結構非常單薄,只怕到了晚年也成不了大器。當程序員擅長技術時,還要時刻留意彌補自己並不擅長的非技術才能。揚長補短才能提高綜合素質。
假如能回到中學時代,我希望能把文科學好。那時侯盛傳“學好數理化,走遍天下都不怕”。我讀中學時很無知,鄙視一切文科,現在後悔莫及。高考語文成績54分(只比我的期望值低6分)。寫作文的最高目標就是不逃題,考試前我總是反覆祈禱:我沒幹過壞事,保佑我作文不逃題吧!上大學的第一天我竟然無法用普通話說出“去洗澡怎麼走”,只好晃動澡票與輔導員打啞語。中學的歷史、地理課也被我糟踏了,考試時只會填寫任課老師某年某月某日在我家鄉英勇就義,比誰的成績更接近零分。更讓我沮喪的是,這些行徑都不是我發明的,我頂多是個跟屁蟲而已,一點回憶的自豪感都沒有。
扔掉文科只學理科並不等同於 “放下包袱,輕裝前進”,倒象是摘掉了控制系統的機車,開不了多遠就翻車了。我搞了八年的軟件開發,沒做出象樣的軟件來。倒是有同行意外發現我的文筆不錯,是當作家的料。我發現自己在不該開花的地方結了一顆瘦澀的果子。曹操之子曹彰曾建議:“大丈夫當學衛青、霍去病,立功沙漠,長驅數十萬衆,縱橫天下,何能爲博士耶?”要後悔的事情太多了,只能現在做得勤快些。明知自己不成大器,但願意亡羊補牢,力求學得更深更廣。
不要讓人覺得程序員只管鑽研技術,可以不懂世事並且應該自由散漫。程序員不該因爲幼稚而顯得單純,應該是成熟了才變得單純,才配得上這個充滿活力的職業。
 
2.7  小 結
 
      本章講述做好程序員和程序經理的一些道理,爲了剝去阻礙我們進步的那些虛僞,多嘮叨了幾個故事。
       中國經歷了很多打鬥、整人的革命,卻沒有一次趕上工業革命。在如今計算機橫行的形勢下,我們不能再掉隊了。90年代初期,中國出現了一些程序員英雄,曾讓我們激動過、崇拜過。但這些孤膽英雄們很快地幾乎全消亡了,他們只留下故事,沒留下更多的價值。再一次讓我們意識到“振興民族軟件產業”不能依靠幾個人一朝一夕的輝煌。軟件人員勤奮學習和工作,不該只圖將來能做成幾件事情的快意,而應力求事業長盛不衰,才能推動整個民族軟件產業持久穩健地發展。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章