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