--本文基于我在2011-9-10Qclub大连站上的演讲整理。--
IT业是服务业的一种,而IT人员作为服务业的一员,目的就是要让客户满意,这里所说的客户可能是公司内部的业务用户,也可能是公司外部的业务人员,但不管怎样,我们的目的应该是一致的。
想要让客户满意,我们要达到的工作效果如何呢?借用之前一位前辈的话,他当时是在阐述什么样的软件产品或者说软件系统能够容易销售,“有两条特性, 一是帮客户省时间,一是帮客户省钱,如果这两条能够达到一条,那么就算是基本合格了,如果都能够实现,那么就不愁卖了。”同样,我们想要自己的服务令业务用户满意,同样应该达到上述的目的——省钱、省时间。如果借助我们的服务,能够帮助业务用户和公司赚更多的钱,那么我们的服务就更上层楼了,那应该可以借助人工智能的优势达成。
然而,上述只是我们的理想,它和现实之间往往会有很大的差距,在很多时候,业务人员并不认为IT能够帮他们省钱、省时间,更不用提生钱了。他们认为IT部门是烧钱的部门,每年的软件系统会花费大量的资金,但是并不能带来多少实质性的改变,甚至于无法很好地支持业务。更不客气的说法,IT根本就是浪费钱。
尽管IT人员,特别是销售工程师,都会苦口婆心地告诉业务部门的人们,IT系统能够帮你节省成本,你看,之前很多东西你都需要打印出来才能签字,我们现在可以帮你实现无纸化办公,这样可以节省不少打印的成本啊;还可以提高工作效率,你想计算机算数多快啊,电脑啊,总比人脑厉害的。
然而业务人员在经历了各种系统之后,并不那么认为,上面的那些话根本就是一大堆谎言,为什么呢?有如下问题:
- 诸多需求变更无法满足
- 输入麻烦,无法大块地复制粘贴,浪费更多时间
- 因为程序bug、网络、电力等各方面的原因,故障频发,而且一旦出现问题,造成的损失会很大
- 灵活性不够,很多在实际业务中很容易实现的操作因为系统的限制无法进行。
的确,软件系统因为各种原因,存在着上述问题,所以我们作为程序员,更应该从我做起,提高自己的能力,从而更好地让业务用户满意。接下来让我们从软能力和硬能力两个方面来叙述一下,如何才能够更好地提升满意度。
软能力
说到软能力,很多程序员朋友会认为没有技术能力重要,但是,我觉得这方面的能力在某些时候是保证我们能够让客户满意的重要条件,因为缺少了这些能力,我们甚至都无法了解到客户在什么地方不满意,为什么不满意,怎样做才能够让他们满意,又从何谈起提升满意度呢?
沟通能力
其实在任何工作过程中,沟通和交流能力都是非常重要的,特别是对于能够接触到最终用户的程序员来说,这一能力尤其重要。
不过在沟通之前,或者说在沟通之中,我们要尽可能地和客户成为朋友,因为只有成为朋友之后,才能进行更好的沟通。
这首先要求我们要摆正自己的位置。很多情况下,作为程序员,应该都至少拥有不错的学历,掌握的也是高新科技的知识,不可避免有些程序员会觉得自己高人一等,而业务用户特别是一般企业中的业务员,可能没有这么高的学历,计算机知识也不是特别丰富。然而他们也拥有我们所不知道的东西,三人行必有我师,在沟通的情况下,他们也是我们的老师,如果一味地拒人于千里之外,那么就根本谈不上什么沟通了。
接下来,想要成为朋友,我们可以从细节做起,对于一个人来说,比较重要的东西很简单,首先是名字,其次是生日,如果我们能够清楚地记住一个人的名字,并且在下次见面的时候就能够准确无误地喊出来,那么一定会赢得好感。如果能够在生日的时候送上一句祝福,那么也会带来意想不到的效果。而做到这两点,我们并不需要付出太多,只要留心就好。另外一个细节就是要了解业务用户的爱好或者兴趣,如果正好和自己的有重合的话,就可以经常讨论一下,那也是增进友谊很好的方式。
沟通的方式有多种,比方说:
- 面对面沟通
- 电话
- 即时通信工具(Messager、QQ、Gtalk等等)
- 邮件
个人认为优先选用前面的两种方式,那样会得到更好的沟通效果,沟通的效率也会比较高。因为这两种方式更为直接,而后面的两种方式则会因为距离而产生更多的误解和歧义。
分析能力
对待一个问题,哲学上有三个步骤的说法,也就是:发现问题,分析问题和解决问题,所以我们会看到,其实分析问题是一个承上启下的步骤,作用也是非常明显的。而想要提高分析能力,真正能够把问题分析清楚,绝对是解决问题的必要条件。
在此我想推荐高德拉特先生的《目标》等一系列图书,其中讲述的是,我们在分析问题的时候,要根据情况的变化而适时调整,不断地寻找流程中的瓶颈,其实也就是问题的关键点,找到之后使用一定的方法解决,但是,并非是解决了一个瓶颈之后就万事大吉了,因为解决了一个瓶颈之后,整个流程的瓶颈就会转移到另一个地方,我们必须加以调整。
另外,我在分析问题的过程中,经常会使用到思维导图,从了解这个工具到现在,我已经形成了习惯,每次分析问题的时候都会不自觉地拿出一张白纸,然后用笔在上面写写画画。
学习能力
当前的各种知识不断更新,因此对于想要解决问题的我们来说,学习是非常必要的。而对于想要解决业务问题,更必要的是要学习业务领域的专业知识。这并非是说IT相关的专业知识不重要,但想要更好地理解业务的问题,并更好地为业务用户提供解决方案,掌握业务领域的知识是非常重要的。
想要学习那些知识,一种途径是看书,但另一种更加有效的途径就是与业务用户多多交流,甚至在条件允许的情况下,融入到业务团队中,在一段时间内,和他们一起工作。那样得到的经验会非常宝贵,绝对是第一手。并且这非常有利于我们转换思考的角度,真正做到从业务用户的角度来思考问题。
在IT系统中存在IT的架构,或者说软件系统中有系统架构,在业务领域同样有业务的架构,只有二者可以完美地契合,IT的系统才能够更好地为业务服务,从而更有利于业务部门的发展。
硬能力
除了上述的软能力之外,想要实现解决业务问题的方案,我们还需要增加硬能力,也就是技术能力。对于程序员来说,这方面的能力主要指的就是语言和工具。但是,学以致用,我们不仅仅要学习这些知识,还要了解到它们的优点和缺点,那样才更有利于使用它们来解决问题。俗话说,尺有所短,寸有所长,我们要做的就是取长补短。
使用合适的语言和工具
在软件开发的过程中,对于每个项目都会有一些规范和限制,但是对于一些特定的工具类程序,或者是那种即抛性的小程序,我们就可以采用一些在常规开发过程中不可能使用的方法来做,那样会取得事半功倍的效果。
比方说,在大型项目的开发过程中,我们一般不会使用中文作为变量名,但是,之前我开发的VBA宏程序中,因为用到了很多保险术语,想要为之起合适的英文名非常难,而且那些单词可能过段时间之后自己都不认识,所以里面很多变量名都使用了中文,这样对于开发以及后续的维护都带来了很大的方便。
尽管说在那些程序中可以比较随意地使用一些平时不能使用的方法,但并不意味着可以不注意代码规范,比方说缩进、命名规则等等,如果代码的格式很乱,那样的代码的可维护性还是会很差,而且那些问题应该是程序员最基本的素养,在任何程序中,即便是即抛性的小程序中,也需要认真对待。
另外,就是可以根据需要采用一些不常用的语言和工具,在项目开发过程中,很多东西都是只需要临时维护,对于那些程序,最重要的就是开发的时间,尽可能快递把程序提交给用户使用,才能够发挥出应有的作用。所以,在这种时候,尽管在核心的系统中我们可能使用的Java、.NET等等,我们大可以采用诸如F#、Python等动态语言,或者其它工具诸如Reporting Service等等,那样就可以通过缩短客户的等待时间而获得更高的满意度。
组合的方式解决问题
正如上面所说的,各种语言和工具都有自己的优势和劣势,所以,在某些时候,我们可以对其进行组合来解决问题,那样会发挥出各种语言和工具的优势,而避免各自的劣势。
比方说在之前的一个小型的项目中,我们就采用了多种技术的组合来解决问题。项目的目标是要生成一些数据,然后以sftp的形式上传到某个网站中,该网站的厂商会做后续的处理。
所要生成的数据因为实在Oracle数据库中,所以最合适的语言就是Oracle自身的PL/SQL,我们使用存储过程来开发了这部分功能,从而可以避免网络传输,而且不需要高级语言通过数据库连接来调用数据库。并且在数据库中设置了相关的Job,在特定的时间就会生成相应的数据。
由于安全性的限制,在数据库中的操作就到上面为止了,接下来我们采用C#并而借助enterprise library库来生成相应的文本文件。
最后一步上传,我们并没有使用.NET中的类库,因为它对于sftp的支持比较麻烦,所以我们直接建立进程,调用putty来执行上传操作。而该操作使用的东西很简单,就是批处理文件(.bat)。
这样,我们在项目中组合了多种技术,这样开发的时间被大大缩短,效果也很好,而且在各个环节,我们可以监控到中间的产物。
结论
由上述内容我们可以看出,在很多企业中,IT的最终目标就是要解决业务的问题,而想要更好地达到这个目的,我们就要软硬兼施,提高自己在各方面的能力。