为什么删代码反而更容易找到错?
计算机原理 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
了解一下你用的编辑器怎么打断点。
找家人讲讲你最近写的一段代码。
为"求两数最大值"设计三组测试数据。
给"数组求最大值"列出四组边界测试。
为什么"看结果顺眼"不算测试?
想想为什么手工测试很难做到"每次全跑一遍"。
你有没有存过"最终版2"这种文件?
为什么"能随时退回去"让人敢于大胆改代码?
给"修好了闰年判断的错误"写一句提交说明。
参考答案(家长):断点就是"跑到这里停一下",是调试器最常用的功能。
参考答案(家长):干扰少了,能出错的地方就那么几处,一眼可见。
参考答案(家长):如 (3,5)→5、(5,3)→5、(4,4)→4,覆盖前大、后大、相等。
参考答案(家长):讲不清楚的地方,往往就是错误藏身之处。
参考答案(家长):那是在给程序找理由,不是在检验它。
参考答案(家长):只有一个元素、全部相同、最大值在开头、最大值在末尾。
参考答案(家长):几乎每个人都有——这正是版本控制工具要解决的问题。
参考答案(家长):太累,人会偷懒跳过,机器不会。
参考答案(家长):如"修复闰年判断:漏了整百年不闰的情况"——说清改了什么、为什么。
参考答案(家长):改坏了能撤销,试错成本几乎为零。
如果没有历史记录,接手一个陌生项目会遇到什么麻烦?
分支像不像写作文时先打草稿?
为什么"各改各的文件"能减少冲突?
三个人一起做小组作业,怎么分工才不打架?
和同学互换代码,各自找出对方一个可以改进的地方。
为你的一个程序写三句话说明。
有人让你"写个算成绩的程序",你该先问哪三个问题?
做下一道题前,先在纸上写出三步思路。
把"做一个学生成绩管理程序"拆成四个小任务。
为什么"能用的丑版本"比"完美的半成品"有价值?
参考答案(家长):很像。草稿随便涂改,誊正的那份始终干净。
参考答案(家长):只能猜,不知道某段奇怪的代码是有意为之还是写错了。
参考答案(家长):把任务切成互不重叠的几块,各做各的,最后合并。
参考答案(家长):改动不重叠,工具就能自动合并。这也是模块划分清楚的好处。
参考答案(家长):一句功能、一句用法、一句注意事项,足矣。
参考答案(家长):换个人看,盲点立刻暴露。
参考答案(家长):想清楚再写,是所有高手的共同习惯。
参考答案(家长):如:算哪些科目?怎么算(平均还是加权)?结果怎么呈现?
参考答案(家长):能用的东西可以验证想法、可以逐步改进;半成品什么都验证不了。
参考答案(家长):如:录入、存储、查询、统计。各自独立可做。
为什么重构一定要先有测试?
想一个生活里"先凑合、后来更麻烦"的例子。
为什么"以后可能用到"常常并不会真的用到?
把你写过的一段代码,试着改短改清楚。
给"最大分数"这个变量写出两种常见命名。
if (score >= 60) 里的 60 该怎么改进?
写除法函数时,该先检查什么?
把"输入错误"改成一句有用的提示。
日志和 Day 969 的打印大法有什么区别?
写下你最想用编程做成的一件事。
参考答案(家长):如东西随手乱放,找的时候翻半天。
参考答案(家长):否则你不知道自己有没有在"整理"的过程中改坏了功能。
参考答案(家长):短不是目的,清楚才是。
参考答案(家长):需求会变,猜出来的需求多数是错的。
参考答案(家长):定义 PASS_SCORE = 60,既好懂又便于统一调整。
参考答案(家长):max_score(下划线式)或 maxScore(小驼峰式),团队内统一即可。
参考答案(家长):如"年龄必须是 1-150 之间的整数,你输入的是 -5"。
参考答案(家长):检查除数是不是 0。
参考答案(家长):没有标准答案。有想做的事,学习才有方向。
参考答案(家长):打印是调试时临时用的,日志是长期保留、给线上排错用的。