HILBERT的專欄
本文關(guān)鍵詞:軟件工藝,由筆耕文化傳播整理發(fā)布。
第一次讀到這樣另類的書(shū),剛開(kāi)始讀這本書(shū)的時(shí)候感覺(jué)筆者是一個(gè)非常討厭使用軟件工程的方法來(lái)開(kāi)發(fā)軟件的人。這種給我的感覺(jué)一直貫穿到我讀完整本書(shū),這本書(shū)是我用一個(gè)晚上的時(shí)間一口氣讀完的,理解上可能只限于表層,但就針對(duì)這表層的一點(diǎn)理解下面我來(lái)談一下我的認(rèn)識(shí)。
軟件工藝這本書(shū)的筆者一直強(qiáng)調(diào)一個(gè)問(wèn)題,那就是工匠在一個(gè)項(xiàng)目中的地位。工匠這個(gè)詞聽(tīng)起來(lái)是一個(gè)很老的詞了,在過(guò)去其他行業(yè)當(dāng)中工匠是一個(gè)怎樣的人群我就不說(shuō)了,肯定是在某一領(lǐng)域做得很好的人,下面我解釋一下軟件工藝當(dāng)中所提到的工匠究竟是怎樣的一類人,軟件工藝中提到的工匠其實(shí)就是具有非常豐富的開(kāi)發(fā)經(jīng)驗(yàn),并且在多年的開(kāi)發(fā)過(guò)程當(dāng)中做出的產(chǎn)品受到客戶的好評(píng),具有一定信譽(yù)度的人,他們能夠?yàn)橛脩籼峤粓?jiān)固的、高質(zhì)量的應(yīng)用程序。一個(gè)優(yōu)秀的工匠決定著一個(gè)項(xiàng)目的成敗。這表明人的因素在項(xiàng)目的開(kāi)發(fā)當(dāng)中起著非常重要的作用。在沒(méi)有學(xué)習(xí)軟件工程之前我也一直認(rèn)為人在軟件開(kāi)發(fā)當(dāng)中有著很重要的地位,在學(xué)完軟件工程之后讓我認(rèn)識(shí)到原來(lái)軟件也可以像工程學(xué)一樣有這流水線似地開(kāi)發(fā)模式,人不是開(kāi)發(fā)過(guò)程的主導(dǎo),軟件工程的主導(dǎo)是開(kāi)發(fā)過(guò)程的控制,一個(gè)比較固定的過(guò)程,,只要人做一些機(jī)械化的工作就可以完成項(xiàng)目,F(xiàn)在看完軟件工藝這本書(shū)讓我的思想出現(xiàn)了激烈的斗爭(zhēng),到底軟件開(kāi)發(fā)當(dāng)中應(yīng)該用軟件工藝的思想還是軟件工程的思想。在當(dāng)前的大環(huán)境下軟件工程的思想還是占有絕對(duì)的統(tǒng)治地位,但軟件工藝的思想也有他的支撐陣營(yíng),例如開(kāi)源社區(qū)的工作者。
首先我覺(jué)得筆者的思維很超前,在當(dāng)前軟件工程為主導(dǎo)的大環(huán)境下敢于反駁,僅這一點(diǎn)就是很多人做不到的,以前好像有位名人說(shuō)過(guò)“盡信書(shū)不如無(wú)書(shū)”,但是真正能夠?qū)φn本知識(shí)做出質(zhì)疑的人又有幾個(gè),起碼我還沒(méi)有做到過(guò)。尤其像軟件工程在當(dāng)前的大環(huán)境下大家都在用或者學(xué)習(xí)這種軟件的開(kāi)發(fā)方式,并且這種開(kāi)發(fā)方式在許多方面的確取得了很好的效果。這已經(jīng)成為了業(yè)界對(duì)于軟件開(kāi)發(fā)的標(biāo)準(zhǔn)了,大家都對(duì)他深信不疑。這時(shí)軟件工藝的倡導(dǎo)者大膽的站出來(lái)指出這種開(kāi)發(fā)方式的弊端,尤其是我所讀這本書(shū)的筆者將軟件工程批判的體無(wú)完膚,他們敢于這樣做的精神就很值得我們來(lái)學(xué)習(xí),且不說(shuō)軟件工藝這種開(kāi)發(fā)思想的正確性,就這種敢于推翻標(biāo)準(zhǔn)的勇氣就是推動(dòng)行業(yè)不斷向前發(fā)展的動(dòng)力。
軟件工程是將工程學(xué)的思想引入到了軟件開(kāi)發(fā)的過(guò)程當(dāng)中,軟件工程含蓄的告訴我們:只要定義一個(gè)有組織、有紀(jì)律、可計(jì)量的開(kāi)發(fā)過(guò)程,任何人都可以完成軟件開(kāi)發(fā)。在這里軟件工程忽視了開(kāi)發(fā)過(guò)程當(dāng)中最為重要的一個(gè)因素“人”。我們知道軟件開(kāi)發(fā)過(guò)程當(dāng)中需求是不斷變化的,這一切的變化都是由人的因素而引發(fā)的,而這一因素是不可能確定化的,工程學(xué)卻要求一個(gè)確定化的生產(chǎn)過(guò)程,這一點(diǎn)與軟件開(kāi)發(fā)的真實(shí)過(guò)程相背離,軟件工藝的筆者正是抓住了軟件工程這一致命的弱點(diǎn)來(lái)駁倒他,從而建立自己的開(kāi)發(fā)體系。
軟件工藝到底比軟件工程優(yōu)在哪些地方呢?
下面我簡(jiǎn)要的分析幾點(diǎn),一方面,軟件工程重點(diǎn)關(guān)注的是軟件開(kāi)發(fā)的過(guò)程,而忽視參與到開(kāi)發(fā)過(guò)程當(dāng)中的人,這使得在開(kāi)發(fā)過(guò)程當(dāng)中使用大量的菜鳥(niǎo)來(lái)開(kāi)發(fā)系統(tǒng),這群人由于缺乏技能、知識(shí)和經(jīng)驗(yàn),由他們所開(kāi)發(fā)的系統(tǒng)含有大量的缺陷,在排查缺陷方面由于缺乏經(jīng)驗(yàn),所以發(fā)現(xiàn)缺陷和改正缺陷的速度會(huì)很慢。軟件工藝所倡導(dǎo)的是由幾個(gè)有經(jīng)驗(yàn)的工匠帶領(lǐng)自己的學(xué)徒所組成的小團(tuán)隊(duì)來(lái)開(kāi)發(fā),這樣有幾個(gè)優(yōu)秀的開(kāi)發(fā)者所組成的團(tuán)隊(duì)他們?cè)陂_(kāi)發(fā)過(guò)程當(dāng)中就會(huì)犯很少的錯(cuò)誤,并且在查錯(cuò)和改錯(cuò)方面也比菜鳥(niǎo)要效率高很多。另一方面,軟件工程的開(kāi)發(fā)團(tuán)隊(duì)一般來(lái)說(shuō)比較大,這是由于軟件工程的思想認(rèn)為在這個(gè)確定的開(kāi)發(fā)過(guò)程當(dāng)中不需要熟練地開(kāi)發(fā)者,所以使用大量的菜鳥(niǎo),這就是所謂的人海戰(zhàn)術(shù)。在這樣的一個(gè)大型開(kāi)發(fā)團(tuán)隊(duì)當(dāng)中要讓開(kāi)發(fā)者之間交流可以想象是多么困難的一件事,一個(gè)沒(méi)有交流的開(kāi)發(fā)過(guò)程簡(jiǎn)直就是軟件開(kāi)發(fā)的噩夢(mèng)。而軟件工藝所關(guān)注的重點(diǎn)對(duì)象是人,所以在軟件工藝的開(kāi)發(fā)過(guò)程當(dāng)中需要的只是幾個(gè)優(yōu)秀的開(kāi)發(fā)者,而這幾個(gè)優(yōu)秀的開(kāi)發(fā)者可以及時(shí)的交流,進(jìn)行頭腦風(fēng)暴,他們開(kāi)發(fā)的效率比許多菜鳥(niǎo)聚在一起要高得多,并且優(yōu)秀開(kāi)發(fā)者所開(kāi)發(fā)系統(tǒng)堅(jiān)固性和質(zhì)量肯定要更高。
下面要寫(xiě)的東西比較凌亂,就跟記筆記一樣總結(jié)出這本書(shū)的一些精華內(nèi)容,當(dāng)然也會(huì)有我自己的一些看法。
什么是軟件開(kāi)發(fā)?
軟件開(kāi)發(fā)的全部意義在于解決未知的因素。獲取明確和隱含的知識(shí),并將這些知識(shí)具體化到軟件之中這就是軟件開(kāi)發(fā)的整個(gè)過(guò)程。這里所說(shuō)的獲取明確和隱含的知識(shí)其實(shí)就是軟件需求的獲取,軟件工藝所要求的開(kāi)發(fā)團(tuán)隊(duì)當(dāng)中的工匠就是一個(gè)有著豐富領(lǐng)域知識(shí)的人,他能夠更好的把握軟件的需求,這樣也就把握了軟件開(kāi)發(fā)的全部意義,所以說(shuō)一個(gè)優(yōu)秀的開(kāi)發(fā)者,也就是工匠他關(guān)系到整個(gè)項(xiàng)目的成敗。
現(xiàn)如今很多項(xiàng)目最主要的困難是什么呢?
設(shè)計(jì)和實(shí)現(xiàn)都已經(jīng)有了自動(dòng)化的過(guò)程,不在是什么難題,現(xiàn)如今最困難的是需求分析階段和需求分析階段與軟件設(shè)計(jì)之間的交流上。分析一下原因很簡(jiǎn)單,因?yàn)樾枨笤谲浖_(kāi)發(fā)過(guò)程當(dāng)中是最不確定的階段,不確定的東西最難獲取了,上面也說(shuō)了軟件開(kāi)發(fā)的全部意義在于解決未知的問(wèn)題,也就是不確定的問(wèn)題,如果這一問(wèn)題能夠很好的解決掉,那么軟件開(kāi)發(fā)也就沒(méi)什么難得了。
軟件開(kāi)發(fā)分工好不好?
這里我首先給出答案,不好。同一件任務(wù)被切分成的小步驟越多,人與人之間傳遞信息所耗費(fèi)的時(shí)間總量就越多。因此,在不需要交流的工作中,流水式的生產(chǎn)線能夠運(yùn)轉(zhuǎn)得很好,但在需要大量交流的腦力勞動(dòng)中,這種方式就一敗涂地。軟件工藝所強(qiáng)調(diào)的是開(kāi)發(fā)人員參與到整個(gè)軟件開(kāi)發(fā)的過(guò)程當(dāng)中,而且他的團(tuán)隊(duì)比較小,所以交流幾乎不會(huì)浪費(fèi)多少時(shí)間。這里有一點(diǎn)要求軟件開(kāi)發(fā)人員參與到整個(gè)開(kāi)發(fā)過(guò)程似乎有點(diǎn)困難,這一點(diǎn)我個(gè)人也覺(jué)得很難辦到,但是軟件工藝對(duì)于團(tuán)隊(duì)和項(xiàng)目的大小有一定的約束條件,在這種約束條件下開(kāi)發(fā)人員是很容易參與到整個(gè)軟件開(kāi)發(fā)過(guò)程的。
軟件工藝對(duì)于團(tuán)隊(duì)和項(xiàng)目的大小的約束條件
在說(shuō)明這個(gè)問(wèn)題之前我先說(shuō)一下軟件工程和軟件工藝所適應(yīng)的應(yīng)用范圍。軟件工程在當(dāng)前的大環(huán)境下被各種各樣的項(xiàng)目所采用,因?yàn)榇蠹叶颊J(rèn)為這是一種行之有效的開(kāi)發(fā)方法,但是軟件工程的方法只在超大型項(xiàng)目的開(kāi)發(fā)當(dāng)中發(fā)揮了重要的作用,在一些較小的項(xiàng)目當(dāng)中并沒(méi)有我們所想象的那么成功。軟件工藝正是看到軟件工程的應(yīng)用局限性所提出來(lái)的。軟件工藝對(duì)于團(tuán)隊(duì)的要求是少而精,項(xiàng)目的大小適用于中小型的項(xiàng)目。正是由于軟件工藝的團(tuán)隊(duì)都是優(yōu)秀的開(kāi)發(fā)者,所以他們可以在項(xiàng)目不是很大的情況下參與到整個(gè)的開(kāi)發(fā)過(guò)程當(dāng)中。
軟件工藝如何辨識(shí)優(yōu)秀開(kāi)發(fā)者
在傳統(tǒng)的軟件工程中最常見(jiàn)的辨識(shí)開(kāi)發(fā)人員等級(jí)的方法就是看你有沒(méi)有一些認(rèn)證或者從業(yè)執(zhí)照之類的,軟件工藝卻完全否定了這一點(diǎn),他認(rèn)為任何執(zhí)照都只是假象,因?yàn)檫@些頒發(fā)執(zhí)照和證書(shū)的機(jī)構(gòu)他們對(duì)被辦法的對(duì)象并不了解,認(rèn)證機(jī)構(gòu)并不擔(dān)保任何事情,所以他們的證書(shū)或執(zhí)照都只是一中假象,軟件工藝對(duì)于優(yōu)秀者的發(fā)覺(jué)是通過(guò)同行認(rèn)可和推薦的方式產(chǎn)生的。為什么這樣的方式得到的開(kāi)發(fā)這就一定是優(yōu)秀的呢?這是因?yàn)?strong>軟件工藝要求所有的推薦都是以私人的身份提出,因此沒(méi)有人會(huì)輕率地做出推薦。在這樣的同行推薦之下,相關(guān)的每個(gè)人都會(huì)努力提高自己的能力和信譽(yù),力爭(zhēng)成為更好的開(kāi)發(fā)者。
軟件工藝的工匠
在設(shè)計(jì)一件能夠滿足廣大用戶的產(chǎn)品時(shí),最有效的辦法就是針對(duì)單獨(dú)的一個(gè)人進(jìn)行設(shè)計(jì),努力讓這個(gè)人滿意。這看上去似乎違反了直覺(jué),但事實(shí)的確如此。軟件工匠就是利用這種思想向“足夠好”[1]的軟件開(kāi)發(fā)方式挑戰(zhàn)。
優(yōu)秀的軟件應(yīng)該簽上開(kāi)發(fā)者的名字,因?yàn)橹挥羞@樣才能向用戶傳達(dá)一種信息:我們?cè)敢鉃樽约旱淖髌坟?fù)責(zé)。
讓軟件工匠因?yàn)樽约旱淖髌范@得榮譽(yù),這樣工匠就會(huì)在軟件工藝模式下建立自己的聲望,這聲望也是以后其他客戶選擇工匠的一個(gè)標(biāo)準(zhǔn)。
好的開(kāi)發(fā)者比管理者更有價(jià)值,軟件工藝強(qiáng)調(diào)管理者應(yīng)該將優(yōu)秀的開(kāi)發(fā)者作為知識(shí)工人來(lái)對(duì)待。他們應(yīng)該以管理優(yōu)秀開(kāi)發(fā)者為榮。
軟件工藝與軟件工程的差異
1. 軟件工藝帶來(lái)的是協(xié)作式的開(kāi)發(fā),與軟件工程相比,軟件工藝的差異就在于:開(kāi)發(fā)者將更好地理解對(duì)方,并能夠幫助對(duì)方作出必要的權(quán)衡。
2. 軟件工藝強(qiáng)調(diào)記憶的傳授與學(xué)習(xí)。
軟件工藝總結(jié)
軟件工藝最主要強(qiáng)調(diào)的是人在整個(gè)項(xiàng)目中的重要作用,軟件工藝對(duì)于團(tuán)隊(duì)的要求非常嚴(yán)格,團(tuán)隊(duì)首先人數(shù)很少,最多不會(huì)超過(guò)15人,一般的團(tuán)隊(duì)都是3人左右,但是對(duì)于團(tuán)隊(duì)中個(gè)人的能力要求很高,另外團(tuán)隊(duì)的健康度也有很高的要求,團(tuán)隊(duì)還要比較穩(wěn)定,這樣團(tuán)隊(duì)中的隊(duì)員才能培養(yǎng)出默契來(lái)。
最后根據(jù)當(dāng)前的實(shí)際情況談一下軟件工藝
軟件工藝這本書(shū)給我們提出了很好的開(kāi)發(fā)模式,但是當(dāng)前大環(huán)境下很多項(xiàng)目開(kāi)發(fā)都是采用的軟件工程思想這是為什么呢?我分析主要原因是軟件工藝對(duì)于團(tuán)隊(duì)的要求太高,而優(yōu)秀工匠太少,所以很多公司很難組織起這樣一支高效的團(tuán)隊(duì),F(xiàn)在軟件工藝的思想只在一些開(kāi)源社區(qū)可以看到一些影子,因?yàn)樵谀切╅_(kāi)源社區(qū)聚集了許多真正的工匠。這一點(diǎn)讓我仿佛看到了ISO網(wǎng)絡(luò)7層結(jié)構(gòu)模型的影子。雖然模型做得很好,但就是由于實(shí)現(xiàn)難度太大而被放棄。
開(kāi)發(fā)的軟件含有許多錯(cuò)誤,但是擁有豐富的特性,用戶可以為了豐富的特性而忍受錯(cuò)誤
本文關(guān)鍵詞:軟件工藝,由筆耕文化傳播整理發(fā)布。
本文編號(hào):51326
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/51326.html