作為一本與計(jì)算機(jī)有關(guān)的圖書(shū)昆烁,在1971年初次出版之后赤炒,能夠經(jīng)過(guò)45年仍然保持活力氯析,不能不說(shuō)它是一本神奇的書(shū)≥喊“本書(shū)開(kāi)創(chuàng)了一個(gè)新的領(lǐng)域,即將程序開(kāi)發(fā)作為一種人類(lèi)行為來(lái)看待雪情,而不僅僅是與硬件遵岩、軟件相關(guān)⊙餐ǎ” 45年來(lái)尘执,雖然計(jì)算機(jī)軟硬件技術(shù)在飛速地更新?lián)Q代,但人類(lèi)作為程序開(kāi)發(fā)的主體宴凉,人類(lèi)的心理狀態(tài)和行為模式與45年前并沒(méi)有太大的不同誊锭。因此本書(shū)作者溫伯格先生45年前的諸多真知灼見(jiàn)如今依然適用。又由于20年前出版銀年紀(jì)念版的時(shí)候弥锄,作者沒(méi)有直接修改原書(shū)丧靡,而是在保持原貌的基礎(chǔ)上增加評(píng)注,讓我們可以更真切地看到在開(kāi)始的25年間籽暇,軟硬件技術(shù)進(jìn)步和管理知識(shí)積累給程序開(kāi)發(fā)的各方面帶來(lái)的或多或少的影響温治。
我猜有兩類(lèi)人大概會(huì)喜歡這本書(shū):第一類(lèi)是有一些開(kāi)發(fā)經(jīng)歷,喜歡觀察戒悠、思考并愿意嘗試改善開(kāi)發(fā)過(guò)程的程序員熬荆;第二類(lèi)是程序員出身轉(zhuǎn)而從事開(kāi)發(fā)管理工作,同樣喜歡觀察绸狐、思考并愿意不斷嘗試對(duì)開(kāi)發(fā)過(guò)程做出改善的技術(shù)主管卤恳。此外,我非常希望其他管理層的主管們也能來(lái)讀一讀這本書(shū)寒矿,對(duì)軟件開(kāi)發(fā)的過(guò)程及組織能夠有更多的了解突琳,不過(guò)書(shū)里吐槽管理層的地方有點(diǎn)兒多,只怕他們就算勉強(qiáng)來(lái)讀了也不見(jiàn)得喜歡劫窒。
另外在序言中本今,溫伯格先生提醒讀者:
讀者的責(zé)任是要根據(jù)自己的經(jīng)驗(yàn)與需求,對(duì)書(shū)中的所有觀點(diǎn)進(jìn)行權(quán)衡取舍。... ...?我不希望讀者在閱讀過(guò)程中貿(mào)然接受某種觀點(diǎn)冠息,因?yàn)檫@種讀書(shū)的態(tài)度正是我們應(yīng)該努力戒除的挪凑。本書(shū)中提供的素材只是讀者在自己思想形成的過(guò)程中需要消化、吸收的食物逛艰,而不應(yīng)該是個(gè)人思想的簡(jiǎn)單替代品躏碳。
這個(gè)要求其實(shí)適用于讀任何書(shū)。
本書(shū)從 1散怖、作為人類(lèi)行為的程序開(kāi)發(fā)菇绵;2、作為社會(huì)行為的程序開(kāi)發(fā)镇眷;3咬最、作為個(gè)人行為的程序開(kāi)發(fā);4欠动、程序開(kāi)發(fā)工具 四個(gè)方面進(jìn)行了闡述永乌。
第一篇 作為人類(lèi)行為的程序開(kāi)發(fā)
本篇前兩章閱讀程序和優(yōu)秀程序的要素嘗試將程序開(kāi)發(fā)看成一項(xiàng)以人為主體的行為加以研究,并論述了進(jìn)行這種研究的可行性和必要性具伍,第三章如何研究程序設(shè)計(jì)則從人類(lèi)行為學(xué)和心理學(xué)研究方法的角度進(jìn)一步討論了對(duì)程序開(kāi)發(fā)進(jìn)行研究的可行性翅雏。
(作為一名程序員,閱讀本書(shū)的樂(lè)趣與收獲更多來(lái)自溫伯格先生隨意揮灑的各種經(jīng)驗(yàn)之談人芽。每章結(jié)尾的小結(jié)望几、思考題和本章評(píng)注,也是值得多花費(fèi)些時(shí)間和精力的部分萤厅。)
第一章 ? ?閱讀程序 ?
程序被編寫(xiě)成什么樣子橄抹,取決于眾多的因素。有的是由于計(jì)算機(jī)的局限祈坠,有的是由于程序語(yǔ)言的局限害碾,有的是由于程序員的局限,有的是因?yàn)闅v史的偶然赦拘,而有的則可能是因?yàn)橐?guī)范慌随。
思考題:
請(qǐng)主管回答
1.如果你是一線主管,你是否有能力閱讀你手下的程序員所編寫(xiě)的程序?或者躺同,就閱讀程序的能力而言阁猜,你是否與“老一輩”的計(jì)算機(jī)和語(yǔ)言一同落伍了?如果你有這個(gè)能力,你真的會(huì)去閱讀程序嗎?如果此前你不閱讀程序蹋艺,為什么現(xiàn)在不嘗試一下剃袍,看看會(huì)發(fā)現(xiàn)什么?
2.如果你是高層主管,你手下的一線主管們是否有能力閱讀他們手下的程序員所編寫(xiě)的程序?你能肯定嗎?向程序員了解一下捎谨,然后重新回答這個(gè)問(wèn)題民效。然后查明一線主管是否真的閱讀程序憔维,即使他們有這個(gè)能力。我們的調(diào)查顯示畏邢,由于各種原因业扒,九成的一線主管不閱讀程序。你是否認(rèn)為舒萎,如果不經(jīng)常閱讀程序員的程序程储,一線主管能知道程序員的能力如何,工作是否出色嗎?
請(qǐng)程序員回答
1.你上次閱讀別人的代碼是在什么時(shí)候?為什么經(jīng)過(guò)了這么長(zhǎng)的時(shí)間?最近一次有人閱讀你的程序并且與你討論臂寝,是在什么時(shí)候?這個(gè)人是你的主管嗎?
2.到程序庫(kù)或者向你的好友借一份程序章鲤。試著分析并找出其中各段代碼存在的原因,看看是否屬于本文中介紹的某種情況咆贬。通過(guò)這個(gè)練習(xí)败徊,你有什么收獲?
3.找出你至少一個(gè)月之前親自編寫(xiě)的一個(gè)程序,參照第2題的方式進(jìn)行分析素征。從這個(gè)練習(xí)中集嵌,你又有什么收獲?
除了回答問(wèn)題,我們還能從思考題中看到什么呢御毅?哪些作者提出的問(wèn)題經(jīng)過(guò)這四十多年已經(jīng)被很好的解決了?哪些問(wèn)題目前仍然繼續(xù)存在呢怜珍?哪些問(wèn)題在良好管理的團(tuán)隊(duì)里已經(jīng)不再是問(wèn)題端蛆,而在管理不善的團(tuán)隊(duì)中仍然存在呢?
本章評(píng)注:
在軟件維護(hù)的過(guò)程中被閱讀得最多的代碼酥泛,往往并非是最好的代碼今豆。也許正因?yàn)槿绱耍@部分代碼才最需要維護(hù)柔袁。對(duì)于根本區(qū)分不出代碼優(yōu)劣的那些用戶(hù)來(lái)說(shuō)呆躲,閱讀程序的確不會(huì)有什么幫助。25年來(lái)捶索,這些問(wèn)題始終沒(méi)有改變插掂。
但是,開(kāi)發(fā)人員把他們的工作提交給別人審閱腥例,或者希望通過(guò)審閱他人的工作來(lái)提高水平時(shí)辅甥,為什么會(huì)如此之難呢?令人奇怪的是,高明的程序員善于通過(guò)排演和審查過(guò)程來(lái)發(fā)現(xiàn)有價(jià)值的東西燎竖,而那些自以為是的人卻不是這樣璃弄。正因?yàn)槿绱耍退究找?jiàn)慣的情況一樣构回,高手越來(lái)越出色夏块,差勁的越差疏咐。
45年之后,情況依舊脐供。
第二章 優(yōu)秀程序的要素
那些叫囂著要追求效率的管理者浑塞,正是那些在得知修改代碼的沉重代價(jià)后,為此而傷透腦筋的人患民。相反缩举,那些過(guò)于強(qiáng)調(diào)程序的通用性和易于修改性的主管們,在發(fā)現(xiàn)自己的程序運(yùn)行起來(lái)又慢又費(fèi)空間時(shí)匹颤,往往又會(huì)變得怨天尤人仅孩。對(duì)于這些問(wèn)題,我們必須保持一種成熟的心態(tài)——要知道印蓖,無(wú)論是心理學(xué)還是魔法辽慕,都無(wú)法幫助我們同時(shí)實(shí)現(xiàn)這兩個(gè)相互矛盾的目標(biāo)。通常我們必須在二者之間做取舍赦肃。
在溫伯格先生寫(xiě)作本書(shū)的45年前溅蛉,效率主要指程序在計(jì)算機(jī)中的運(yùn)行效率,在硬件性能已經(jīng)翻天覆地的今天他宛,把“效率”這個(gè)詞理解為軟件的開(kāi)發(fā)效率船侧,這段話同樣成立。
作為一個(gè)好程序厅各,必須具備哪些要素呢镜撩?我們必須考察到不同程序各自的優(yōu)點(diǎn),同時(shí)還要兼顧其所在的環(huán)境队塘。其中一些重要的因素有:
1.該程序是否符合功能要求?或置更確切地說(shuō)袁梗,它在多大程度上滿(mǎn)足功能要求?
2.該程序的開(kāi)發(fā)是否按照計(jì)劃完成?根據(jù)一些特定的方法憔古,我們能夠預(yù)測(cè)出的項(xiàng)目計(jì)劃可能的偏差幅度會(huì)有多大?
3.當(dāng)條件改變時(shí)遮怜,該程序是否可能修改?修改的成本有多大鸿市?
4.程序的效率如何?這里的效率是指什么?為了補(bǔ)償某一個(gè)方面的低效率锯梁,我們是否會(huì)犧牲另一方面的高效率?
思考題:
請(qǐng)主管回答:
1.你根據(jù)什么標(biāo)準(zhǔn)來(lái)確定應(yīng)該獎(jiǎng)勵(lì)哪個(gè)程序員?在你的標(biāo)準(zhǔn)中,是否存在互相矛盾的現(xiàn)象(比如灸芳,強(qiáng)調(diào)程序的效率涝桅,同時(shí)又要求程序具有通用性)?你會(huì)很明確地告訴程序員,自己希望在他們的程序中找到什么嗎?或者說(shuō)烙样,你是否只是告訴他們冯遂,你希望程序很快、很小谒获、整潔蛤肌、易于修改壁却、錯(cuò)誤很少,并且能在一周內(nèi)完成?
3.在你的公司中裸准,制定開(kāi)發(fā)進(jìn)度表的重要程度如何?你是否認(rèn)為“失之毫厘展东、謬以千里”?或者你是否認(rèn)為,在獎(jiǎng)勵(lì)程序員時(shí)應(yīng)該更加看重穩(wěn)定性炒俱,而不是偶然的一次歪打正著?即使一個(gè)計(jì)劃不可靠盐肃,只要它是完成進(jìn)度的唯一希望(盡管可能根本無(wú)法完成該程序),程序員還是會(huì)采用它——你知道這是為什么嗎?
請(qǐng)程序員回答
1权悟,在開(kāi)始進(jìn)行某個(gè)項(xiàng)目時(shí)砸王,你的腦子里是否已經(jīng)有了一些明確的準(zhǔn)則?在確立這些準(zhǔn)則時(shí),你根據(jù)的是不是自己對(duì)于重要性的認(rèn)識(shí)?或者峦阁,是依照上級(jí)主管的看法?在項(xiàng)目的進(jìn)行過(guò)程中谦铃,這些準(zhǔn)則有無(wú)更改?或者,你是否有某種辦法榔昔,來(lái)確保其不被動(dòng)搖?
2.在編寫(xiě)程序時(shí)驹闰,你曾經(jīng)有多少次想到過(guò)它在未來(lái)可能被別人修改?反過(guò)來(lái),在修改別人的程序時(shí)撒会,你又曾經(jīng)咒罵過(guò)幾回?
3.你是否曾經(jīng)因?yàn)樽非?性能"而延誤了工作進(jìn)度?反過(guò)來(lái)嘹朗,是否曾經(jīng)因?yàn)橐谝?guī)定時(shí)間完成,而沒(méi)有做到盡善盡美?
第三章 如何研究程序設(shè)計(jì)
最優(yōu)秀的程序員同時(shí)也是那些最善于自省的诵肛。如果他們發(fā)現(xiàn)做錯(cuò)了什么骡显,他們會(huì)對(duì)導(dǎo)致這個(gè)結(jié)果的思維過(guò)程(或物理過(guò)程)進(jìn)行檢討,然后曾掂,他們會(huì)采取一些相應(yīng)的措施,對(duì)這個(gè)過(guò)程進(jìn)行調(diào)整壁顶。這種被稱(chēng)為“根源分析”的方法珠洗,正是人們希望從我這里獲得的,同時(shí)也是我希望讓更多企業(yè)掌握的——然而不幸的是若专,這種方法還沒(méi)有得到很多人的青睞许蓖。更多的人仍然喜歡使用“過(guò)失追究分析”的方法,這種方法的效果恰恰相反调衰,它會(huì)誘導(dǎo)人們把引發(fā)問(wèn)題的根源隱藏起來(lái)膊爪。
管理心理學(xué)中的一條基本原則:關(guān)注下屬工作的主管,將會(huì)取得更好的成績(jī)嚎莉。
許多主管都希望他們手下的程序員像一個(gè)個(gè)代碼模塊似的工作米酬,那些曾經(jīng)做過(guò)程序員的主管們更是如此。這些主管認(rèn)為趋箩,每個(gè)部下猶如一個(gè)小黑盒赃额,只要輸入要求加派,工作結(jié)果就會(huì)源源不斷地輸出;根本無(wú)需任何觀察跳芳,更不用說(shuō)相互之間的交流溝通了芍锦。很多負(fù)責(zé)軟件開(kāi)發(fā)的主管,就是不愿意與下屬并肩工作——這里最主要的原因就是飞盆,他們從未接受過(guò)任何有關(guān)的培訓(xùn)娄琉,以至于他們根本不了解具體工作應(yīng)該如何著手。
第二篇 作為社會(huì)行為的程序開(kāi)發(fā)
?
本篇主要從社會(huì)行為角度對(duì)程序開(kāi)發(fā)進(jìn)行研究吓歇,溫伯格先生把程序員集體分成三種類(lèi)型:程序開(kāi)發(fā)組孽水、程序開(kāi)發(fā)團(tuán)隊(duì)和程序開(kāi)發(fā)項(xiàng)目,并用三章的篇幅來(lái)依次討論照瘾。
我理解匈棘,這里的程序開(kāi)發(fā)組指的是一種自發(fā)形成的帶有互助性質(zhì)的最小型的松散組織,它有可能跟正式的組織結(jié)構(gòu)重合(最理想狀態(tài)析命,可以極大提高整個(gè)組織的開(kāi)發(fā)效率和產(chǎn)品質(zhì)量)主卫,但更多情況下會(huì)是一種非正式的結(jié)構(gòu)。小組成員有可能是同事或者前同事鹃愤、也可能是技術(shù)討論組中正在進(jìn)行類(lèi)似的開(kāi)發(fā)工作的網(wǎng)友簇搅,而后一種情況也有可能通過(guò)換工作轉(zhuǎn)變成前一種情況。成員們樂(lè)于把工作和學(xué)習(xí)中碰到的問(wèn)題拿出來(lái)互相討論软吐,互相幫助查找問(wèn)題瘩将,取長(zhǎng)補(bǔ)短,相互學(xué)習(xí)凹耙,共同進(jìn)步姿现。技術(shù)主管應(yīng)該致力于把自己領(lǐng)導(dǎo)的團(tuán)隊(duì)變成一個(gè)這樣的開(kāi)發(fā)組。
程序開(kāi)發(fā)團(tuán)隊(duì)則是一個(gè)正式的組織結(jié)構(gòu)肖抱,程序員們被組織到一起來(lái)完成一項(xiàng)必須多人協(xié)作才能完成的任務(wù)备典。
程序開(kāi)發(fā)項(xiàng)目是進(jìn)一步擴(kuò)大的組織,它由多個(gè)團(tuán)隊(duì)組成意述,一起完成一項(xiàng)復(fù)雜的提佣、可分割的大型項(xiàng)目。隨著組織的擴(kuò)大荤崇,程序開(kāi)發(fā)項(xiàng)目主管會(huì)遇到更多的組織管理問(wèn)題拌屏,甚至一些社會(huì)性問(wèn)題。
第四章 程序開(kāi)發(fā)組
為提高開(kāi)發(fā)的效率與質(zhì)量术荤,程序員需要避免唯我獨(dú)尊式的心理倚喂,克服認(rèn)知失調(diào)。溫伯格先生提出了“無(wú)私式程序開(kāi)發(fā)”喜每。
馮·諾伊曼很早就意識(shí)到务唐,他在檢查自己工作方面雳攘,確實(shí)能力不夠,他也許是能夠認(rèn)識(shí)到這一點(diǎn)的第一位程序員枫笛。那些與他相識(shí)的人們回憶說(shuō)吨灭,馮·諾伊曼總是跟別人講自己是多么蹩腳的程序員,并且不厭其煩地請(qǐng)別人閱讀他的程序刑巧,期望發(fā)現(xiàn)其中的錯(cuò)誤與紕漏之處喧兄。然而在今天人們的心目中,馮·諾伊曼一定是位無(wú)與倫比的計(jì)算天才——他渾身上下每個(gè)毛孔都應(yīng)該是完美無(wú)缺的啊楚。當(dāng)然吠冤,馮·諾伊曼的天才絲毫不容懷疑。然而他對(duì)自己作為一個(gè)人所具有的缺陷非常清楚恭理,他的這種自知之明拯辙,也使他遠(yuǎn)遠(yuǎn)超過(guò)當(dāng)今的一般程序員。
關(guān)于團(tuán)隊(duì)集體在軟件開(kāi)發(fā)過(guò)程中的價(jià)值颜价,還有個(gè)別人仍然沒(méi)有認(rèn)識(shí)到涯保。或者也許他們確實(shí)認(rèn)識(shí)到了周伦,但是受制于其對(duì)個(gè)人職位的患得患失夕春,他們的做法總是南轅北轍。現(xiàn)在對(duì)軟件開(kāi)發(fā)主管們的考評(píng)专挪,很大程度上仍然是根據(jù)其已有的成果多少及志,而不是看其是否有能力建立能夠創(chuàng)造出更多成果的團(tuán)隊(duì),或是看他們的成果質(zhì)量寨腔。在這樣的壓力下速侈,主管們就會(huì)極盡其能事,編造種種相互矛盾的甜言蜜語(yǔ)去哄騙其屬下迫卢,以期得到更多成果——當(dāng)然锌畸,這些成果大多是短期的。他們的一些下屬也可能領(lǐng)悟出這個(gè)游戲的原理靖避,于是也會(huì)效仿這種伎倆,去欺騙他們的下屬······比默,這樣一直下去幻捏,直到他們也成為這樣的主管。這種主管根本不屑于去建立團(tuán)隊(duì)命咐,也開(kāi)發(fā)不出什么高質(zhì)量的成果篡九,而只會(huì)再帶出更多像他一樣的下屬——有朝一日這些人又將成為下一代被這樣誤導(dǎo)的主管。
第五章 程序開(kāi)發(fā)團(tuán)隊(duì)
無(wú)論具體情況如何醋奠,程序開(kāi)發(fā)團(tuán)隊(duì)的規(guī)模和組成似乎都符合這樣一條基本的規(guī)律——如果希望通過(guò)最小的代價(jià)獲得最佳的開(kāi)發(fā)效果榛臼,你必須找到盡可能出色的程序員伊佃,并且給他們以盡可能長(zhǎng)的時(shí)間,這樣你需要的程序員數(shù)量也將最少沛善。反之航揉,如果你希望工作能盡可能快地完成,或者雇用盡量少的經(jīng)驗(yàn)豐富的程序員金刁,那么開(kāi)發(fā)成本與不確定性都會(huì)隨之增加帅涂。
在程序開(kāi)發(fā)的過(guò)程中,開(kāi)發(fā)團(tuán)隊(duì)中各成員的地位尤蛮,通常在很大程度上取決于其他人對(duì)其個(gè)人能力的了解程度媳友。如果程序能夠(在團(tuán)隊(duì)中自由)流通,供程序員們相互評(píng)判产捞、指正醇锚,那么“精英們”就能夠更快地脫穎而出。
為了實(shí)現(xiàn)在集體目標(biāo)上真正的意見(jiàn)一致坯临,最好的辦法莫過(guò)于讓開(kāi)發(fā)組自己來(lái)確定其目標(biāo)焊唬。首先,在目標(biāo)制定時(shí)廣泛參與尿扯,可以確保目標(biāo)能夠被大家充分理解求晶。另外,這個(gè)過(guò)程使集體中的每個(gè)成員可以有機(jī)會(huì)對(duì)共同的目標(biāo)做出公開(kāi)的承諾衷笋,而——也許是因?yàn)檎J(rèn)知失調(diào)的作用——這種公開(kāi)的承諾已被證明可以提高目標(biāo)的可接受性芳杏。這種參與和其他因素不相干,但是參與本身卻似乎是一項(xiàng)重要的因素辟宗,它能夠決定各個(gè)成員是否真的接受了開(kāi)發(fā)團(tuán)隊(duì)的任務(wù)目標(biāo)爵赵,并提高開(kāi)發(fā)效率。
而最大的危險(xiǎn)則來(lái)自于主管泊脐,由于他們都是經(jīng)過(guò)程序開(kāi)發(fā)中的層層選拔才得以出頭的空幻,所以這些人總是希望在手下成員看到問(wèn)題之前,就已經(jīng)把每一個(gè)細(xì)枝末節(jié)都詳細(xì)地定義好了容客。再?zèng)]有其他做法能夠更挫傷成員的積極性了秕铛,它只能使成員覺(jué)得自己不過(guò)是“編碼器”而已。
就社會(huì)科學(xué)家對(duì)“領(lǐng)導(dǎo)能力”一詞的使用而言缩挑,其含義應(yīng)該是“對(duì)他人的影響能力”但两。程序員一般會(huì)更加注重創(chuàng)造性的工作及專(zhuān)業(yè)能力评抚,在他們所從事的工作范圍內(nèi)谜酒,他們會(huì)對(duì)些被自己認(rèn)定為很出色的人更加器重。這樣各拷,與那些世界級(jí)的口若懸河的推銷(xiāo)商們相比,作為一名語(yǔ)調(diào)溫和的程序開(kāi)發(fā)奇才紧阔,將可以更加輕松地對(duì)程序員們進(jìn)行領(lǐng)導(dǎo)(或影響)坊罢。當(dāng)一名根本沒(méi)有編過(guò)程序的領(lǐng)導(dǎo)者被指定負(fù)責(zé)某個(gè)開(kāi)發(fā)團(tuán)隊(duì)時(shí),除非該領(lǐng)導(dǎo)者明確地或者含蓄地承認(rèn)自己在技術(shù)問(wèn)題上的能力欠缺擅耽,否則注定會(huì)有麻煩發(fā)生活孩。即便是那些曾經(jīng)當(dāng)過(guò)程序員的人,只要他后來(lái)有相當(dāng)長(zhǎng)的時(shí)間脫離了這個(gè)行當(dāng)秫筏,如果他依然企圖去與團(tuán)隊(duì)中的其他成員在程序開(kāi)發(fā)才能方面一比高低诱鞠,那么情況簡(jiǎn)直就糟糕透頂了。對(duì)于那些公開(kāi)承認(rèn)自己在程序開(kāi)發(fā)方面經(jīng)驗(yàn)欠缺的人这敬,他的團(tuán)隊(duì)成員還有可能會(huì)尊重他航夺,但是如果有人企圖掩蓋自己在這些方面的無(wú)知,那么等到他遲早露餡的時(shí)候崔涂,就會(huì)招致程序員們的無(wú)情嘲弄阳掐。
目光短淺、難以依賴(lài)的團(tuán)隊(duì)領(lǐng)導(dǎo)者可能會(huì)認(rèn)為博得管理層歡心的最好方法冷蚂,就是無(wú)論他們要求什么都滿(mǎn)口答應(yīng)缭保。但是最后,管理層需要的不只是諾言蝙茶,而更重要的是恪守諾言艺骂,只有在團(tuán)隊(duì)的領(lǐng)導(dǎo)者有能力使整個(gè)團(tuán)隊(duì)都接受這個(gè)諾言,并且以此作為集體的目標(biāo)隆夯,諾言才有可能兌現(xiàn)钳恕。
團(tuán)隊(duì)的領(lǐng)導(dǎo)者需要學(xué)習(xí)的東西包括:
1、無(wú)論主管們?cè)鯓拥貜?qiáng)調(diào)諾言蹄衷,他們真正關(guān)心的只是結(jié)果忧额。
2、如果希望得到的結(jié)果與在整個(gè)團(tuán)隊(duì)的參與下所確定的工作目標(biāo)一致愧口,那么這一目標(biāo)就會(huì)非常容易地實(shí)現(xiàn)睦番。
領(lǐng)導(dǎo)能力方面的一個(gè)悖論非常簡(jiǎn)單:只有隨時(shí)準(zhǔn)備下臺(tái)的領(lǐng)導(dǎo)者,才有可能獲得成功耍属。
將影響到一個(gè)團(tuán)隊(duì)的生命期及其績(jī)效的因素包括:
1.各成員的特長(zhǎng)與不足托嚣。
2.目標(biāo)設(shè)定的方式。
3.待開(kāi)發(fā)的程序的結(jié)構(gòu)厚骗。
4.由外界強(qiáng)加的領(lǐng)導(dǎo)管理結(jié)構(gòu)注益。
5.某些成員的性別,以及其他成員對(duì)待這種性別的態(tài)度溯捆。
6.團(tuán)隊(duì)與其周?chē)h(huán)境中其他部分之間的溝通聯(lián)系。
7.團(tuán)隊(duì)領(lǐng)導(dǎo)人在技術(shù)方面的能力與欠缺。
第六章 程序開(kāi)發(fā)項(xiàng)目
如果項(xiàng)目主管希望穩(wěn)定地推進(jìn)自己的項(xiàng)目提揍,他就必須嚴(yán)格遵守這樣一條簡(jiǎn)單的格言:
如果某個(gè)程序員是不可或缺的啤月,那么還是越快請(qǐng)他走人越好。
關(guān)于績(jī)效評(píng)價(jià)劳跃,溫伯格先生舉了一個(gè)逐層匯報(bào)系統(tǒng)的例子谎仲。
有一個(gè)眾所周知的心理學(xué)原理:如果要使學(xué)習(xí)的速度最快,必須向主體及時(shí)地反饋其表現(xiàn)之好或之壞到了什么地步刨仑。但是也許不為人所知的一點(diǎn)是如果人們感到他們的績(jī)效正在受人考評(píng)郑诺,同時(shí)又不能充分了解別人到底如何評(píng)價(jià)自己的工作,那么他們就會(huì)通過(guò)不斷變化的方法來(lái)試探這個(gè)評(píng)價(jià)系統(tǒng)杉武。在像這樣的報(bào)告系統(tǒng)之中辙诞,如果在提供了輸人數(shù)據(jù)之后,處于底層的人們沒(méi)法獲得相應(yīng)的評(píng)價(jià)反饋轻抱,那么他們就會(huì)隨心所欲地改變自己輸人的數(shù)據(jù)飞涂,然后觀察可能產(chǎn)生的不同效果——以期得到一些反饋,哪怕評(píng)價(jià)的結(jié)果很不理想祈搜。
第三篇 作為個(gè)人行為的程序開(kāi)發(fā)
在探討了程序開(kāi)發(fā)中人類(lèi)作為主體的共性問(wèn)題之后较店,本篇開(kāi)始討論具體程序員的個(gè)體偏差。我感覺(jué)這部分沒(méi)有前面兩篇精彩容燕,尤其是與性格理論相關(guān)部分梁呈,溫伯格先生在評(píng)注中也表示,如果要在25年后重寫(xiě)這本書(shū)的話蘸秘,這一部分將是改動(dòng)最多的官卡。
在談到業(yè)余程序員與專(zhuān)業(yè)程序員時(shí),溫伯格先生說(shuō):
如果希望確定一名程序員的工作是否出色秘血,我們就必須看看味抖,他是不是按照恰當(dāng)?shù)募?jí)別來(lái)處理這個(gè)問(wèn)題。有些人可以憑借其才氣與個(gè)性灰粮,成為一名出色的業(yè)余程序員仔涩,但是從專(zhuān)業(yè)程序員的標(biāo)準(zhǔn)來(lái)看,這種才氣與個(gè)性往往正是極不合適的粘舟。重要的是根據(jù)手頭待解決的問(wèn)題來(lái)調(diào)整自己工作方式的能力熔脂,而一旦缺乏這種能力,任何人都絕對(duì)不適合做一名專(zhuān)業(yè)程序員柑肴。
程序員工作績(jī)效的差異霞揉,在很大程度上取決于其對(duì)完成任務(wù)目標(biāo)的不同理解。
除了智力以外晰骑,程序開(kāi)發(fā)的成功(或者失敗)還取決于其他的很多因素适秩。我確實(shí)曾經(jīng)發(fā)現(xiàn),有些人貌似駑鈍,卻可以寫(xiě)出高質(zhì)量的秽荞、很有用的代碼骤公;而另外一些人雖然看起來(lái)更顯聰穎,卻從沒(méi)寫(xiě)出過(guò)任何有用的代碼扬跋。簡(jiǎn)而言之阶捆,今天的我依然堅(jiān)持自己經(jīng)過(guò)了25年時(shí)間考驗(yàn)的立場(chǎng):“·····較之智力因素,人格因素钦听、工作習(xí)慣及培訓(xùn)等方面的因素要與此更為相關(guān)洒试。這些因素與智力因素不同,它們都可以通過(guò)后天經(jīng)驗(yàn)發(fā)生改變朴上。因此垒棋,選拔程序員的問(wèn)題就轉(zhuǎn)化成為培養(yǎng)程序員的問(wèn)題。"
我所謂的“培養(yǎng)程序員”余指,并不是強(qiáng)行要求他們按照某種“最佳”模式進(jìn)行思考捕犬。我在自己的博士學(xué)位論文中曾清楚地指出問(wèn)題求解的模式是因人而異的。所以酵镜,如果有什么力量強(qiáng)制某個(gè)程序員按照另一個(gè)人的模式進(jìn)行思考碉碉,那么就必將削弱該程序員解決問(wèn)題的能力。因此淮韭,最大的挑戰(zhàn)并不在于創(chuàng)造性思維本身垢粮,而是創(chuàng)造性的交流,用可以為(各有其獨(dú)特思維方式的)其他人所接受的方式重新表述我們自己的思想靠粪。
對(duì)照自己前些日子的工作蜡吧,創(chuàng)造性交流是我目前十分欠缺的。
主管們所犯的一個(gè)錯(cuò)誤就是占键,他們總是假設(shè)工作績(jī)效差的原因是由于缺乏積極性昔善。于是,他們會(huì)企圖借助一點(diǎn)“外部驅(qū)動(dòng)力”來(lái)彌補(bǔ)“內(nèi)在驅(qū)動(dòng)力”的不足畔乙。而在這種時(shí)候君仆,其實(shí)程序員所承擔(dān)的外部壓力往往已經(jīng)夠大了,而并非不夠牲距。
關(guān)于積極性返咱,最廣為人知、也最廣為人接受的一項(xiàng)研究成果就是:如果適當(dāng)?shù)卦黾印膀?qū)動(dòng)力”牍鞠,那么在開(kāi)始階段確實(shí)可以提高工作績(jī)效咖摹;但是一旦超過(guò)一定的極限之后,繼續(xù)增加這種“驅(qū)動(dòng)力”只會(huì)很快地令工作績(jī)效降為0难述。在復(fù)雜的任務(wù)中萤晴,更容易看到這種工作績(jī)效急速下降的現(xiàn)象吐句,這正是它對(duì)程序開(kāi)發(fā)如此重要的原因所在。比方說(shuō)店读,過(guò)于努力地去查找錯(cuò)誤蕴侧,與根本不去查找同樣壞,至還要更壞两入。實(shí)際上,往往要等到程序員已經(jīng)決定放棄從而不再承受壓力之后敲才,許多程序錯(cuò)誤才能被排除掉裹纳。給程序員施加高壓,以期他們能夠很快地排除某個(gè)程序錯(cuò)誤紧武,這種做法已經(jīng)被證明是最差的策略——盡管截至目前剃氧,這仍然是最常采用的策略。
為了激勵(lì)程序員阻星,就可以授予他們金錢(qián)之處的獎(jiǎng)賞——比如說(shuō)朋鞍,對(duì)他的工作質(zhì)量給予更多地關(guān)心,或者讓他負(fù)責(zé)一點(diǎn)規(guī)劃工作妥箕。需要提醒你的是:這并不只是要為公司節(jié)省經(jīng)費(fèi)滥酥,而是為了更有效地激勵(lì)他們。
也許正是由于管理人員反復(fù)不斷地催促盡快“完成”任務(wù)畦幢,所以經(jīng)常出現(xiàn)的情況就是:一旦程序被認(rèn)為是“可以工作的”坎吻,程序員馬上就宣告其大功告成——其實(shí)這往往是一種誤解。但是作為程序員宇葱,只要希望學(xué)習(xí)瘦真,那么你就必須一邊頂住來(lái)自管理層的壓力,一邊花時(shí)間對(duì)自己的成功進(jìn)行總結(jié)黍瞧。而對(duì)于管理人員來(lái)說(shuō)诸尽,一個(gè)好的做法就是:每當(dāng)程序員宣稱(chēng)自己的項(xiàng)目已經(jīng)“大功告成”時(shí),給他一天的時(shí)間放松一下——這并不是一種獎(jiǎng)賞印颤,而是為了讓程序員加深對(duì)該項(xiàng)目的理解您机。
第四篇 程序開(kāi)發(fā)工具
本篇中溫伯格先生花了很多篇幅討論語(yǔ)言問(wèn)題。我對(duì)此不感興趣膀哲,因此略過(guò)往产。
第五篇結(jié)語(yǔ)
結(jié)語(yǔ)的最后一段我很喜歡,摘錄于此:
我們正站在一個(gè)新時(shí)代的邊緣某宪,正是由于蘊(yùn)藏于計(jì)算機(jī)之中仿村、遲早要發(fā)生的革命,這個(gè)時(shí)代才有可能到來(lái)兴喂。站在這個(gè)邊緣蔼囊,我們有兩個(gè)可以選擇的力向——邁人自由的黃金時(shí)代焚志,抑或是倒退回專(zhuān)制的黑暗年代——無(wú)論你如何選擇,這個(gè)世界中任何已知的事物都將被人類(lèi)征服畏鼓。也許任何個(gè)人的努力對(duì)最終的結(jié)果都不會(huì)有什么影響酱酬,但是我們絕對(duì)不應(yīng)該放棄嘗試,因?yàn)榉駝t其后果必然是回到專(zhuān)制云矫。這本書(shū)就是我反抗專(zhuān)制膳沽、反抗人奴役人、反抗被自己的無(wú)知所奴役的一次努力让禀。但愿專(zhuān)制的力量不會(huì)利用這本書(shū)挑社,但是毫無(wú)疑問(wèn),專(zhuān)制的力量確實(shí)會(huì)借鑒這本書(shū)巡揍。既然在這方面的希望破滅了痛阻,那么我只能希冀,處于杠桿另一端的正義力量能夠從本書(shū)中獲得更大的幫助腮敌。