《人月神話》讀書筆記

前言

《人月神話》是一本永不過時的經(jīng)典,盡管寫在四十多年前,然而書中的觀點和方法論,放到如今的軟件開發(fā)中仍然適用,甚至有一些可以作為今后軟件開發(fā)的指導(dǎo)。筆者拜讀完《人月神話》這本軟件開發(fā)屆的神品之作,不禁感慨其思想博大精深,字字真言,精讀之有不盡的趣味,因此作讀書筆記一篇,記錄引起筆者共鳴的佳句與筆者的思考。


焦油坑

編程為什么有趣?作為回報,它的從業(yè)者期望得到什么樣的快樂
首先,這種快樂是一種創(chuàng)建事物的純粹快樂。如同小孩在玩泥巴時感到快樂一樣,成年人喜歡創(chuàng)建事物,特別是自己進(jìn)行設(shè)計。我想這種快樂是上帝創(chuàng)造世界的折射,一種呈現(xiàn)在每片獨特的、嶄新的樹葉和雪花上的喜悅。
......
編程的快樂在于它不僅滿足了我們內(nèi)心對于創(chuàng)造的渴望,而且還喚醒了每個人內(nèi)心的情感。

相信絕大多數(shù)同學(xué)在高考結(jié)束后,填報志愿時都有糾結(jié)過專業(yè)的選擇。今后要做什么工作,從事什么行業(yè),筆者在茫茫專業(yè)中選擇了軟件工程,當(dāng)時覺得軟件開發(fā)是一件相當(dāng)具有創(chuàng)造性的活動,能夠通過編程把腦海中的想法加以實現(xiàn),能夠通過編程解決生活中的實際問題,能夠通過編程完善一些APP的功能......

經(jīng)過大學(xué)期間緊湊的軟件開發(fā)技術(shù)訓(xùn)練,以及課外項目實踐,筆者編程能力和軟件開發(fā)能力有了一定的提升,而自己對軟件開發(fā)的樂趣也發(fā)生了一些變化,不再滿足于單純的創(chuàng)造帶給筆者的樂趣,屏幕上輸出的“Hello, world!”已經(jīng)不能讓筆者眼前一亮,而是追求將高復(fù)雜度的模塊組件拼裝在一起,形成完整的系統(tǒng)。例如在某次課程作業(yè)中,為了滿足多種非功能需求,需要對整體系統(tǒng)進(jìn)行詳細(xì)的架構(gòu)設(shè)計,并應(yīng)用多種未接觸過的技術(shù)和框架,盡管開發(fā)過程充滿了挑戰(zhàn),bug頻出,接口易變,但是在克服完重重障礙后,得到一個高可用、高性能的完整系統(tǒng),完成時的成就感是無可比擬的。

本科畢業(yè)階段,筆者以實習(xí)生的身份加入到騰訊公司,參加企業(yè)級別的真實系統(tǒng)開發(fā),體驗到真實生產(chǎn)環(huán)境與學(xué)校內(nèi)實驗環(huán)境的巨大差別,企業(yè)團隊的規(guī)模往往比學(xué)校課程作業(yè)團隊的規(guī)模大的多,10-15人的規(guī)模較為常見,這種情況下進(jìn)行軟件開發(fā)的流程與小規(guī)模團隊大相徑庭,首先團隊需要頻繁的進(jìn)行會議交流,確定開發(fā)進(jìn)度、商討下階段開發(fā)計劃、解決問題沖突等等,因此分配給系統(tǒng)計劃和設(shè)計的時間大大增加了,此外還需要協(xié)同編寫各種文檔和說明,用于規(guī)范需求、架構(gòu)、接口等,雖然系統(tǒng)開發(fā)的復(fù)雜度高出了幾個數(shù)量級,但是規(guī)范化后的團隊合作給筆者帶來了莫大的樂趣,團隊中每個人都在制作零件,并根據(jù)嚴(yán)謹(jǐn)?shù)慕涌诙x,將這些零件有效地嚙合在一起,所有的零件都以精妙的方式運行著,構(gòu)成了企業(yè)級的真實系統(tǒng),這種高度規(guī)范化的團隊合作使筆者樂在其中。


