这应该是每个程序员每天看到最多的图片了。
这就是程序出Bug了。
先把问题看懂
办公室小明刚来的时候,遇到bug经常来询问我这个老员工,让我去帮他解决,久而久之,发现他出现的问题很多都是重复的,前两天刚出现的问题,今天又来找我去帮他解决。他再来找我的时候,我就问他出了什么问题,他说“我也不太清楚,你过来看一下吧。”,原来每次出Bug的时候,他都不去仔细分析问题提示,所以相同的问题再出现的时候也不知道。
程序出bug时编译器给出的错误信息,但大部分编译器的提示都是英文的(汉化的除外,比如vs),很多人就不愿意去仔细分析错误信息具体是什么,或者说粗略一看而理解错了。然后就直接找人帮忙,或者直接把错误提示拷贝到搜索引擎里,大部分的问题都可以用这种方式解决,而这种简单解决问题的方式又使得很多人不愿意去费力理解问题本身,所以导致问题错误出现时,很多人甚至没有发现这是重复的问题。
先分析问题,这必须是解决问题的第一步。
先思考,后搜索
借用一张网上的神图
如果仅仅是看懂了问题,还是不够的。就像写代码一样,很多人把问题复制进搜索引擎,然后将搜索到的结果粘贴在代码里,问题可能就解决了。然而这种做法只是进行了体力劳动,并没有进行脑力劳动。在查询或者向别人请教之前,要先独立思考这个问题,当确定在自己的能力之外后,再寻求帮助,但同样要对得到的结果进行分析,以发现自己技能和思维上的不足。
真正的经验是不断思考出来的。
用谷歌,不要用百度
这一点很多人提过,大部分也都知道,但最终也没有多少人能做到。在编程世界里,百度和谷歌的距离,就像中国和美国的距离,中间隔着一个太平洋。Google查询最大的优势是,会给你搜stackoverflow的结果,github的issue讨论等,这些百度直接屏蔽了。
差距其实很简单就能看出来,比如在百度中输入一个C++或者Python,第一条都是某某学习网,某某培训班,在谷歌中搜索,它会直接给你该语言的官网,当搜索一个问题,百度经常像是大海捞针,需要从查询结果中去找自己的答案,而且前几条总是重复的,基本上都是相互转载的结果,在谷歌中只要搜索关键字别差太远,一般会搜到想要的,而且不光能解决问题,还能告诉你为什么。还有一点是,其实国内很多优秀的技术文章或者思路都是从英语翻译过来的,但往往翻译的不够准确,或者不完整。举个例子,大学的时候在百度搜 jquery mobile,我印象中搜索结果最多不超过2页,而 google 上资料已经非常全了。
当然google查询结果是需要花点时间去翻译了,但同时,使用google也意味着:能限制获得知识的唯一障碍就是自己的求知欲。
问题总结
对于程序员来讲,Bug是绝佳的学习机会。每当修复一个棘手或有趣的 bug时,都应该花几分钟写下一些这个 bug 的信息和相关的总结。不断创造问题,解决问题,然后总结问题,这就是学习编程的过程。