幾年前,我在一家法國大型科技公司工作,為他們的一個軟件項目做咨詢師。在那段時間,我見識到了軟件工程工作方面最匪夷所思的一切,完全超乎我的想象。項目人員工作極度不專業(yè),而更嚴重的是,工作環(huán)境完全無視人的尊嚴。我一度覺得去那里上班就像坐牢。我只要舉幾個例子,讀者自然就有分曉。
工作內(nèi)容
為一個政府部門開發(fā)一款軟件。
政府先付了幾百萬歐元的訂金,軟件開發(fā)耗時初定 2 到 3 年。公司雇了幾個工程師,開始了項目。每隔三個月,團隊人數(shù)就翻一番,以便讓資金不斷流入。
7 年后,項目還不成樣子,連雛形都沒有。每天公司都要交幾千歐元的罰金。于是,管理層決定節(jié)流,把經(jīng)驗豐富的員工都辭退了,雇了些經(jīng)驗少,甚至完全沒經(jīng)驗的新人。
10 年后,項目進度實在太滯后,中層管理人員決定雇傭有軟件工程經(jīng)驗的人,把項目拉回正軌。公司的員工每三個月?lián)Q一批,也就是法國離職交接期的時長。
12 年后,項目還沒結束。公司每天給政府發(fā)的修改申請越來越多,以“補貼”每天繳納的罰金。此時已經(jīng)是 2008 年。
項目數(shù)據(jù)
600 萬行代碼
基于 C ++
50,000+ 類
使用的 C ++ 已經(jīng)過時,“鎖死”在編譯器版本中,編譯器的版本只能一個操作系統(tǒng)上用。
基于 CORBA
項目使用的數(shù)據(jù)庫軟件背后的公司已經(jīng)破產(chǎn)
圖層用戶界面有好幾個,但實際上每一層都沒人維護。
32 臺計算機上構建,需要 48 小時
運行一個用戶界面需要 40 到 50 個并行進程
沒有動態(tài)庫鏈接:可執(zhí)行文件大小在數(shù)百兆字節(jié)范圍內(nèi)
啟動時間約為 15 分鐘
癱瘓頻率:每 30 秒到 30 分鐘一次
沒有那個軟件工程師會說 C++ 很簡單。就其復雜程度而言,這或許是最難掌握的編程語言,就連創(chuàng)造 C++ 的幾個工程師都坦白說,他們自己也沒有完全掌握。
這種無底洞、大迷宮似的語言,還是有不少人揚言說自己已經(jīng)掌握了,只要有機會,他們就敢用給你看。他們一猛子扎進這口深井,最后大多遍體鱗傷。看著一滿篇天書,花不知多少小時,也找不到癱瘓原因。人都是很聰明的,人生短暫,投入一段時間沒有回報,就會“棄暗投明”,改用其他語言,改做其他項目。
軟件一大,不管是什么語言寫的,維護起來都很難。6 百萬行代碼,就一個小團隊維護,只要想想就能發(fā)瘋。6 百萬可不是小數(shù)字,就算一秒鐘讀一行,也要 70 天不眠不休才能看完。
我再舉兩個實例,讀者就知道這個項目有多讓人崩潰。
有一個開發(fā)者被分配了這樣一個任務:找出在界面上點擊右鍵,界面凍結的原因。他花了幾天時間,仔仔細細檢查,耗掉大半耐心之后,他發(fā)現(xiàn),在界面上右擊后,其實沒有錯誤,只是內(nèi)容菜單要 45 分鐘后才彈出。每次用戶在主窗體點擊后,菜單是動態(tài)生成的,但是背后是巨量的靜態(tài)內(nèi)容,因此耗時長。有些用戶反饋說“加載 CD”的命令完全沒反應。這個問題花了幾個星期才弄明白,但是最后,錯誤報告卻被標記為“已解決”,因為數(shù)據(jù)確實有加載,只不過是花了整整 7 天,才加載完 700 兆的數(shù)據(jù)。嗯,不然怎么說耐心是美德呢…
版本控制,猶如脫韁野馬
好幾年過去了,團隊里終于來了個人才,提出要用版本控制工具。第一次嘗試,效果不如人意,于是團隊決定換一個系統(tǒng)。又過了紀念,每次更新的歷史數(shù)據(jù)全沒了。最后,他們選擇使用一個瑞士的系統(tǒng),圖形用戶界面簡直不堪入目。有一個四人小組全職負責版本控制軟件方面的維護問題,跟他們合作,我們常常面臨以下的問題:
第一次測試需要與版本控制團隊先預約時間,通常在一周后才授權。
未經(jīng)中層管理人員授權,不允許編輯文件。必須事先告訴經(jīng)理要編輯哪些文件,然后申請上級許可,再預約版本控制團隊,在幾天后才能編輯。
每次修改代碼都會產(chǎn)生分支文件,也就意味著必須合并所有修改。有了這么多的文件,你可能覺得,不會出現(xiàn)兩個人弄同一個文件上的重復勞動。但事實證明,大家都在弄同樣的 100 個文件。
檢入過程非常痛苦,這個過程中,你的代碼經(jīng)過自動化錯誤檢測軟件審查,最終由中間管理人員審查。不用說,bug 的出現(xiàn)速度永遠比開發(fā)人員糾正速度快得多。如果你仔細看注冊的錯誤數(shù)量,每次修正導致的新 bug 數(shù)量,是原來 bug 數(shù)量的兩倍。
版本控制很簡單。舊軟件是版本1,目前的軟件是版本2,未來的軟件是版本 3. 沒有人知道哪個版本已經(jīng)交付給客戶了。
從前的某一天,公司安排過正式交付。但是這個時間不是團隊內(nèi)的人定的。那天,客戶受到了一張沒有內(nèi)容,只有安裝指引的光盤。那時因為,沒有人知道怎么把這個項目做出來。后來客戶發(fā)現(xiàn)他們受到的光盤里,什么也沒有,于是給公司發(fā)了封正式的投訴信。
公司居然把舊版本的軟件發(fā)給了客戶。客戶之所以能發(fā)現(xiàn),是因為他們看了“說明”欄,里面的內(nèi)容跟上一年的版本大同小異。
“人件”
微薄薪水,只能雇庸碌之輩
團隊里大部分人都是沒有軟件工程經(jīng)驗的人,軟件里要不是大部分都是 bug,就奇了怪了。經(jīng)理意識到,一個單純的軟件項目,支出的大頭是薪水,真是天資聰穎。但是,這個大發(fā)現(xiàn)絲毫沒有影響 TA 炒掉工程師,不論他們有沒有經(jīng)驗,卻把桌面上有“C++傻瓜入門”之類書的管理人員統(tǒng)統(tǒng)留下了。
我們的夢想團隊
團隊 55 人:20 個開發(fā)者,35 個管理人員
沒錯,管理人員數(shù)量比工程師還多。
管理人員最擅長的就是開會,講的都是同一個 PPT,一遍又一遍,講到吐為止。而開發(fā)者就在寬敞的共用辦公空間里聊天解悶。
很多管理人員在軟件工程上毫無經(jīng)驗。當時 SCO-Linux 爭議炒得沸沸揚揚,不管整件事算不算鬧劇,很多人都意識到,以后要用自由軟件都要付費了。)不用說,整個軟件到處都是 GNU C 庫里的代碼,一個巨型 GNU 兼容的非共享軟件。但是,就這個項目的水準,估計也沒人敢把代碼放出去。
自由軟件(free software),根據(jù)自由軟件基金會對其的定義,是一類可以不受限制地自由使用、復制、研究、修改和分發(fā)的,尊重用戶自由的軟件。這方面的不受限制正是自由軟件最重要的本質,與自由軟件相對的是專有軟件(proprietary software),或被稱為私有軟件、封閉軟件(其定義與是否收取費用無關──自由軟件不一定是免費軟件。
整個團隊,技術水平不如人意,了解互聯(lián)網(wǎng)的人屈指可數(shù),其中自認為了解互聯(lián)網(wǎng)的,以為互聯(lián)網(wǎng)只是為愛情動作片而生的。他們之間,如果有人說自己在網(wǎng)上看了點東西,聽者就會露出會心一笑。
地獄之旅
本來在這里的工作,雖然不算優(yōu)越,至少不會無聊。但是頂層的管理人員非要采用納粹管理集中營的辦法來管理員工。我隨便舉幾個例子:
早九點后到崗是不允許的。有一天, 經(jīng)理站在大門后,把 9 點整以后到的所有員工都當場炒魷魚,包括一些經(jīng)理和銷售人員。
抽煙的員工,因為跑出去抽煙,工作的時間就打了折扣。所以管理層決定讓所有員工都不許吸煙。當然,沒有用。
有時候,一連好幾天咖啡機都被收起來。因為跑去喝咖啡的人自然沒有坐在辦公桌前的人、伏案寫代碼的人工作時間長。
每次有上級來視察,咖啡機就要關掉,以便給上級留下大家都在桌前認真寫代碼的印象。
那里的洗手間是我去過的洗手間里最惡心的。大概也是為了提高大家的效率:上廁所的時間少了,工作的時間自然就多了(工作質量自然也上去了)。
這樣的工作,這樣的管理,為什么大家還要來上班?最主要的原因就是當時法國深陷經(jīng)濟危機(某種程度上,現(xiàn)在也是),有工作,有薪水幾乎成了特權,工作環(huán)境、內(nèi)容自然就沒那么在意了。
還有一個原因,對于在那里的大多數(shù)員工而言,這份合約算是他們與一家真實公司簽下的一份實實在在的合約。沒有對比,就沒有傷害,他們可能都不知道這份工作的糟心程度。很多員工新入職場,覺得遲到就被炒魷魚,也沒什么不合理的。但是,這樣嚴苛的標準,晚一分鐘都不行,只有變態(tài)的管理者才會付諸現(xiàn)實。
話又說回來,政府怎么會讓這樣的事情發(fā)生呢?但我們都心知肚明,政府里管這個項目預算的官員和軟件公司的頂層管理人員拜過把子,關系夠鐵。在法國,這種程度的腐敗也沒什么新鮮的。很多人根本不知道,更別說有什么懲罰或者后果了。當然,也不限于法國,放眼歐美,這樣的故事也不少。
所以,下次上班覺得難熬,要學會置身處地。想像一下自己在那里工作,會是什么光景。
-
程序員
+關注
關注
4文章
953瀏覽量
29818
發(fā)布評論請先 登錄
相關推薦
評論