一年前 魚尾 上了兩天 #TDD與持續重構 後被燒傷的感想。
讓大家重新拾回對自己工作的熱愛,讓自己的工作能像藝術一般地呈現出來,讓自己像個藝術家一樣揮灑自己的創意。
很高興能有這樣的機會,讓大家燒在一起,引發人生更多的火苗🔥
💡魚尾 感想💡
上週末花了兩天時間去參加了 91 主講的 『重構與 TDD 實戰營』,這門課早在三月時就已經報名了。但當時其實有點猶豫,猶豫什麼呢?早在前2年就上過TDD的課了,也不斷的在實踐,重構能力不敢說足以飛天,但跑在地上應該也是不成問題吧,但衝著 91 開的課,還是硬著頭皮報名下去了。
這兩天,完完全全被 Diss 到爆啊!!!!!
以為是跑在地上,沒想到根本是只有在地上爬的等級 Orz
光第一天的 WorkShop ,心想列個測試案例有什麼難的?事實是,好的測試案例是經過排序且都是有目的,可以在 TDD 的過程中一步一步前進,將產品堆疊出來。
即便 Joey 再次示範後,讓我們再做另一個 WorkShop,仍然無法做完全漂亮的測試案例。
而 91 竟然可以直接拿我們 WorkShop 寫出來的爛 Code,直接重構給我們看,這種硬底子的實力絕對不是事先 Set 好的內容。而且還可以同時帶 Java、PHP、.Net 不同的語言的同學,上課時還抓出「疑,這段 Code 有換人寫哦,應該是寫 Java 來接替的。」
上完後慶幸還好當時有報名,讓我知道原來我可以如何善用我的斧頭,讓本來可能只能發揮 10% 功力的斧頭,瞬間解除封印。但重點是斧頭從木斧變成鐵斧後,使用的人也要強化自己的力量,才揮得動,這門課最重要的就是讓你知道你可以怎麼樣強化你的力量,讓你可以配得上用這把鐵斧。
這門課讓我學到3件事
1. 人生最可怕的就是你不知道你不知道:上課前我覺得 TDD、重構就是那樣了,能有什麼不一樣的嗎?上完課後的感想就是「無知是幸福的,同時也是可怕的」
2. 知道不等於會:第一天的 WorkShop ,Joey 已經示範過完整的 TDD 與重構流程,晚上許多人想爭口氣重做一次 WorkShop 練習,希望能夠扳回一城。但事實上是有進步,但仍然不到如同 Joey 一般的水準。需要不斷的練習、練習、練習,才能夠變成自己的內功。
3. 天下武功、唯快不破:很多人都說開發都沒時間了,那有時間寫測試?為什麼沒時間?撇除其他你不可以控的因素外,你唯一能夠改變的就是寫 Code 的速度。當你重構一個動作可能要花一、二分鐘,而且還有可能 Complie Error,就要更多時間 Debug;而我可能只要 10秒(這算久的),我還有把握不會Complie Error。一個動作的時間差距可能就有2分鐘了。假設一個重構需要30個動作才能做完,可能需要一個小時,而我可能五分金鐘就做完了,剩下的55分鐘我就可以寫更多有效的測試來提高程式品質。
這門課非常推薦給手上還是拿著木斧,想讓木斧升級成鐵斧並強化內功的同學
台北8月的課程已經額滿了,要報只能等 11 月了,還有3個早鳥名額,要報要快。
→ 201811 台北梯次:https://yihuode.io/activities/662
另外也推薦 「VS極速開發」
這門課讓你可以讓妳單純的伐木動作,變成不中斷連續技,讓你體驗大絕招連發的快感!!
→ 201807 台中梯次:https://yihuode.io/activities/631
→ 201810 台北梯次:https://yihuode.io/activities/664
超燒腦的 【重構與 TDD 實戰營】剛結訓,我最喜歡的照片是這一張。
每一組都陷入自己寫的 legacy code 怎麼 debug 的狀況。
--
這次很特別的是,有一組用 intelliJ 的 java 同學,有一組 用 phpstorm 的 php 同學,有一組最近在寫 .net core 用 Rider 的同學(嚴格來說是兩位,燈哥跟卍蟲王),其他兩組是用 Visual Studio + ReSharper。
在上課中示範了怎麼重構大家的 legacy code 以及同樣的需求如果用 TDD 開發會有多優雅,回顧時的感想,幾乎所有人都提到自己雖然有在用 JetBrains 的神兵工具,在實務上卻可能用不到它 10% 的價值。
未來這門【重構與 TDD 實戰營】,以及【單元測試實戰營】,預計會往 php, java, javascript 推進,讓更多圈子對學習這些 XP 的工程實踐能更有方法與效率。
--
另外,這次也有不少學員對於上課採 pair programming 跟小組感覺相當不錯,有人可以討論、可以看別人為什麼這樣寫 code,從裡面去偷學、溝通、激盪出不同設計概念的火花,是另外一份收穫。
其實在學習的時候,pair programming 真的是非常有效的方式。不管是學、教、討論、提問、表達想法,這都是極度有效的練習方式。
這會充分反應在 live demo/coding上,要能邊想、邊寫代碼、邊講,還要有趣、好懂、快,需要用對的方式,大量練習才能內化成技能的一部分。
--
如果想跟著燒腦開腦一下,下一梯次八月的已經額滿了,請參考 201811台北第四梯次【重構與 TDD 實戰營】:https://yihuode.io/activities/662
「重構與tdd實戰營」的推薦目錄:
- 關於重構與tdd實戰營 在 91 敏捷開發之路 Facebook 的精選貼文
- 關於重構與tdd實戰營 在 91 敏捷開發之路 Facebook 的最佳貼文
- 關於重構與tdd實戰營 在 91 敏捷開發之路 Facebook 的最佳解答
- 關於重構與tdd實戰營 在 91 敏捷開發之路- 【重構與TDD實戰營】第四梯次,201811,https ... 的評價
- 關於重構與tdd實戰營 在 建立與執行單元測試範例 - YouTube 的評價
- 關於重構與tdd實戰營 在 2022java set排序-遊戲熱門攻略下載,精選在PTT/巴哈姆特攻略情報 的評價
- 關於重構與tdd實戰營 在 java課程台北有用資訊在IT邦幫忙、Github - 程式語言代碼 的評價
- 關於重構與tdd實戰營 在 TDD · GitBook 的評價
重構與tdd實戰營 在 91 敏捷開發之路 Facebook 的最佳貼文
【念念不忘,必有迴響】
怎麼勾起大家心裡面那把快熄掉的火,怎麼讓火旺起來在四處蔓燒,怎麼讓培訓的效果不只是培訓的那兩三天,而是大家有動機、想在實務上用來解決問題並改善痛點、想趕快練習、想趕快分享好東西給其他人,這股衝動、堅持、行動,才是 #專業點火師 的價值。
#有用就有用_沒用就沒用
#雖然我覺得上課順序應該反過來
※ 參加我培訓的學員還有個特色,通常 #自費 跟 #老鳥 的比例非常高,至少都是 1/3 起跳,#這就是口碑
① 演化式設計:測試驅動開發與持續重構:https://dotblogs.com.tw/…/201907-evolutionary-development-t…
② 單元測試實戰營(針對遺留代碼):https://dotblogs.com.tw/…/unit-testing-effectively-with-leg…
③ 極速開發:https://dotblogs.com.tw/…/2019/02/18/extreme-developing-tra…
201811 重構與TDD實戰營
×
201901 單元測試實戰營
×
201905 極速開發
【 91 敏捷開發之路 三堂課心得集大成之文超長慎入】
一切是從某次和Scar Su的IDP開始,建議去看91的TDD 30天文章來學習,雖然之後TDD並沒有太實質的學習成果,卻間接認識了91這位大師以及開啟往後圍繞其周圍一切知識的大門。
半年多來上了三堂課,前後花了一個月左右的薪水、數不盡的白天與黑夜,收穫,真的很多。
▎重構與TDD實戰營
當時一股腦想學習TDD的我,上班時不經意看見此課程資訊,心跳加速、一股熱血湧上心頭,毫不猶豫的揪了 蔡孟哲 學長衝一發,學長的爽快答應,或許才是促成一切學習的開始。
「本來看到這個課程就有想上了,你揪我就覺得該衝一發。」
學習的路上有時候大概就是需要一點衝動以及一個添燃油的朋友,才能脫離猶豫往前衝吧。
回到課程,「TDD」這件事情並不只是單純測試先行,測試案例的產生乃是在明確的需求底下所產生,而追求明確的需求這件事本身是值得花時間進行的。而當需求討論出現瓶頸時,透過錯誤的舉例,來逼出需求方正確的回答,讓雙方的認知達到一致。當然這個需求不只是驗收情境,透過TDD不斷的由上而下的進行,在定義程式內物件職責時的需求方就是developer自己了。
比起TDD的紅燈→綠燈→重構的循環、一次只做一件事情的準則、測試或產品代碼都必須能說話、各種重構技巧讓程式碼乾淨且降低耦合等等的基本要求,在TDD上最重要的莫過於還是要不惜一切的榨出明確需求,不要害怕問蠢問題,更不要像在課堂時和學長pair時被91糾正「不要放棄溝通」的我們一樣,最終產出就是一堆廢code😂。
▎單元測試實戰營
上課前靠著自學研究,大概知道怎麼去寫單元測試,知道怎麼使用隔離框架,也在專案上嘗試過,但這個領域絕不可能僅有自己知道的那樣,也因此前堂課結束後不久便決定接著報名此課程。
雖然在課堂中一些基本知識相對已較熟悉,但有些知識或許要對的人講一遍,才能深入腦海中吧XD。例如替legacy code加測試的大絕之一--將耦合之處抽成protected,並在子物件下override此部分來達成隔離,95%以上案例皆可如此進行的這個方法,在「單元測試的藝術」一書中便已看過,當時卻沒有特別的感覺更不曾套用過,課後回去在工作上使用才發現這 太 猛 了,我想這概念就跟一個男生不聽媽媽的話但卻很聽女朋友的話的概念一樣吧😅。
不過這堂課最有價值的還是最後在工作實務上的各種探討及經驗分享,例如0測試的專案如何開始、code coverage之於團隊的意義、與第三方界接的各種眉眉角角、CI的最高準則性、團隊/個人如何看待單元測試等等,即便當時下課時間已經delay超多(不小心忘記91的課後面不能輕易安排行程RRR),但仍然捨不得走,每一項議題都是大家工作上的切身之痛,多聽一些就是多賺一些,也是對未來多一些幫助。
▎極速開發
在前兩堂課pair寫code時,就好幾次被91碎念我們的開發方式不太行,又慢又沒效率(之類的),開始只覺得寫得快又有什麼用,還是要等腦子能跟上才有意義,但隨著一次又一次91三刀流demo的洗禮下,漸漸覺得牙癢癢手癢癢。這次在學長的鼓吹下,也決定一起來學學這樣的開發方式。
這堂課程終於是個有類似講義的課程😂。隨著91的教學,vim來到了我的visual studio中,也獲得了91個人常用的自訂指令,滑鼠的地位逐漸母湯。但這堂課不僅於此,透過ReSharper的輔助,各式template的設定、自訂Quick Fix等等,把所有許多重複的、麻煩的事情,透過IDE的協助來簡化開發,讓developer關注在所需關注的事情即可。
Developer把每一個開發時的小動作(甚至是右手在滑鼠和鍵盤間移動)做簡化,每多擠出的一點點的時間,都可以用在需求的關注、架構設計等等其他本就要花時間的事情上,用最快的速度把腦裡出現的code投射到editor上,更有效率的提升工作效率以及價值。我想這才是這門課的精隨所在吧。
▎總結
上過91的課程都知道,能獲得的東西遠比課程名稱還多很多,沒有什麼值不值得,只有願不願意給自己打開門、試著站在巨人的肩上而已。
而不論是TDD、重構、UT、極速開發,練習、大量刻意的練習,才是精進的唯一之道。
▎影片 - Tennis Kata
以TDD方式完成tennis的計分功能。
從起初的一小時,透過不斷的練習、91的review、和學長的討論調整下,進入30分、27分、23分、20分、19分、17分到近期版本的14分,雖然仍有些失誤,但我想不完美的完美,更能驅使一個人繼續努力吧!
重構與tdd實戰營 在 91 敏捷開發之路 Facebook 的最佳解答
【有用就有用,沒用就沒用】
上課只是學習的起點,課後的實務應用,實務上的撞牆卡關,才能發現內化過程中真正的卡點,而課後在群組上的討論,也是培訓的核心價值之一。
只有協助大家突破實務上應用的卡點,這份知識才能轉換成學員的技能。(雖然課程的內容跟進行方式,就是以各個階段的卡點來刺激大家思考,跟發現不知道的東西)
有興趣的朋友,上過課的夥伴,可以參考一下 張晏甄 是如何在課後開始在實務上卡關,如何一路補足相關的知識,一路摸索出自己的學習路線,透過不斷的練習跟應用,來體會上課內容的精髓。
文章中提到的「Emergent Design」,常見的翻譯就叫做 #浮現式設計,之前有一本我挺喜歡的書名就是浮現式設計,是 Net Objectives 這間公司幾位員工寫的書。
這也是為何我後來把 2018 年的【重構與 TDD 實戰營】課程名稱,修正成【演化式設計:測試驅動開發與持續重構】的原因,因為更貼近了真實設計過程的核心價值。
▍補充
晏甄這篇文章提到的培訓:
① 演化式設計:TDD與持續重構(七月):https://dotblogs.com.tw/…/201907-evolutionary-development-t…
② 熱血 coding dojo(三月底):https://yihuode.io/activities/767
※ 基本上 熱血 coding dojo 還沒對外公開販售,30 席名額就會被老鳥搶光了。
③ 極速開發(十月):https://dotblogs.com.tw/…/2019/02/18/extreme-developing-tra…
※ 晏甄上完 #極速開發 後的心得文在這:https://blog.opasschang.com/…/%E7%B9%BC%E5%AD%B8vim%E7%9A%…/
④ 針對遺留代碼加入單元測試的藝術(十月):https://dotblogs.com.tw/…/unit-testing-effectively-with-leg…
#熱血,是會互相渲染的
分享一下過去三個月學TDD的歷程,另外想問哪間公司或team真的有在用TDD開發或寫單元測試的求收留嗚嗚嗚好想變強喔
重構與tdd實戰營 在 建立與執行單元測試範例 - YouTube 的推薦與評價
![影片讀取中](/images/youtube.png)
91 的培訓課程【單元測試實戰營】、【 重構與TDD實戰營 】課前先修練習。※環境請安裝VS2017 + ReSharper步驟包含:① 建立單元測試專案② 從測試 ... ... <看更多>
重構與tdd實戰營 在 2022java set排序-遊戲熱門攻略下載,精選在PTT/巴哈姆特攻略情報 的推薦與評價
兩年後的現在,我還蠻享受在重構學員的java legacy code 的. ... 上週末花了兩天時間去參加了91 主講的『重構與TDD 實戰營』,這門課早在三月時就已經報名了。 ... <看更多>
重構與tdd實戰營 在 91 敏捷開發之路- 【重構與TDD實戰營】第四梯次,201811,https ... 的推薦與評價
【重構與TDD實戰營】第四梯次,201811,https://yihuode.io/activities/662 早鳥只剩下一張囉,要搶要快啊。 你可以點選在網頁右上方的ATTEND,填入報名資料。 ... <看更多>