人月神話

所有的編程人員都是樂觀主義者: "一切都將運行良好"。
由于編程人員通過純粹的思維活動來開發(fā),我們期待在實現(xiàn)過程中不會遇到困難,但是我們的構(gòu)思本身是有缺陷的,因此總會有bug。

對于編程人員的樂觀主義,筆者深有體會。在完成課程作業(yè)時,經(jīng)常會出現(xiàn)這么一個現(xiàn)象: 在只有大體思路,而沒有做出清晰詳細(xì)的設(shè)計方案時,就開始盲目的編程,寫一段看一段,再進(jìn)行大量的調(diào)試,得到最終方案,然而耗費的時間總是遠(yuǎn)遠(yuǎn)超過預(yù)計。因此筆者認(rèn)為,不論是設(shè)計課程作業(yè)這種規(guī)模較小的程序,還是參與企業(yè)級開發(fā)的大規(guī)模程序,編程前的精細(xì)設(shè)計都是必須的,并且需要摒棄"一切都將運行良好"這種過于樂觀的觀念,并為編程后的測試工作預(yù)留充足的時間,不論是單元測試、集成測試還是系統(tǒng)測試。


貫徹執(zhí)行

手冊或者是書面規(guī)格說明,是一個非常必要的工具,僅有文檔是不夠的。手冊是產(chǎn)品的外部規(guī)格說明,它描述和規(guī)定了用戶所見的每一個細(xì)節(jié);同樣地,它也是結(jié)構(gòu)師主要的工作產(chǎn)物。
修改的階段話是很重要的 -- 在進(jìn)度表上應(yīng)該有帶日期的版本信息。
手冊的作者必須注意到自己的思路和語言,達(dá)到所需要的精確程度。

實習(xí)期間,編寫文檔和手冊的時間不亞于編寫代碼的時間。不同開發(fā)階段,不同職責(zé)的開發(fā)人員需要編寫不同的文檔手冊,并作為團隊開發(fā)的標(biāo)準(zhǔn)。筆者作為基礎(chǔ)的編程開發(fā)成員,參與了下表中的 3. 和 4. 文檔手冊的編寫,在需要與他人模塊交互時,可以通過文檔手冊快速明確交互的方法和各種條件。

  1. 產(chǎn)品經(jīng)理制訂出需求文檔
  2. 開發(fā)組長(1-2人)制作體系架構(gòu)文檔,UI設(shè)計組制作原型
  3. 系統(tǒng)詳細(xì)設(shè)計,確定模塊功能,進(jìn)行接口定義,形成詳細(xì)設(shè)計文檔
  4. 實際開發(fā)過程中,編程人員制作功能說明概要設(shè)計,詳細(xì)定義接口,例如接口輸入和輸出的格式和邊界條件、各種異常處理、各種情況的測試用例等
  5. 開發(fā)完成,測試組制定測試流程,生成測試報告和文檔
  6. 所有的文檔更新時,都需要明確標(biāo)注,進(jìn)行版本控制,版本兼容等

未雨綢繆

唯一不變的就是變化本身
為變更設(shè)計系統(tǒng),為變更計劃組織架構(gòu)
軟件維護主要包含對設(shè)計缺陷的修復(fù),軟件變更通常包含了更多的新增功能

