對(duì)于軟件項(xiàng)目管理的一些思考
這些天里工作的環(huán)境發(fā)生了一些微小的變化,可能以后對(duì)基層開(kāi)發(fā)的程序員也會(huì)有更加具體的影響。上周參加 Open Party 時(shí),重點(diǎn)聽(tīng)了《那些失敗的項(xiàng)目們》,分析了一個(gè)項(xiàng)目的提出、實(shí)施,直到***失敗的過(guò)程。我也在想一個(gè)技術(shù)團(tuán)隊(duì)究竟應(yīng)該用怎樣的一種管理方式,才能讓技術(shù)團(tuán)隊(duì)的效率達(dá)到更優(yōu)。
我分了幾個(gè)小主題,下面一一講來(lái)。
一個(gè)程序員一天有多長(zhǎng)時(shí)間在高效率地工作?
雖然現(xiàn)在絕大部分 IT 公司都聲稱是 8 小時(shí)工作制,但作為開(kāi)發(fā)一線的程序員們一天里真正在高效工作的時(shí)間,絕少能超過(guò) 4 個(gè)小時(shí),甚至一般只有兩個(gè)小時(shí)左右。這是我這兩年半以來(lái)對(duì)我自己和跟一些朋友交流得到的結(jié)論。而對(duì)于一個(gè)有經(jīng)驗(yàn)的程序員來(lái)說(shuō),高效率時(shí)段和心不在焉的情況下,工作效率可以差上10倍或者20多倍。我曾經(jīng)有過(guò)用兩個(gè)多小時(shí)的時(shí)間把半個(gè)星期的任務(wù)都完成的經(jīng)歷。
因?yàn)檎嬲咝У臅r(shí)段非常少,所以加班在我看來(lái)是根本不必要的。如果團(tuán)隊(duì)里的人個(gè)個(gè)都精力十足,能力超群,一天能高效工作4個(gè)小時(shí),那是非常了不起的。不過(guò)這樣就引出了下一個(gè)問(wèn)題,既然加班是不必要的,那為什么會(huì)時(shí)常不得不加班呢?
為什么要加班
一句話來(lái)概括,之所以需要加班,是因?yàn)榘滋斓臅r(shí)候程序員們都沒(méi)有好好干活。
那些主管、老板們聽(tīng)到這話時(shí)先不要著急去找程序員算賬,先想想自己的管理方式有沒(méi)有問(wèn)題。程序員們的工作特點(diǎn)是,他們要面對(duì)各種細(xì)節(jié)問(wèn)題、權(quán)衡各種實(shí)現(xiàn)方案、測(cè)試已實(shí)現(xiàn)的功能。這是一種很需要細(xì)心和耐心的工作,典型的腦力勞動(dòng)。要讓程序員們進(jìn)入這種狀態(tài),你需要為他們提供必要的條件。在我看來(lái),這條件是如此地簡(jiǎn)單,那就是:不去打擾他們。
當(dāng)你全神貫注地做一件事的時(shí)候,有人跑過(guò)來(lái)問(wèn)了你一個(gè)問(wèn)題,你花了5分鐘去給他講,等你講完時(shí),卻發(fā)現(xiàn)很難再進(jìn)入到剛才那種全神貫注地狀態(tài)了。有些程序員們對(duì)這種事情極為反感,有些則是會(huì)用極簡(jiǎn)潔的語(yǔ)言給對(duì)方講,因?yàn)橐坏﹩缕饋?lái),程序員們可能就再也做不下去了。也因此,這些人經(jīng)常會(huì)被人認(rèn)為是“缺乏溝通能力”。依我看,這不是溝通能力的問(wèn)題,這反而是對(duì)工作負(fù)責(zé)任的態(tài)度。
做為程序員的上司,應(yīng)該想想,在你的公司里,程序員的工作是支持別人(為別人答疑解惑),還是開(kāi)發(fā)產(chǎn)品。如果是后者,你是否又過(guò)于強(qiáng)調(diào)了溝通能力?要知道如果程序員的工作是做出高質(zhì)量的軟件產(chǎn)品,那你就應(yīng)該讓他專心做好這一件事,別讓他又寫(xiě)代碼又當(dāng)客服。程序員不專心,白天的溝通太多,就不能做完工作。只好等到晚上加班,別人都走了,他在沒(méi)有干擾的情況下才有可能進(jìn)入高效的狀態(tài)(注意我說(shuō)的是有可能)。
我所理解的“溝通能力”
我不認(rèn)為僅僅能夠耐心地給別人講問(wèn)題就算是溝通能力強(qiáng)。我認(rèn)為對(duì)于程序員來(lái)說(shuō),溝通能力首先表現(xiàn)在你寫(xiě)的代碼要容易讀懂,當(dāng)別人接手你的代碼時(shí),不至于讓對(duì)方過(guò)于旨解。同樣地,你也要善于讀懂別人的代碼,程序員的思維、設(shè)計(jì)全部都體現(xiàn)在代碼里??梢哉f(shuō),只要你有代碼,你就應(yīng)該盡量自己弄明白原作者的意思,盡可能不去動(dòng)不動(dòng)就問(wèn)別人。理由同上面所說(shuō),減少對(duì)他人的干擾。
其次,溝通能力還應(yīng)該體現(xiàn)在所寫(xiě)的文檔中。如API接口文檔,把每一個(gè)API的功能、參數(shù)類(lèi)型、返回值類(lèi)型、異常情況等等都用簡(jiǎn)潔的、沒(méi)有歧義的語(yǔ)言描述出來(lái)。這樣讓后來(lái)的人有據(jù)可查,不用到處咨詢他人就可以在你的基礎(chǔ)上開(kāi)發(fā)。對(duì)于程序員來(lái)說(shuō),文檔不要求生動(dòng)形象,但必需要沒(méi)有歧義。有這樣的文檔,當(dāng)有人再來(lái)回跑來(lái)跑去問(wèn)你問(wèn)題時(shí),你可以直接讓他去看代碼或者文檔,你需要專心地做手頭上的工作。
少開(kāi)會(huì)
我曾經(jīng)參加過(guò)一個(gè)兼職的項(xiàng)目,項(xiàng)目的負(fù)責(zé)人找來(lái)的幾個(gè)人也都是兼職的,在不同的公司工作。有一次商量設(shè)計(jì)方案,負(fù)責(zé)人說(shuō)要聚在一起討論,也就是開(kāi)會(huì)。對(duì)于我們這些人來(lái)說(shuō),從不同的地方坐半天地鐵跑到一塊,就為了開(kāi)一個(gè)1小時(shí)的會(huì),這實(shí)在太不合算了。我當(dāng)時(shí)說(shuō)其實(shí)根本沒(méi)有必要讓大家抽出晚上的時(shí)間跑過(guò)來(lái),直接在網(wǎng)上說(shuō)就足夠了。不過(guò)那個(gè)負(fù)責(zé)人說(shuō)面對(duì)面的溝通效率高。呃……我為了過(guò)來(lái)和你面對(duì)面的溝通1小時(shí),要花1個(gè)半小時(shí)的時(shí)間在路上,反正我是不相信這種方式的效率會(huì)高……
在《Rework》里看到一種觀點(diǎn),說(shuō)你把10個(gè)人叫到一塊,開(kāi)了1個(gè)小時(shí)的會(huì),就相當(dāng)于浪費(fèi)了10個(gè)小時(shí)。其實(shí)遠(yuǎn)不止10個(gè)小時(shí)。參會(huì)的人要準(zhǔn)備,聽(tīng)會(huì)的人被打斷工作,加起來(lái)有可能浪費(fèi)超過(guò)20個(gè)小時(shí)。
關(guān)于結(jié)對(duì)編程
結(jié)對(duì)編程是在敏捷開(kāi)發(fā)中提到的一種編程方法,即兩個(gè)人共用一臺(tái)電腦,一個(gè)人寫(xiě)代碼,另一個(gè)人對(duì)他的代碼實(shí)時(shí)檢查。我一向不主張這種做法,在我看來(lái),這種做法有兩個(gè)弊端:
首先是違背了我前面所說(shuō)的,不要去打擾工作中的程序員。結(jié)對(duì)編程恰恰是對(duì)工作中的程序員不停的打擾。試想一下,當(dāng)你在實(shí)現(xiàn)一個(gè)比較復(fù)雜的邏輯時(shí),你旁邊的人不停地在說(shuō)“可能有更好的辦法……”、“變量名寫(xiě)錯(cuò)了”之類(lèi)的話,你還能專心地寫(xiě)下去嗎?反正我是覺(jué)得不能了。我甚至感覺(jué),如果在我寫(xiě)程序的時(shí)候背后有人在盯著我,我都沒(méi)辦法寫(xiě)下去。
另一個(gè)弊端是,在旁邊監(jiān)督的人往往不如親自寫(xiě)代碼的人想得仔細(xì),因?yàn)樗粚?xiě)代碼,沒(méi)有親自參與到開(kāi)發(fā)一線中去,就不會(huì)很專心,容易形成敷衍于事的情況。搞結(jié)對(duì)編程,不僅極大降低了其中一個(gè)程序員的開(kāi)發(fā)效率,還幾乎白白浪費(fèi)了另一個(gè)程序員的人力。
不要以加班為榮
領(lǐng)導(dǎo)往往容易認(rèn)為,肯加班的員工就是好員工。要我說(shuō),完全不是這回事。首先加班是不必要的,前面已經(jīng)說(shuō)過(guò)。如果出現(xiàn)了不得不加班的情況,那就是領(lǐng)導(dǎo)沒(méi)當(dāng)好,程序員沒(méi)幾個(gè)愿意晚上加班的。恰恰相反,如果一個(gè)員工很少加班的話,說(shuō)明他的效率高、能力強(qiáng),反而應(yīng)該給予獎(jiǎng)勵(lì)。而目前的薪酬制度,使得加班多的能多拿加班費(fèi),受到領(lǐng)導(dǎo)的重視;而真正的高效率員工往往被視而不見(jiàn),只能拿基本工資。加班干活的員工不一定是好員工(但加班自學(xué)深造的一定是好員工)。
原文鏈接:http://www.cnblogs.com/ggggqqqqihc/archive/2011/07/31/2122696.html
【編輯推薦】