The Joel Test:軟件開(kāi)發(fā)成功12法則
有沒(méi)有聽(tīng)說(shuō)過(guò)SEMA?這可是衡量一個(gè)軟件開(kāi)發(fā)組好壞的很深?yuàn)W的系統(tǒng)。別介,等一下!別按那個(gè)聯(lián)接! 給你六年你也搞不清這玩意。所以我自己隨便攢了一套衡量系統(tǒng),信不信由你,這系統(tǒng),三分鐘就可掌握。你可以把省下的時(shí)間去讀醫(yī)學(xué)院了(譯注:美國(guó)的醫(yī)學(xué)院可是要讀死人的!)。
Joel 衡量法則
|
“Joel 衡量法則”好就好在你只需照著逐條回答以上問(wèn)題,然后把所答為“是”的問(wèn)題算成一分,再加起來(lái)就可以了,而不需要去算什么每天寫(xiě)的程序行數(shù)或程序蟲(chóng)的平均數(shù)等等。但咱丑話說(shuō)在前面,可別用“Joel 衡量法則”去推算你的核電站管理程序是否可靠。
如果你們得了12分,那是***,得了11分還過(guò)得去,但如果只得了10分或低于10分,你們可能就有很?chē)?yán)重的問(wèn)題了。嚴(yán)酷的現(xiàn)實(shí)是:大多數(shù)的軟件開(kāi)發(fā)公司只能得到2到3分。這些公司如果得不到急救可就玄了,因?yàn)橄裎④涍@樣的公司從來(lái)就沒(méi)有低過(guò)12分。
當(dāng)然,一個(gè)公司成功與否不僅僅只取決于以上標(biāo)準(zhǔn)。比如,讓一個(gè)管理***的軟件公司去開(kāi)發(fā)一個(gè)沒(méi)有人要的軟件,那開(kāi)發(fā)出來(lái)的軟件也只能是沒(méi)有人要?;蚍催^(guò)來(lái),一幫軟件痞子以上標(biāo)準(zhǔn)一條也達(dá)不到,沒(méi)準(zhǔn)照樣也能搞出一個(gè)改變世界的偉大軟件。但我告訴你,如果不考慮別的因素,你只要能達(dá)到以上12條準(zhǔn)則,你的團(tuán)隊(duì)就是一個(gè)可以準(zhǔn)時(shí)交活的紀(jì)律嚴(yán)明的好團(tuán)隊(duì)。
1. 你們用不用源文件管理系統(tǒng)?
我用過(guò)商業(yè)化的源文件管理系統(tǒng),我也用過(guò)免費(fèi)的系統(tǒng),比如CVS,告訴你吧,CVS挺好用。但如果你根本就沒(méi)有用源文件管理系統(tǒng),那你就是累死了也沒(méi)法讓你的程序員出活:他們沒(méi)法知道別人在改動(dòng)什么源文件,寫(xiě)錯(cuò)了的源文件也沒(méi)法恢復(fù)。
使用源文件管理系統(tǒng)還有一大好處是,由于每一位程序員都把源文件從源文件管理系統(tǒng)里提出來(lái)放到自己的硬盤(pán)里,幾乎不會(huì)發(fā)生丟失源文件的事,最起碼我還沒(méi)聽(tīng)說(shuō)過(guò)。
2. 你們可以把整個(gè)系統(tǒng)從源碼到CD映像文件一步建成嗎?
這句話問(wèn)的問(wèn)題是:從你們***的源碼開(kāi)始到建立起能夠交出去的***文件,你們有多少步驟要做? 一個(gè)好的團(tuán)隊(duì)?wèi)?yīng)該有一個(gè)批處理程序一步便可將所有的工作做完,像把源文件提取出來(lái),跟據(jù)不同的語(yǔ)言版本要求(英文版,中文版),和各種編譯開(kāi)關(guān)(#ifdef)進(jìn)行編譯,聯(lián)接成可執(zhí)行文件,標(biāo)上版本號(hào),打包成CD映像文件或直接送到網(wǎng)站上去,等等等等。
如果這些步驟不是一步做完,就有可能出人為差錯(cuò)。而且當(dāng)你很接近產(chǎn)品開(kāi)發(fā)尾聲的時(shí)侯,你可能很急于把***幾個(gè)蟲(chóng)解決,然后盡快地交活。如果這時(shí)候你需要做20步才能把最終文件制出來(lái),你肯定會(huì)急得要命,然后犯一些很不該犯的錯(cuò)誤。
正因?yàn)檫@個(gè)原因,我工作的前一個(gè)公司從用WISE改用InstallShield:我們必需要讓我們的批處理程序完全自動(dòng)化地,在夜里,被NT scheduler起動(dòng)把最終文件制成,WISE不能被NT scheduler啟動(dòng)而InstallShield可以,我們只能把WISE扔掉。(WISE的那幫家伙向我保證他們的下一代產(chǎn)品一定支持在夜里自動(dòng)運(yùn)行.)
3. 你們每天白天都把從系統(tǒng)源碼到CD映像做一遍嗎?
你們有沒(méi)有遇到過(guò)這樣的事情:一個(gè)程序員不小心把有毛病的源碼放進(jìn)源文件管理系統(tǒng),結(jié)果造成最終文件沒(méi)法制成。比如,他建立了一個(gè)新源文件但忘了把它放進(jìn)源文件管理系統(tǒng),然后他高高興興鎖機(jī)回家了,因?yàn)樵谒臋C(jī)器上整個(gè)編譯得很好??墒莿e人卻因?yàn)檫@沒(méi)法工作下去了,也只好悶悶地回家了。
這種造成最終文件沒(méi)法制成的情況很糟糕,但卻很常見(jiàn)。如果每天在白天就把最終文件制一遍的話,就可以讓這種事不造成太大危害。在一個(gè)大的團(tuán)隊(duì)里,要想保證有毛病的源碼及時(shí)得到糾正,***每天下午(比如午餐時(shí))制一下最終文件。午餐前,每個(gè)人都盡可能地把改動(dòng)的源文件放到源文件管理系統(tǒng)里,午餐后,大家回來(lái),如果最終文件已經(jīng)制成了,好!這時(shí)大家再?gòu)脑次募芾硐到y(tǒng)里取出***的源文件接著干活。如果最終文件制作出錯(cuò),出錯(cuò)者馬上修正,而別人還可接著用原有的沒(méi)問(wèn)題的源程序干活。
在我以前曾干過(guò)的微軟Excel開(kāi)發(fā)組里,我們有一條規(guī)定:誰(shuí)造成最終文件制作出錯(cuò),誰(shuí)就得被罰去負(fù)責(zé)監(jiān)視以后的最終文件制作過(guò)程,直到下一位造成最終文件制作出錯(cuò)的人來(lái)接任他。這樣做不僅可以督促大家少造成最終文件制作出錯(cuò),而且可以讓每個(gè)人都有機(jī)會(huì)去了解最終文件制作過(guò)程。
如果想更多了解這個(gè)話題,可以讀我的另一篇文章 Daily Builds are Your Friend.
4. 你們有軟件蟲(chóng)管理系統(tǒng)嗎?
不論你有任何借口,只要你寫(xiě)程序,哪怕只是一個(gè)人的小組,如果你沒(méi)有一個(gè)系統(tǒng)化的管理軟件蟲(chóng)的工具,你寫(xiě)的程序的質(zhì)量一定高不了。許多程序員覺(jué)得自己可以記得自己的軟件蟲(chóng)。沒(méi)門(mén)!我從來(lái)記不住超過(guò)2到3個(gè)軟件蟲(chóng)。而且第二天早上起床后忙著去買(mǎi)這買(mǎi)那,好不容易記住的軟件蟲(chóng)早忘掉了。你絕對(duì)需要一個(gè)系統(tǒng)來(lái)管住你的那些蟲(chóng)。
軟件蟲(chóng)管理系統(tǒng)功能有多有少。但最少要管理以下幾種信息:
- 如何重復(fù)軟件蟲(chóng)的詳細(xì)步驟
- 正常情況(無(wú)蟲(chóng))應(yīng)是怎樣
- 現(xiàn)在情況(有蟲(chóng))又是怎樣
- 誰(shuí)來(lái)負(fù)責(zé)殺蟲(chóng)
- 問(wèn)題有沒(méi)有解決
如果你覺(jué)得用軟件蟲(chóng)管理系統(tǒng)太麻煩,可以簡(jiǎn)化一下,建立一個(gè)有以上5列的表來(lái)用就行了。
如果想更多了解這個(gè)話題,可以讀我的另一篇文章Painless Bug Tracking.
5. 你們?cè)趯?xiě)新程序之前總是把現(xiàn)有程序里已知的蟲(chóng)解決嗎?
微軟Windows Word的***版的開(kāi)發(fā)項(xiàng)目曾被認(rèn)為是“死亡之旅”項(xiàng)目。好象永遠(yuǎn)也做不完,永遠(yuǎn)超時(shí)。所有人瘋狂地工作,可怎么也完成不了任務(wù)。整個(gè)項(xiàng)目一拖再拖,大家都覺(jué)得壓力大得受不了。***終于做完了這個(gè)鬼項(xiàng)目,微軟把全組送到墨西哥的Cancun去度假,讓大家坐下來(lái)好好想想。
大家意識(shí)到由于項(xiàng)目經(jīng)理過(guò)于強(qiáng)求程序員們按時(shí)交活,結(jié)果大家只能匆匆地趕活,寫(xiě)出的程序毛病百出。由于項(xiàng)目經(jīng)理的開(kāi)發(fā)計(jì)劃并沒(méi)有考慮殺蟲(chóng)的時(shí)間,大家只能把殺蟲(chóng)的任務(wù)往后推,結(jié)果蟲(chóng)越積越多。有一個(gè)程序員負(fù)責(zé)寫(xiě)計(jì)算字體高度的程序,為了圖快,居然寫(xiě)一行“return 12;”了事。他指望以后的質(zhì)檢人員發(fā)現(xiàn)這段程序有毛病后報(bào)告他再改正。項(xiàng)目經(jīng)理的開(kāi)發(fā)計(jì)劃事實(shí)上已變成一個(gè)列寫(xiě)程序功能的清單,而上面列的所謂程序功能遲早都會(huì)成為軟件蟲(chóng)。在項(xiàng)目總結(jié)會(huì)上,我們稱這種工作方法為“絕對(duì)劣質(zhì)之路”。
為了避免再犯這個(gè)錯(cuò)誤,微軟制定了“零缺陷策略”。許多程序員嘲笑這個(gè)策略,覺(jué)得經(jīng)理們似乎在指望靠行政命令來(lái)提高產(chǎn)品質(zhì)量。而事實(shí)上“零缺陷策略”的真正含義是:在任何時(shí)候,都要把解決現(xiàn)有程序里的問(wèn)題作為首要問(wèn)題來(lái)抓,然后再去寫(xiě)新程序。
為什么要這樣做呢?
一般說(shuō)來(lái),你越不及時(shí)地殺蟲(chóng),殺蟲(chóng)的代價(jià)(時(shí)間和金錢(qián))就會(huì)越高。比如,你寫(xiě)程序時(shí)打錯(cuò)了一個(gè)字,編譯器馬上告訴你,你很容易就把它改正。你剛寫(xiě)好的程序在***次運(yùn)行時(shí)發(fā)現(xiàn)了一個(gè)問(wèn)題,你也很快就能解決它,因?yàn)槟銓?duì)你剛寫(xiě)的程序還記憶猶新。如果你運(yùn)行你的程序時(shí)發(fā)現(xiàn)了一個(gè)問(wèn)題,可這個(gè)程序是幾天以前寫(xiě)的,你可能就需要折騰一會(huì)兒,還好,你還大致記得,所以不會(huì)花太長(zhǎng)時(shí)間。但如果你在你幾個(gè)月以前寫(xiě)的程序里發(fā)現(xiàn)了問(wèn)題,就比較難解決了,因?yàn)槟阋呀?jīng)忘了許多細(xì)節(jié)。這時(shí)候,你還沒(méi)準(zhǔn)兒正忙著殺別人程序里的蟲(chóng)吶,因?yàn)檫@家伙到加勒比海阿魯巴島度假去了。這時(shí)候,解決這一堆問(wèn)題的難度不亞于從事***科學(xué)研究。你一定得小心翼翼地,非常系統(tǒng)化地從事,而且你很難知道多長(zhǎng)時(shí)間你才能把問(wèn)題解決。還有更糟糕的,你的程序已交到用戶手里了,才發(fā)現(xiàn)問(wèn)題,那你就等著套腰包吧。
總結(jié)起來(lái),就一條:越早解決問(wèn)題,越容易解決。
另外還有一個(gè)原因,剛寫(xiě)的程序里發(fā)現(xiàn)問(wèn)題,你能夠比較容易地估算解決它的時(shí)間。舉個(gè)例子,如果我問(wèn)你寫(xiě)一段程序去把一個(gè)列表排序需要花多長(zhǎng)時(shí)間,你可以給我一個(gè)比較確切的估計(jì)。如果你的程序,在Internet Explorer 5.5安裝以后,工作不正常。我問(wèn)你要多長(zhǎng)時(shí)間把這個(gè)問(wèn)題解決,你恐怕都估計(jì)不出來(lái),因?yàn)槟愀揪筒恢朗鞘裁丛蛟斐闪诉@個(gè)問(wèn)題。你可能要花三天時(shí)間才能解決,也有可能只花兩分鐘。
這個(gè)例子告訴我們,如果你的開(kāi)發(fā)過(guò)程中有許多蟲(chóng)沒(méi)有及時(shí)解決,那你的開(kāi)發(fā)計(jì)劃肯定不可靠。反過(guò)來(lái),如果你們已經(jīng)把已知的蟲(chóng)全部解決了,要做的事只是寫(xiě)新的程序,那你的開(kāi)發(fā)計(jì)劃就會(huì)比較準(zhǔn)確。
把已知的蟲(chóng)全部解決,這樣做還有一個(gè)好處:你可以對(duì)競(jìng)爭(zhēng)對(duì)手快速反擊。有些人把這叫著“讓開(kāi)發(fā)中的產(chǎn)品隨時(shí)處在可以交給用戶的狀態(tài)”。如果你的競(jìng)爭(zhēng)對(duì)手推出一個(gè)新的功能想把你的客戶搶走,你可以馬上在你的產(chǎn)品里加上這個(gè)功能,立刻將新產(chǎn)品交付用戶,因?yàn)槟銢](méi)有一大堆積累下來(lái)的問(wèn)題要解決。
#p#
6. 你們的產(chǎn)品開(kāi)發(fā)日程安排是否反映***的開(kāi)發(fā)進(jìn)展情況?
為什么我們需要開(kāi)發(fā)日程安排?如果你的程序?qū)镜臉I(yè)務(wù)很重要,那公司就必須知道你的程序何時(shí)能寫(xiě)完。滿世界的程序員都有一個(gè)通病,那就是他們都搞不清自己何時(shí)才能寫(xiě)完要寫(xiě)的程序。他們都只會(huì)對(duì)管理人員嚷嚷:“等我做好了就做好了!”
不幸的是,程序?qū)懲炅?,事遠(yuǎn)遠(yuǎn)沒(méi)完。作為一個(gè)公司,在發(fā)行產(chǎn)品之前,還有許許多多的事情要做:何時(shí)做產(chǎn)品演示?何時(shí)參加展覽會(huì)?何時(shí)發(fā)廣告?等等。所有的這一且都依賴于產(chǎn)品的開(kāi)發(fā)日程安排。
定下產(chǎn)品開(kāi)發(fā)日程安排,還有一個(gè)很關(guān)鍵的好處:它逼著你只做叫你做的功能,甩掉那些可要可不要的功能,否則這些可要可不要的東西有可能把你纏住。請(qǐng)看featuritis 。
定下產(chǎn)品開(kāi)發(fā)日程安排,按照它開(kāi)發(fā),這并不難做,請(qǐng)看我的另一篇文章Painless Software Schedules ,這篇文章告訴你一種制訂產(chǎn)品開(kāi)發(fā)日程的好方法。
7. 你們有沒(méi)有軟件開(kāi)發(fā)的詳細(xì)說(shuō)明書(shū)?
寫(xiě)軟件開(kāi)發(fā)的詳細(xì)說(shuō)明書(shū)就像是繡花:人人皆知是好東西,可沒(méi)誰(shuí)愿意去做。
我不知道這是為什么,也許是因?yàn)槎鄶?shù)程序員天生就不喜歡寫(xiě)文章。其結(jié)果是,一個(gè)開(kāi)發(fā)組里的程序員們,寧可用程序來(lái)溝通,也不愿寫(xiě)文章來(lái)表達(dá)自己。他們喜歡上來(lái)就寫(xiě)程序,而不是寫(xiě)什么詳細(xì)說(shuō)明書(shū)。
在產(chǎn)品的前期設(shè)計(jì)過(guò)程中,如果你發(fā)現(xiàn)了一些問(wèn)題,你可以輕易地在說(shuō)明書(shū)里該幾行字就行了。一旦進(jìn)入了寫(xiě)程序的階段,解決問(wèn)題的代價(jià)就要高得多了,不僅僅是時(shí)間上的代價(jià),而且也有感情上的代價(jià),因?yàn)闆](méi)人愿意將自己做成的東西扔掉。所以這時(shí)候解決問(wèn)題總有一些阻力。
沒(méi)有產(chǎn)品開(kāi)發(fā)詳細(xì)說(shuō)明書(shū)就開(kāi)始寫(xiě)程序,往往會(huì)導(dǎo)致程序?qū)懙膩y七八糟,而且左拖右拖不能交付使用。我覺(jué)得這就是Netscape遇到的問(wèn)題。前四個(gè)版本的程序越寫(xiě)越亂,以至管理人員作出一個(gè)愚蠢的決定:把以前的程序統(tǒng)統(tǒng)扔掉,重新寫(xiě)。后來(lái)他們?cè)陂_(kāi)發(fā)Mozilla時(shí)又犯了同樣的錯(cuò)誤。產(chǎn)品越做越亂,完全失控,花了幾年的時(shí)間才進(jìn)入內(nèi)部測(cè)試階段。
我最得意的理論是:如果讓程序員們接受一些寫(xiě)文章的訓(xùn)練如an intensive course in writing,他們就可能會(huì)改變一下不寫(xiě)說(shuō)明書(shū)的壞習(xí)慣,而以上所說(shuō)的糟糕的例子就有可能少發(fā)生。
另一個(gè)解決問(wèn)題的辦法是:雇一些能干的項(xiàng)目主任,專(zhuān)職寫(xiě)產(chǎn)品開(kāi)發(fā)詳細(xì)說(shuō)明書(shū)。
不論采用以上哪種方法,道理只有一個(gè):在沒(méi)有產(chǎn)品開(kāi)發(fā)詳細(xì)說(shuō)明書(shū)之前,決不可寫(xiě)程序。
如果想更多了解這個(gè)話題,可以讀我的四篇文章。
8. 你們的程序員是否工作在安靜的環(huán)境里?
當(dāng)你讓你的智囊們工作在安靜,寬敞,不受人打擾的環(huán)境里,他們往往能更快地出活,這已是不爭(zhēng)的事實(shí)。有一本經(jīng)典的講軟件開(kāi)發(fā)管理的書(shū)Peopleware 把這個(gè)問(wèn)題闡述得很清楚。
問(wèn)題在于,我們都知道***不要打斷這些智囊們的思路,讓他們一直處于他們的***狀態(tài)中,這樣他們就能全神貫注,廢寢忘食地工作,充分發(fā)揮他們的作用。作家,程序員,科學(xué)家,甚至籃球運(yùn)動(dòng)員都有他們的***狀態(tài)。
問(wèn)題還在于,進(jìn)入這個(gè)***狀態(tài)不容易。我覺(jué)得平均起來(lái),需要15分鐘才能進(jìn)入***狀態(tài),達(dá)到***工作效率。有時(shí)侯,當(dāng)你疲勞了或已經(jīng)高效率地干了許多工作了,你就很難再進(jìn)入這個(gè)狀態(tài),只好干點(diǎn)雜事打發(fā)時(shí)間,或上網(wǎng),玩游戲等。
問(wèn)題更在于,你很容易就被各種各樣的事打擾,被拽出你的***狀態(tài):噪音啦,電話啦,吃午飯啦,喝杯咖啡啦,被同事打擾啦,等等。如果一個(gè)同事問(wèn)你一個(gè)問(wèn)題,只花你一分鐘,可你卻被拽出你的***工作狀態(tài),重新回到這個(gè)狀態(tài)需要花半小時(shí)。你的工作效率因此而受到很大影響。如果讓你在一個(gè)嘈雜的大房間里工作(那幫搞網(wǎng)站的家伙還就喜歡這樣),邊上的推銷(xiāo)員在電話里大叫大嚷,你就很難出活,因?yàn)槟氵M(jìn)入不了你的***工作狀態(tài)。
作為程序員,進(jìn)入***工作狀態(tài)更難。你先要把方方面面的細(xì)節(jié)裝在腦子里, 任何一種干擾都可能讓你忘掉其中某些東西。你重新回來(lái)工作時(shí),發(fā)現(xiàn)好些東西記不起來(lái)了(如你剛用的局部變量名,或你剛才的搜索程序?qū)懙侥睦锪说龋┠阒缓每纯磩倢?xiě)的程序,回憶一下,慢慢地回到你剛才的***工作狀態(tài)。
我們來(lái)做一個(gè)簡(jiǎn)單的算數(shù)。假設(shè)一個(gè)程序員被打擾一下,哪怕只有一分鐘,他卻需要花15分鐘才能回到***工作狀態(tài)(統(tǒng)計(jì)資料顯示如此)。我們有兩個(gè)程序員:杰夫和愚夫, 坐在一個(gè)大辦公區(qū)里工作。愚夫想不起來(lái)用什么函數(shù)去進(jìn)行Unicode 字符串復(fù)制。他可以花30秒查一下,或者花15秒問(wèn)杰夫。由于他坐在杰夫的旁邊,他就選擇去問(wèn)杰夫。杰夫被打擾了一下,耽誤了他15分鐘,節(jié)省了愚夫15秒鐘。
現(xiàn)在,我們把他們倆用墻和門(mén)隔開(kāi),讓他們倆分坐在不同的辦公室里,愚夫又想不起來(lái)什么涵數(shù)名,自己查一下要花30秒;問(wèn)杰夫,要花45秒,因?yàn)樗酒饋?lái)走過(guò)去問(wèn)(對(duì)這幫程序員來(lái)說(shuō),這可不是件簡(jiǎn)單的事,看看他們的體質(zhì)就知道為什么了)。所以他選擇自己去查。愚夫損失了30秒鐘,可是杰夫少損失了15分鐘。哈哈!
9. 你們是否使用現(xiàn)有市場(chǎng)上能買(mǎi)到的***的工具?
用可編譯語(yǔ)言寫(xiě)程序恐怕是這世界上為數(shù)不多的還不能隨便抓一個(gè)破計(jì)算機(jī)就可以做的事。如果你用于編譯的時(shí)間超過(guò)幾秒鐘,你就應(yīng)該換一臺(tái)***最快的計(jì)算機(jī)了。因?yàn)槿绻幾g時(shí)間超過(guò)15秒,程序員們就會(huì)不耐煩,轉(zhuǎn)而去上網(wǎng)看一些無(wú)關(guān)的東西比如The Onion,弄不好一看就是好幾個(gè)小時(shí)。
調(diào)試圖形界面軟件時(shí),用只有一個(gè)顯示器的計(jì)算機(jī)不僅不方便,有時(shí)甚至是不可能。用有兩個(gè)顯示器的計(jì)算機(jī),要方便許多。
程序員們經(jīng)常不可避免地要去畫(huà)一些圖標(biāo)或工具欄圖。多數(shù)程序員沒(méi)有一個(gè)好的圖形編輯器可用。用微軟的“畫(huà)筆”軟件去畫(huà)圖標(biāo)簡(jiǎn)直是笑話,可事實(shí)上大家還就在這樣做。
在我的前一個(gè)工作,系統(tǒng)管理員成天給我發(fā)來(lái)自動(dòng)警告,說(shuō)我在服務(wù)器上使用了超過(guò)220兆的空間。我告訴他,按現(xiàn)在硬盤(pán)的價(jià)錢(qián),超出這點(diǎn)空間的價(jià)錢(qián)遠(yuǎn)低于我用的廁紙的價(jià)錢(qián)。讓我花10分鐘去清理我的文件絕對(duì)是我工作效率的莫大浪費(fèi)。
***的開(kāi)發(fā)組絕不折騰它的程序員。工具落后會(huì)讓人用起來(lái)覺(jué)得難受,一點(diǎn)點(diǎn)積累起來(lái),會(huì)讓程序員們成天叫苦,而一個(gè)成天叫苦的程序員絕對(duì)不會(huì)是一個(gè)高消率的程序員。
再添一句,要想使你的程序員高興,***的辦法就是給他們買(mǎi)一些***最棒的工具軟件。用這種方法可以讓他們乖乖地為你工作,這可比用高薪吸引他們來(lái)得便宜得多。
10. 你們有沒(méi)有專(zhuān)職的軟件測(cè)試人員?
如果你的開(kāi)發(fā)組里沒(méi)有專(zhuān)職的測(cè)試人員,或沒(méi)有足夠的測(cè)試人員(兩到三個(gè)程序員就應(yīng)該配一個(gè)測(cè)試員),那你的產(chǎn)品就一定是毛病百出,或者你在花100美元一小時(shí)的代價(jià)去雇你的程序員去做30美元一小時(shí)就可以雇到的測(cè)試員的工作。想在測(cè)試員身上省錢(qián),絕對(duì)是打錯(cuò)了算盤(pán)。我真不明白為什么這么多人算不過(guò)來(lái)這筆帳。
我有另一篇文章專(zhuān)門(mén)講這個(gè),請(qǐng)看Top Five (Wrong) Reasons You Don't Have Testers。
11. 你們招人面試時(shí)是否讓寫(xiě)一段程序?
我問(wèn)你,讓你去招一個(gè)魔術(shù)師,你是否連看都不看一眼他的魔術(shù)玩得怎樣就要他?當(dāng)然不會(huì)!
你舉辦婚宴,要請(qǐng)一個(gè)廚師,你是不是連嚐也不嚐他做的菜好吃不好吃就要他?我想也不會(huì)。
奇怪的是,幾乎每天都有這樣的事發(fā)生:在面試一個(gè)程序員時(shí),簡(jiǎn)歷寫(xiě)得漂亮,談得熱火朝天,問(wèn)幾個(gè)簡(jiǎn)單的問(wèn)題(如CreateDialog()和DialogBox()有什么區(qū)別?這種問(wèn)題,查一下幫助文件就知道了),人就招進(jìn)來(lái)了。你真正應(yīng)該關(guān)心的不是這人記不記得這些寫(xiě)程序的邊邊角角的東西,而是他能否出產(chǎn)品!更糟糕的是,許多問(wèn)題是知道就知道,不知道,想死也不知道的問(wèn)題。
不能這樣下去了!在面試時(shí),請(qǐng)一定要讓寫(xiě)一段程序。在我的這篇文章里Guerrilla Guide to Interviewing,我有許多好建議。
12. 你們是否隨便抓一些人來(lái)試用你們的軟件?
這句話的意思是,讓你從走道里走過(guò)的人中,隨便抓幾個(gè)人來(lái),讓他們?cè)囉媚愕能浖?。如果你抓五個(gè)人來(lái)用你的軟件,那你就可能把你的程序中95%的不方便使用的地方找出來(lái)。
要想讓用戶去買(mǎi)你的軟件,你必須要設(shè)計(jì)好你的用戶界面。這其實(shí)并不難。你可以讀我的free online book on UI design打打基礎(chǔ)。
用戶界面設(shè)計(jì)的關(guān)鍵是,如果你讓幾個(gè)人去用你的軟件(五六人可能就夠了),你可能很快就找出***的問(wèn)題。想知道為什么嗎,請(qǐng)讀Jakob Nielsen's article。只要你堅(jiān)持隨便抓一些人來(lái)試用你的軟件,你就能將你的用戶界面設(shè)計(jì)得越來(lái)越好。
The Joel Test 軟件開(kāi)發(fā)成功12法則的四個(gè)實(shí)用領(lǐng)域
- 用該法則來(lái)衡量你的軟件開(kāi)發(fā)組,告訴我你得的分?jǐn)?shù),讓我來(lái)品頭論足。
- 如果你是開(kāi)發(fā)組的經(jīng)理,用該法則來(lái)使你的組提高效率。如果你們一上來(lái)就能得12分,你就 別再打擾你的程序員了, 專(zhuān)心致志別讓公司的管理人員來(lái)煩你的程序員吧。
- 如果你在找一份程序員工作,問(wèn)問(wèn)你未來(lái)的老板他能得幾分,如果分?jǐn)?shù)很低,你一定要確信你進(jìn)去后有足夠的權(quán)力來(lái)改變這一切,否則,***躲遠(yuǎn)點(diǎn),不然,你在那兒會(huì)很難受的。
- 如果你是投資者,正在決定是否向一個(gè)軟件公司投資,或者你的軟件公司正在決定是否兼并另一個(gè)軟件公司,該法則可以幫你做決定。
原文鏈接:http://chinese.joelonsoftware.com/Articles/TheJoelTest.html
【編輯推薦】