軟件開(kāi)發(fā)中的兩種態(tài)度:約束和信賴
一種態(tài)度認(rèn)為,應(yīng)該對(duì)程序員在軟件開(kāi)發(fā)中的行為進(jìn)行約束(DirectingAttitude)。持這種態(tài)度的人認(rèn)為大部分的程序員水平都不高(謠傳說(shuō)有50%的人低于平均水平),所以應(yīng)該對(duì)他們所做的事情進(jìn)行管教約束。要防止他們做一些可能會(huì)給他們正在開(kāi)發(fā)的系統(tǒng)帶來(lái)危害的事情。通常,這種態(tài)度體現(xiàn)在一些系統(tǒng)設(shè)計(jì)和工具中時(shí),你會(huì)發(fā)現(xiàn)它們會(huì)試圖阻止程序員去做某些事情,限制程序員的一些做法,以此避免他們陷入過(guò)于復(fù)雜的境況。
另一種態(tài)度認(rèn)為程序員都是可以信賴的專業(yè)人員,應(yīng)該給他們做自己任何想做的事情的自由。秉持這種態(tài)度的軟件設(shè)計(jì)以好用易用為目標(biāo),但前提假設(shè)是程序員必須知道自己在做什么。所以,遵循這種態(tài)度的軟件設(shè)計(jì)里并不會(huì)特意阻止程序員錯(cuò)誤的使用它們。而你可以不正確的使用它們,但因?yàn)檫@種態(tài)度認(rèn)為你是知道如何正確的使用它,所以,如果你沒(méi)有按正確的方式使用,后果自負(fù)。
軟件開(kāi)發(fā)中的很多爭(zhēng)論的挑起都是因?yàn)橛^點(diǎn)方要么持約束態(tài)度,要么持縱容態(tài)度。這種態(tài)度上的差異影響到了對(duì)編程語(yǔ)言、設(shè)計(jì)方案、開(kāi)發(fā)工具、開(kāi)發(fā)過(guò)程等很多方面的選擇。
下面是這兩種對(duì)立態(tài)度的一些例子:
- 前不久有一場(chǎng)討論,是由Joel Spolsky的一篇關(guān)于異常(Exceptions)的博客引起的。Joel Spolsky不喜歡異常,因?yàn)樗苋菀滓鹫`用,導(dǎo)致代碼混亂不堪(約束態(tài)度)。而B(niǎo)ill Caputo指出,異常,如果用的好,可以讓你的編程更簡(jiǎn)單方便(縱容態(tài)度)。
- 一些關(guān)于靜態(tài)/動(dòng)態(tài)類型的爭(zhēng)論也體現(xiàn)了這兩種態(tài)度的差異。喜歡靜態(tài)類型的人會(huì)說(shuō)靜態(tài)類型能防止你犯某些錯(cuò)誤(約束態(tài)度)。而動(dòng)態(tài)類型支持者提出靜態(tài)類型限制了很多有用的語(yǔ)言功能(縱容態(tài)度)。
- 敏捷開(kāi)發(fā)實(shí)踐指導(dǎo)是面向人的(縱容態(tài)度),而計(jì)劃驅(qū)動(dòng)的開(kāi)發(fā)方法是在確保即使一個(gè)很爛的開(kāi)發(fā)團(tuán)隊(duì)也能完成工作(約束態(tài)度)。
這些態(tài)度未必是持久不變的。在某些情況下人們通常會(huì)持約束態(tài)度,而另外一些情況會(huì)持縱容態(tài)度。但我想是有一個(gè)底層的因素在起作用,通常是個(gè)人性格決定的,是個(gè)人性格在這些關(guān)于應(yīng)該如何開(kāi)發(fā)軟件的討論表象下發(fā)揮著作用。(我是完全屬于縱容類的,也許你沒(méi)看出來(lái)。)
也許你會(huì)認(rèn)為對(duì)一個(gè)程序員的行為的任何限制都反映了一種約束態(tài)度,可事情并不是這么簡(jiǎn)單。比如說(shuō)對(duì)內(nèi)存的管理。也許你會(huì)認(rèn)為這是一種約束的表現(xiàn):不能相信程序員有能力正確的對(duì)內(nèi)存進(jìn)行管理,所以,剝奪他們分配內(nèi)存的權(quán)利。但我卻把內(nèi)存上的這種管理視為一種縱容策略——它拿走了我一些不想為之操心的權(quán)利,反而我可以專注于那些我很關(guān)心的事情。Steve通過(guò)將“問(wèn)題”和“困難”進(jìn)行比較,很好的支持了我的這種觀點(diǎn)。