讀《中國與印度軟件工程師之比較》一文,感覺文中都是對中國程序員的侮蔑、誹謗和侮辱,有些話不說不快。(該文的URL: http://www.wsalc.com/html/200404/20040403QBI115250.html)文中的紅色字部分皆是出自該文。
我先哉這里申明:我這里不是要替程序員推卸責任,我是覺得這種不負責任的、錯位的文章廣為流傳,非常不利于中國的軟件業,所以覺得有必要進行駁斥。
的確,中國現在的軟件工程水平不是很高。但是即使在美國,每年也有很多軟件項目失敗,難道中國就不允許失敗了,難道印度就沒有失敗的項目么,更有甚者,為什么要把項目失敗歸結到程序員身上,平心而論,一個管理者對項目的影響比程序員大吧。
按照軟件工程的說法,一個軟件項目中人員的責任是嚴格區分的:項目經理、系統構架師、過程工程師、系統設計師、程序員、測試人員等等,可以參考RUP中的相關部分。而在中國的現狀是,我們的程序員至少兼了系統設計師和程序員的職責,有的公司好些,沒讓再兼系統構架師,可能還有專門的測試人員,很多公司就是程序員兼測試人員兼系統設計師和系統構架師了,所以我們的程序員肩上承擔了太多的責任。實際上作者在文中并沒有體現出非常好的軟件工程素質,而是籠統的分成了項目經理,除了項目經理的都是程序員,呵呵,有意思。
文中提到“印度人能夠把軟件整體把握得很好,能夠完成軟件,并得到相當好的設計文檔。而中國人在那里琢磨數據結構、算法,界面人員就還沒編碼就想著是Outlook式的還是Visual Studio式的界面。”
首先,文中的這個“印度人”“中國人”含義模糊,印度人跟中國人一樣的,也有項目經理、系統構架師、系統設計師等等區分,那究竟這里指的誰?姑且不管。實際上,對項目整體進行把握,并進行功能劃分,這個應該是系統構架師的工作;然后由系統設計師各個部分進行系統設計;再后面由程序員做編碼實現;最后測試,交付。。。。而在上面“中國人”的行為實際體現的是一種無計劃無分工的行為,以至于無法保證項目的成功實施。我想問,這個究竟是誰的責任?難道是我們程序員責任?當然,作者是認為我們程序員劣根低下,要負責任。先讓我們看看所謂的項目經理干什么的,他必須組織項目的計劃、日程和資源,他必須能夠執行項目決策,并最終為項目決策負責,這個是項目經理的組織和決策能力。上面體現的無計劃和無分工的狀況,正是項目經理缺乏組織和決策能力的表現,所以真正的責任承擔者應該是項目經理。
“界面人員沒編碼前先想著是outlook式的還是Visual Studio式的界面”,這個有錯嗎?設計本來就在編碼之前,難道要一邊編碼一邊想是什么樣式?這個好像不符合作者對軟件工程前調的想法吧。
“就是不能保證能夠把一個軟件穩當、完整的開發出來。”這個是誰的錯,是誰來保證項目的成功?當然是項目經理了。如果一個項目分成ABC三部分,做A的程序員只能保證A成功,BC的成功不是他的職責。
舉個簡單的例子:
“軟件中需要一個列表,用來表示我們處理的事務。該類表在業務繁忙的時候將變得很大。中國人就用雙向鏈表,抱著《數據結構》書在那里寫鏈表的類。印度人開了一個大數組,然后就開始干。為什么印度人不用鏈表,他們說:1、你們給出的設備(小型機),最少具備512M內存,浪費一些沒有什么。2、數組方式訪問方便、效率高。 看出了一拿到東西就吭哧吭哧作Code,和好好進行軟件分析的不同了嗎?”
我想問的是,作為項目經理,你在這里有沒有把規范的需求文檔提交給程序員?你有沒有明確的告訴過“該類表在業務繁忙的時候將變得很大”“給出的設備(小型機),最少具備512M內存”?另外,你有沒有告訴過程序員,因為有512M而可以不需要考慮內存浪費的問題(因為數組是靜態分配,可能會浪費內存一些,但是應為直接訪問,所以速度快些、方便些),即使是512M并不是就等于可以隨便浪費內存,從操作系統的角度來說,內存永遠是不夠的。需要知道,需求分析不是程序員的責任,從軟件工程的角度來說,那是上一個流程應該輸出的產品。不明確需求就該是著手實現,這是過程控制上的問題,而過程控制上的問題恰恰是項目經理的責任。
“所謂的項目經理(PC)一般也是從編碼人員升上來的,并不是所謂的不懂技術,一般都至少有四年以上的經驗”,印度也要求項目經理懂技術的撒。
“PC主要就是制定開發計劃,負責協調,填寫各種表格.”呵呵,這個PC對自己的職能還是了解的嘛,不光是填寫各種表格哦,需要制定開發計劃,負責協調
“所有的東西(包括草稿)都有文檔”不是每家中國的軟件企業都沒有文檔,不是每家印度軟度公司都由好文檔,況且文檔也有質量的區別。(象中興、華為等通信設備制造商其實更象軟件企業,他們的員工大部分是做軟件的。)
“詳細文檔要求達到只有這個文檔就可以編碼的程度,一般寫文檔時間占60%,編碼時間極少”,看作者的意思是熟悉軟件工程了,張口RUP,閉口UML,可是這個PC缺乏一些基本的軟件工程常識,不管是那種過程,瀑布式也好,螺旋式也好,還是RUP也好,XP也好,軟件過程都不是劃分“文檔編寫”和“編碼階段”的,文檔只是各個軟件過程中的副產品,各個階段時間怎么分配的,可以參考教材。作者的意思,文檔編寫就代表了立項、需求分析、系統設計,但是,真如這樣嗎?僅僅一個文檔編寫就能代表需求所有這些步驟的含義?就這么簡單?
“計劃很詳細,的確能達到小時級,但是實際情況還是誤差比較大,所以他們也有加班” 。計劃是不是越細越好,達到小時級有意義嗎?那是不是算到秒級更好?結果到后面還是“實際情況還是誤差比較大,所以他們也有加班”,那這樣的計劃有何意義?
“先學習UML和Rose以及RUP,不要總是要找著證據。在中國的軟件開發水平下,很難給你一個好的例子,OK?中國人總是要看到一個東西有了試驗田,而且稻子長得好,才換稻種。要知道在國外上述的軟件開發模式的應用,大可以看看Rational網頁上的story。Just do it! 一句話,中國的軟件開發水平低得很。趕不上印度人,印度的軟件公司可以讓高中生編代碼,它的軟件工程水平可想而知。當然,你如果是個很牛的程序員。估計夠嗆,因為中國的氣氛中,很牛的程序員都很難接受軟件工程的”。實際上這段話不知道作者想說什么,不過我想說得是,中國的高中生去看Rational的網站夠戧,估計有部分可以,但是要求大部分高中生看懂,是不是苛刻了點。而且,“中國的氣氛中,很牛的程序員都很難接受軟件工程的”,求柏君反對軟件工程?鮑月橋反對軟件工程?,實際上作者這句話沒有依據,體現根據他本人對程序員的一種歪曲法。據我感覺,中國大多數程序員都是呼喚軟件工程的。
“你是不是不能忍受一個編程序不如你的人做你的項目經理? ”,項目經理是否編程序比我好我不在意,但是我在意項目經理居然不懂軟件工程,我在意項目經理認為分析設計就是簡單的謝謝文檔,我在意項目經理居然對問題域一點都不了解,我在意項目經理只會在吃飯的時候調戲酒店服務員(即使服務員已經表現出非常的委屈何難堪)。
“你是不是覺得你的老板對客戶吹牛皮、夸大自己而感到不舒服?”一般情況下,項目經理何老板是兩個人。
“你是不是一個拿到一個需求腦袋里第一念頭就是如何實現的人?” 在中國,只有少部分程序員可能這樣,而且他們也在不斷進步中。實際上,我覺得原文作者本人作為一個項目經理的想法倒有點意思:軟件項目=“寫文檔”+“寫代碼”
“你是不是很崇拜Stallman,Linus,很討厭Microsoft? ”那純粹是個人問題,和作者講的軟件工程何干?我想作者的意思無非是說這是一種不成熟的表現罷了,借此,作者進一步認為我們程序員都很膚淺。
“我們現在處于深深的自卑當中,感到中國的軟件工程水平的低下已經是牽涉到民族劣根性的問題了。” 這只能說明作者那種對程序員的仇視和誹謗的心理,估計也是他本人能力不夠以至于項目失敗,而把員應歸結到程序員身上。
“他們的編程題目簡直象是抄襲的?程序結構,注釋,變量命名就不說了吧,全部都是極其類似!反觀中國的牛人、高手,每個人有自己的一套。”這能說明什么問題,難道編得和人家一樣就效率高了,就體現出軟將工程素質高了?我想作者走到極端了,盲目最求創造性固然不好,但是有自己的一套也成錯事了?怪哉!!!!
“到了新的崗位,先把前任的程序貶損一通,然后自己再開發更多的問題的代碼來代替。”,實際上,作者這句話不負責任,這種情況存在,但不是僅僅只發生在程序員身上,而中國的程序員都是學校出來的,相對心地單純,我估計更多的情況是發生在他們項目經理身上,比如硬把項目失敗的經理推卸到程序員身上。“我的公司統計,一個軟件中有4個以上 CSocket版本”這個是版本控制做得不好,與程序員何干?
“他們許多公司的項目經理根本就不懂技術。”要么作者自相矛盾,要么就是這個項目經理也太那個了,前面還說 “所謂的項目經理(PC)一般也是從編碼人員升上來的,并不是所謂的不懂技術,一般都至少有四年以上的經驗”,這里又說“許多公司的項目經理根本就不懂技術”,呵呵,不知道他們這4-5年怎么混的,難道真應了那據話,“不懂的人就去當項目經理”?。另外,技術并不只是編碼,分析設計、項目管理也是一種技術。就作者的認識,說句大不敬的話,他真的膚淺得很。
“是老板怕總工。技術骨干擁兵自重,抗拒管理。”我想,這個問題離作者討論的軟件工程的問題太遠了,實際上,這個是個社會問題,而聯想柳總和倪總的故事好像不是這樣的,而方正張總和王選院士的故事也不是這樣的。“任何制定好的計劃,都有可能被技術人員推翻或者跟你消極怠工。”,實際上,制定好的計劃被技術人員推翻也沒什么奇怪的,制定計劃本生也是個過程,不是說一個人關了門套個文檔模板寫了個計劃書就可以了。而至于“跟你消極怠工”,這是對中國大部分程序員的誹謗,我想中國大部分程序員都不會做這個事情,另外事情本生也體現了項目經理的管理能力問題。
文中多處體現的是對程序員的輕視、侮蔑、誹謗和人身攻擊:比如“牛人、高手”一看就是反語;“開發人員被初略的給個任務,他在月初,可以慢慢琢磨是做成什么樣子,然 后上上網,聊聊天。到了月中和月末,就開始熬夜編碼。” “跟你消極怠工”,這是沒有根據的侮蔑。程序員也是人,基本的受尊重的權利是憲法賦予的,作為項我的目經理你可以命令我、批評我,但你不能侮辱我。
實際上,該文中體現了作者對軟件工程、RUP、CMM根本就是不甚了解,存在處處錯誤的觀念,學了幾個名詞就拿來大講特講,我想應該有很多人已經看出來了,就該作者而言,缺乏組織和協調能力。作者將項目失敗的責任一股腦的都推到程序員身上,須知一個項目中,項目經理才是最大的責任承擔者,一個項目的失敗首先是計劃、分工等不合理,至于最底層的程序員,對項目的影響是非常小的。