軟件發(fā)布的越久,用戶越多,用戶提出的新需求也就更多,因此系統(tǒng)應(yīng)當(dāng)具備易拓展的特性。因此,在初始設(shè)計整個系統(tǒng)時,就應(yīng)當(dāng)把易擴展列入考慮范圍內(nèi)。

  1. 體系架構(gòu)設(shè)計,比如設(shè)計網(wǎng)站架構(gòu)時,針對100人同時在線的網(wǎng)站,可能無法處理10000人同時在線訪問,那設(shè)計時應(yīng)當(dāng)如何進(jìn)行負(fù)載均衡和集群設(shè)計
  2. 數(shù)據(jù)訪問設(shè)計,當(dāng)前的數(shù)據(jù)庫可以做到讀取KB-MB級別的數(shù)據(jù),用戶多了數(shù)據(jù)也多了,如何快速擴展成可以處理PB級別的數(shù)據(jù)
  3. 模塊設(shè)計,Release Reuse Equivalency Principle (重用發(fā)布等價原則)和The Common ClosurePrinciple(共同封閉原則)作為面向?qū)ο箝_發(fā)中模塊開發(fā)的重要原則,可以有效地將包組織成易擴展的形式
  4. 類設(shè)計,Single Responsibility Principle(單一職責(zé)原則)和The Open-Closed Principle (開閉原則)作為面向?qū)ο箝_發(fā)中類開發(fā)的重要原則,可以有效地將代碼組織成易擴展的形式

沒有銀彈

人工智能AI-2:使用啟發(fā)式或基于規(guī)則的特定編程技術(shù)。在這種方法中,對人類專家進(jìn)行了研究,判斷他們解決方法的啟發(fā)性思維或者經(jīng)驗法則,程序被設(shè)計成以人類解決問題的方式來運行......

專家系統(tǒng)是人工智能領(lǐng)域最先進(jìn)的、被最廣泛使用的部分,是包含歸納推納引擎和規(guī)則基礎(chǔ)的程序,它接收輸入數(shù)據(jù)和假設(shè)條件,通過從基礎(chǔ)規(guī)則推導(dǎo)邏輯結(jié)果,提出結(jié)論和建議。

人工智能領(lǐng)域近幾年又重回人們的視角,人工智能里許多方法的確能很大程度的提升軟件開發(fā)的效率,然而其是否能夠泛化成一套解決軟件開發(fā)問題的系統(tǒng),還值得商榷。不過機器學(xué)習(xí)中,不少算法正朝著人工智能AI-2中的定義發(fā)展,筆者認(rèn)為最具特色的是Neural Networks(神經(jīng)網(wǎng)絡(luò)),神經(jīng)網(wǎng)絡(luò)模仿了人類大腦的神經(jīng)元的工作方式,以人類解決問題的方式來處理各種復(fù)雜的非線性問題。

基于最初始的ANN,機器學(xué)習(xí)領(lǐng)域的研究者們不斷優(yōu)化神經(jīng)網(wǎng)絡(luò),開發(fā)了卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、R-CNN等一些高級的深度學(xué)習(xí)模型,并且可以運用于計算機視覺、自然語言處理等等領(lǐng)域中,目前還有很大的提升空間,即使人工智能不能成為解決軟件開發(fā)問題的銀彈,但其在提升效率方面做出了很大貢獻(xiàn),值得我們在這方面繼續(xù)深入。


總結(jié)

《人月神話》涉及廣泛,筆者只摘取了某些章節(jié)中引起共鳴的語句,實在是一本值得不斷回味的經(jīng)典之作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 推薦理由: 作為一部在軟件領(lǐng)域40年暢銷不衰的傳奇經(jīng)典,很少能有像《人月神話》一樣具有深遠(yuǎn)影響力和暢銷不衰的著作。...
    Summery閱讀 4,067評論 1 4
  • 人月神話讀書筆記 焦油坑 為什么兩個人的創(chuàng)業(yè)團隊可以超越大公司9倍以上的效率開發(fā)任何程序。而大公司的產(chǎn)業(yè)化團隊效率...
    陳浩要安靜閱讀 18,600評論 3 34
  • 看了宋老師今天的蛻變指引,有兩句話對我很有觸動,同時我也有同感: 因為苦過,所以能苦別人的苦。 因為受過傷,所以能...
    靜心_安心閱讀 163評論 0 1
  • “你是不是把吃飯前都省下來理財了?”自從我開始學(xué)習(xí)理財,我父母就抱著一種超級警惕的態(tài)度——我們家的白菜不僅...
    Tsingtao蛋蛋閱讀 949評論 6 3

友情鏈接更多精彩內(nèi)容