关于debug的一些思考

关于bug与debug

记得知乎上有人提问,为什么程序员不能做到bug free。上面的回答大概已经忘了,下面先写一下我目前的想法。

学编程如同学外语,我们要能够与计算机沟通,让他理解我们的想法,并且按照我们的想法做事。这就像管理一个team,个人的力量终究有限,我们要是一个team心往一处想,劲往一处使,才能完成许多一个人根本完不成的事。

那么,如果想要跟一个人沟通,我认为,要么让他学习怎样理解你的想法,要么让你去理解他的想法,所以我们有了语言。

通过生活常识我们也知道,不同地区有着不同的语言,那么我觉得计算机也可以看作为不同地区的人,只不过他很固执,只理解一些他理解的指令;但是计算机也很靠谱,只要给他相应的指令,他只返回唯一的结果。

那么,为什么有时计算机并没有按我们的预期返回相应的结果,我认为,是在与计算机沟通时出现了问题。

今天在学习时得到了一个建议,当你发现bug时不要仅仅是不断地尝试更改变量,更改顺序等并不断地运行看看结果是否符合预期,千万不要这样做。我非常赞同这一点,一个程序员,或者软件工程师,要有基本的科学素养。如果像刚才那样做了,那么最后会把你的编程变成一个经验主义:我之前这样做过,我不知道为什么,他成功了。

实际上,这也让我关联起了之前学到的两种知识类型,一种是声明式知识(可以类比为变量),一种是程序性知识(可以类比为函数)。

我觉得,这也让我们的编程变成了一种声明式知识的累积。好好地一个函数,变成了一个变量。

一个函数,传入变量可以得到不同的,符合预期的结果;

一个变量,只是一个变量。

所以,当发生bug时我应该做什么?

刚才得到结论,计算机没有理解我的想法,他按照他的理解返回了一个结果。那么,中间哪一步出现了误解?
我的想法是什么,我的想法表述出来是什么意思,计算机又是怎么解读我的话,解读之后他又是怎么理解的?

bug出现在这中间的过程中,程序员不停地在于bug做斗争,实际上,也正是在尝试不断地让计算机不要曲解我们的意图,完成我们预期的想法。

程序员就像一个作家,想让读者读懂我们的文章,理解我们文章中表达的思想,那么,这有引申出来几个问题。

首先,在我们写文章时,我们的想法可能还不成熟,或者说很简单。

想法多了,写的字就多了,就要重新回顾,想办法精简,车轱辘话来回说很烦,虽然计算机不嫌烦,但是其他作者会说你文笔差,你将来自己看着也不好意思。

也有可能想法变了,人会进行思考,思考之后有可能就改变了之前的想法,就会出现自相矛盾,此时,计算机不理解了,说你之前不是这个意思啊,我按照那个想法来做呢,bug出现了,那么我们就要给他明确的指令。

所以,不要把debug当成一种负担,我的目标是利用计算思维,让计算机为我们工作,bug出现了,说明我们有机会修正我们的想法,使其更加符合计算思维。这样,就可以把debug看做一个学习的过程,你解决了这个问题,就掌握到了一项知识,这是多么的有趣!