l

2016年8月26日 星期五

自問自答的練習

August 25 09:38~10:27

擷取

▲你在產生instance的時候都有確保class invariant成立嗎?

 

昨天上完第一梯次「敏捷開發懶人包:物件導向技能」一共四小時的課程,在課前規劃內容的時候想了很久,怎麼在短短四小時內講完重要的物件導向觀念?物件導向技術包山包海,光是語言、設計、分析、流程、架構、測試,每一個項目單獨來討論一天都講不完,更何況是全部合在一起要在四個小時內介紹完畢。

建築師Alexander說:「設計就是決定形式(form)和背景(context)的界線」,要找到合適的邊界真的頗傷腦筋。後來想到一個很簡單的方法,把這個短課程定位為:「完課之後,如果要找工作在面試時面試官問到物件導向的問題,有能力作答及格,甚至回答的深度連面試官都聽不懂你在講什麼

大方向(整體的感覺)決定之後,接下來的事情就比較簡單了。四個小時的內容規劃四個主題:

  • 物件導向基礎觀念
  • 依合約設計(Design by Contract;DBC)
  • 物件導向設計原則(SOLID五大原則)
  • 物件導向分析與設計

***

上禮拜三晚上第一次上課,講完前兩個部分出了兩個作業,其中一個作業請學員找工作上使用的類別或介面,用DBC的方式幫它定義前置條件(preconditon)、後置條件(postcondition)、類別不變量(class invariant)。昨晚第二次上課有學員拿作業跟Teddy討論,討論結束後學員說:「奇怪,怎麼聽你上課講定義合約那麼簡單,我自己回去要定義合約才發現寫不太出來」。

另一個學員拿了一個函數和Teddy討論合約,討論完前置條件和後置條件之後,他說:「我不知道這個類別不變量要怎麼定義?」對啊,Teddy也不知道要怎麼定義這個函數的類別不變量,因為顧名思義類別不變量(class invariant)必須要針對類別(class)來定義,而這位學員所練習的對像是一個獨立的函數,所以根本不能也沒得定義類別不變量(本來無類別,何存不變量?)。

上課講得很間單並不表示這件事本身很簡單,只是用淺顯易懂的方式讓學員在短時間快速接觸一個新的方法或概念。理解方法並不表示有能力可以應用、活用這個方法,還必須仰賴練習,不斷地練習,才可以把這個東西變成自己的。練習的過程非常辛苦,但這是能力增長的必經歷程。

***

昨天上課時Teddy提供學員一個很簡單的自我練習方法,就是把投影片拿出來,試著「自問自答」,看看每張投影片你自己可以問出幾個問題。如果可以問到18個問題,那就恭喜你可以從18層地獄解脫,早登西方極樂世界XD。

***

友藏內心獨白:先自問自答,別人問才不會不能答。

沒有留言:

張貼留言