现代软件工程的《构建之法》
要想了解世界,就必須親自來打造它。
—— 帕韋澤(Cesare Pavese)
國慶假日期間,我重讀了鄒欣老師的《構建之法》一書。我從事軟件行業相關工作超過15年,每每在被問到給在校計算機專業大學生的學習建議時,我都會推薦這本在教育界引起廣泛關注、旨在推動中國現代軟件工程教育改革的教材。
我當年沒有機會接受這么有體系且現代的軟件工程教育,這一定意義上成為了走向軟件領域更高殿堂的阻礙,雖然有一些吃虧上當后長的見識和東一下西一點偷學來的、經常會相互打架的草莽經驗,但鄒老師寫的這本書面世后,我如獲至寶,曾經寫下170多頁的讀書筆記,并給當時我所帶領的研發團隊及周圍的朋友們分享,所以在我看來,它不僅僅在學校教育中有巨大的現實意義,對于很多像我們這樣的已經走上工作崗位甚至工作很多年的人,也有很好的參考價值。
構建之法是什么
這本《構建之法》一版再版,可見其受歡迎程度之高。我有幸跟鄒老師成為同事,但早在我加入微軟之前,就因為看了他第一本書《移山之道》后主動寫信討教,承蒙不棄,后來也一直保持聯系。
正如我在開頭處引用的這句話 “要想了解世界,就必須親自來打造它。”,我們所處的世界、我們自己(不管是物質層面還是精神層面),其實都是一點一點構建出來的。鄒欣老師有超過20年、在世界頂級公司從事大型軟件研發的經歷,更是不可多得的既能傳道授業、又深諳合作之道的人才,他通過三本書給我們構建了一個“如何構建開發復雜軟件” 的知識結構。
軟件開發能力 = 軟件工程能力+程序構造能力
移山之道。我第一次看到這本書的感覺就是:“哇,技術圖書居然還可以這樣寫啊!”。這本書用多個豐富生動的角色,給讀者呈現了一個虛擬的軟件公司及其日常發生的故事。這本書我個人覺得是構建之法的雛形,只是當時在工具應用這個方面著墨較多。
編程之美。這是鄒老師和幾位同事一起編寫的微軟技術面試心得,干貨滿滿,有大量的算法案例。這一本書,強調的是程序員的個人建設中最為核心的能力:算法和編程能力。
構建之法。這本書則是真正成體系的軟件工程教材,他利用業余時間在數所高校進行了長達6年的軟件工程教學實踐,總結出了在16周的時間內讓同學們通過“做中學(learning by doing)”掌握實用的軟件工程技術的教學計劃,得到了高校師生的積極反饋。在此基礎上對軟件工程的各個知識點和技能要求進行了系統性整理,形成教材。本書共分17章,對照美國ACM/IEEE 2013年新出版的計算機科學教學指導(Computer Science Curricula 2013)中的軟件工程部分,這本教材覆蓋了其中大多數Core-Tier 1和Core –Tier 2的內容。可以說,全書對軟件工程內容的覆蓋不遜于任何一本現行的教材,同時講述了業界最新實踐方法。
構建之法是怎么構建出來的
構建之法?已經不僅僅是作為一本書,更是現代軟件工程教育的一個有益實踐。2007年在清華大學首次實踐后,從2009年至今,經過北京航空航天大學、福州大學、集美大學等三十余所學校的不斷迭代與改進,現已形成了一套成熟的軟件工程課程教學體系,覆蓋了軟件工程和編程語言的教學。該教學體系有下面的特點:
練習量大, 內容多:除了大量的代碼練習,還有大量的博客寫作練習。
結構緊湊:個人項目/結對項目/團隊項目緊密配合, 能在16 周講完,針對8或12周的教學長度,也有對應的配置與組合。
理論和實踐相結合:講現代理論,同時結合體現理論的工具,例如:要求所有代碼使用Git和Github進行管理
真實的團隊開發:要求使用原型設計工具設計項目,使用團隊開發工具管理任務分配,使用燃盡圖進行進度管控、等等一應俱全…
面向實戰:強調“做中學” , 團隊項目公開發布,使用用戶數量與用戶的真實反饋作為評價項目重要的標準。
學生助教+企業助教模式,學生助教熟悉課程,能夠協助老師,與學生充分互動;企業助教則經驗豐富,視野開闊,能使用工業界中的鮮活實例解答學生在實踐中的疑問。
鼓勵探索:鼓勵學生?“動手實踐,自己摸索,提出問題,解決問并總結, 從實踐中,從同伴中,從思辨中學習”?。
在2017年底的“第一屆構建之法軟件工程實踐教學論壇”上面,鄒老師分享了這十多年來的歷程。
我這里還想給大家分享一點我的觀察。這本書以及它所倡導的軟件工程教育改革目前所取得的一點點成功并不是偶然的,正如所有的大型、復雜軟件的成功必有緣由一樣。它至少擁有如下的成功要素
社會需求明顯,改革適逢其時。任何的改革,都是講究時機的,教育的改革尤其如此。當年是教育部和微軟研究院合作的一個契機,鄒老師作為特派的專家到清華開展軟件工程的實踐,由此找到了一個切入點,他通過不懈的努力,不僅得到了中國科學院院士及國務院學位委員會委員的支持和認可,更帶動了一批同樣有想法的老師和學生,得以持續把這個工作深化下去,星星之火漸成燎原之勢。
核心架構師或主程的能力超強。如果拿開發軟件來說,鄒老師就是這整個工程的架構師或主程。雖然軟件工程可以從一定意義上降低對“超級巨星”的依賴,確保大部分軟件項目的水準在平均線以上,但毫無疑問,擁有一個能力超強的架構師或主程,則肯定會事半功倍,更何況鄒老師的能力可不僅僅是軟件工程呢。
項目團隊強大,運營有方。我必須強調這一點,是因為我對于鄒老師背后的策劃、出版、運營團隊也很熟悉。他們的口號是“服務能人中的忙人,忙人中的能人”,他們做了很多專業且細致的工作,讓架構師設計的架構能真的得以實現。
構建之法所帶來的成效
構建之法是一個為期16周的現代軟件工程教程,要檢驗它的成效,就必須由學校老師和學生來發言。我找到一份材料,是北航計算機學院的羅杰老師在“第一屆構建之法軟件工程實踐教學論壇” 上面所做的分享。
羅老師分別從幾個方面總結和展示了他們學院的課程改革成果。
軟件工程教育是一種綜合素質培養,羅老師還特別總結了對學生的升學、科研、實習和工作等方面的影響。
我對構建之法的展望與思考
如果按照工程的方法去構建軟件項目,則其成功的機會將遠遠大于沒有采用軟件工程的項目。構建之法是關于現代軟件工程的知識體系,這本書必將在相當長的時間內對中國的軟件工程教育產生積極和深遠影響。
另一方面來說,時代是在不斷地發展,它也給我們提出了越來越多的新課題。我做如下的展望,同時也有一些思考,給鄒老師及大家參考。
當今的世界是一個技術驅動和數據驅動的世界,而人工智能(AI)大行其道也是很自然的。軟件一方面要體現出來越來越易于使用的體驗(對最終用戶,或者對前端開發者),一方面則體現出平臺層面尤其是底層后臺會越來越復雜。
軟件服務模式的變化,隨之而來,對于軟件開發者來說的要求也會發生變化,總體來說,編寫軟件會越來越容易——至少看起來是這樣——誰都可以馬上寫出一個“軟件”來;同時,一個殘酷的事實就是專業的程序員的門檻將越來越高。那么,這就提出了一個命題:對于這兩類軟件開發者,他們對于軟件工程的需求是否有不一樣?是否需要或者如果針對他們有不同的方案?
如果以后有 AI 參與編程,對軟件工程是否有什么新的挑戰?
不光是軟件服務模式在發生變化,軟件構建和交付模式也在發生一些變化。在《構建之法》中有對敏捷流程和MSF(Microsoft Solution Framework)的精彩闡述,而現在幾乎所有的軟件項目都在想辦法DevOps了吧。不知道在新一版的構建之法中,是否會考慮這種變化?
文末福利
感謝你認真讀完這篇文章,歡迎大家提出反饋意見。 希章原文的福利請閱讀:現代軟件工程的《構建之法》
我的《Office 365 開發入門指南》的介紹,有機會請參考?《Office 365開發入門指南》上市說明和讀者服務
總結
以上是生活随笔為你收集整理的现代软件工程的《构建之法》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core应用程序容器化、
- 下一篇: Followme Devops step