程序员解决问题的 60 个策略

程序员的生活就是解决一个又一个问题,永无止境。这篇文章介绍了一系列解决问题的策略。

根本的指导方针

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 . 谷歌搜索。

50 . 论坛帖子。

52 . 搜索堆栈交流。

53 . 创建堆栈问题。

其他

54 . 聘请专家。可能在短时间内成本很高。

55 . 招实习生。聘请专家的相反方法就是聘请新手。有时候初学者饱满的热情能让他们从不同的角度来解决问题。

56 . 改变要求。如果你不能修复缺陷,那么可以改变要求。通过解释各种成本需要,也许能让客户改变他们的初衷。

57 . 更改上/下游系统。

58 . 循序渐进地学习技术。

59 . 通过断点检查配置。更改关键配置值,并确保已经断点,这样能够让我们无所顾忌地设置配置。

60 . 系统化。有时候我们需要将三四件事情组合在一起,那么可以将已经试过的组合记录下来,如果需要的话一定要尝试各种的组合。

时间: 2024-07-29 01:37:30

程序员解决问题的 60 个策略的相关文章

程序员解决问题的60个策略(转)

英文原文:60 Problem Solving Strategies 程序员的生活就是解决一个又一个问题,永无止境.这篇文章介绍了一系列解决问题的策略. 根本的指导方针 1. 首先写代码的时候最好不要有缺陷.最好的修复方法就是让 bug 胎死腹中. 良好的单元测试 强制数据库约束 使用输入验证框架 避免未实现的"else"条件 在应用到主程序之前知道如何在孤立的情况下使用 日志 2. print 语句.往往额外输出个一两行将有助于隔离问题. 3. 切换至详细的日志记录.详细的日志记录有

关于PHP程序员解决问题的能力

这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高.解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验.如果解决问题能力不佳是无法通过面试的. 这里举个例子,假如我执行了一个PHP的脚本,如php test.php,预期是可以返回一个字符串.但执行后没有任何信息输出,这时候通过什么方法能知道程序错在哪里?这里可以将解决问题能力分为8个等级,越到后面的表示能力越强. Lv0 查看PHP错误信息 程序没有达到预期效果,

PHP 程序员解决问题能力的八个级别

这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高.解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验.如果解决问题能力不佳是无法通过面试的. 这里举个例子,假如我执行了一个PHP的脚本,如php test.php,预期是可以返回一个字符串.但执行后没有任何信息输出,这时候通过什么方法能知道程序错在哪里?这里可以将解决问题能力分为8个等级,越到后面的表示能力越强. Lv0 查看PHP错误信息 程序没有达到预期效果,

“你不适合做程序员”

我的一位同事,他带他读小学的孩子去学钢琴,通过关系找了一位有点名气的退休的老教师,学费不菲.他说其实他并不知道为什么要学,但是看到那么多孩子都在学 钢琴,他想,他的孩子不能落后.一个月之后,他去问钢琴老师,对孩子的学习有什么建议没有.钢琴老师用尽了委婉的表达,最后说: "对于你的孩子在学音乐方面,我最大的建议,就是你的孩子最好别学音乐". 什么?! 这位同事听了当然恼怒,但是转念一想,老师未尝不是负责任的.通常这样的老师,赚钱之心,都会忽悠家长,或者好话歹说,很少有说"不&q

优秀程序员的标准是什么

无数的人问过类似的问题,怎么样才能做一个优秀程序员?在回答这个问题之前,首先得明白什么是优秀程序员,这样才有方向和目标,可是这事情太主观,可能各人的标准千差万别,不谈那些传奇性的独自一人做出伟大事情的特例,也不谈什么上天入地,上帝大牛的诡论,以下是广泛比较认可的,在通常的项目开发中,一个优秀程序员的标准. 解决问题的能力 在项目开发中,一个程序员的能力等于其解决问题的能力.假如想有个尺度来衡量这个能力的话,一个程序员的能力可以用能完成任务的规模和难度来衡量. 因为难度上不好那么简单的划分,并且在

Java程序员应知道的十条Java优化策略,让你的系统健步如飞

1.使用StringBuilder(技术文) StingBuilder 应该是在我们的Java代码中默认使用的,应该避免使用 + 操作符.或许你会对 StringBuilder 的语法糖(syntax sugar)持有不同意见,比如: String x = "a" + args.length + "b";  将会被编译为: 0 new java.lang.StringBuilder [16]    3 dup    4 ldc <String "a&

程序员-Android的初学者,求高手帮忙解决问题

问题描述 Android的初学者,求高手帮忙解决问题 求各位大神帮帮忙: 我是一个刚踏进工程师行业的程序员,以前从没做过实战项目.现在刚进一家企业,是那种很小的公司.老板要做一个app,可什么都没有.就我一个人,我现在很迷茫,不知道怎么开始. 数据库.服务端.app端.要以那为切入口开始做起.求各位大神简要说明一下流程. 万分感谢 解决方案 首先我也是新手,只是给一些简单建议 第一,了解需求 第二,建立服务端框架 spring + spring mvc + mybaits 上手挺容易的. 第三,

Java程序员的日常—— 基于类的策略模式、List&lt;?&gt;与List、泛型编译警告、同比和环比

早晨起得太早,昨晚睡得太晚,一天都迷迷糊糊的.中午虽然睡了半个小时,可是依然没有缓过来.整个下午都在混沌中....不过今天下载了一款手游--<剑侠情缘>,感觉不错,喜欢这种类型的游戏. 今天主要的工作还是做业务需求,不过下午状态不好,看了下<Effective java>,正好重构了下代码. effective java 通过函数来作为策略 通过函数作为策略有两个要注意的地方: 使用接口作为策略传入 如果长期调用,应该设置为静态内部类,避免频繁创建过多的匿名对象 下面举个简单的例子

老程序员推荐的 10 个编程策略

1.橡皮鸭debug法 也许大家都有过这样的经历,那就是当你在和别人讨论问题时,突然就有了答案和别的想法,这是因为当你和别人一起讨论时会让你的大脑重新组织问题,这 样的情况下,你的聊天对象就是"橡皮鸭".所以我们每个人都应该积极主动的成为对方的"橡皮鸭",这样我们彼此才有可能得到好的建议. 2.信息反馈要及时 如果写好了代码,就怎该马上到你的讨论区里去讨论下,和你的"橡皮鸭"们交流下,听下他们的建议,因为现在纠正可比你做成成品后改动要节约成本的多