這系列大概花了快兩個月的時間快速的把學到的一些知識記錄下來,然而還是有許多內容很難用文章簡單的說明。
裡面有許多知識是需要靠著實踐才能夠學會的,因此在課程中我們需要先理解概念、實踐,最後在課後不斷的練習這些技巧內化成自己的技能。
重新思考開發
我認為自己屬於那種相當 Geek 的類型,也因此大多數時候都是在關注「怎麼做」跟「能使用怎樣的技術」這樣的問題上,卻很少思考「為何這樣做」的問題。
然而,每一個軟體被設計出來都是要解決問題。如果在實現軟體的時候只關注技術的部分,就會陷入使用的技巧非常華麗卻一點也不實用的狀況,甚至在未來要進行修改的時候變得非常困難。
這是一個非常值得反思的問題,也就是在探索技術之外,我們所設計的程式是否是真的實用的。
剛剛好的實現
假設我們關注在功能來開發,就能夠開始朝向「恰當」的實作前進。在過去我們會想要完整的考量所有東西、把架構規劃設計完善。然而,很多時候並不符合真實的狀況。
之前有寫過一篇
軟體是一種生物的文章來描述軟體開發世界的多變,如果做了過多的設計我們面對「改變」是很脆弱的,因為所有設計都必須要大量的調整跟修改。
然而我們使用驗收測試驅動開發(A-TDD)的想法去看,假設第一個規格是顯示文字,我們只需要實現顯示文字即可。接下來是勇敢的面對改變,跟使用者確認這樣的功能是否符合,不符合就再繼續增加規格(新增測試)擴充,直到所有功能都符合使用者的期望為止。
搭配上測試驅動開發(TDD)的「小步前進」在對應變化的能力就會大幅的提升,這樣一來也能慢慢掌握「剛好」的實現來減少耗費額外的力氣。
總結
這門課程主要不是在學習某種技能,而是去重新了解被我們沒有完整理解的「敏捷開發」並且搭配實踐來更新思考的方式,唯一的缺點大概是會在工作上有些不習慣吧!