程序员的日子即是处理一个又一个疑问,永无止境。这篇文章介绍了一系列处理疑问的战略。
底子的指导方针
1. 首先写代码的时分最佳不要有缺点。最佳的修正办法即是让 bug 胎死腹中。
杰出的单元测试
强行数据库束缚
运用输入验证结构
避免未完成的“else”条件
在应用到主程序之前知道怎么在孤立的状况下运用
日志
2. print 句子。通常额外输出个一两即将有助于阻隔疑问。
3. 切换至具体的日志记载。具体的日志记载有助于发现更多的头绪。
4. 查找日志。假如日志太多,可采纳要害词或过错代码来查找日志文件。
5. 敞开主动换行和封闭主动换行。操控日志的主动换行也十分有用。
6. 查找不一样的日志。主服务器的日志或许并不是仅有有用的日志。
7. Windows 作业日志。日志文件的另一个来历或许是操作系统自身。
8. 制作有用的日志记载。有时,假如你没有得到任何有用的日志记载,那么你或许需求自个写。
与其别人沟通
9. 问询一些或许知道疑问答案的人。
10. 问”愚笨“的疑问。或许你觉得这些疑问很愚笨,但本来并不是。
11. 将疑问解说给队友。他们或许知道答案或许能提出一些你并没有想到过的作业。
12. 将疑问解说给你的狗。讲述的对象是谁本来没有关系,可是能让你从不一样角度分析疑问。
写作
13. 描绘疑问。用最准确和最准确的句子描绘疑问,有助于你去考虑或许的处理方案。
14. 疑问日记。创立一个文本文件来记载现已测验的各种办法,包含代码片段、装备设置以及发生的任何过错。
15. 记载疑问和处理方案。有没有这么的状况,俄然看到一个似曾相识的疑问,只记住处理过但却忘记了是怎么处理的?可以将疑问和处理方案记载到一个简略查找的当地,如维基、缺点盯梢,乃至可以发送电子邮件给自个。
支撑
16. 阅览 FAQ。
17. 提交支撑恳求。假如有可用的商品/库的支撑,那么就用。
18. 在你点击 send 之前,请三思。写支撑恳求能让你再一次考虑疑问,有时分就在你点击 send 按钮之时,俄然灵机一动就想到了处理疑问的办法或许是新的头绪。
19. 其他方面的支撑。可以与开发人员直接面对面沟通,最佳是实时谈天/ SKYPE/屏幕同享。
脱离键盘
20. 散散步。
21. 打个盹。
22. 重置优先级。暂时从键盘上脱离还有一个好处即是可以让你从头评价这个疑问的重要性,或许这个疑问仅仅个 CSS/规划疑问,底子不值得你花上 16 个小时。总归要有用分配和运用时刻。
23. 暂时将这个疑问放在一边。真实处理不了的话,可以将这个疑问先搁置起来。或许几天后你在阅览有关疑问的时分,俄然一个激灵,处理疑问的要害就来了。
阻隔
24. 确定是哪行代码。首先要确定是哪行代码致使的疑问,以便于刺进 print 句子。
25. 将疑问分割为一个独自的程序。有时分对于库和商品的疑问,咱们可以将它的有关代码从主程序平分脱离来。这或许需求一点时刻,但通常处理一个孤立的程序比应对全部的项目构建过程要简略得多。然后在处理这个独自程序的基础上再去和主程序作比较。
更改代码
即便你一点都不知道怎么处理疑问,更改代码也是一个挺有用的处理办法。
26. 写新的单元测试。
27. 重构。有疑问的代码通常显得有点乱,经过一些简略的重构办法,例如重命名变量或打开嵌套的 if / then/ else 模块等都可以让代码整齐起来。
28. 发现 bug。另一个整齐代码的手法是查阅有关代码的“Find Bugs” 陈述,咱们之所以首先要整齐代码是因为:作为一个能让咱们的大脑专心于代码的办法,既简略又合算。
29. 重写。转存一切的有关代码,从头开始重写。一个全新的视角或许能让你彻底规避这个疑问。
30. 为一些不必要的代码增加注释——或许至少是你以为是不必要的。然后你会发现或许这些代码流并不像你从前以为的那样“没有必要”。
31. 试验。假如你不能确定底层商品或库是怎么作业的,那么一些小试验,特别是环绕边界条件的试验会十分有用。
32. 回到洁净的状况。假如你在代码中做了各种变化,或许是搞了许多装备设置,那么定时回到一个洁净的状况就十分重要。不然,试验成果或许会影响准确答案,这么你就永久也找不到准确的处理方案了。
33. 切换技能。
商品
34. 升级到更高的版别。或许你正在处理的疑问现已被修正了,可以试试先升级到另一个版别。
35. 降级到曾经的版别。或许疑问正是因为与你目前正在运用的其他商品/库不兼容而导致的。
36. 打补丁。
37. 下载并装置源代码。
文件
38. 阅览手册。大多数开发人员或许会以为这是一个低概率的战略,可是,嘿嘿,你永久不知道,或许答案就在文档中。
39. 阅览手册的准确版别。
40. 手册是不是准确?有时分代码已被更新,但手册还没有。
调试器
41. 了解键盘上的快捷键。
42. 后退。这是调试器的一个功用,让你的代码退后一步。
43. 编写断点代码。
44. 异常中断。调试器的一个蛮有用的功用即是可以捕捉到任何当地的特定异常。
45. 专业化的调试东西。例如:
Plumbr
AppDynamics
Chronon
Wireshark
HTTP profilers:Fiddler2、Charles、Live Http Headers
源代码操控
46. 对 bug 缺点进行编号符号。你有没有碰到过这么的疑问:先是用这种方法被修正了,然后几周后又成为了 bug 被其别人用另一种办法修正了。这么疑问形似就有两个准确答案。处理办法即是对源代码中有关的 bug 缺点进行符号,并记载一些对于为何改动以及谁参加决议计划等更为具体的阐明。
47. Blame 功用。这个可爱的小东西能通知你是谁最终更改的代码。
48. Git bisect 功用。Git 有一个有意思的“bisect”指令,能主动经过你提交的前史进行二进制查找发现毛病。
寻觅答案
49. google查找。
50. 论坛帖子。
52. 查找仓库沟通。
53. 创立仓库疑问。
其他
54. 延聘专家。或许在短时刻内本钱很高。
55. 招实习生。延聘专家的相反办法即是延聘新手。有时分初学者饱满的热心能让他们从不一样的角度来处理疑问。
56. 改动请求。假如你不能修正缺点,那么可以改动请求。经过解说各种本钱需求,或许能让客户改动他们的初衷。
57. 更改上/下流系统。
58. 循序渐进地学习技能。
59. 经过断点查看装备。更改要害装备值,并保证现已断点,这么可以让咱们无所顾忌地设置装备。
60. 系统化。有时分咱们需求将三四件作业组合在一起,那么可以将现已试过的组合记载下来,假如需求的话一定要测验各种的组合。