当前位置:C++技术网 > 资讯 > 程序员不要太老实,按套路来别被欺负

程序员不要太老实,按套路来别被欺负

更新时间:2016-08-30 20:08:38浏览次数:1+次

    就说说今天的一个经历,总的来说,还是我太嫩,不够老司机。或者说没有套路,被欺负了。

程序员不要太老实,按套路来别被欺负

    我开发的这软件是发卡软件,也就是将一张空白的卡写入必要的数据初始化卡,这样卡就可以使用了。软件已经使用了很久了,很多客户都在使用。其中不乏一些客户经常用错误类型的卡、安装软件时缺少组件提示安装组件、发卡器故障等导致的发卡软件无法正常工作。所以,不了解情况的人,反正看到问题,就总是将所有的问题都归罪于程序员,归罪于软件问题。
    软件真有那么多问题吗?软件有问题是正常的,特别是在初始的版本发行时。不过,随着时间的推移,软件版本在升级,各种基本的问题都得以解决,所以后续基本上没有软件本身的使用问题了。不过软件既然是在实际场景中使用,总会碰到各种奇葩问题,比如用一个不支持的类型的卡,软件提示了不支持的卡类型,客户也会反应说软件有问题。或者安装软件时,缺少组件,提示很清楚了安装什么组件,依然,客户会找上门说软件有问题。而且,市场人员、客服人员、产品人员都无法解决这些基本问题,不管是问题还是不是问题,都要推到程序员这里。久而久之,这些人都会觉得,只要使用不顺利了,全部都是程序员的问题。特别是,遇到一个问题没有解决时,会全盘否定,什么客户不满意之类的,全都怪罪到程序员头上。
    事实是,这么久以来,除了第一版软件开始有点使用问题,之后的所有问题都不是软件问题了。今天的问题同样如此。
    在被产品的人告知发卡软件使用有点问题。不过据我推测,也不过是使用上的问题,不会是软件本身的问题。而且我们本身真正处理一些事情,所以没有立即去处理,想让他们先自己处理一下。然而,他们可能是太着急了,竟然在公司的群里找我,老大看到了,叫我去处理一下。既然是老大都叫了,就算不是问题,也要去看一下。
    下去之后,迎面而来的就是,“你来的可真够快”,品质的人就这么说的。我没有理会他,直接去看问题。问题的情况就是,一大波卡,发了一部分了,然后在发几张的时候,出现串口被占用的提示,也就是说,这样就没法操作这个卡了。这个问题我之前还没有遇见过,也就是他们没有上报这种问题给我过。我一下子也不知道问题所在。
    所以,为了解决问题,还是先做了几个推断,然后再来尝试解决。
    发现的几个可疑点就是:
