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