軟體工程博士講師:軟體工程是一個學習過程,程式碼只是學習的副產品

發表於2021-01-19

這是阿爾貝託·布蘭多利尼(Alberto Brandolini)的觀點,他在Event Storming中提出了這一點(他實際上是在談論軟體開發,但我不想就軟體工程與開發之間的區別進行學術討論,我在這裡將它們視為平等)。

實際上,我一直將軟體工程(SE)視為一個學習過程,但是直到閱讀了Brandolinins Event Storming之後,我才以清晰的眼光表達了這一觀點,這也使我很清楚自己就是以這種方式看到SE。

簡而言之:對於任何非平凡的SE專案,主要挑戰是瞭解領域,這主要是一個學習過程。這種觀點在領域驅動的設計社群中也很突出,並且由Eric Evans本人表達:大多數軟體專案的關鍵複雜性在於理解領域本身。

 

敏捷過程被證明如此成功和有用也就不足為奇了:它們強調集體學習。更好的是,敏捷是SE的一種非常科學的方法:我們從討論中(在開發人員和客戶之間)虛構假設,然後在實驗中對其進行測試以得出新的見解和更深刻的理解。另一方面,基於計劃的過程是一個相當歸納的方法,它基於許多假設,直到最後才進行測試和驗證(只是問問自己:您會以這種方式獲得博士學位嗎?)

 

當我們最終承認SE是一個學習過程時,我們需要圍繞它構建方法,過程,工具和技術,以建立一個環境,通過不斷的實驗和反饋可以進行快速,共享的學習:

  • 輕量級要求允許快速瞭解域以及為誰實施物件的方式和原因:影響圖(Godzic),事件風暴(Brandolini),使用者故事,使用者故事對映(Patton)。
  • 輕量級的開發和工程過程,其重點是通過不斷的反饋進行集體學習:帶有eXtreme Programming(XP)實踐的敏捷/ Scrum。
  • 強調集體學習和實驗的一種合適的設計方法:域驅動設計
  • 通過應用仔細的原型設計,可以找到最適合當前問題的體系結構。
  • 一種程式語言,可以更輕鬆地將域對映到程式碼中:物件導向的,類似Java的語言,C# ……(我實際上將針對使用Haskell進行研究,但這是另一篇文章的主題)
  • 使開發人員專注於領域學習而不是處理低階管道的技術:Spring,Thymeleaf,REST,React / Angular / Vue /…,Hibernate,Web,Mobile,IDE等等。

 

不幸的是,我所閱讀和研究過的所有SE教科書(我都有相當一部分……)似乎都沒有以任何更深層次的方式涵蓋上述所有內容,而只是以相當學術性的方式向讀者丟擲了通常話題的清單。這些書似乎只是簡單地將SE視為方法,流程,工具和技術的集合,作為達到目的的一種手段,需要以某種方式加以應用。通過這些課程學習的學生已經獲得了很多關於SE的書籍知識,但是卻不知道如何將它們真正組合在一起以及如何真正地學習這些知識。

更糟糕的是,我所知道的任何SE教科書都沒有傳達出SE是一種學習過程的想法。

我認為,造成這種情況的主要原因之一是,所有這些書都是很久以前寫的,只擴充套件了“較新的”主題,例如敏捷/ Web /雲/無論如何,但一直堅持到最後90年代/ 2000年代初期的SE思維定勢(想一想:Sommerville現在是第10版…)

因此,我的目的是編寫一本關於應用型現代SE的教科書,它將涵蓋上面討論的所有問題-我認為這是非常需要的教科書。它將基於我在FHV的SE課程中的教學經驗,再加上我本人和行業合作伙伴的實際經驗。

 

相關文章