软硬兼施
胡健
2006年4月29日
这几年敏捷软件开发运动,非常强调人的作用,提出开发过程应该“以人为本”,应该充分
相信群众(开发人员)。那么,从另外一方面看,开发人员应该具备什么样的素质才值得充分相信
和依靠呢?
首先,开发人员必须具有合格的技术能力,这包括严密的逻辑思维能力,对基础概念如软件设计
原则的深入理解,对编程语言与工具的熟练掌握和运用,等等,这些可以归为开发人员的硬技能。
所谓“练就一身过硬本领”,大概就是指这些硬技能吧。
软件开发中,开发人员光有硬技能还是远远不够的。因为现代的软件开发是一种群体活动,开发人员
需要和其他开发人员,和业务人员,和用户,以及和项目经理等打交道,交流沟通当是开发人员的
首要软技能。Alistair Cockburn在“Agile Software Development”一书中注意到,开发人员其实
喜欢和同事谈论他们的程序、探究更好的设计方案来解决一个问题。而现在应该更进一步让他们
从和程序员讨论程序方面的问题扩展到和业务人员及用户讨论业务方面的问题。Cockburn更进一步
提出程序员应该是交流沟通的专才(“Programmers as communication specialists”)。
首先是口头交流。不要怕被别人觉得自己不懂,没有人什么都懂。特别是和业务人员和用户讨论时,
要发扬无知者无畏的精神。其实,反过来说,和别人交流讨论时,认真倾听,及时发问以澄清自己
的理解,适时说出自己的看法,这其实是展现自己的学习能力,思维能力和表达能力的一个机会。
所以,当说不说,当问不问,是不可不戒的。
其次是书面交流,这不是要求能长篇大论地写论文、写报告(如有此能力当然最好)。作为软件
开发人员,主要是在作需求“分析”时,把与同事,或业务人员,或用户讨论的内容,清晰的记录
下来,把自己的理解、假设等清楚地表达出来。这不是要“口说无凭,立此为据”,更不是“一字
入公门,九牛拨不转”(软件开发中,不要九牛,只要用户动动手指头,千百字就可能被拨得稀里
哗啦)。书面的东西主要是为了避免口头交流的模糊性和易失性。还有,作为开发人员,还得需要
写设计或实现文档,要陈述作出一个设计方案的理由,如一些因素的平衡(尽管这个设计可能很小,
如在OO系统中,可能只是几个类的设计与实现)。所以,懒得写字,只想编码,也是不可不戒的。
作为团队的一分子,要努力帮助营造团队的一堂和气。另一方面,“君子和而不同”,要能容纳别人
与自己的不同,也要敢于表达自己的不同意见。要团结同事,特别是“历史上反对过自己并反对错了
的”(当然也应包括反对过自己而反对对了的)。“三人行,必有吾师焉”,要善于向同事学习,除
了知识技能,还有好的思维方法和工作习惯。孤芳自赏,或全无主见,都是不可不戒的。
软件开发项目中,可能经常都处在压力之下,作为开发人员,应该在平时就要注意情绪调节,保持
良好的心境。特别是项目要赶期限时,一级压一级,一直压到编程的。客户虎吼狼嚎,经理
额烂头焦,处处鸡飞狗跳,人人气浮心躁。这时更要控制自己的情绪,要有“死猪不怕开水烫”的
气度。情绪失控,“怒从心头起,恶向胆边生”,那更是“理所当然,不可不戒”的。
|