無(wú)意間看到一篇茹炳晟老師寫(xiě)的文章,受益很深。本文轉(zhuǎn)載自:茹炳晟聊軟件研發(fā)公眾號(hào)。
核心觀點(diǎn)
人是軟件開(kāi)發(fā)的執(zhí)行者。過(guò)程是軟件開(kāi)發(fā)的體制。技術(shù)是軟件開(kāi)發(fā)的精髓。三者缺一不可,卻是以人這個(gè)根本原動(dòng)力為核心的。
在業(yè)界,一種普遍的看法是:人、過(guò)程和技術(shù)構(gòu)成了軟件開(kāi)發(fā)的“鐵三角”。然而,三者孰重孰輕,歷來(lái)多有分歧。本文擬以此為論題,從科學(xué)技術(shù)哲學(xué)的角度談一下我的看法。
三者中,過(guò)程與技術(shù)蘊(yùn)意頗深,容后再述。我們先看看人:
人:軟件開(kāi)發(fā)的執(zhí)行者
對(duì)于人在軟件開(kāi)發(fā)中的作用,我的第一印象是:人是軟件開(kāi)發(fā)的執(zhí)行者。這一印象雖不為眾多“人本位者”所樂(lè)見(jiàn),在我看來(lái)卻是中肯的。
“執(zhí)行者”這個(gè)稱謂,看似貶低了人的作用,實(shí)則不然。須知,執(zhí)行者不僅包括被認(rèn)為是業(yè)內(nèi)藍(lán)領(lǐng)的程序員和測(cè)試人員,還應(yīng)該包括榮為白領(lǐng)的項(xiàng)目經(jīng)理、系統(tǒng)分析師、系統(tǒng)架構(gòu)師、系統(tǒng)設(shè)計(jì)師等等。君不見(jiàn)大大小小的各類公司站在前臺(tái)的一號(hào)人物,名何?CEO是也。CEO即首席執(zhí)行官,或稱執(zhí)行總裁。雖則首席,雖則總裁,也只是一個(gè)執(zhí)行者而已。在公司中,大到CEO,小到普通職員,都是所謂的“勞方”,都是公司意志的執(zhí)行者。(公司意志即是資本的意志,其間種種,不在本文論題之內(nèi),略過(guò)不言。)
同樣的,當(dāng)討論領(lǐng)域是軟件開(kāi)發(fā)時(shí),上述所有的開(kāi)發(fā)人員都只是軟件開(kāi)發(fā)的執(zhí)行者,執(zhí)行的是軟件項(xiàng)目的意志。何謂軟件項(xiàng)目的意志?很簡(jiǎn)單的兩個(gè)字——需求。這是有大背景的。目下的經(jīng)濟(jì)為市場(chǎng)經(jīng)濟(jì),市場(chǎng)經(jīng)濟(jì)的特點(diǎn)就是以需求為中心。需求是生產(chǎn)之母,這是市場(chǎng)的鐵律,也是市場(chǎng)化的軟件開(kāi)發(fā)的鐵律。所以,軟件項(xiàng)目的意志只能是需求,在此意志下的所有技術(shù)活動(dòng)(即軟件開(kāi)發(fā))只能是執(zhí)行這一意志,那么軟件開(kāi)發(fā)人員就都是執(zhí)行者了。
當(dāng)然也有人會(huì)提出:“你太片面了,除了軟件開(kāi)發(fā)者,還有一類人——提出需求的利益關(guān)系人,不也是人嗎?所以人不僅僅是執(zhí)行者,更是主宰者!”遇到這個(gè)問(wèn)題,我們首先要明確現(xiàn)在所論述的領(lǐng)域,是軟件開(kāi)發(fā),而不是軟件項(xiàng)目,兩者有聯(lián)系,但是也有區(qū)別。就軟件開(kāi)發(fā)而言,一切都是從需求開(kāi)始的,至于提出需求的人,只是被看作需求的來(lái)源,是需求分析師們交流的對(duì)象,而非開(kāi)發(fā)的一部分。換句話說(shuō),如果給軟件開(kāi)發(fā)劃一條邊界,需求提出人在邊界之外,只有軟件開(kāi)發(fā)人員才在邊界之內(nèi),也只有他們才是軟件開(kāi)發(fā)中的人!
作為執(zhí)行者,人的作用是巨大的。所有的開(kāi)發(fā),沒(méi)有了人都是空談。人的素質(zhì)如何、人的狀態(tài)如何,人與人的關(guān)系如何,都直接決定了軟件開(kāi)發(fā)的成敗。這樣的例子比比皆是,就不一一道來(lái)了。這里就拿軍隊(duì)作為比喻。如果將軟件開(kāi)發(fā)比做打仗,那么開(kāi)發(fā)者們就是軍隊(duì)中的軍官和士兵,哪怕軍紀(jì)再嚴(yán)明、武器再先進(jìn),只要軍官差勁,士兵孱弱,那么這支軍隊(duì)就注定失敗了。反之,游擊隊(duì)也能打敗正規(guī)軍,小米加步槍也能打敗飛機(jī)大炮,人的作用可見(jiàn)一斑。
當(dāng)然,人再重要,也只是“鐵三角”的一個(gè)頂點(diǎn)。在軟件開(kāi)發(fā)中,過(guò)程同樣不能忽視,這是因?yàn)椋?/p>
過(guò)程:軟件開(kāi)發(fā)的體制
過(guò)程是軟件開(kāi)發(fā)的體制。此言一出,必遭不滿。唯過(guò)程論者一定會(huì)跳出來(lái)痛批我的偏見(jiàn)。然而我仍不知悔改,自以為這種說(shuō)法是最貼切的。
不滿大多是沖著“體制”這兩個(gè)字來(lái)的。在當(dāng)今的中國(guó)大地上,“體制”這兩個(gè)字帶著濃厚的貶義色彩。政府部門(mén)腐敗叢生,答曰:“這是體制問(wèn)題”;造導(dǎo)彈的不及賣(mài)茶葉蛋的,答曰:“這是體制問(wèn)題”;中超造反,世界杯淘汰,依舊答曰:“這是體制問(wèn)題”。不管大事小事,難事易事,出了問(wèn)題只要推給體制就萬(wàn)事大吉了。反正千錯(cuò)萬(wàn)錯(cuò)都是體制的錯(cuò),因此你沒(méi)錯(cuò)我也沒(méi)錯(cuò)。體制不能改也改不了(真要改了誰(shuí)做替罪羊???),所以錯(cuò)誤的體制永遠(yuǎn)存在,屬不可抗力,非人力所能及。
這里不討論中國(guó)的國(guó)情,只是借此理解“體制”兩字的分量。其實(shí),說(shuō)得通俗些,體制就是固化下來(lái)的行事規(guī)則與經(jīng)驗(yàn)。因?yàn)樵?jīng)取得過(guò)成功,并且也吸取了一定的教訓(xùn)以規(guī)避失敗,因此在相同的情況下,體制會(huì)帶來(lái)更大的成功概率,并形成權(quán)威,使后來(lái)者減少扯皮,提高效率。
所以,體制不僅不是貶義詞,相反蘊(yùn)涵了大大的褒義(只是被用濫了,變成了大反派。)?,F(xiàn)在看看軟件開(kāi)發(fā)中的過(guò)程,與體制的含義正是完全吻合。因此,合適的過(guò)程,指導(dǎo)人們正確地完成各種開(kāi)發(fā)活動(dòng),一步步邁向成功的彼岸;而不合適的過(guò)程,則把軟件開(kāi)發(fā)推入無(wú)底深淵。
把過(guò)程看成軟件開(kāi)發(fā)的體制,不僅僅是因?yàn)閮烧咴诂F(xiàn)象上是一致的,更重要的是在我們對(duì)待它的態(tài)度上也要有所借鑒。現(xiàn)在有不少開(kāi)發(fā)人員,在遇到開(kāi)發(fā)中的問(wèn)題時(shí),往往就會(huì)把責(zé)任推到過(guò)程上,然后感嘆一句:“有CMM(一種軟件過(guò)程改進(jìn)的評(píng)價(jià)標(biāo)準(zhǔn),其對(duì)應(yīng)的方法論是RUP)就好了?!苯又?xiàng)目經(jīng)理不厭其煩,桌子一拍,大叫:“要有CMM!”于是,便有了CMM。如此折騰一年后,終于通過(guò)了CMM認(rèn)證,依舊遇到開(kāi)發(fā)問(wèn)題,開(kāi)發(fā)人員仍有的說(shuō):“要填這么多表格,太費(fèi)時(shí)間了;我們不該使用RUP,改XP(一種強(qiáng)調(diào)迅速應(yīng)變的軟件開(kāi)發(fā)方法論,美其名曰極限編程)就好了?!比缓箜?xiàng)目經(jīng)理暈頭轉(zhuǎn)向,閉目養(yǎng)神,道:“那就改XP吧?!庇谑牵愀牧薠P。誰(shuí)知還是出問(wèn)題。這時(shí)開(kāi)發(fā)人員倒不抱怨了,因?yàn)轫?xiàng)目已經(jīng)宣告失敗,項(xiàng)目經(jīng)理也被撤職了。這個(gè)不是笑話,而是筆者親眼所見(jiàn)的。
由此可見(jiàn),過(guò)程不能被神話,更不能被亂用。世界上不存在放之四海而皆準(zhǔn)的過(guò)程,而只有因地制宜、因人制宜地選擇合適的過(guò)程,并在執(zhí)行過(guò)程中不斷地改進(jìn)該過(guò)程,才有可能取得成功;相反,則只能失敗,不做他想。
體制二字,真實(shí)地體現(xiàn)了過(guò)程在軟件開(kāi)發(fā)中的地位。然而,光有人與過(guò)程還是不夠的,最后一個(gè)關(guān)鍵的因素是:
技術(shù):軟件開(kāi)發(fā)的精髓
要說(shuō)明技術(shù)在軟件開(kāi)發(fā)中的作用,就得先說(shuō)說(shuō)為什么要有軟件開(kāi)發(fā)。軟件開(kāi)發(fā),顧名思義,就是要開(kāi)發(fā)軟件。那軟件是什么?可執(zhí)行的程序?可帶來(lái)利潤(rùn)的產(chǎn)品?都對(duì),但都不夠全面。從根本上而言,軟件,是技術(shù)的載體,是被定制的技術(shù),是技術(shù)針對(duì)某項(xiàng)特定需求的應(yīng)用。
軟件中沉淀著技術(shù),這是顯然的,否則別人為什么要買(mǎi)你的軟件呢?當(dāng)然軟件中不僅僅沉淀著技術(shù),還包括開(kāi)發(fā)的人力成本、機(jī)械成本、時(shí)間成本等。但是技術(shù)是其中的精髓,也是此軟件不同于彼軟件的根本所在。
軟件的競(jìng)爭(zhēng)力,不在于它的規(guī)模,不在于它花費(fèi)的各種成本,而在于它的功能及非功能特性,而在于這些功能及非功能特性之中蘊(yùn)涵的技術(shù)。比如說(shuō),Microsoft為什么能統(tǒng)治PC機(jī)的操作系統(tǒng)市場(chǎng)?不是人,不是管理,而是技術(shù),將圖形用戶界面與操作系統(tǒng)和二為一的Windows技術(shù)。在Microsoft之前,并非沒(méi)有好的圖形用戶界面(Apple的Macintosh是這方面的先驅(qū)),也并非沒(méi)有好的操作系統(tǒng)(DEC、IBM等的Unix異常強(qiáng)大)。
但是,只有Microsoft將圖形用戶界面技術(shù)與操作系統(tǒng)技術(shù)結(jié)合了起來(lái),應(yīng)用到Windows中,形成了其特有的Windows技術(shù),從而異軍突起,開(kāi)創(chuàng)了Microsoft帝國(guó)。更有甚者,當(dāng)Dos內(nèi)核的Windows95/98無(wú)法完全滿足市場(chǎng)需求時(shí),Microsoft不惜撤換整個(gè)開(kāi)發(fā)組,改用Unix技術(shù)重新開(kāi)發(fā)Windows(Microsoft稱其為NT,即新技術(shù)),于是WinNT、Win2000、WinXP等等在新千年中依舊輝煌。可見(jiàn),Windows的發(fā)展史就是技術(shù)在軟件過(guò)程中作用的最好詮釋。
當(dāng)然,軟件開(kāi)發(fā)中的技術(shù)不僅僅是指沉淀在軟件中的技術(shù),還包括開(kāi)發(fā)技術(shù)本身。如開(kāi)發(fā)環(huán)境、管理方式、過(guò)程工具等等,都是開(kāi)發(fā)技術(shù)的應(yīng)用領(lǐng)域??梢哉f(shuō),軟件技術(shù)及開(kāi)發(fā)技術(shù),就是軟件開(kāi)發(fā)的精髓所在。
一言以蔽之,人、過(guò)程和技術(shù)在軟件開(kāi)發(fā)領(lǐng)域都是不可或缺的。“鐵三角”三字正是名副其實(shí),三者缺一不可。那么到底哪個(gè)最重要呢?如果僅僅從軟件開(kāi)發(fā)本身來(lái)考慮,恐怕難以給出合適的答案,因?yàn)楹翊吮”藙t必然誤入歧途。那么似乎本文可以到此為止了??勺?jǐn)?shù)仍然不夠誒?。ê呛?,開(kāi)個(gè)玩笑)所以繼續(xù)想——如果撇開(kāi)軟件開(kāi)發(fā)這一具體領(lǐng)域,就一般意義而言,哪個(gè)更重要呢?然后再回到軟件開(kāi)發(fā)領(lǐng)域,就會(huì)發(fā)現(xiàn):
再論人:根本原動(dòng)力
人乃萬(wàn)物之靈。此話同樣會(huì)引起諸多非議。但是,即使最激烈的批評(píng)家也不得不承認(rèn)其中的合理部分:正是人的情感、認(rèn)知和創(chuàng)造能力構(gòu)建了我們所處的人類社會(huì)。撇開(kāi)情感不談,人的認(rèn)知與創(chuàng)造能力也是軟件開(kāi)發(fā)的根本原動(dòng)力。
在軟件開(kāi)發(fā)中,隨處都是人的身影。軟件開(kāi)發(fā)的執(zhí)行者是人,這是顯然的了。那么軟件開(kāi)發(fā)的過(guò)程呢?過(guò)程是靠人來(lái)實(shí)施、來(lái)管理的,這無(wú)須說(shuō),這充其量只是執(zhí)行的一部分而已。
這里想說(shuō)的是過(guò)程本身,它是如何來(lái)的呢?過(guò)程不是憑空產(chǎn)生的,當(dāng)過(guò)程成為一種體制時(shí),它也是靠人通過(guò)不斷的創(chuàng)造-使用-改進(jìn)-再使用-再改進(jìn)而來(lái)的。在過(guò)程改進(jìn)的過(guò)程(套用現(xiàn)在的一句行話,這叫做meta-process,即元過(guò)程,過(guò)程的過(guò)程)中,需要的是人,是人在創(chuàng)造著新的過(guò)程,是人在推動(dòng)著過(guò)程的改進(jìn),是人在使用過(guò)程的軟件開(kāi)發(fā)中取得了成功!
這里要說(shuō)明一句的是,此人非彼人。此處的“人”不是指“鐵三角”一端的人,那是作為一個(gè)項(xiàng)目的開(kāi)發(fā)人員、作為軟件開(kāi)發(fā)執(zhí)行者的人。而是所有致力于軟件開(kāi)發(fā)這一領(lǐng)域的所有人的總和。這個(gè)“人”并不處于一次軟件開(kāi)發(fā)的邊界之內(nèi),而是在將軟件開(kāi)發(fā)作為整個(gè)領(lǐng)域,包含軟件開(kāi)發(fā)的過(guò)去、現(xiàn)在和未來(lái),包含無(wú)數(shù)次軟件開(kāi)發(fā)及無(wú)數(shù)次對(duì)于軟件開(kāi)發(fā)的研究的前提下,處在這個(gè)領(lǐng)域中的一個(gè)概念,是歷史上曾經(jīng)出現(xiàn)的、現(xiàn)在正在進(jìn)行著的、以及日后將會(huì)置身其中的所有的開(kāi)發(fā)人員和研究人員的總和。人的認(rèn)知與創(chuàng)造能力,在這個(gè)“人”上體現(xiàn)得淋漓盡致。
正是這個(gè)人,在最初混亂的軟件開(kāi)發(fā)實(shí)踐中發(fā)覺(jué)了軟件開(kāi)發(fā)過(guò)程的重要性,從而逐步創(chuàng)造出各種軟件開(kāi)發(fā)過(guò)程,并使用之,從而使軟件開(kāi)發(fā)秩序化;
正是這個(gè)人,在使用軟件開(kāi)發(fā)過(guò)程的實(shí)踐活動(dòng)中發(fā)現(xiàn)了過(guò)程所存在的不足之處,于是吸取教訓(xùn)改進(jìn)之,從而使軟件開(kāi)發(fā)過(guò)程更合理、更有效;
正是這個(gè)人,不局限于過(guò)去所創(chuàng)造的過(guò)程,懷著揚(yáng)棄的態(tài)度不斷地投身于軟件開(kāi)發(fā)中去,從而使不斷進(jìn)化的軟件開(kāi)發(fā)過(guò)程真正成為軟件開(kāi)發(fā)“鐵三角”的一個(gè)頂點(diǎn),為軟件開(kāi)發(fā)、為人類服務(wù)。
而我們每一個(gè)軟件開(kāi)發(fā)人員,每一個(gè)從事軟件開(kāi)發(fā)的研究人員,都是這個(gè)人的一部分,都通過(guò)自身的活動(dòng)體現(xiàn)了這個(gè)人的作用。所以,我們的整體是具體化的他,而他則是抽象化的我們。
當(dāng)然,不僅是過(guò)程,在技術(shù)方面,人所起的作用是類似的。技術(shù)作為科學(xué)與生產(chǎn)之間的橋梁,其產(chǎn)生、改進(jìn)、普及直至消亡都離不開(kāi)人的推動(dòng)。因此,人是軟件開(kāi)發(fā)中當(dāng)之無(wú)愧的根本原動(dòng)力,軟件開(kāi)發(fā)的“鐵三角”,包括作為軟件開(kāi)發(fā)執(zhí)行者的人,作為軟件開(kāi)發(fā)體制的過(guò)程以及作為軟件開(kāi)發(fā)精髓的技術(shù),都是以人這個(gè)根本原動(dòng)力為核心的。概括地說(shuō),就是“一個(gè)核心,三個(gè)頂點(diǎn),一個(gè)都不能少”。
那么,當(dāng)我們認(rèn)識(shí)到人在軟件開(kāi)發(fā)中的核心地位時(shí),應(yīng)該如何做呢?權(quán)以如下文字作為這個(gè)問(wèn)題的答案,以及本文的結(jié)尾:
If A thru Z are scored 1 thru 26,
Your knowledge has a score of only 96 (11+14+15+23+12+5+4+7+5);
And your hardwork just scores 98 (8+1+18+4+23+15+18+11);
While your attitude is what determines everything of your life (1+20+20+9+20+21+4+5)。