小bug,大智慧
程序员和BUG之间的关系很奇妙, 相互都不喜欢对方, 又离不开对方, 是一对相爱相杀相互纠缠永远无法摆脱对方的对手。
每一个BUG都是程序员无意创造出来的,程序员对于BUG的态度完全是恨的咬牙切齿。 很多场景下,当有人反应程序员写的程序有BUG的时候, 程序员的第一反应是这个BUG肯定不是自己的代码有问题产生的, 而是由外部因素起的。比如说某张网页显示效果出错, 前端程序员第一反应肯定是用户的浏览器有缓存或者使用了什么老掉牙的浏览器在浏览他做的网页; 再比如说某个程序访问数据库出错, 后端程序员第一反应也肯定不是自己写的SQL或代码有问题, 而是怀疑是不是数据库或服务器出了故障。
多人开发的项目中, 在BUG的生产者难以界定的情况下尤其如此,当出现BUG时, 程序员一般的应对方法是:“你去找某某某, 这显然是他的问题。”,然而,结果往往是啪啪啪的打自己脸。
这也难怪, 自己一行行写的代码, 调试,运行,上线,像自己儿子一样养大的, 但是在毫无征兆的情况下儿子突然去干坏事了,这种意外的情形下很难不认为儿子是被坏人给带坏的。 然而, 世事无绝对, 意外意外那自是意料之外的事情,永远不会和自己的逻辑在同一个方向上,有的事情就是借你一百个脑袋也想不到居然会是这种结果,程序的BUG也是如此。
前段时间我们部门开发一个Java程序,有新的同事要参与进来,开发环境和运行环境都装好了, 但是跑程序的时候速度奇慢, 别人的电脑上5秒钟运行的程序在这里需要跑1分钟左右才能出结果, 显然这是难以接受的。 从代码、数据库到开发环境、Java编译器、Java虚拟机都仔细检查了一遍也没有找到原因, 软件从64位换到32位,服务器从六点几版本换到九点几版本, 但是该慢还是慢,问题照旧。正在快要绝望的时刻,我无意间发现程序的代码居然不是放在本地的, 而是在映射到本地的网络磁盘上。 如果是这样, 不慢就见鬼。运行程序需要先把代码下载到本机, 再编译运行, 所有花掉的时间居然都在网络传输的开销上面。 这就是完全出人意料的情形了, 因为在思维先入为主的情况下, 谁能想的到源代码不在本地机器上而在网络上, 假如没有线索, 能想的到那脑洞该有多大。
这个例子是网友分享的,我当时看到就笑喷了。 一前端哥们,开发基于微信的应用, 调用微信接口来获取用户的信息,因为有Android和iOS双平台, 所以这哥们向同事借了个手机调试Android平台的版本。 在调试的过程中Android上的应用怎么也获取不到用户的昵称, 调用接口返回的结果总是null, 而在iOS平台上一切正常。 这位仁兄心急火燎的, 想尽办法也束手无策, 微信文档看的都快背熟也找不到获取不到昵称的原因。 后来,借给他手机的那位同事告诉他, 他微信用户的昵称就叫做null
可以设身处地的想想那位仁兄的心情, 杀人的心都有了吧。这样的BUG,就算是专业的编剧也没有这份想像力想的到,更何况是注重逻辑的程序员了。
所以, 程序员千万不要对自己的代码太有信心, BUG永远出在你意想不到的某个角落。 碰到BUG的时候,首先找找自己的原因,在拿到充足的证剧的情况下,再可以去怀疑别人, 这样即节省了时间提升解决BUG的效率,也免得到时候发现其实的是自己的原因时而打自己的脸,啪啪啪啪啪…真的很痛!