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