Day 20 「就是真诚」TDD 的实弹演习:Magneto Effect


打球像做人

上图是笔者几年前拿网路上的图来东凑西凑,拼出来的桌面,本只是拿来练 Photo Impact,没想到几年後发现蛮多人转发的,甚至有人拿来再创作,放在自己的影音作品内。感觉很有意思。

在笔者成长的年代,那时台湾的棒球正在经历一个史无前例的黑暗时代。职棒签赌案一椿又一椿,当时搞得社会氛围甚至有种「打棒球就是赌博」的气氛。有一个人带领我们撑过来了,那就是台湾巨炮-陈金锋。

陈金锋曾在一次访谈中说到:「打球像做人,就是真诚。」这对社会起来多少作用我不知道,但对一个棒球迷的我来说,在往後一些决策上,着实起了不小影响。一句话是不是你说的、一个 Solution 是不是你想出来的、一个技术你究竟会不会、熟不熟,你可以骗人,但总有一天你会需要拿真相出来验证,到时你还是得面对真实。

不会,就练。练多了,你就会了。

本篇将藉一个公开的练习题,进行 TDD 的实弹演习。

Magneto Effect

各位如果常用一些绘图软件,或是画 UML 流程图的工具,应该有体验过一个功能,就是在一个已存在的点附近按一下,不用按太准,滑鼠会自动「滑」到原有的点上去,就像被磁铁吸过去一样。Magneto Effect 这个题目就是在实践这样的工具。

例如,画面上已存在了一个锚点(50, 50),而磁力作用的范围假设是 5,当滑鼠在(49, 50)的座标上被按下时,因为在锚点的范围内,所以就自动被「吸」到锚点(50, 50)上了。如果同时有多个锚点在附近,就「吸」到最近的点上去。

列测项

我们要先来列个测项,这些测项能帮助我们待会写程序时有个目标物可以参考。同时,要注意测项的顺序。一般来说,会先做简单的 case,再一个一个慢慢加复杂,或是先处理介面等细节,再慢慢加入重要运算。最後,需注意测项间的依赖。如果做到一半发现测项有要新增、修改,或换顺序的,就来把它改掉:

假设磁力作用的范围是 5

锚点 滑鼠原位置 滑鼠新位置 测试功能
- (49, 50) (49, 50) 定介面、没有锚点
(50, 50) (49, 50) (50, 50) 距离够近
(0, 0) (49, 50) (49, 50) 距离很远
(50, 50)、(0, 0) (49, 50) (50, 50) 两个锚点,一个在附近
(50, 49)、(50, 50) (49, 50) (50, 50) 两个锚点,都在附近

Video

题目不难,但因为篇幅有限,而 TDD 过程每一步还是比较繁琐,所以这里我们就用影片来演示整个过程:

请注意,此完全没有经过美化与剪接,意在真实呈现真实工作中会出现的情形,中间有一些卡住与 debug的过程,请耐心服用。觉得语速较慢着,请加快成 1.5 倍速服用 :)

结论

透过这个小小的题目,我们稍稍对 TDD 的运作情形,有了一点点了解。然而,光是看是不够的。要想享受 TDD 带来的好处,是要一定程度的练习的,而笔者其实不建议各位一开始就拿工作的专案来练习。也许一段时间後可以,但一开始不要,尤其「绝对不要」在上班时间练习。

写工作的 code 会有时间压力。压力一来,你会很难很难坚持使用你刚学、还没掌握诀窍的方法,你会更倾向用你原本就熟悉的方式,就练习不到了。效率不彰的练习不如不练。所以,如果要练习,就空出个下班时段,上网找个与工作无关的题目来练吧!譬如 Code Wars。

谜之声:「天才与庸才之间的差别不在基因、不在天分,而在刻意练习!」

Reference

  1. Magneto Effect:https://sites.google.com/site/tddproblems/all-problems-1/magneto-effect
  2. 安德斯‧艾瑞克森、罗伯特‧普尔,刻意练习:原创者全面解析,比天赋更关键的学习法,方智出版社,2016
  3. Code Wars:https://www.codewars.com/
tags: ithelp2021

<<:  Day 15 储存宝石:S3 架构 & 版本控管 (Versioning)

>>:  Day.12 主从搭建 - 部署流程(Master Slave Replication )

[DAY 08]环境建置 : 软件(3)

前言 今天比较像是补充说明一下一些软件上的可以注意的点,基本上经过了软件(1) 跟软件(2) 之後,...

05

蒙特兰在过去曾经讲过,在别人藐视的事中获得成功,是一件了不起的事,因为它证明不但战胜了自己,也战胜了...

理解网际网路协定(四):从 IPv4 到 IPv6,为何新技术迟迟不普及?浅谈 NAT 及 IPv6

关於 Internet Protocol,我们最後来聊聊为了解决 IPv4 一些问题而提出的新版本 ...

[Day4] 自我必备掌握力:了解公司的运作

公司的IT部门 IT不是超然於世的部门,而是运作於公司的一部分 甫加入公司的时候,已经有一个又一个的...

AI ninja project [day 25] QLattice -- 基础分类

你听过的有AI框架有scikit-learn(机器学习)、tensorflow(深度学习)、pyto...