1.软件的提示“串口被占用”。
2.软件版本不是最新的。
3.使用的系统不是推荐的Win7 32位,而是XP系统。
    所以我先从第一个问题开始来分析尝试解决,并去尝试解释“串口被占用”的可能原因。我的解释是,可能是因为发卡器在连续工作一阵子之后,内部状态有延迟,所以导致后续的操作可能一下子没缓过来。也就提示了“串口被占用”的提示。我先尝试解释了原因后,然后就是试验了。此时的品质人员以一种讽刺的口吻说,来试,看表数时间,看看等一下子能不能缓过来。不管是不是,作为排查问题,我必须要走这一个流程,他们描述的问题,和实际的情况总会有差异的。我也不理会他的冷嘲热讽,我是来解决问题的,才懒得理他。
    然后测试后,发现还是有这个问题。所以,发卡器内部状态忙导致的状态延迟的假设失败。所以,再继续寻找找问题。看到软件并不是最新的,反正用最新的版本,可能会规避掉一些问题。不过我知道,新版本并没有对这一块做什么改动,所以我知道新版本不一定能解决问题。不过既然已经做好了新版本,肯定是要用新版本,毕竟已经处理过其他一些小问题,增加了功能等。
    我回到自己的电脑,也顺便看看代码,查查错误提示可能有哪些具体的原因,试图从代码里找到一丝破绽。发现,在操作卡之前会做一个检测,检测卡是否是正确的类型的卡,结果返回的卡类型为空。在之前测试的时候,如果串口被占用,会返回空。其他类型会返回一个类型字符串。开发文档里没有标注返回空的情况,所以我以为发卡器不会返回类型为空的值。所以作为提示,我就返回了“串口被占用”的错误提示。
    知道这个错误提示的原因后,似乎也支持发卡器状态延迟的说法。那么在低版本没有得到验证,可能不是这个问题。然后就拿了最新版的软件去测试,发现还是“串口被占用”的错误提示。
    所以,软件版本是没有影响的,我本来就知道,只是试试看,没有幻想能够换新版本来解决这个问题。那么剩下的就是系统问题,导致的驱动不正常。这也是有可能的。在更换了XP上的驱动后,没有任何改变,然后在一个win7电脑上测试,同样还是串口被占用。这样下来,似乎找不到问题了。而产品部的使用软件的阿姨说可能是卡坏了。而这个卡很简单,我认为不会有什么问题,之前没有遇见卡出现问题。
    问题找到了穷途末路了。没招了,怎么办?在产品部那里实在是找不到问题,所以就将发卡器和卡都拿到我的办公桌来研究。我们开发组这里是有一套好的发卡器和好卡的,而且,我电脑安装的发卡软件都是使用N多次了的,所以都是好的。用一个好的环境来检测有问题的东西,通常是最好的。错误的问题可能性太多的环境下,很难找到问题。
    拿回来后,先用他们的发卡器和卡在我电脑的发卡软件测试,结果也提示“串口被占用”。这还真是有点吊了。先不管这个了。反正应该问题是在发卡器和卡上面了的。我用我们的发卡器来全部测试了一遍拿下来的卡,结果发现,只有一张卡是提示串口被占用,其他卡都是好的。然后似乎找到了问题。不过为了仔细验证,再将他们的发卡器也全部测试了一下卡,同样还是同一张卡提示串口被占用,其他卡都是好的。然后还对好的卡进行发卡和销卡,都是正常的,唯有那张卡提示一如既往的提示“串口被占用”。
    到此,问题已经被检测出来了。而在之前,品质的人扬言说“客户的那些问题都是你们的软件造成的”。好像还说了一些不好听的话,我反正懒得理他,解决问题就行了。在问题被找到之前,谁也无法知道问题是什么,而品质的人竟然敢这样下定论,足见牛逼之处!而且一棒打死,所有问题包括不是问题的问题都看成是问题降罪于程序员,不知道他是怎么想的?相反,客户软件使用上的问题,更多的责任应该是和客户打交道的人,自己都不会安装使用操作软件,那些基本的使用问题客户提出来都解决不了,全部要程序员来解决的话,程序员还要不要做其他的开发工作呢?如果说是因为我去的迟了点而暴躁,程序员应该是到处去教人使用或者处理这些使用问题的人吗?那么产品部、市场部、客服、品质的人都做什么呢?我们程序员做开发,一个项目跟一个项目的,时间紧得很,围绕软件的相关人员就不能主动去排查一下问题吗?
    不过为了严谨解决问题,我们回到了产品部的使用环境,然后进行了大量的发卡操作,当然已经排除了那张无效卡,而且我已经在卡上加了标签,防止反复拿去发卡,造成大量问题的假象。对于不会找问题的使用环境,我们程序员真的只能将用户当做连电脑都不会用的小白的小白,要想得相当的细致和周到才行。
    不过,做事归做事,做事也是做人。人品时刻都是形象,问题是可以解决的,人品坏了就没法解决了。
    当然,我也会反省我自己的问题。在问题没有找到之前,不要跟用户做任何解释,自己解决问题,也不要和用户做任何步骤和原因推测解释,如果是有人一起排查,倒是可以一起讨论。
    在排查的过程中,他们请来了发卡器厂商的程序员来调试问题,也是一下子没有解决。毕竟发卡软件是上层软件,他们使用的是上层软件,即使是卡的问题,谁也没有想到。我自己也是忽略了这一点,才导致找问题走了弯路。所以,我需要总结的就是不要放过任何一个细节,因为忽略的细节往往都是问题所在。就好比有的用户说电脑无法上网了,你找了半天都没有找到问题,结果发现是网线掉了。
    在用户面前排查问题,将自己推断的可能的问题点解释出来,也是我的不足,这是不对的地方。因为你的解释很可能会遭到无情的打击,他们冷眼旁观,解决了问题是理所当然,解决不了问题,那就冷嘲热讽。所以,在没有找到问题之前,用户等的任何定论都要叫他闭嘴,瞎叫没有什么卵用,而且会误导大家。所以这个套路是我们程序员应该掌握的。即使最后问题出在软件,那也是很正常的,所以程序员也没有必要心虚害怕出问题。往往程序员也就是因为怕出问题才被欺负的。