分類
courses

Classic TDD by Example

光看《Kent Beck 的 TDD by Examples》是否覺得只得到了一堆知識點,卻仍不知道如何落實到自己的實際工作上呢?只有 Java 與 Python 的 Part 1 + Part 2,感覺這樣做都很正常,但這樣做是為了什麼,有什麼好處,實際工作真的會這樣做嗎,感到疑惑呢?

Classic TDD by Example

需求解析、測試驅動開發、從重構到設計(無限次、無限期影音播放)

這次的培訓主題,從需求分析、驗收情境探索、搭配大量的實戰演練以及解說,錄成影音版的培訓內容,讓購買的學員能無限次、不限期的觀看以及反覆練習。

我將從一個需求開始,從需求到完成整個 TDD 開發過程,全程解說與示範,在每一步為什麼我們選擇這麼做,該怎麼做。

這是一門相對不適合實體培訓的內容,因為實戰演練的篇幅極長(C# 版本 181 個 commits,目前 TDD與持續重構 2 天的課程內容 commits 數約 60),影片共計 12 小時 40 分鐘,如果是實體培訓,絕對會因為參加的學員能力的落差,導致上課的節奏不好拿捏,而一旦中間放棄了,後面就會放空了。而這樣的效果不是我要的。

我希望這樣大量實戰演練的過程,能讓大家一步一步動手跟著做,甚至養成一種習慣,想收收心、想靜靜心、想動手寫寫程式的時候,能打完一整套的套路,感到舒服、平靜,甚至刺激出新的想法。(我自己在一個語言中起先練習的 10 次,每次版本都不一樣)

目前已完成 C# 的教材,並開放報名。目前的出貨序號與出貨狀態,請見出貨清單

【註1】:預計推出的語言順序為 C# > Java > Python > JavaScript > PHP > ….

【註2】:若您是想先報名其他語言的教材,也可先 email 給我相關報名資料,此出貨序號與票價無直接關係,您也無須先行繳費,等該語言版本教材準備好了,我將會主動通知你,您可能因此獲得封測期間的資格與優惠。

內容包含但不限於…

  • 怎麼做需求分析、測試案例分析、backlog items 分析、TDD 的測試案例設計、單元測試、TDD 的小步快跑、持續重構、假實作加上三角定位法。
  • code smell 的辨識,例如 duplication, temp variable, primitive obsession, feature envy 等等。
  • 會用到的重構功能與技能,大概整個 IDE 的重構功能都涵蓋到了,包含:
    • rename, introduce variable/parameter/field
    • extract method/class/interface/super class
    • inline variable/field/parameter/method
    • move/make method non-static (move class, folder, namespace)
    • push member down
    • replace switch/nested if logic
    • split/merge/join variable
    • change signature
    • 如何移掉 out 參數的設計
  • 設計原則:SOLID, 關注點分離, Simple Design
  • 實戰 Refactoring to Patterns: strategy, chain of responsibility, template method…

保證大家除了可以學到很多外面學不到的東西,還可以像看表演一樣過癮。

你會得到的服務與產品

  1. 額外提供1hr online 1-1 coaching,企業報價為10630(不信的,有好幾張不同時間的發票金額與天數備註為證明,歡迎來跟我打賭)
  2. 你會拿到兩個影片,包含需求面的說明、解析、測試案例分析設計、待辦清單的設計。長度加起來為12小時40分鐘。
  3. 有一份線上講義,匯出成 PDF 共計 159 頁。(作業為2頁)
  4. 有一份 mind map, 跟著培訓做,會有 338 個 elements/nodes。
  5. GitHub上一份 181個 commits 的參考。
  6. 會有一個 slack workspace 供大家在上面發問、討論交流,以及方便我補充相關內容。
  7. 如果因為這門培訓的練習,讓你打算訂閱 JetBrains IDE, 可幫忙爭取個人首年訂閱8折的 coupon, 如果是只有 Rider, 可省27.8美元,如果是全家餐(全系列 10個 IDE 產品),則是節省 99.8 美元。

票價資訊

  • 一般票NT$ 36,000
  • 過來人推薦票(請附上已經購買此影音課程的推薦人,報名附上他的出貨序號,以及 email):NT$ 35,000
  • 老鳥票(指 2018 年後參加過 91 的公開培訓課): NT$ 34,500

定價標準緣由參考

大家是知道我的,我的實體培訓是沒在放投影片的,影音課也是,我用了 mind map,搭配 IDE、螢幕畫筆說明,以及後製動作的重點,更多相關的參考、引導提問與回顧重點,則放在線上講義上。

12小時41分鐘,沒用那種教你灌啥 IDE 跟環境工具來灌水時間的,滿滿的需求分析、測試案例分析、backlog items 整理、測試案例設計,然後滿滿的 live coding + 解說。(而且是我的開發速度)

照商業思維學院的線上影音課標準來說,影片內容長度跟學員的練習時間約莫為1:3,也就是1小時的課程,你得額外花3小時練習。讓我來用這種標準換算給各位看:

【若用標準 1:3 的情況】
上課長度為 12小時40分,加上練習為3倍的時間,總共是50小時40分,如果用一般業界培訓一天是6小時來算,這一門課的長度是8天半。

若用我的那種瘋狂延遲下課時間的標準來算,則是6天半。照我的培訓費用單價來計算,一天是11000–13000,6天半則是 71500。8天半是 93500。

【若用打折後的計價標準 1:2 的情況】
影音培訓內容長度為12小時40分,照 1:2 的比例算,為38小時,若用我自己實體課培訓的長度一天8小時算,這門課的篇幅共為4.75天,以一天10000計價則是 47500。(而且是無限時間、無限次重複觀看,相信我,你也得練習個10次以上)

嗯,這價格是這樣算出來的,但不代表大家能負擔得起。

再強調一次:這門培訓是因為這個主題篇幅很長,對應的操作很多,設計概念也廣,而且也需要大家反覆練習多次。如果你上過我的課是略感吃力的那一種,那這次的內容你就知道為什麼非得這種重複播放的影音方式才行。

不管是實體課形式,或是線上直播形式,這種即時上課的方式,都無法帶出無限次、不限時的影音方式的效果,是因為主題跟帶到的內容,非得這樣不可。

【最終定價結論】
因此這門課我打算:

  1. 以總共三天來當作計價標準,為36000。
  2. 額外提供1hr online 1-1 coaching,企業報價為10630(不信的,有好幾張不同時間的發票金額與天數備註為證明,歡迎來跟我打賭)
  3. 你會拿到兩個影片,包含需求面的說明、解析、測試案例分析設計、待辦清單的設計。長度加起來為12小時40分鐘。
  4. 有一份線上講義,匯出成 PDF 共計 159 頁。(作業為2頁)
  5. 有一份 mind map, 跟著培訓做,會有 338 個 elements/nodes。
  6. GitHub上一份 181個 commits 的參考。
  7. 會有一個 slack workspace 供大家在上面發問、討論交流,以及方便我補充相關內容。
  8. 如果因為這門培訓的練習,讓你打算訂閱 JetBrains IDE, 可幫忙爭取個人首年訂閱8折的 coupon, 如果是只有 Rider, 可省27.8美元,如果是全家餐(全系列 10個 IDE 產品),則是節省 99.8 美元。

購買人等於已同意下列條款

購買人付費之後,等同於已同意下列條款:

  • 授權僅限本人觀看,不限制裝置,無限期,無限次觀看影片。不依賴於平台,將直接提供影片下載連結,所以請不用擔心在平台上下架的問題。
  • 購買將採實名驗證,影片將壓上購買人相關個人資訊浮水印。影片、程式碼內容等,未經本人授權,不得於公開場所、平台觀看,不得擅自販售、分享、散佈、擷取圖片或影片片段侵害作者權益等行為。請購買人妥善保管影片,以保護雙方權益。
  • 不論「有償或無償」,均不得已在未經同意的情況下將影片做公開分享、重製、散佈、改做
  • 本於誠實信用原則,影片僅供個人學習使用,不得共用
  • 若違反前述約定,則著作財產權人可以請求所受損害與所失利益

報名資訊:

想要報名的同學,請將下列的報名資訊 joeychen@odd-e.com。確認報名成功之後,我會回信給您告知出貨序號,以及對應的匯款資訊。

信件標題:Classic TDD by Example: {name} 報名 {程式語言版本}

例如:Classic TDD by Example: Joey 報名 C#

  • 真實姓名
  • 聯絡電話
  • email (相關權限與未來老鳥票依據)
  • 遮罩過的身份證照片(身份證字號、生日、換發日請都遮罩)
  • 與真實姓名能對得起來的名片、帳單或信件照片(用來雙重驗證真實姓名的一致性,以免有人用他人身份證或網路上的身份證照片)
  • 程式語言
  • 推薦人的出貨序號與 email (如果票種選擇 【過來人推薦票】,請附上此資訊)

準備這門課的原因

這並不是一門把原本實體培訓課程內容,變成影片販售的形式。而是反而要用影片反覆觀看、練習,才能達到對應效果的內容。

會準備這門課,主要基於下列三個原因:

  1. 有海外的朋友因為疫情跟差旅的關係,想上課卻苦無機會。而我目前課程內容方式的安排,得實體上課才會有最好效果。我不希望只是為了擴大收益,而犧牲了培訓效果。實體培訓 > 線上直播 > 影音,如果上課的形式不變,那連線上直播的效果都過不了我的標準要求。
  2. 今年的培訓日期都已經定下來,每個梯次也都已經額滿了,我其他時間已經全被 企業客戶的 coaching 包下來了,所以也擠不出時間來安排培訓。但我又真心覺得,早一年、早半年、早幾個月,能早點學到東西,可能就可以幫大家的開發人員職涯曲線,斜率整個增大,能為各位帶來的效益,提早一點時間學會,就能多獲得許多成果。我的時間有限,要能滿足更多想上課的朋友,我得做點嘗試。
  3. 我一直想設計這樣「大幅、巨量演練」的培訓課程,但限於現在支援的語言越來越多,實體上課的時間兩天塞在週末,已經會造成一般上班族週末沒得休息的負擔,學員數一多,大家能力落差不同,會導致上課節奏難以掌握。很多前置技能的不熟悉,也會影響演練的速度。

所以,我想這種培訓內容,最佳形式是屬於這樣可重複觀看、練習、提問、更新的影音解說與示範的培訓。

以上三點,是我準備這次內容的最主要緣由,感謝許多有興趣的朋友的響應,我會依據大家填寫的語言統計數據,來決定影音課程的優先順序。(對,不同的語言,我都會錄成不同的版本,盡可能滿足大家在實作演練過程中,降低認知負擔)

與其他課程內容的差異

有同學問到,這跟 TDD與持續重構 培訓主要的差異在哪。

TDD與持續重構,因為實體上課,會有比較多需求解析、引導思考、大家先透過自己實作需求,我再 live 重構大家產出的 legacy code 給大家了解重構是怎麼回事。 最後再用 TDD 的方式,重來一次這個需求的解析、測試案例探索與開發。

了解整個來龍去脈、context 與脈絡,重構大家剛寫出來的 legacy code ,了解重構上才會更有感覺,透過實體的引導讓大家知道,平時開發的盲點、對需求的理解,所產生的問題,原因是什麼,可以怎麼改善。這是 TDD 與持續重構的重點。

而影片的部份,是大量的實作。主要由我示範(當然,因為影片嘛),我一樣會解說、解析,我拿到一個需求之後,該做哪些事,可以用什麼方式來進行,然後一路 TDD 完成整個大需求。

影片中的重構,是 TDD 中的重構,主要為了 development to design。而實體課中的重構一大部分,是讓大家知道大量的 legacy code 該怎麼重構,而不是重寫。

所以,如果你有上過 TDD與持續重構 的話,大概就是第二天下午的示範,然後篇幅跟長度 放大 4~5 倍,並花比較多時間關注在「開發過程」。

這門課更偏重在需求拆解跟 TDD 的過程,而非 legacy code 的測試與重構,那已經有對應的培訓內容了,我不想互相重疊。

課程設計的題目

保證跟我目前所有的培訓內容不會重複,也不會是 Kent Beck 《TDD by Examples》 上面的題目。TDD 過程中,會透過重構來額外抽出 class/interface,也會帶到一些 refactoring to design patterns 的實際演練。

當然,也會同時提供完整的 commit history 提供同學方便參考與重複練習。(預計將採 private repository,禁止 fork 的形式,也請各位不要直接公開相關的 commits)

影片課程中不會提供額外的作業或題目練習,但在課程討論的平台或頻道,我會希望能再多提供一些題目給大家練習和交流,但這不在影片中,而是更像課後交流。

上課的能力要求與準備

因為這是手把手帶著大家從無到有,從需求說明解析,到開發完成的完整影片。所以只要你寫過程式,願意發問,我不覺得會有任何「吃力」或「跟不上」的情況。

你無須先修過其他培訓課程,也可以直接上這門培訓課學習和練習,不會有什麼困難或阻礙,但仍希望你碰到不懂、卡住的地方,不要吝於提問,因為你不問,我就幫不了你。

事先準備的部份,我是覺得只要有電腦、螢幕、喇叭、網路、IDE就夠了。真要說,就是要願意發問,有不確定的、疑惑的、不懂的、聽不清楚、看不清楚的,就問。

真要說的話,我覺得整個學習過程,肯定是要在每個段落暫停影片,然後跟著演練,然後思考下一步應該怎麼做,接著才再播放影片。

然後跟著練完一遍,我相信你肯定會找時間再看一遍,再練一遍。接著你肯定會試著不看影片,自己練一遍。

相信我,每次的練習都會有不同的收穫,因為你會嘗試著不一樣的順序、方式來實現這個需求,有時候後面幾次嘗試的路線,可能走不下去,也會因此獲得新的啟發。至少我的每一次版本幾乎都不一樣,但光自己練習的過程,可能就得花掉半天~一天的時間。

在操作上或是關鍵概念上,我已經在影片上加上強調提示,並且在講義上會有許多額外補充的參考與說明。

看不懂、聽不懂、不會做,就問。打死都不想發問的朋友,請千萬不要購買,因為這樣學習效果肯定不好。

最後,因為這是我的新嘗試,我會讓購買這個影片課程的人,未來在各式各樣的線上或實體活動中,獲得更大的優惠或特權。

我對購買人的建議

這些人不要買

  1. 如果因為影片課程的屬性,而只期待著課程費用要比較低的朋友,建議不要買。
  2. 只想看影片,不想打開 IDE 跟著練習 coding 的,建議不要買。不要浪費時間浪費錢,你只看食譜也無法學會煮菜,只看游泳的影片也無法學會游泳的。
  3. 看不懂也不想發問的人,不要買。因為這樣誰都幫不了你。
  4. 不想要自己相關資料被壓浮水印在自己購買的影片上的人,不要買。有壓你個資的影片,只有你跟我擁有。而你的個資只會在影片上使用,不會挪作他用。(確定的是,上面不會有身份證字號或護照號碼)

哪些人合適

  1. 因為時空因素(例如人在國外或外地、因為疫情、因為週末時間得陪伴家人,只有深夜才能擁有自己時間的朋友),無法參加我的培訓,但又很想突破自己能力瓶頸的朋友,至少我很肯定你可以從中先獲得工作上有幫助的內容。
  2. 不想等那麼久才能上到實體課,怎麼報名都只能排在等待清單,要等到啥時才可以變強啊啊啊啊啊… 的朋友。畢竟我 2022 年三月前的所有課,在 2021 年一月份就已經全數額滿了。
  3. 喜歡反覆觀看影片學習、動手練習,能從反覆複習的過程中,獲得最大學習效果,獲得不同想法刺激的學習模式的朋友,這一次的影片絕對可以滿足你的學習方式。
  4. 上我的實體課覺得時間太短、觀念太多、實作跟不上,身心靈在實務課程節奏有點緊湊感覺吃力的朋友,但又覺得內容充實,可以學到很多東西的朋友,這是最適合你做一次打好基底的內容與形式。
  5. 對於內容提及的部份,覺得觀念不夠清楚,不知道怎麼實際進行重構、設計與實作出那些技巧和模式,最終達成 簡單設計 成果的朋友。

    甚至我覺得,即使不是這種學習模式的朋友,大概也避不掉得反覆看、反覆練習好幾遍,因為要行雲流水,得各環節都打通才行。

已上課學員感想

  1. Jim:

2. 燕文:心得 – Classic TDD by Examples Refactor to Design

3. Luka:

4. Cash:

5. Sam:

6. Justin:

7. 黯雲

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *