【從學員練習影片觀察到一個關於 TDD 的有趣現象】
極速開發的課後練習作業,雖說重點是放在極速開發要學習的技巧與刻意練習的模型,但開發的方式、順序也是刻意安排成類似 TDD 的進行方式,來讓生產力最大化(TDD 本來就是幫助開發的,不是幫助測試的)
我從2位第一次上我課的學員(當然就是 #極速開發,代表他們沒上過#單元測試 跟 #TDD與持續重構),雖然他們是照著示範影片、上課教學用 TDD 在寫整個 tennis 的過程,但從他們執行測試的時間點就可以發現:
「他是用測試來驗證 production code 的正確性」,即使他先寫了測試,也不先執行,沒有看到紅燈,每次都等到 production code 寫完了,應該要綠燈時,才執行測試。
而其他上過 TDD 課的同學 ,或是上過單元測試的同學,知道測試是用來描述情境,如果現在「加入的這個情境是新的需求或需求異動,代表目前 production code 還不支援這個情境,執行測試跑出的紅燈,就是等等 production code 要完成的 #目標」
test-frist 從來都只是 TDD 其中一個小小的衍生產物,而不是全貌。TDD, 測試驅動開發 從來都是一種開發方法,而不是測試方法。
總有些人老愛把 TDD 拿來跟測試相提並論,就總是喜歡把 test-first 當作靶子打,覺得違反人性跟直覺,覺得先寫測試在很多情況下是浪費時間或是不 work,可能拿來跟一堆測試的方法論相提並論,或總是只拿回歸測試的效益來當作 TDD 的整體。抑或是陷入 isolation unit test 與 integration test (其實就是非 isolation 等級、有實際依賴的自動測試)之爭。
```
註:TDD 事實上是可以不是單元測試等級的。
```
要比較正確看待 TDD 的角度,首先要知道它是幫助開發的、它是一種開發方式(當然不是唯一一種,甚至也不會是最好的一種,因為根本沒有最好,只有剛好)
接著要了解 TDD 可能用 IPO 模型還比較貼切,input-process-output,在你開發任何功能之前,你總要先想過這件事。而先想這件事,才是 TDD 的最基本精神。
接著是怎麼把你想好的東西,變成可執行的 spec,我們只是用測試程式來「描述」你腦袋中的「IPO模型」,把 process 的過程當作一個黑箱子。
而這個 IPO 模型在結合成「使用情境」,就會帶來「高易用性 API 的好處」,只有在一開始就先想好怎麼給別人用,最後才會好用。所謂的一開始想好,指的不是預先設計一堆 class,而是 input/output 想清楚期待(一般會結合實例化需求,搭配 Given/When/Then 的 gherkin style 來把前置條件、資料、前提想好,當發生什麼事,應該是怎樣的結果),然後描述它。在紅燈定義清楚目標,綠燈完成 input/output 關係且沒弄壞前面的所有情境後,來針對 process 進行重構(事實上 Kent Beck 的 TDD by Example 更多是用 refactor 來 #完成 process。
```
註:所謂的 output 不一定只有回傳值,包含外部依賴狀態、資料的改變,甚至顆粒度小一點,針對物件導向設計的話,物件內部狀態的改變也算,只是物件內部狀態改變,驗證點要嘛是拿得到內部狀態,要嘛就是要驗證物件哪個行為會因這個內部狀態而有所不同。
```
## 戰 TDD 之前該先做好的功課
要戰 TDD,是不是至少要把 Kent Beck 的 TDD by Example 看完?
要戰 TDD,請不要拿它跟測試方法論來比,那只是一下就被人看破手腳。因為它是個開發方法論。
要戰 TDD,請不要把它的好處只限縮在跟回歸測試、自動測試的比較,因為那只是它的衍生好處,當你試過在白海報紙上 TDD 就懂,TDD 是在釐清你的思緒的同時,又可以以終為始,確保你在 production code 的每一個動作都是為了滿足某個期待的情境。
要戰 TDD,請不要去把 單元測試、整合測試捲進來,那是測試的顆粒度,那是測試的分類,TDD 從來都不是只能限於單元測試。
要戰 TDD,請不要在那邊戰他是 bottom-up ,是直接從程式/class 的角度出發,事實上 TDD 既不是 bottom-up, 也不是 top-down, (書裡面就有講這件事咩),實務上的 TDD 結合倫敦派(GOOS)跟芝加哥派(Classic TDD),會更像 Outside-In 的進行方式,先定義好驗收情境,接著從最外部(也就是使用者看得到的部份)一路把依賴往另一邊的系統邊界推,直到推到系統以外的依賴資源(persistence 或 external API/service)
```
註: ATDD by Example 中 ATDD by Example, Kent Beck 寫的序最後的一段話。
Kent Beck:
「就像我曾說過的,TDD的一個缺點是,它可能會退化為一種用來滿足開發人員需求的編程技能。某些開發人員從更廣泛的角度來看待TDD,輕易在他們測試的不同抽象級別間跳躍。然而在ATDD中不存在歧義,這是一種加強與非編程人員溝通的技術。我們之間良好的協作關係,以及作為這種關係基礎的溝通,能夠使軟件開發更有效率。採用ATDD是向著溝通更清晰這個目標邁進的重要一步,而此書是一本全面又平易近人的入門讀物。」
```
要戰 TDD,請不要只關注在 test-frist,因為他只是用 test 來幫助你 think-first,不要邊寫邊想。然後不要過份依賴或相信你腦袋的能力,把你想好的東西具體化出來,最好可以被直接執行,最好除了你以外每個人執行出來的結果都會一樣(不管是對的,還是錯的)
要戰 TDD, 請不要把論點放在見樹不見林,如果你有看 TDD by Example 的 Part 1, Part 2 那兩個加起來共 24 個章節,就知道一開始就得把當下想到的全貌紀錄在一個「紙本」的 backlog (所謂的紙本,只是要講這並不依賴於任何工具)
而這個需求輪廓的全貌,會隨著你逐漸完成一部分一部分的情境,設計逐漸浮現後,而隨時跟著增減調整。
但不代表 TDD 就是先想到一個測試案例,就直接先幹下去了,那根本是亂搞。
以上這些,都還不是在列 TDD 的好處,而是針對那些從來沒搞懂 TDD 但又愛戰 TDD 的人一點提醒,你戰的很可能是「你誤解的 TDD」。
TDD 還有許多實務上的用途,列上我在譯者序中的一小段:
>> 測試驅動開發(Test-Driven Development, TDD)!一種以測試為開發輔助、以測試來描述需求情境、以測試來當作目標、以測試來表達期望、以測試來驗證疑問、以測試來實驗學習、以測試來溝通協作、以測試來協助設計高易用性 API 的「開發方法」。
譯者序有開放給大家看,請見:https://tdd.best/book/tdd-by-example/
拜託,要戰之前去看一下祖師爺 Kent Beck 對 TDD 的原始見解:https://www.tenlong.com.tw/products/9789864345618?list_name=srh
如果你想正確的使用 TDD 來幫助你在實務上產生許多的價值,帶來許多的好處,尤其是需求釐清、持續重構、小步快跑的部份,最好理解的培訓課就在這:https://tdd.best/courses/classic-tdd-by-example-video-training/
最後我想講一段話:
TDD 從來都不該被導入到團隊中,但它是一種很好的自我鍛鍊與學習的方式,也是一種能用很低的成本來帶來很多好處的開發方法(見下方註腳),然而它也不是適用所有的情況,但它可以讓『完美』變成一個動詞,而非不變的形容詞。
```
註:
Kent Beck 在 DHH 靠腰:《TDD is Dead》 之後寫的一篇反串文:《RIP TDD》
https://www.facebook.com/notes/1063422864115918/
我幾年前的簡易翻譯,通常也是 TDD 可以幫助你解決的問題,如下:
- Over-engineering (過度設計)
- API feedback (改善API的設計與可用性)
- Logic errors (想的跟寫的不一樣,寫的跟需求不一樣)
- Documentation (寫跟維護文件是痛苦的)
- Feeling overwhelmed (找不到切入點)
- Separate interface from implementation thinking (抽象設計)
- Agreement (確保已修正問題的證據)
- Anxiety (改東壞西的擔心受怕)
```
很久沒對 TDD 發表這種長篇大論了,因為不理解、不想理解、不同角度理解的人居多,能真的到各自的塔上用不同角度來看原義,以及實務上用它來幫助解決的問題有哪些的人,真的太少。
大部分人只想針對這個詞彙來攻訐以博得流量跟吸引目光,而不是想著「我可以用它來幫助我什麼」
問題跟需求是中性的,解決問題跟滿足需求的手段與方式有千萬種,不會只有一種,也不會有所謂的對錯,多點角度去了解不同的方法、方式,然後融會貫通,發揮綜效,在實務上用最少的成本與風險來產生最大的價值,這才是真正的目標。
導入敏捷不該是目標,導入 TDD 也不該是目標,目標永遠都是在實務上產生價值、解決問題、滿足需求。
同時也有278部Youtube影片,追蹤數超過19萬的網紅Introduction,也在其Youtube影片中提到,#搬家#斷捨離#整理師 我搬家啦!搬離住了8年的地方,來到這個一坪100萬的信義計畫區小豪宅😆當初只花3天就搬家,所以有很多東西都直接帶來新家,還沒有斷捨離超崩潰😭超多衣服跟書沒辦法割捨,這次就請救星末羊跟Blaire來幫助我斷捨離!前後大概花了1天完成,從斷捨離、買收納品、整理上架、清掃乾淨,我的...
「寫code入門」的推薦目錄:
- 關於寫code入門 在 91 敏捷開發之路 Facebook 的最讚貼文
- 關於寫code入門 在 裝修佬 - 香港一站式網上裝修平台 Facebook 的精選貼文
- 關於寫code入門 在 童書大集合 - 姚小鳳 Facebook 的最佳貼文
- 關於寫code入門 在 Introduction Youtube 的最讚貼文
- 關於寫code入門 在 Introduction Youtube 的最讚貼文
- 關於寫code入門 在 Untyped 對啊我是工程師 Youtube 的最佳解答
- 關於寫code入門 在 Re: [請益] 文組女生初學coding建議- 看板Tech_Job - 批踢踢 ... 的評價
- 關於寫code入門 在 Let's do this!寫程式新手的入門指南 - Pinterest 的評價
- 關於寫code入門 在 我不會寫CODE 的評價
- 關於寫code入門 在 Re: [請益] 為什麼文組轉職主流是寫code 的評價
- 關於寫code入門 在 [請益] 三十歲開始學會不會太晚了? - Soft_Job - PTT生活資訊 ... 的評價
- 關於寫code入門 在 #分享怎樣開始學習程式語言? - 軟體工程師板 | Dcard 的評價
- 關於寫code入門 在 大揭秘! 過往自學寫程式的最佳Youtube 教學 的評價
- 關於寫code入門 在 [討論] 沒有基礎,該先學C還是Python - Soft_Job 的評價
寫code入門 在 裝修佬 - 香港一站式網上裝修平台 Facebook 的精選貼文
◢ 裝修佬 X House730 ◤
潮流興開放式廚房,但對於喜歡下廚的住戶,家中一個梗廚能倍添生活樂趣。就中小型單位而言,通常入門便是客飯廳,而廚房則會設在客飯廳旁邊,煮完飯餸可直接端到飯桌,所以廚房及客飯廳設在屋內同一區域。不過,今次的開則卻將廚房設在屋內的最深深處,與客飯廳分離,情況耐人尋味。
https://bit.ly/2XhcR8A
========================
想自己DIY維修又怕唔識整衰?為香港人而寫嘅 #DIY家居維修工具書《家居維修翻新50問》面世啦!📚
圖文並茂,>100 條影片QR code,簡單易上手💪
憑單據報名 #裝修學院 家居維修DIY班仲有$100優惠!🤩 各大書局、裝修MALL有售:https://bit.ly/3yDU19b
=========================
👷 裝修佬 - 香港一站式網上裝修平台👷
📐【裝修爛尾要搵幫手】https://bit.ly/3tzu5sU
🛒【Mall優惠】http://bit.ly/34qchEl
💥【裝修測試】https://bit.ly/3eeuoB6
📚【專欄文章】http://bit.ly/2LyQXno
#香港一站式網上裝修平台 #幫你揀選最適合你嘅裝修佬 #裝修 #裝修佬 #裝修案例
寫code入門 在 童書大集合 - 姚小鳳 Facebook 的最佳貼文
閱讀家雙語自然認知 #48本全套抗漲團
單套24本各處已經調漲為$1180
但全套48本,我們團努力爭取抗漲到9月底維持$1980💪
(最後優惠只到9月底,如果被抗議有可能提早結團😅)
還沒入手"入門的科普書"加入共學團的媽咪
把握抗漲開團時間唷 ❤️
✅表單下單處:https://gbf.tw/uprpu
✅官網下單處 (可折紅利):https://bit.ly/3keRuw7
----------
收到的媽咪都認為字夠大、有注音、圖片寫實又漂亮
有附CD,也可掃個QR Code聽音檔
中英文雙語,句子短,適合英文零基礎入門
適合2歲以上,圖片細緻
每本都是一個單一主題,如水果、魚、樹、車車...,彼此之間沒有關聯性。
是中英文版有注音有cd(不會重複)
-
第一套的直播回放:https://fb.watch/v/48XiRm_ib/
第二套直播回放:https://bit.ly/37YqoDV
----------------------
跟我們團可參加共學團
1.一起親子共讀一篇紀錄
2.分享主題周邊相關延伸
請大家加入社團👉https://www.facebook.com/groups/163965925837485/
---------------------------------------------
#想要我們製作周邊學習資源給大家請+1
(例如小遊戲)
寫code入門 在 Introduction Youtube 的最讚貼文
#搬家#斷捨離#整理師
我搬家啦!搬離住了8年的地方,來到這個一坪100萬的信義計畫區小豪宅😆當初只花3天就搬家,所以有很多東西都直接帶來新家,還沒有斷捨離超崩潰😭超多衣服跟書沒辦法割捨,這次就請救星末羊跟Blaire來幫助我斷捨離!前後大概花了1天完成,從斷捨離、買收納品、整理上架、清掃乾淨,我的新家變超美又舒適❤️真是太感謝兩位救援~~害我現在每天都不想出門XD在新家每天起床都覺得好幸福🥺
如果對整理師這個行業興趣,歡迎去下方連結看看呦~
---
【Re-Life整理師線上課程】
蕾咪專屬優惠碼:rami800(注意是小寫呦❤️)
網址:https://kol.relife.co.com/rami
優惠碼使用期限為60天
---
time code:
00:00大家好~我終於要搬離住8年的房子啦!一起來陪我搬家吧XD
01:00救星來了!自己整理老半天還是亂糟糟😭找末羊跟Blaire來拯救我~
01:45整理開始!先從衣服山開始斷捨離吧~~
04:15整理衣服的小技巧~
05:40收納盒真的有用嗎?櫃子過大就要善用收納盒做整理~
06:15大魔王!一堆書斷捨離到崩潰🥺🥺🥺
06:35整理完成!Before vs. After是不是差很多😳
06:50來看看咪新家的各個小角落!❤️
08:53蕾咪整理遇到的5個小問題?
12:00要如何成為整理師呢?
13:41對課程有興趣的你,歡迎使用蕾咪專屬折扣碼呦!❤️
---
可以看到更多的蕾咪~
訂閱蕾咪PressPlay專業知識服務→ https://app.pressplay.cc/CFP
想看蕾咪IG限時動態→ https://www.instagram.com/ramihaha/
想找蕾咪FB留言聊天→ https://fb.com/ramihaha.tw/
觀察蕾咪旅遊部落格→ https://ramihaha.tw/
---
可以看到更多影片!
【理財教學】賺超過薪水?邁向財務自由!被動收入與主動收入差在哪?
❤ https://youtu.be/JeblgTqh_J0
【投資教學】買進就下跌、股票被套牢怎麼面對?基礎3種投資策略解密!
❤ https://youtu.be/XHQ52YkGcOo
【理財教學】保險原來這樣買?我適合哪種保險?基本保險觀念剖析!
❤ https://youtu.be/dDb2ROuaLB8
【理財教學】擺脫月光族!SOHO族、自由工作者必看3招理財術!穩定收入又能加薪!
❤ https://youtu.be/BOWf0hpBh7U
【投資教學】美股投資選股策略快速教學,4本經典好書入門推薦!
❤ https://youtu.be/JGT-jUj4cL4
歡迎有更多的理財問題,可以留言跟我說,
我會挑選適合的問題,錄製更多教學影片囉!
希望從這理財的小小習慣去改變我們彼此的生活啦!
歡迎訂閱蕾咪的頻道喔:)
※這不是商業影片! ^^
※This is NOT a sponsored Video.
寫code入門 在 Introduction Youtube 的最讚貼文
#新書#20萬訂閱#10萬獎牌
蕾咪頻道滿20萬訂閱啦~我終於要來回答大家的問題了XD還有開箱10萬訂閱獎牌~這次搜集之前在IG粉絲的問題、關於我新書的問題,最後還有創作者50問挑五題最多人問的,一次回答給你們❤️謝謝你們一路的支持🥺我們會繼續努力的~有想看什麼也歡迎留言告訴我:)
如果喜歡這個頻道別忘了訂閱呦❤️
---
蕾咪《小資族下班後翻倍賺》上市❤️
博客來購書連結→https://bit.ly/02900194-B
---
time code:
00:00大家好~這集要來開箱10萬獎牌!跟回答20萬訂閱的問題~
00:50開箱10萬訂閱獎牌!
01:49為什麼帳號是「ramihaha」?
03:07蕾咪怎麼強運的?
03:32越來越漂亮怎麼辦到的?
04:05自律的方法?
04:37想跟25歲的人說什麼?
05:30怎樣才能成為蕾咪的小助理?
06:13剛交往要注意什麼?
08:59可以唱首歌嗎?
07:01是不是變瘦了?
07:07怎樣改善緊張的性格?
08:09蕾咪愛用的保養品品牌?
09:04有結婚生子的計畫嗎?
09:31想知道改變蕾咪人生的一件事?
10:22接下來想挑戰的事情?
11:21這本書寫多久?
12:36誰適合看這本書?
13:02為什麼想出這本書?
14:15寫書的過程中有遇到什麼困難?
14:54有要出下一本書嗎?
16:28如何做好時間管理?
18:29推薦三個創作者帳號?
20:37一週花多少時間經營社群媒體?
21:38如何找到團隊夥伴?
22:32如何接業配?
---
可以看到更多的蕾咪~
訂閱蕾咪PressPlay專業知識服務→ https://app.pressplay.cc/CFP
想看蕾咪IG限時動態→ https://www.instagram.com/ramihaha/
想找蕾咪FB留言聊天→ https://fb.com/ramihaha.tw/
觀察蕾咪旅遊部落格→ https://ramihaha.tw/
---
可以看到更多影片!
【理財教學】賺超過薪水?邁向財務自由!被動收入與主動收入差在哪?
❤ https://youtu.be/JeblgTqh_J0
【投資教學】買進就下跌、股票被套牢怎麼面對?基礎3種投資策略解密!
❤ https://youtu.be/XHQ52YkGcOo
【理財教學】保險原來這樣買?我適合哪種保險?基本保險觀念剖析!
❤ https://youtu.be/dDb2ROuaLB8
【理財教學】擺脫月光族!SOHO族、自由工作者必看3招理財術!穩定收入又能加薪!
❤ https://youtu.be/BOWf0hpBh7U
【投資教學】美股投資選股策略快速教學,4本經典好書入門推薦!
❤ https://youtu.be/JGT-jUj4cL4
歡迎有更多的理財問題,可以留言跟我說,
我會挑選適合的問題,錄製更多教學影片囉!
希望從這理財的小小習慣去改變我們彼此的生活啦!
歡迎訂閱蕾咪的頻道喔:)
※這不是商業影片! ^^
※This is NOT a sponsored Video.
寫code入門 在 Untyped 對啊我是工程師 Youtube 的最佳解答
LeetCode是所有軟體工程師找實習找工作都必用的平台,雖然大部分功能都是免費的,但天下沒有白吃的午餐,讓人好奇付費版 LeetCode Premium 到底有沒有用?今天讓使用過 LeetCode Premium 準備並通過 Google軟體工程師面試的我來分享一下我的使用感想!
影片中會告訴你如何免費拿到各種付費功能~
然後還有我到底刷了幾題通過了Google面試哈哈!
這集會聊到...
💬 Overview 💬
💙 LeetCode Premium功能簡介 1:25
💙 我覺得好用的付費版功能 1:50
💙 我覺得沒用的付費版功能 4:00
💙 如何免費得到類似的付費功能 1:50 3:00
💙 結論:LeetCode Premium 到底值不值得?5:58
💙 誰適合買 LeetCode Premium?6:38
💙 我刷了多少題通過 Google 面試 7:57
📢 📣 📢 本頻道影片內容有輸出成 podcast 📢 📣 📢
可以在各大podcast平台搜尋「Untyped 對啊我是工程師」
請大家多多支持呀!!🙏🏻💁🏻♀️
#LeetCodePremium值得嗎 #力扣刷題進階功能免費用
一定要看到影片最後面並且在「YouTube影片下方」按讚留言訂閱分享唷!
【愛屋及烏】
YouTube 👉 https://www.youtube.com/c/Untyped對啊我是工程師
Podcast 👉 https://open.spotify.com/show/3L5GRMXmq1MRsliQt43oi2?si=3zgvfHlETeuGfp9rIvwTdw
Facebook 臉書粉專 👉 https://www.facebook.com/untyped/
Instagram 👉 https://www.instagram.com/untypedcoding/
合作邀約 👉 untypedcoding@gmail.com
-
Untyped 對啊我是工程師 - There are so many data types in the world of computer science, so are the people who write the code. We aim to UNTYPE the stereotype of engineers and of how coding is only for a certain type of people.
凱心琳: 一個喜歡電腦科學邏輯推理,在科技圈努力為性別平等奮鬥的工程師。
寫code入門 在 Let's do this!寫程式新手的入門指南 - Pinterest 的必吃
Feb 6, 2016 - 這篇文章集合了Code.org 聯合創辦人Hadi Partovi 給寫程式新手的幾個建議,介紹學程式語言應該從何開始、如何快速上手Coding,並推薦幾個熱門的程式語言 ... ... <看更多>
寫code入門 在 我不會寫CODE 的必吃
本站《Python專案開發入門的十堂課》現在於Udemy 最低價新台幣270 元特價中,到1/1 ... 我不會寫CODE的大家好~Batch #16 招生倒數兩天,希望還在準備的朋友把握時間 ... ... <看更多>
寫code入門 在 Re: [請益] 文組女生初學coding建議- 看板Tech_Job - 批踢踢 ... 的必吃
小妹來回妳文,一樣是文組科系轉資工
首先,我建議去念書,因為我們身邊不太有學資工的人可以互相討論
但是寫程式我覺得有人一起討論較好,才不會一直卡死在自己的盲點
我不建議去補習班,最好是選資工是該校強項的大學去讀
因為補習班大多只會教你如何實作,就算結業,基本觀念也很弱
國外學校有開給非本科系念的computer science conversion
可以去查查類似科系,雖然這類科系很多是為了賺國際學生的學費
但是因為教授還是資工本系,所以教授內容我覺得還是不錯
在選校的時候,先去查評價,選那種大家哀號說課程很硬的學校
既然想轉職,實在沒必要為了學歷選開心過關的大學
至於語言,老實說我個人比較推薦學 C / C++
雖然學起來可能比較複雜,不過對記憶體管理會有比較具體的印象
最後就是切記,非本科最大的問題就是重視實作不重視基礎觀念
所以就算這些觀念的書籍再怎麼難念,也要堅持下去
就這樣 :D
※ 引述《hungryhippo (hungryhungryhippo )》之銘言:
: Hi各位年薪300有為青年大家好,
: 小女子我是今年25歲文組畢業的,有鑑於真的不想在待在低薪高時數又壓榨的服務業,想
: 要在這裡請問大家幾個問題
: 想知道如果現在要自學coding,有沒有比較推薦的相關program/degree可以修,之後對找
: 相關工作比
: 較有幫助的呢?(美國學校也可以,NY佳)
: 有在看Upenn的MCIT 請問有校友可以請教嗎?
: 有綠卡希望以後到美國能夠順利就業
: 聽人家說覺得Python很推薦,請問你們覺得呢?我本來是要學Java的,但聽了一些人建議
: 後還是決定先來這裡問問大家意見好了
: PS有些鄉民會走心,我沒有什麼看不起本科生的想法,就單純想問問大家的意見,謝謝指
: 教
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.216.150
※ 文章網址: https://www.ptt.cc/bbs/Tech_Job/M.1507955869.A.49B.html
... <看更多>