好吧,需要算算了。按美國平均水平,每個程序員每天10行代碼,中國比較勤奮,就算30行吧!一人一年1萬行吧。算下來大約是1100萬人年。軟件有生命期,好的情況下自己敗壞周期在5-20年,質量一般的話,也就10年(如此大量代碼,只能是行業平均水平)。也就是說,大約需要110萬程序員。嗯,什么概念呢?大約至少得10個微軟吧!
再說恐怖的,cmm3級(這不是平均水平,而是較高水平了),一千行大約3個問題出廠,1100億大約是,3億個bug(也就是3億個問題)。解決這些問題足夠讓一個微軟公司破產了。但華為活得好好的,其危機卻與這個沒關系。所以,可以明白的是目前華為的產品代碼,絕對達不到這么大。如果此事真實,其中大多數代碼應該被拋棄了,因為即便是cmm5也得有3千萬bug,這不可能是真實的。
好了,如果代碼庫真的有這么多,到底是什么情況呢?估計多數是開源代碼庫的中依賴的部分復制和開發者保存的備份。這是防止斷網影響項目進展的防范手段。所以別太嗨了。呵呵。
算完了,但果是不被質疑的。程序員的感受是,一天10行代碼?搞笑呢?
那我先拿一個職業生涯中的例子看看個人生產情況:
我剛開始產品級編程是一個通信系統(與華為同行,可比較)。整個系統中開發2年,大約在1991-1993年。我負責系統中的一個核心模塊編程項目。敲代碼,我最快18小時,3000行匯編,這個小項目的全部代碼,強實時,時鐘級設計,無操作系統。但全過程過程實際算下來大約有將近6個月。包括原理設計,代碼執行機制規劃,算法設計,原理機驗證測試,邏輯分析儀調試。那18個小時不過是敲代碼,基本沒有稍微深入一點的思考(主要思考內容:寄存器分配調配;內存效率;3級任務協調;周期計算;累加器溢出控制;可靠性監測周期等細節,以保持遵循詳細設計定下的原則)。沒有單元測試、沒有功能測試、沒有代碼評審、沒有團建和各種活動。(那臺邏輯分析儀夠我當時10年工資。)一天不到20行代碼吧?
項目期間我為自己還開發了4000多行c語言的工具,有算法仿真工具的、有分解燒錄文件的、有原型實驗的。還有幾百行快速編譯的dos批處理文件。但這都與產品無關,算不上產品代碼。當然還有過程中,放棄了20000行匯編(畢竟當時還是經驗不足),主要是架構問題達不到要求,最終代碼中沒這個,也不能算。就呵呵了,難道連失敗的東西都要算到工資獎金里嗎?
項目結果:前兩年和華為交流,他們說那套91年的代碼實現的指標到現在也是先進的。那套代碼到最后收到保險柜也沒有再改過一行。這中間三年試運行,審查、鑒定、定型、銷售,再沒改過,所有性能、可靠性監測的保護機制從未啟動過,最長運行時間是2萬小時。
這是通信領域個人手工業作戰的基本情況。
當這種工作被分解給多個人之后就是團隊計算了。這是軟件工業難點之一:工時估算。
在產品市場問題解決后,開發成本估算就是軟件開發難點。最現實的估算是,專家用背靠背評估最終實現代碼行數。這些代碼行數除以組織軟件開發成熟度估算效率(也就是10行每人天的意義),再乘以開發團隊的平均人天成本就可大致得到成本量級。所以,10行每人天的估算是開發團隊組織效率的,不是程序員個人生產力。
另外:
1、代碼庫是一種軟件工程中的保護機制,不反應軟件生產的實際情況。
2、代碼不是越多越好,任何以代碼行數計算開發人員生產力的想法,都是很外行的。