【分享】 优秀程序员的代码是“活的”

 全部的程序都须要某种形式的日志记录创建在它们之上,以便咱们能够观察到它正在作什么。这尤为在程序出错时就显得很是重要。一个优秀的程序员和一个糟糕的程序员之间的一个不一样之处是一个优秀的程序员会增长日志或其余工具以便在程序失败时方便调试。程序员

当程序如同预期的同样工做时,有日志和没日志每每没什么差别。然而,一旦程序失败,或你获得一个错误的结果的时候,你会当即明白优秀的程序员和糟糕的程序员之间的差异。算法

例1:“让咱们作一个可调试的版本”微信

比 如说,测试关于一个不能正常工做的调用case过来找我。咱们查看了日志,而后发现问题貌似出在一个相邻的模块。对其余模块的调用返回值为 空。而后咱们在那个相邻的模块中作了日志记录,从新跑了一遍测试case,却没有获得任何更多的有用信息。没有任何线索代表为何会返回空 -难道是咱们下错了参数,或者是某个外部系统致使的失败,那个相邻的模块中是否是存在一个错误,又或者?架构

当 咱们去询问负责这块代码的开发人员时,咱们获得的回答是:“Oh,咱们必须作一个debug的版原本看看到底发生了什么”。失败!从某种意义 来讲,从日志中找到问题所在应该是可能的,若是问题存在一个运行的系统中,添加一个调试版本将会有大量的工做要作。代码须要包含足够多的信息在日志,以便 你至少能够对失败的缘由有一些了解。工具

例2:“让我看看咱们是如何走到这里的” ??测试

我 们的一个产品在工做时会找到一个短信息传递到手机最便宜的路径。依据手机的当前位置和目标用户所属的运营商,有不少可能的路由选择, 每个都有一个给定的成本和其余特征。除此以外,能够有一些例外,好比说禁止一些路线,以促进其余路线,一般 会有成千上万的路由被定义,在每一个case中系统找到最便宜的一个路由,加上限定条件,而且传递消息。spa

如今,假想某个SMS信息使用A路线传递,可是咱们认为他应该使用B,为何A会被选择呢?若是没有任何日志记录信息,咱们只剩下成百个可能的途径, 他们的成本,例外,以及一个复杂的算法,那么祝你好运搞清楚为何A会被选择。.net

在咱们的实现中,全部可能存在的路由以成本大小的顺序罗列在日志中,当路由被不一样的限制条件排除时,排除掉的路由和缘由就会被列在log中。 随着算法的输入,以及采起的步骤信信息列在log中,就会很容易的看出为何某个路径会被选取。debug

为何不呢?设计

因此,为何不是全部的程序员都会写可调式的代码呢?我能想到三个缘由:

  1. 你必须足够谦虚的意识到你的代码会有不按预期工做的时候。我相信不少程序员会对此比较难过。

  2. 若是你完全地测试了你的代码,你应该确保它会在不少不一样场合工做或失败。对于每一个方案,很天然地加入日志记录,若是你没有测试 那些状况,你不太可能会在那里添加记录。

  3. 不少程序员每每不会在产品系统中修复他们本身的代码。若是在在线系统中有一个问题,但log并无反馈任何信息给你为何这里会有一个问题, 你会有一个很强烈的动机去增长log,以便下次遇到相同的状况时帮助到你。

你的代码可调试吗?

固然会有一些状况,对于程序为何会失败好的日志信息也不能给你一个确切的信息。你可能仍是要作出那样的调试版本, 可是你常常作记录至少仍是会提供给你一些隐藏信息关于问题的可能性。

因此,你准备的怎么样了?当你的程序失败时,log会告诉你哪儿出错了吗?

E8工做流平台是基于源码架构,图形化流程设计器,高可靠性流程引擎,具有无限的扩展能力以及丰富的源码组件,同时还支持手机APP,微信平台。

欢迎体验!
http://www.chinae8.net/cn/cpzx/info_4.aspx?subnavID=126

 本文出自互联网:

相关文章
相关标签/搜索