編者按:原文作者John D. Cook是一位數學教授、程式設計師、顧問、經理人和統計學家,善於並享受結合運用這些技能來解決問題。
最近,我聽說了一個關於缺乏經驗的程式設計師和經驗豐富的程式設計師每天寫相同行數的程式碼的研究結果。其不同之處在於,經驗豐富的程式設計人員讓這些程式碼更高效,向著目標穩步前進;缺乏經驗的程式設計師單純地將大段的程式碼分隔開,並且多次複寫相同的程式碼塊直到它們看起來能夠執行。或者不拆分程式碼,他們連續除錯好多天,幾乎是隨機的改變一兩行程式碼,直到這些程式碼看起來能夠執行。
正如格雷.威爾森在他的採訪中所指出的,將注意力放在軟體開發的質量上,往往也會提高生產力。更多的努力,會帶來進步;反之,將會導致“回鍋肉”(返工)。
經驗豐富的程式設計師不僅能每天編寫更多行值得借鑑的程式碼,而且他們的每行程式碼都能實現更多的功能,有時候多的不可思議。但是這並沒有什麼新奇的。眾所周知,最優秀的程式設計師不是一般的高產,他們的產量一般是普通程式的一倍或兩倍。(例如Joel Spolsky的書《聰明的完成工作》Smart and Gets Things Done)。更有意思的是,在編寫和理解程式碼方面,最優秀的程式設計師看起來並沒有什麼更高超的能力。
並且,也有研究顯示,程式設計師每天編寫相同行數的程式碼與他們使用的語言無關。你可能認為使用匯編語言的程式設計師每天能比使用像VB或Java之類的高階語言的程式設計師編寫更多的程式碼,但是事實並非如此。雖然通過數程式碼的行數來衡量程式設計師的產量是一種很爛的方法,但它卻是判斷一個人大腦能裝多少東西的好方法。
(編注:在原文評論中,Fred Mitchell 的評論非常精彩,編譯如下。)
我編寫程式碼的時間已有30年,我可以非常肯定地說,和那些僅有過兩三年程式碼經驗朋友的程式碼來比,根本沒有可比性。
為了更好地反應手中問題,我在程式碼中力爭清晰性和簡潔性,也注重“清潔”的架構和物件模型。我所編寫的東西有,作業系統、驅動、應用程式、中介軟體和Web應用。
不僅是程式碼,還有演算法、模式和資料結構。一個經驗不多的程式設計師或許並不喜歡某些演算法,從而選擇一個“蠻力”方法,而不是選擇更有效並省時的方法。
但是通過程式碼行數來判斷工作的方法,並不能反映出所有這些。這種方法完全是一個愚蠢之極的想法。註釋算不算進程式碼行數呢?有時候,我寫的註釋,比程式碼還要多,因為我想盡可能詳細一些,我不想6個月之後再來看這些程式碼的時候,我是一頭霧水。(編注:在伯樂線上編譯的《風雨20年:我所積累的20條程式設計經驗》這篇文章中,就重點提到新增註釋,千萬別擔心過多註釋,不僅對你以後查閱程式碼時有幫助,後來接手的同行或技術支援,都會感激你的。)
真正的生產力是無法輕易和快速測量出來的。有時候,你必須考慮業務模式。總共節省了多少時間,節省(或創造)了多少錢,程式碼所涉及的維護或停工時間是多少,客戶服務的工作量是多少,等等。所有這些才是影響真正生產力的因素。
(英文:John D. Cook ,翻譯:伯樂線上 – 魏哲)