根據(jù)觀察,我發(fā)現(xiàn)有兩類程序員。一類程序員喜歡技術(shù),會(huì)認(rèn)認(rèn)真真地學(xué)習(xí)一種語(yǔ)言,設(shè)法掌握語(yǔ)言的使用要領(lǐng)和方法。他們關(guān)心的是語(yǔ)言的功能,以及功能的運(yùn)用。對(duì)于語(yǔ)言的缺陷有相當(dāng)?shù)娜萑潭龋⑶乙矘?lè)意接受語(yǔ)言的缺陷,只要語(yǔ)言能夠提供足夠強(qiáng)大的功能。
另一類程序員則相反,他們更側(cè)重于用語(yǔ)言實(shí)現(xiàn)某些具體的業(yè)務(wù)。對(duì)于他們而言,語(yǔ)言的功能強(qiáng)大與否沒(méi)什么關(guān)系,只要?jiǎng)e妨礙他們?cè)谲浖袑?shí)現(xiàn)業(yè)務(wù)。
對(duì)于前者,語(yǔ)言的功能至關(guān)重要。他們需要一種語(yǔ)言幫助他們最大限度地發(fā)揮智慧和創(chuàng)造力,更快、更好、更高效地
構(gòu)造穩(wěn)定、可靠、快速、可擴(kuò)展、可復(fù)用的軟件。
而對(duì)于后者,語(yǔ)言的簡(jiǎn)單至關(guān)重要。他們需要一種語(yǔ)言幫助他們最大限度地發(fā)揮智慧和創(chuàng)造力,更快、更好、更高效地
將業(yè)務(wù)轉(zhuǎn)變成軟件的功能。
如果認(rèn)同一類程序員,而貶損另一類,那就太狹隘了。這兩種程序員對(duì)于軟件開(kāi)發(fā)而言,都有各自重要的地位。更重要的是,這兩類程序員是互補(bǔ)的。前者的能力適合開(kāi)發(fā)可擴(kuò)展的基礎(chǔ)服務(wù)和組件,他們是技術(shù)專家。而后者則恰好符合業(yè)務(wù)實(shí)現(xiàn)專家的特征。
然而,我們傳統(tǒng)的組織形式卻將這兩類程序員壓縮在一個(gè)共同的空間中執(zhí)行開(kāi)發(fā)工作。也就是讓他們使用同一種(或同一層次的)語(yǔ)言和技術(shù)開(kāi)發(fā)軟件。
現(xiàn)在的麻煩是,沒(méi)有哪一種語(yǔ)言既簡(jiǎn)單、方便,又功能強(qiáng)大。如果選用功能強(qiáng)大的語(yǔ)言,比如C++,那么技術(shù)專家滿意了,他們構(gòu)造出漂亮優(yōu)雅的軟件。但對(duì)業(yè)務(wù)
專家是個(gè)災(zāi)難。他們發(fā)現(xiàn)自己已經(jīng)不知不覺(jué)地陷入了語(yǔ)言復(fù)雜性的泥潭,而艱難地試圖抓住業(yè)務(wù)功能的枝干。而反之,選用使用方便,但功能弱小的語(yǔ)言,對(duì)于業(yè)專
家是個(gè)福音,他們可以專注于業(yè)務(wù)實(shí)現(xiàn),心滿意足地完成工作。但技術(shù)專家卻無(wú)法按他們的想法達(dá)到諸多技術(shù)性和軟件工程性的要求,比如性能、可維護(hù)性、擴(kuò)展性
等等。
最終,多數(shù)企業(yè)會(huì)選擇一種“中性”的語(yǔ)言,功能基本完備,但不很強(qiáng)大,學(xué)習(xí)和使用相對(duì)簡(jiǎn)單,但又不是最簡(jiǎn)單的。這樣的折中一般會(huì)基本“擺平”這兩類程序
員,但也有很多時(shí)候讓兩類程序員都不滿意。大多數(shù)情況下,即便兩類程序員都滿意了,卻在客觀上使得兩類程序員都無(wú)法發(fā)揮最大的工作效率,從而無(wú)法使開(kāi)發(fā)效
率最大化、最優(yōu)化。
解決這類問(wèn)題最直接的方法就是讓這兩類程序員使用各自適合的語(yǔ)言,在各自擅長(zhǎng)的領(lǐng)域開(kāi)發(fā)軟件。技術(shù)專家使用C++之類功能強(qiáng)大,卻不易掌握的語(yǔ)言,而業(yè)務(wù)
專家則使用簡(jiǎn)單易用的語(yǔ)言,比如腳本語(yǔ)言、宏語(yǔ)言,甚至是某種特定用途的專用語(yǔ)言(DSL)。技術(shù)專家開(kāi)發(fā)基礎(chǔ)服務(wù)平臺(tái)和組件,業(yè)務(wù)專家則運(yùn)用簡(jiǎn)易的語(yǔ)言
使用基礎(chǔ)服務(wù)和功能,構(gòu)建業(yè)務(wù)系統(tǒng)。這種優(yōu)化組合往往會(huì)產(chǎn)生1+1>2的效果。
對(duì)于語(yǔ)言的選擇,技術(shù)專家無(wú)外乎C++、Ada之類的“全能”通用語(yǔ)言,新興的D也可能成為更加適合的候選人。業(yè)務(wù)專家,可以使用腳本語(yǔ)言,如
python、ruby、javascript等等“粘合劑”語(yǔ)言。目前尚有一種新的發(fā)展方向,是運(yùn)用專門(mén)的專用領(lǐng)域語(yǔ)言(DSL)。這類語(yǔ)言可以非常貼
近業(yè)務(wù)領(lǐng)域的邏輯概念,語(yǔ)法不一定完備,但足以完成特定的業(yè)務(wù)工作。比如某種“記賬”語(yǔ)言,就可以用來(lái)構(gòu)造財(cái)務(wù)軟件的業(yè)務(wù)邏輯,直接使用財(cái)務(wù)術(shù)語(yǔ)和概念,
最大可能地消除與業(yè)務(wù)無(wú)關(guān)的語(yǔ)言要素,達(dá)到最簡(jiǎn)化的目的。
這兩類程序員的差異不一定是先天造成的,但這種差異足以對(duì)傳統(tǒng)的軟件開(kāi)發(fā)組織形式提出挑戰(zhàn)。因此,當(dāng)我們?cè)诒г挂婚T(mén)語(yǔ)言如何如何功能不濟(jì),或者如何如何復(fù)雜難用,那么請(qǐng)審視一下開(kāi)發(fā)體系,或許一種語(yǔ)言已經(jīng)被用在不適合的程序員,以及不該用的地方了。