?
第一章奠定基礎
1.千萬不要把程序設計師的時間浪費在改善產品以外的工作上。
2.保護程序設計師不受任何阻礙和干擾。
3.永遠記得自己真正的目標,然后讓團隊用最有將效又最愉快的方法把它完成。
4.理清詳細的項目目標,可以避免在不必要的工作上浪費時間。
5.不要因為制定目標需要花很多時間,或是別人都有沒有做,就省略了目標的制定。制定明確詳盡的目標所花的時間,絕對會讓團隊得到更大的好處。
6.事前決定最合適的優先考慮順序,以及各考慮點的質量規范,能夠指引開發團隊的工作。
*重點提示:
l??????? 公司聘請程序設計師,是為了開發高品質的軟件,但如果經常被雜事打擾、分心,就無法保持專注在真正該做的事情上。主管必須確定程序設計師能專心投入在具有策略價值的工作上,而不是打雜,凡是會阻礙軟件開發的東西,主管應該毫不猶豫地把它排除。
l??????? 然而,有很多雜事其實是無法避免的,大公司尤其如此,那就只好將它的負面效應盡量減少,方法是不斷自問:“我到底想要完成什么?”“我該怎么做才能既保持這件工作的好處,又能避免它的壞處?”要滿足實質上的需求,而不是表面上的作業程序。
l??????? 擁有明確目標所帶來的好處雖然不是立竽見影,但沒有明確目標所造成的混亂絕對是顯而易見。沒錯,建立明確目標是一件費時又無趣的工作,但比起項目延誤或失控的危險,肯定是值得付出的。請記得使用者界面函數庫的實例,項目目標只要稍微改好一些,就會明顯地減輕壓力,項目目標再修正一次,問題就幾乎都迎刃而解了。
l??????? 每一位成員都必須有一致的程序優先考慮順序,程序的可維護性是最重要的嗎?可移植性?體積?速度?為了讓軟件產品符合項目的目標,必須讓程序設計師明白本項目的程序優先考慮順序,他們在程序設計時才知道該如何取舍。同時,您還得對每一項優先考慮點事先建立質量規范指導,以避免到時候質量不合格又得重寫部分程序,導致時間浪費和項目延誤。愈早定出質量規范指針,愈能省時省力。
?
第二章策略性的作業方式
1.一發現錯蟲就立即清除掉,別拖延。
2.妥善運用可以促進開發成效的策略性工作方式。
3.不要把策略性工作方式當作訓練的教條,應該向組員解釋這些工作方式的內涵與用意。
4.提出精確詳盡的問題,可以引導出真正有效的策略性工作方式,幫助項目目標順利完成。
5.策略不是死的定律,要把它當作指導原則來活用。大部分的時候都應該遵循,但也有例外的時候。
6.在您的軟件開發活動中,小心謹慎地運用負回路的觀念,讓項目順利進行;但務必要注意避免反饋回路的不良副作用。
*重點提示:
l??????? 小小的改變可能產生驚人的效果,所以,請仔細觀察您現有的作業方式,會很容易發生問題嗎?耗費很多時間嗎?矯枉過正或防弊重于興利嗎?會不會讓人員心生挫敗,而造成生產力低下?如果是的話,請找出一種簡單又有效的方式改善這些情況。
l??????? 當您決定采用任何一種策略性作業方式,請解釋您的用意,讓組員充分了解是什么方面應該改善。這種開放的做法會在無形中教育組員,讓組員學會思考,也許,時間久了之后,他也能想出很不錯的點子。
l??????? 當您針對問題尋求解決方案時,一遍又一遍地修正您問自己的問題,培養自己能夠提出精確的問題,想出更好的答案。但光是精確還不夠,精確的問題也可能是錯的問題,讓您得到沒有幫助的答案。您必須注意,問題是否切中要害,是否是您真正想達到的目的,是否是您的理想狀況。不要自問:“如何叫程序設計師加班?”要問:“如何增強工作效率?”
l??????? 策略愈是吸引人,愈會有多人認同它,甚至把它當成牢不可破的定律。請提醒您的組員,再好的策略也不能應付每一種情況,“避免用goto”是公認的好的程序設計策略,它讓程序可讀性提高,但是當不用goto的結果是可讀性反而更低時,您得教程序設計師如何權衡取舍。
l??????? 每當您建立一個反饋回路時,請務必考慮它的副作用和長期使用的效果。最好的反饋回路不但可以隨著時間增強效益,也能同時減少負面的作用。
?
第三章保持進度
1.每天都要問自己:“有什么事情是我今天能做,而且會幫助項目在未來幾個月內進行順利的?”
2.不要浪費時間在錯誤的問題上,一定要先確定真正的問題在哪里,然后才去改正它。
3.人們開口要求的東西未必是他真正想要的。處理他的要求之前,請務必確定他究竟想要做什么。
4.絕對不要答應別人自己做不到的事情,這樣對雙方都有益無害。
5.不要為了討好別人而傷害雙方的工作進程,您永遠要根據自己的目標,做適當的決策。
6.是您在為項目負責。不要讓任何人的建議阻礙項目的進行,包括上級的建議。
7.天下沒有真正免費的軟件
8.應該開發策略上具有重要性的功能,而不是把媒體的評比項目都做齊全。
9.軟件產品的開發,不能只為了有趣、挑戰性,或是夠有個性夠令人眩目。
10.??????????? 不要把時間浪費在無法改善產品的工作上,即使這么做在將來會有潛在的利益,也要與現在投入的時間成本做個衡量。
*重點提示:
l??????? 不要讓意外出現的問題打亂項目的腳步,如果您要項目順利進行,您得花點時間思考未來。今天做個小小的動作,可以防范許多意想不到的問題,即使真發生了無法避免的災難,您也能在風雨中穩穩掌舵。如果您隨時問自己:“有什么事情是我今天能做的,而且可以幫助項目在未來幾個月內順利進行?”您就會知道該采取什么行動。
l??????? 在您準備解決一個問題之前,先確定您找到了問題的癥結。還得對話框函數庫存的例子吧, word小組的抱怨不小心誤導了問題的癥結,使得函數庫小組極力設法優化,卻徒勞無功。因此,在您企圖解決任何問題之前,請務必確定已經對問題有了徹底的了解。
l??????? 在投入大量時間于任何一件工作之前,請想一想這件工作是否能滿足真正的需求。您還記得那怪異的下拉式列表框,其實應該是個級連式菜單的例子吧。當您接獲任何一項要求,最好了解一下背后的原因,提出這項要求的人究竟想要什么。這樣可以節省許多寶貴的時間。
l??????? 基于非常多的原因,有些主管很難對提出需求的小組說“不”。在比較嚴重的情況下,主管會“知其不可而為之”,答應對方自己做不到的承諾。如果您發現自己常常不好意思說“不”,請將心比心替對方想一想,萬一到時候做不出來,是不是會造成更嚴重的后果?如果您是需求小組,您對該到貨的東西遲遲不見,是不是焦急又惱怒?您必須對其他的小組負責,就像您希望他們也能對您要求的工作負責一樣。
l??????? 每當您接到一項請求,要您在產品中加入某一項功能特色,請先想一想這項工作在策略上重不重要,如果不,就不要開發它;至于這個功能特色是否免費、是不是很酷、競爭對手有沒有,都不是重點。特別是有些整組的功能,它們看起來很重要,因為它給您一種沒有它就不夠完整的感覺。您必須牢記,產品的策略性比完整性重要。如果您不敢確定這項功能特色是否有策略上的重要性,只要想一想這項請求的動機。就可明白大半了。
?
第四章走極端的狂熱
1.確定您所要求的報告真的值得屬下暫停工作,花那么多時間去寫。
2.利用項目檢查報告來改進軟件開發的工作程序。為了使報告發生作用,報告中必須確實描述我們這次解決問題的每一個詳細步驟,以及將來應該如何運用這項新發現。
3.請注意定期會議的價值,確定它值得每個人放下手上的工作。
4.召開任何會議之前,請確定本次會議的目的是什么,達成這個目的的條件是什么,然后,務必達到開會的目的。
5.試著排除不必要的后續工作。
*重點提示:
l??????? 盡量不要讓組員寫沒有用處的報告,即使非寫不可,也要盡量減少對開發工作干擾,務必讓每一份報告的價值超過它的成本。
l??????? 項目檢查報告是很有價值的報告,您應該善用。但是檢查報告必須清楚陳述解決問題或提高工作效率的方法,而且其中的建議能夠確實被執行,否則用處十分有限。
l??????? 召開會議之前,請確定會議的結果夠重要,值得為此打斷程序開發的工作,占用組員的時間。特別留意定期召開的例行會議,通常定期的開會最后只不過是因循的習慣而已,并不值得參加。
l??????? 如果您準備召開一個會議,請將時間安排在一個時段的最前面或最后面,盡量減少工作的中斷與時間的切割。
l??????? 每次開會之前,務必確定您開這個會的目的是什么,而在開會時一定要達到某種程度的結論,即使是有條件的決策也比完全沒有要好。
?
第五章進度狂
1.不要利用進程表來驅使項目的進行,這對小組的士氣傷害太大了。
2.讓日程表維持適度的緊迫,但又是可以做到的,好讓組員振奮、不松懈,專心致力于項目的推進。
3.絕對不要草率定出不可能的期限,導致組員為了趕進度而損害產品的質量。
4.把長期的大項目,分成幾個完整而獨立的小項目,各小項目必須有一個主題。
5.為了保持創意的活力和團隊士氣,必須讓每一個小項目都有令人興奮的結果。
*重點提示:
l??????? 如果您定的日程表使組員產生“落后恐懼癥”,為了趕上期限而犧牲了產品的質量,那么該檢討的是這個日程表而不是組員;如果您定出的日程表是個無法達到的目標,只是為了從組員身上壓榨出更多的工作時間,那只不過是打擊團隊士氣,對產品毫無幫助。一旦組員發現自己身處絕境,那您永遠無法讓他們表現出最佳狀態,等到項目結束(也許更快),他們就會另謀高就,找個是人做的工作。
l??????? 將項目分割成數個小項目,各有階段性目標的做法,可以讓組員更加投入,并且營造出“贏”的氣氛,讓組員受到項目有進步的鼓舞。理想的小項目期限大約是兩個月,這樣給組員適當的急迫感,而促使他們積極地工作,特別是當小項目有一個明顯又令人振奮的主題時。您應該試著把小項目設計得令人興奮又期待,使用權小組在完成后有股沖動想說:“哇!看看我們完成的工作!太棒了!”隨著每一個小項目的完成,小組會有愈來愈強的信念,相信自己的工作臺是非常重要的,對使用者而言是非常有價值的。覺得自己的工作臺有價值、有貢獻,這是一種很大的成就感,這種感覺最能鼓舞組員凝聚團隊的力量,共同創造出最優秀的產品,而且會很快做地出來。
?
第六章學無止境
1.不要讓程序設計師的學習停滯不前,要讓程序設計師有機會磨練不同領域的技術,培養十八般武藝樣樣精通的組員。
2.訓練程序設計師時,先培養他對整個公司所有項目都有價值的技術,然后才培養本項目獨有的技術。
3.不要舍不得放您最優秀的程序設計師到別的項目去。如果他在您的項目已經沒有新的東西可學,為了公司和他個人的前途,您應該把他推薦到別的項目,讓他的成長永不間斷。
4.確定每位組員、每兩個月都有一項技術上進步。
5.一發現某處需要改進,就立即采取更正的行動。
6.不要用年終考評來訂立學習目標,要利用年終考評來記錄個人的成長。
*重點提示:
l??????? 絕對不要讓組員一直做同樣的工作,這樣是限制了他的學習,使他停滯在原來的領域。一旦程序設計師精通了某一個領域,就讓他換別的領域做做看,永遠讓他們學習新的技術。
l??????? 各種技術的用途范圍有所不同,有的技術在一般的項目都用提上,有的技術只有在特定性質的項目才用得上。當您訓練您的組員時,必須讓他們的技術能在公司發揮最大的用處,最好的辦法就是,把應用范圍最廣的技術放在訓練的最前期,應用范圍最小的技術放在最后訓練。
l??????? 優秀的程序設計師是項目經理最需要的,所以經理們通常舍不得讓自己手下功力最強的人到別組去,但是如果這位第一高手在本組內再也沒有新東西可學時,經理就應該讓他到別的項目去,一方面他個人可以重新開始另一次的成長,一方面讓接替他的人學著承擔重要的工作,最后公司的平均程序技術水準因而提升,對大家都很有好處。
l??????? 為了確保每位程序設計師的技術都在穩定地進步,一定要讓每個人有個努力的目標,最好的方法是把個人的成長和項目每兩個月的階段性目標相結合,這樣一年就有至少六次的進步了。假定一位組員在公司待了五年,那么他就學了30種新技術、或是讀了30本好書、或是15項技術加15本書,對他的工作能力影響多大啊。
l??????? 最好的成長目標是出于當時的需要。如果您發現有位組員工作缺乏效率,或總是在犯同樣的錯誤,最好抓住機會立即為他立一個目標,并且要求他立刻開始改進。這種當時設立的目標讓人印象深刻,又是馬上尋求改善,效果通常會非常好。比起年終考評那種模模糊糊的建議,更能引起程序設計師的重視。
?
第七章態度問題
1.要讓每一位程序設計師都明白,寫出零錯誤程序是很不容易的,所以應該多花功夫用各種方法做最徹底的測試。
2.糾正程序設計師以為加除錯碼會花太多時間的觀念,應該訓練程序設計師第一個反應是考慮加上除錯碼是否有道理,第二是考慮加除錯碼是否符合項目的目標與工作的優先級。
3.不要讓凡事不能的態度阻礙了創新。
4.不要讓程序設計師以為使用者并不在乎軟件的質量。
5.不要給使用者次品,寧愿延期交貨,務必追求質量完美。
6.程序設計師必須經常以使用者的觀點來看自己寫的程序,程序設計師必須能體會使用者的感受。
7.在包裝盒里的每一件東西,都是產品的一部分。
8.將程序的可共享性當作優先考慮的目標之一,否則程序設計師將經常做重復的工作。
9.從您的每件工作中創造最大的資源,不管是利用現有的杠桿,或是創造新的杠桿。
*重點提示:
l??????? 新進的程序設計師必須了解,寫出“零錯誤程序”并不是容易的事,如果他們有這種認知,就不會輕易堅持自己的程序已經完成,沒有錯蟲。有經驗的程序設計師知道,寫出“零錯誤程序”很困難,但是并非不可能,那是需要多下點功夫才能做到的,程序設計師應該在把程序送交測試小組之前,徹底用除錯工具追蹤過程序的執行。由于寫“零錯誤程序”是這么困難,有錯蟲的程序一旦被置入軟件,那就會造成極大的損失,要大量的時間、人力才能大海撈針似地挖出這個錯蟲,所以程序設計師務必審慎再審慎,用一切的辦法偵測和預防錯誤,即使要自己改變程序風格也無妨。
l??????? 小心那種“太難了”、“太花時間”或是“太麻煩”的反射性反應。當您遇到別人有這種反應,請先問自己他有沒有認真思考過這件事的重要性、以及是否符合項目目標,如果您認為他其實未經深思熟慮,只是直覺的反應,那您就應該把您的想法告訴他,請他重新評估,也許就會有公平的答案。
l??????? 人們遇到經驗范圍之外的事情,多少有恐懼感,就會認為“這完全不可能”而強烈反對。試著消除這種習慣性的反應,設法給組員灌輸“只要花時間想想看,大部分的事情都做得到”的觀念。您不妨以個問題來對付那種“凡事不能”的態度:“我了解這是做不到的,但是‘如果’做得到,那你會怎么做?”然后您就會發現驚人的轉變,您馬上就會聽到組員七嘴八舌地說應該這樣做、那樣做,說的是他們剛剛堅持做不到的事情。這個“如果”把他們帶離直覺的反應,帶到全新的思考模式,這才是他們應該做的。
l??????? 把使用者當作什么都不懂的外行人,是非常不好的觀念。每當您發現有人表露出這種心理,一定要立即糾正,提醒他們使用者才是真正受產品好壞影響最深的人,他們和程序設計師一樣關心軟件的執行速度和質量。
l??????? 教導程序設計師以使用者的角度看產品。程序設計師必須對產品有整體性的認知,包裝盒內一切有形無形的東西都是產品的一部分,使用者并不在乎其中一部分好或不好,也不會想知道里面有多少不同的小組各負責幾個組件,也不在乎究竟用什么語言寫成,他不在乎軟件是怎么做出來的,這只對軟件公司有意義,他們只知道產品是那家公司出的。程序設計師當然不會每個程序都參與,但是他們必須了解產品是一個整體,任何一部分不符品質標準,都得研究對策,而不是只做自己被分配到的程序。只要大家都關心產品中比較弱的組件,自然那一部分就會被設法改善。
l???????? 杠桿原理是您最有用的觀念,找到您工作中杠桿,您可以為小組、項目、公司、甚至軟件業創造無可限量的價值。無論如何,盡量利用資源并創造資源,這個原則是絕對錯不了的。在您寫程序的時候注意到程序代碼的共享性,訓練組員的時候注意他對公司的價值,即使是像函數命名這種小事,都有杠桿的存在。不管做任何事,都有杠桿的存在。不管做任何事,都要想到“善用資源”,為未來做好準備。
?
第八章沉船的感覺
1.如果進度發生落后,那表示有個地方出錯了。您應該找出問題,并加以解決,不要一味要求組員加班,在問題沒有解決之前,加班是沒有用的。
2.別誤信加班等于增加生產能力,長期的加班只會傷害生產能力,對項目沒有幫助。
3.周未是屬于組員私人的時間,不是公司的。公司不應該以打敗競爭對手為理由,要求員工周未加班。
4.強調思考的重要性,而不是長時間工作。
5.訓練開發小組懂得在正常工作時間內掌握好工作的效率,不要讓他們超時工作,因為超時工作只是浪費時間的假面具。
6.與程序設計師共同研擬出每日活動的時間表,把無法預期的臨時公務變成固定時間
處理的事情,并且把程序開發的工作放在最優先的地位,不要讓其他次要的事情干擾到
程序。
*重點提示:
l??????? 經常加班就是項目出問題的明顯信號,也許是因為主管和觀念錯誤或是目標不夠清楚,不論是什么原因,項目經理絕對不能忽視這種現象,要對這個問題正確處理,項目經理必須協助組員在每周40小時的工作時間里,把事情做得更有效率。
l??????? 我經常聽到高層主管稱贊組員每天為公司工作很長的時間:“您對公司的貢獻值得嘉獎,
l??????? 為了組員把辦公時間用在正確的地方,并提高部門的工作效率,項目經理不但要為他們排除任何不必要的會議、報告和雜事,還要協助他們好好運用寶貴的上班時間。您應該協助組員安排適當的每日活動表,用一些小技巧,讓組員有長段又不受干擾的時間,適合進行開發工作。
l??????? 如果您關心組員的生活,就不要讓他們把全部的時間都投入在工作。每天只要確定他們賣力工作了八小時,就可以把他們趕出辦公室了,當然這樣做也許會有老板看不順眼,但是如果您像我一樣相信均衡、健康的生活是一切創意的原動力,就堅持這份理念吧!
l??????? 每周工作40小時并不是金科玉律,只不過是美國的傳統,而軟件開發項目大都以此為前提編定日程表。所以如果一個項目需要程序設計師每周工作40小時以上才能趕上進度,就表示有問題,也許是日程表定得太樂觀,也許是程序設計師需要再訓練。絕對不應該讓程序設計師加班來彌補這個漏洞。
?
給領導者的話
主管應該把自己視為團隊中一分子,與其他人平等,而不是高高在上。
?