回想自己第一次接触计算机,那已经是十二年前了。但正是那第一次的接触,决定了自己在这个行业中寻找自己的事业。经过这十几年的发展,计算机已经由高档设备变成了普通电器,逐步走入并影响着人们的生活。作为计算机运用的直接提供者——软件,也为人们的生活带来的这样那样的改变。当然,作为一个有吸引力的行业,也吸引着大量的人投身于这个行业,但是,国内软件除了表面的红火以外,却蕴含着这样那样的问题。
作为一个一直对软件有着美好想法,同时也一直从事着程序开发的人员,对软件开发过程中的问题有着深入的体会。
1.软件质量无法保证
计算机是一个功能强大的工具,而且是一个非常听话的工具,它只会执行你告诉他要执行的工作。所以也就要求程序员能够正确地告诉它工作流程,但这一点在较大的系统中也比较困难。在一个多人参与共同完成的系统,大家要保证程序体现内容的逻辑一致性,这就首先需要参与者对整个系统有个一致的认识,但是现在国内的程序员却多是在自己埋头写程序员,而不是沟通,这样怎么能够保证一致性呢?在沟通方面,不仅程序员内部的需要沟通,同时还需要程序员与市场部人员的沟通,如果这两部分人员对产品的认识不一致,那么这个产品也不会有很好的市场的。
当然,在沟通这个问题上,许多行业都存在着这样的问题,毕竟中华民族是一个含蓄的民族,大家当面都会非常客气,当面不说、背后乱说。就软件方面,没有做好沟通则不仅有程序员的问题,到时也有大家对程序员这个职业的认识问题,大家还认为程序开发是一项高技术的研究,而且在大家脑海中,好像一个优秀的程序员的具体特制就是做在计算机前,埋头苦思冥想。其实不然,毕竟现在软件开发不是一个研究性的工作,而是一个与应用紧密结合的工作,那样如果没有充分的沟通,做出来的东西也只能是一个闭门造车的东西,是不能得到很好的应用的。实际上就研究方面,许多专家也不是整天的在苦思冥想,而是通过各种渠道收集各方面的信息,如果牛顿整天的苦思冥想,而不去趟到苹果树下休息一下的话,那么可能21世纪的社会就不是现在这样子了。
做为一个智慧型产品,软件比其他智慧型产品在质量方面有着更高的要求。小说是一种大型的智慧型作品,虽说漏洞百出的小说不会是一部好小说,但一部好小说却允许存在着一些漏洞,这些漏洞的存在不会影响读者的欣赏,而且许多时候读者也不会体会到其存在,金庸先生的作品不少人都读过,但有几个人意识到了其中的一些漏洞呢,好像不多吧,即使发现了,好像对你欣赏也没有太大的影响。而软件则不然,由于计算机是一个严格的执行者,但却没有什么判断纠正能力。所以其漏洞的存在就会导致这样那样的问题,影响其使用效果。
同时,软件质量对用户有着很大的影响。随着软件在各行业的运用,现在软件对其影响也越来越大。有时一个系统的问题,可能就会许多问题,而且有些问题对企业有着较大的影响。京城的一家银行,各网点的服务质量在北京来说还是很不错的,但好像这家银行的业务却不是太好,后来才发现了其中的原因,当然我看到的只是一个表现而已,如果存入一笔自动转存的时候,过了几个自动转存期后,如果去查一下,你会发现有许多笔存款。可惜的是银行工作人员却会给你说这只是一笔存款,那是系统的一个问题。系统连一个自动转存都解决不了,作为一个还没有到对视金钱如粪土境界的人,当然还是考虑一下是为了享受服务而让自动的存款受着末知的处理,还是去选择另一家服务虽说不如这家,但系统相对可靠的银行呢。我想多数人还是会选择后者的。正是因为软件质量的这种重要性,大家对软件质量的重视及软件质量对一个企业生存的影响,人员也对软件质量有着更高的要求。
下面几个部分,虽说是并列的,但实际上都是围绕这个问题作的一些具体分析。
2.不能正确对待技术
作为一技术人员,同时对技术有着深厚感情的人,当然希望大家把技术看得越高越好,不过同时却也应该清醒的认识到技术不是万能的。前段时间通读了“温伯格”的“程序开发心里学”这本书,让自己深有感触。其中的“技术是没有价值的”这个论点,让我重新调整了自己对技术的看法。是呀,任何一件物品,其价值的体现在于运用,一个产品,无论你认为还是事实上它是多么的卓越,只要它不能为用户所接受,那么它就是没有什么价值。同时一个东西,由于其使用方面,它也会发挥出完全不同的价值。曾听人讲过这样的一种事,说一个人到农村旅游,在一个农家发现用于喂鸡的盆竟然是一个价值连城的文物,立即倾其随身之钱并向同伴借了些钱购买,同时还向对方说由于身上带的钱有限,只能给这么多了,而农家的人也没想到自己的一个鸡食盆竟然能够值这么多钱,也是非常高兴。同样一个“破盆”,对于不同的人,由于将之用于不同的用途,其体现的价值就完全不同。
所以说,作为一个技术人员,除了考虑产品如何具有高的技术性外,还应该考虑如何才能让用户接受,因为只有这样自己辛苦的付出才不至于没有意义。由于术业有专攻,在这方面也不防多听听市场人员的意见,毕竟他们整天和最终用户打交道,会有更多的体会的,在这方面市场人员一定程度上更有发方言权。这样说可能会受到技术人员的反对,记得前不久和一位朋友说起我现在的这种想法时,他讲我已经不再是完全站在技术人员的角度看问题。也许吧,不过就我个人来看,我对技术还是有着非常大的热情,而且现在的主要工作还是写代码,当然由于一些经历以及自己的一些所谓理想,让我看问题的角度更广了些。同时我还觉得大家也没必要去区分技术人员还是市场人员么,都是公司的一员,大家到一起就是为了共同做事么。为什么要把一个人限制在技术或者市场呢?当然在东方文化有一种绝对化的思维方式,喜欢把事物分成两个或者几个绝对的部分,这点在各种文化载体中有着较大的体现,比如说起一个人,说是好人,这就是没有一点缺点,而坏人则一无是处。这某种意义上说是这些文化载体的失败,因为他们没有能够完全的体现生活,虽说他们也一样影响了大家的思维。无论是技术人员还是技术人员,大家的共同目的就是为了把一个产品做好,并为用户接受,这一点是共同目标,有这个共同目标下才能对产品有个清晰的描述,也才能保证一个产品的成功。
当然,市场人员也不要以为市场是万能的,而技术是无用的。实际上这方面也存在着不少这样的例子,有许多公司认为只要有关系,拿得到项目,做成什么样子都可以赚钱。但是如果没有一个好的产品,还是无法向用户交待,虽说有时可能由于某种关系或者原因导致这个项目的成功,但同时也会潜在其他的问题。一件事情的成功,需要多方面的配合,当然多方面中不仅仅是市场人员和技术人员,还包括其他各种各样的人员,如果说开的话就更加脱离技术话题。
3.自视过高
自视过高应该说是在许多人员中都存在的,就象前面说那样,也有市场人员认为市场是万能的,离开了市场就什么也不行,但作为技术人员的一篇自我批评的文章,这方面不去做过多的讨论,则主要说一些技术方面存在的问题。
总认为自己在技术有着非常市的水平,这种水平是其他人无法达到的。其实,一个问题,既然你能够解决,为什么就能断定别人不能解决呢?当然就某个个体来讲,可能这个人是无法解决你解决的这个问题,但中国有十亿人口,难道就只有一个人会解决这个问题么?我想应该不是吧。同时解决方式上大家也总认为自己采用的方式是最好的,这也是受绝对思维的影响,其实没有什么最不最的,只有适合不适合之分,在软件重构技术中,许多对立的技术都是同时存在的,如果分拆类和整合类,这是可能会有疑问到底是应该把类分拆还是整合呢?大类好还是小类好呢?这是一个具体情况的具体判断,会因运用目的、人员而异。所以说需要放弃绝对思维的想法,“海纳多川”,多了解一些,才能有更好的分析判断能力。需要对于别人的工作,首先应该是接受,然后是分析,最后是吸其精华去其糟粕。
另一个问题是过于追求技术,刚才写到“海纳多川”时,本来顺手打入了“而后为大”,最后又把那四个字删去了。中国人好像对“最”字有深厚的感情,动不动就是最好、最大呀,何必呢?适合就可以,最就不一定了,适者生存么,而最者却可能会灭亡的,恐龙曾是最大的动物,结果是灭亡了。在技术上,大家也不要动不动就想做最好的软件,实际上需要用户需要就可以,而有些技术上好的用户却可能不需要,或者不是很需要,这些可以在有时间和精力时做,但绝不能把它放在第一位。
还有一个问题是交流问题,也是一种沟通问题,不过这里是一个内部沟通的问题。不知道是什么原因,也可能是大家要求技术人员应该是内向的吧,大家好像平时不喜欢交谈,而技术大家好像谈论的更少,每天就守着自己的计算机忙碌。这一点好像还不如农民,大家不要生气,每个人群都有其优缺点么,再者应该也有不少是来自农民吧,反正我是。再转回来,农民虽说也是整天守着自己的“一亩三分地”,但闲时也会聊聊种什么好,如果看到别人地里的庄稼有什么问题时候,也会提醒一下,在劳动休息时也会谈论一下如何浇水施肥等。但技术人员却不知道为什么,却很少会相互谈论技术。虽说现在网络比较方便,通过其可以得到许多资料,但交谈过程中才能把自己看到东西做更好的整理和理解。如果有什么问题不能解决的话,找个人说说,可能问题就迎刃而解了。我记得曾经建议,在什么问题不知道原因或者如何解决时,最好找个人说说,如果找不到人,自己养的猫也可以。那样在向别人描述问题的过程可能就会发现问题的所在。这种方法着实不错,不过由于我没有养宠物的习惯,所以在找不到人的时候,一般只能假设一个听众来讲了。另外,如果有人来找你讨论问题,你也不要以为这是对自己时间的一种浪费,其实这对自己来讲是一种快捷的经验形成方式,因为问题更代表一些有难度的东西,而我们每天做的工作许多只是简单的重复性劳动,是不会积累什么经验的,而听别人犯了什么样的错并为什么犯就可以避免自己以后犯同样的问题,以前曾经有人让我帮他看一个死锁的问题,由于他那边是一个较小的程序,所以我们两个经过一会的讨论就发现了其原因所在,也就在这时,我突然意识自己程序中存在的一个偶然性错误可能也是这种原因造成的,所以立即也查找类似的地方并做了修改,这样困绕了我近一个许久的问题就搞定。前不久见高中的老同学,一位同学和我说了好久多谢我上学时在问题帮助,着实上学时他及其他一些同学有什么问题就会和我讨论,现在想想,如果不是这样,我现在却可能会是另外一种情形。当时高中时我是一个非常贪玩的学生,绝对没有耐心在题海中“畅游”。但正因为我也会毫无保留和大家讨论问题,所以大家有什么问题都会和我讨论,这样我知道的问题也就会越来越多,会吸引更多同学和我讨论问题,并且可以以更少的时间得到各种各样的问题。当然当时没有想得这么多,不过现在想想我还真应该感谢他们,没有他们可能就不会和计算机能够有这么早的接触,那时毕竟只有少数学校才有较好的计算机资源。写到这儿,又对自己当时高考成绩做了个分析,发现更能体现这一点,因为只有那些有问题交流的科目如数、理、化考得不错,英语也还可以,而其他几门却是很差,语文相对分甚至是不及格。因为在语文方面好像大家基本上没有什么问题,而实际上我感觉自己的语文相对还可以,高中时写的文章也曾被老师当作范文宣读,大学时也有被迫写的文章在省内比赛得奖,但正是没有与人做过足够讨论,所以才没考出较好的分数,虽说分数并不能完全代表一个人的能力,但在大家挤过当时很窄的“独木桥”时还是很有意义的:)。
随手写了这么多,回头看看发现好像和软件开发关联不大,有点“挂狗头卖羊肉”的感觉。但再想想,许多事情本来就是相通么,一篇关于软件开发的文章,不一定就需要是满篇的软件开发字吧。说到相通,就再说一点吧,“隐患险于明火”这句话是许多生产地方的一句标语,在公车、工地、厂房都可能看到,但在软件开发中,何偿不是这样,缺陷(即Bug)的存在对于一个软件系统来说应该比一个不支持的功能更可怕吧。由于整天写程序,而好长时间没写点东西了,所以写的东西可能有的程序化了,不过应该还是可以凑合着看的。