Ruddy Lee 分享空間

Emergent Design 演化設計

精實原則: 增強學習 Amplify Learning

leave a comment »

抗爭可能是改變政治環境的一種方法,但對於改善軟體開發環境而言,增強學習才是最有效的方法。

歷史上的今天,10月1日,紀念"佔中”

軟體開發是一種學習的過程

也就是說;開發人員學得越快越好,則所撰寫的程式才可能越正確,才有可能越好。有趣的是;開發過程也是一種發現的過程,我們經常在創作的過程,有了全新的體驗。所以撰寫程式他不全然是一種學習,很多時候經驗可以幫助我們學得更快更好,但創作則不只要依靠經驗,專注力可能是最不可或缺的。

※ 解題: 科學方法尤其適用在解決複雜的問題: 透過觀察、建立假設、設計實驗、進行實驗然後得到結果。有趣的是;如果你的假設越是正確,你就不會學到太多東西。當失敗率達到 50%時,你會得到最多訊息,也就是學到最多。

工程師寫程式時不也是如此,如果一次就做對了,可能完全沒學到任何東西,只是在工作。傳統的開發方式正是要求大家透過審慎的態度一次作對,而敏捷開發則是鼓勵透過嘗試、測試、修正的短週期來開發程式,自然你會學到最多。

我們寫文章時,常常要修改個幾回才能成章,何不讓寫程式也如此呢?!

最小的成本產生最多的知識

既然程式開發是一個學習的過程,為了得到好的成果,學習善用最小的成本,獲得最大的學習效果,應該是程式設計人員不可缺少的技能。例如: 如果測試成本很高,就多花些時間仔細思考、審慎檢查後再動手。如果實驗的成本很低,那它就是最有效的方法了!

短暫的學習週期是最高效的學習過程

週期性的重構,一邊開發系統的同時也在進行改善設計方案的動作。這是我們產生知識的最好途徑之一。衍生式的設計方式又稱為浮現式設計Emergent Design,是架構設計師在採用敏捷式開發法時所遭遇到的最大困難。既然我們不能一口氣就把架構設計完畢,那只有透過堆疊的方式,讓問題來引導架構的途徑,但千萬別孤獨的讓問題來引導架構,因為設計模式正是為了解答那些重複出現的問題所誕生的最佳解答。(其實是沒有最佳解答的,說穿了應該只是最佳參考罷了,因為沒有銀子彈,所以你必須在研究清楚環境之後自己來,這也正是所謂的高效學習的過程。)

測試是最好的回饋

傳統一次性通過的開發方式(single-pass model),是假設一開始便可以把開發的細節想清楚,針對每一個需求都一視同仁一樣重要,就是按部就班,的把所有的需求都做完,所以也就不會有太多的回饋,也就失去了反覆修正的機會。傳統開發反而害怕回饋所帶來的學習會破壞了原先預定的計畫。就是這種思維造成學習被延後,一直到最終測試的時候才出現。只可惜為時以晚只能期待下一次的專案能夠完全一樣,這個學習的所得就能派上用場。所以按照道理應該增加回饋,因為回饋是處理軟體開發上遭遇問題時最有效的方法之一。幾點原則:

  • 即時回饋:  在寫完一段程式碼後立刻進行測試。
  • 運用單元測試來核對程式碼而不是用文件來記錄程式邏輯的細節。
  • 透過向客戶的展示收集回饋以及變更的需求。

團隊同步學習

短的迭代循環是團隊共同學習的最佳方式。同步是團隊開發非常重要的一個步調。尤其當有一些項目出現測試失敗後,所遺留下來待解決的BUG經常會讓共同開發的同仁產生不同步的紊亂感覺,彼此之間誤以為需要等待才能繼續下去。造成學習受到中斷的浪費。而迭代讓大家有一個共同的起點,能夠促使的團隊不斷的誕生新的學習機會、新的機會。因此維持同步與採用短周期的迭代是團隊學習的基本需求。

善用共同開發工具

一定要善用數位資訊。無論是微軟的TFS或是Open Source 的 Git在Web的運用上都具有絕佳的協同合作特性,這一點讓程式碼不在是一個人的私人收藏,而是屬於團隊共同擁有的資產,大家都能透過訊息相互學習。透過這些好的數位工具,不論是 code review 或是程式碼的 check in/out 都成為公開的行為。這樣的同步性可以造成更有效率的集體學習行為。拜行動裝置的普及,訊息傳遞總是超乎想像的快捷,對於工作流程上的事件前置時間(Lead Time),有了相當的改善,使得運用流程來提升團隊效能成了這一代最重要的課題,因此能否善用數位學習也將變成了分辨優劣的關鍵因素之一。

愉快的心情是改善學習環境的重要因素,對於個人是如此,於團隊則更見效益!

(沒有比在心情好的時候更能充分吸收知識的了,保持愉悅是我成功的祕訣,分享給你!)

Written by ruddyllee

2014 年 10 月 03 日 於 09:30:50

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: