[ZT]杂谈:人与软件 作者:徐景周

转载 2005年02月28日 12:54:00

杂谈:人与软件

作者:徐景周

  播下一种思想,收获一种行为;播下一种行为,收获一种习惯;播下一种习惯,收获一种性恪;播下一种性格,收获一种命运。

——引自《水煮三国》
  长期以来,程序员被看作是沉默寡言的典型。他们能够长时间独自坐下来,不跟别人讨论,面对纸张及电脑屏幕来工作的人。现在,这种现象早已经不尽然了,新的尤其是敏捷方法论更强调的是人们之间的有效沟通,而最有效的沟通便是面对面的交流,这也是结对编程取得巨大成功之所在。正如水晶方法论创始人Alistair Cockburn对软件开发活动的总结:"软件开发是一场资源有限的创建与交流的协作性游戏。游戏的主要目标是交付有用的可工作的软件,次要目标,是为下一场游戏做准备,既知识的累积。下一场游戏可以是改变或者替代当前的系统,或是创建另一个相关的系统。"一个软件开发团队的成功依赖于合作、交流及协调,而这些因素却都以人为核心,恰恰是人这个大的因素左右了项目的成败,而不是所选择的任何过程与技术,而这个因素却常常被人们所忽视。当技术与人们的认识和文化价值观相抵触时,技术就不会再产生效力。一个拥有充足人员且具有良好机能的团队往往能更好地完成项目,而不在乎让他们使用什么样的过程及技术。然而,人的能力却是不可预测的,他们善于寻找、学习并有主动性,特别是善于进行非正式面对面交流,但同时,人们也具有会犯错误、墨守成规、只想创新、积习难改与变化无常等缺点。正因为人是变化无常的,我们不能指望人会成为可预料的或每个人都会变成一个样子。正如你不能希望给一个人双倍的酬劳,制定双倍的惩罚制度,并付出双倍工作时间,就希望能够得到双倍的成果输出一样。这是因为,人不是机器,而是复杂的情感生物,输出的成果最终取决于当时的思考质量、思考速度、主动性、身体状况、情绪等诸多因素。但是,人的内在潜力却是非常巨大的,只要用纪律和宽容来应付人们的共同弱点,便可以去其短,扬其长,来激发人们的内在潜力。当人们有了工作自豪感和公民感,再加上善于寻找和主动性后,我们会发现人们每天都会积极地完成工作,这将使项目长期处于最佳状态。在这方面,XP(极限编程)采用丰富的、短的、非正式交流途径,同时强调技能、纪律、个人理解水平,将中间件需求降到最低的方法,来获得尽可能高的质量和生产力。


变化总是在发生
他们总是不断地拿走你的奶酪。
预见变化
随时做好奶酪被拿走的准备。
追踪变化
经常闻一闻你的奶酪,以便知道它产什么时候开始变质。
尽快适应变化
越早放弃旧的奶酪,你就会越早享用新的奶酪。
改变
随着奶酪的变化而变化
享受变化
尝试冒险,去享受新奶酪的美味!
做好迅速变化的准备,不断地去享受变化
记住:他们仍会不断的拿走你的奶酪,如果你不改变,你就会被淘汰。
——引自《谁动了我的奶酪》
  面对市场经营的特殊挑战,只有那些具有高度灵活机制的企业才能立于不败之地。不能适应变化,变化就会把你变得面目全非。再完美的计划也时常遭遇不测。软件中的所有东西都在变化。需求在变、设计在变、业务在变、技术在变、团队在变、团队成员在变。问题不在于变化,因为变化总在发生,问题在于在发生变化时没有能力应付。只有变化是不变的,时刻准备着这样调整一点,那样调整一点。通过许多小的调整,而不是几次大的调整来控制软件的开发,也就是说我们需要利用及时反馈来知道我们何时出现了错误,我们需要很多机会来纠正这些错误,而且,我们必须能够以比较合理的成本完成这样的纠正,即使你不得不朝完全不同的方向前进,这就是作为一名程序员的生活。敏捷就是快速、轻松和灵活,迅速行动的能力,以最少的开销完成工作的能力,适应不断变化条件的能力。这就像XP方法论创始人Kent Beck对XP所做的比喻:"XP团队应该是智慧的游牧人,随时准备迅速收起帐篷,跟随牧群到处流浪。这里的牧群可能是与预期不同方向的设计、与预期不同方向的客户、离开团队的成员、突然升温的技术或者是不断变换的商业环境。"敏捷软件开发的根本是相信在我们混乱的业务环境中有不可预测性,相信人们或团队在面对这种不可预测性时,有能成功交付软件能力的可预测性,而这些,这是由于开发人员之间的有效沟通、与客户和管理者之间的有效沟通,才使得这种被称为富于创造与交流的协作性软件开发游戏取得成功。

  再富裕的国家,也会因为浪费人才而变得贫穷。与之类似,企业生存的最大课题就是培养人才,有了好员工,不愁没有好顾客。企业的发达,乃人才的发达;人才的繁荣,既事业的繁荣。把人放在第一位,其他事情就会少发愁。
——引自《管理智典》
  《资本论》指出:一切剩余价值皆是由人创造的,而不是其它任何机器。在软件开发中的任何分析和设计工具不管有多先进,都不可能自动产生设计及代码,而真正产生设计及代码的,恰恰是操作它们的人,过分信赖过程与工具以及低估人的智力和经验都是一切灾难的源泉。与此同时,<设计模式>一书也指出:在软件开发和维护中,从长远来看,真正引起软件低效的原因,是人,人的低效才是最主要的。这看起来有点自相矛盾,其实为一体,既:成也在人,败也在人!软件开发和维护中的低效,初看起来,使人联想到的首先可能会是:开发及维护人员技术水平不够了、软件文档支持不足了、软件人员偷懒了、开发或维护团队内部人员关系不好了等等。但深究起来,一般却和一个企业的内部组织文化有很大的关系。目前,国内很多国企、私企普遍存在的内部现象是:一马在前,万马齐拍;前面的马向后看到的是后面马的笑脸,后面马向前看到的是前面马的屁股。故才会有后面群马齐拍,前面马飘飘不知所以然的壮丽场景。在这种企业文化中,人人只会以乾隆年间的和珅和大人为偶像,以"厚而无形,黑而无色"的厚黑精神为人生最高境界。试想在这种企业组织文化中,真正老实实干的人只能忍气吞声、本着不求有功、但求无过之心,整天提心掉胆,人人皆自卫。而奸滑的人却会善于滥竽充数、邀功请赏、见风驶舵,只要嘴巴甜、马屁拍的好、拍的妙,定会升官发财,内部则猜疑、谴责、以及微妙和间接的勾心斗角与明挣暗斗随处可见。这种企业最终是不会留下真正的人才的,留下的只会是一些马屁精。如果一个企业文化如此,开发及维护团队会如何,内部员工又会怎么做,可想而知!如果你所处的环境不是这样,恭喜你。最好的环境应该是互相信任,彼此互相尊重,彼此之间都相信对方会把自己的最高利益和整个团体的利益放在心中,彼此都愿意切磋技巧、经验及看法。而要成为一个有效的团队成员,首先需要认识到自己的无知,每个人都要向别人学习,应该相信直觉,并且开放和诚实的交流环境常常是保证有效团队合作的最好策略。作为一个组织,核心就在于对人的信赖,在于一个适应性强的文化氛围,这能够将人捆在一起,获得有效的协作关系。一个企业做的是否成功,关键是看它有多强,而不是有多大。把人放在第一位,管理层次少,内部信息沟通及时、各职能部门协作意识强的企业才更容易成功。

  在激励一个人按某种特定方式工作时,报酬比惩罚更有效,惩罚要尽量避免。你若能在他人心中激起一种急切的需求,并能引导这种需求,你便能无往不胜。渴望得到别人的认可和赞赏,是人类隐藏最深的本性。
——引自《管理智典》
《孙子兵法-作战篇》中指出:"杀敌者,怒也;取敌之利者,货也。车战,得车十乘以上,赏其先得者。"意思是说,要使军队勇敢杀敌,就要激发士兵对敌人的仇恨;要使军队夺取敌人的物资,就要以财货奖赏士兵。所以在车战中,凡缴获战车十辆以上的,要奖最先夺得战车的人。同理,<素书六章>中也指出:小功不赏,则大功不立;小怨不赦,则大怨必生。这和前面是一样的道理,然而,国内很多软件企业领导者,满脑子想的仍是:中国人,多的是,有什么用,走一个,马上还能来一群,怕什么!殊不知,你就再是铁打的营盘,也架不住流水的兵,不注重人,必会留不住人。冰冻三尺,非一日之寒,做软件的,少则数月,多则几年。三天两头换人,每天看到的都是新面孔,那还象是做软件的,就象是在选秀。这样的软件能成功么?既使侥幸成功,也定不会长久,因为他们不可能织起一个强而稳定的团队,组织起来的只能是临时应战的雇佣兵而已。有上面这种想法的领导大多通常是以指令性过程方法和产品为中心,把做作软件的人看做是"即插即用"的机器,这些高层管理者往往抱着一种"菜谱哲学"的思想,认为如果组织机构有了明确定义的软件过程方法,详细地规定了每个开发活动的步骤,那么所有问题都将被解决。如果"正确"的过程已经开发好,他们就可以雇用任何人(当然,最好不用人全部由机器自动生成最好, ^_^ ),只要遵循制定好的过程,完美的软件就将准时且不超预算地大量产出,这种信条是建立在把软件开发当成是一门科学的基础之上的,然而,残酷的现实却向他们证明,软件开发更多的是一门艺术而非科学,是一门需要技能、手艺精巧的人互相协作的艺术。如果公司领导成天跟员工斤斤计较,抓住员工小辫子不放,动不动就大声呵斥、摆脸色看、给小鞋穿,还要经常免费加班、扣工资、罚资金。试想,在这种环境下,员工会怎么做,大部分会直接走人,留下的人却学会了磨洋工。工作时看着忙忙碌碌,实则作秀也。老板可能还会纳闷,怎么员工这么买力,产品质量还日渐下降。殊不知,这就和菜场买菜一样,你越和卖菜的讨价还价,卖菜的给你菜时越会和你斤斤计较(既缺斤少两)是一个道理,只有这样两方心理才能够平衡。虽然,聪明一些的高层领导者总是宣称员工是组织机构中最重要的方面,但骨子里仍把员工看作随意可替换的资产,这也正是人类的一大缺点:嘴上说的和实际做的往往是两回事。所谓"道",就是让部属与领导者的价值观相一致,这样部属就会与领导者同生共死,不会畏惧什么困难和危险,表现出崇高的献身精神。如何让部属与领导者的价值观相一致,其实很简单,将员工利益看作第一位,以人为本,重视他们、信任他们、支持他们。其实,员工们对公司的要求其实很低,一般如下:
第一、按时发工资(基本保证);
第二、得到办公室配送的饮料或食品;
第三、得到领导赏识;
第四、获得特别授权去完成某艰巨任务;
第五、多发奖金(不吃大锅饭);
第六、职位上的提升;
第七、加薪;
以上几条,对于每一个有远见的公司领导都是不难做到的。那怕能做一半,员工们也会心存感激之情了。

  帮助他人,可说是一种最直接有效、可以激发自身价值与责任感的方法。在全神贯注帮助他人解决问题的过程中,在悉心呵护照顾他人的过程里,不但我们的无限潜力会因此而充分发挥出来。而且,相对而来的成就感,也会让人觉得自己任重而道远,并能更积极地来面对人生了。

——引自《好习惯、好人生》
  近两年,书面上流行的狼系列丛书<狼文化>、<狼图腾>等。也同样给中国软件业发展以极大的启示,强调拥用像狼群般的高度紧密协作的团队意识、敏锐的嗅觉(既可以察觉到细小或即将来到的变化)、始终保持野性(既持续的积极进取的态度和精神)等。中国人喜欢窝里斗这是出了名的,就是软件人员内部也经常在彼此攻击、无休无止。要知道,在一个有效团队中是没有"我"这个字的,只有"我们"。这里借用曹植曹帅哥一句话:"本是同根生,相煎何太急!" 来真心希望中国软件业能真正团结一致,齐心合力,建立自己的狼群文化,早日走出低谷,向全世界宣布:我们是狼,不是羊! 创建一个有效的团队是一项艰苦的任务,它对项目的成功是必不可少的。首先是通过招募好的开发人员,从好的材料开始,他们可能不具备所有需要的技能,但至少应该愿意去学习。其次是在团队内培养正确的态度,既他们只有团结一心才能走向成功,每个人都应该积极参与系统开发。建设和培养一个有效团队需要时间,但这样做是组织机构能做的最好的投资之一。

  若是你在一年中不曾有过失败的记录,你就未曾勇于尝试各种应该把握的机会。害怕失败,就等于拒绝了成功。那些盼望并且追求成功的人,要比那些成天担心而且接受失败的人要快乐得多,其成就也会高的多。
——引自《管理智典》
  假如软件的第一版就做得很好,那么人们就会再次使用该软件。由于世界上所有的事情都在迅速变化着,因此,软件也需要不断更新、扩充、改变及修改。而想要得到稳定不变软件的唯一方法就是让产品坏到没有人再想用它,稳定意味着无知觉的产品。要明白,稳定的要求是敌人而不是朋友。改变要求是生活中严酷的现实,明智的软件人员应事先预想并处理它而不是抱怨它。而使软件创建更加快速与健壮的,是软件复用。有关软件复用的问题从表面上看是技术上的,实则真正的问题还是来自人。开发人员需要摆脱不相信也不想理解别人成果或只想重头做来增加个人经验的看法,如果不解决人的问题,那么技术问题也就变得无关紧要了。开明的领导和合适的奖赏制度有时能克服这些问题,假如企业文化把重复使用搁置起来,不与重视,那么在实现重复使用方面的投资、开发以及努力都将没有多大的成果。克服人的问题最主要的还是有效沟通的问题,虽然我们已经学会把感情生活与工作分开,但是如果队员间不能持续进行有效的沟通、没人承认自己的错误、怨气得不到平息、欢乐没有人共享,那么整个团队就无法高效率地工作。如果我们每个人都能够放下生活中所带的虚假面具,说出自己真实的感觉,也认真倾听别人的想法,那么任何工作的进展都会顺利的多。

一个人并不是生来就要被打败的,你尽可以消灭他,却不能打败他。
——引自《老人与海》
  生命原本脆弱,我们只能坚强地活着,并努力寻找欢乐,就这样。这里有一点我想告诉大家,大家在积极进取、努力拼搏的同时,一定要多加注意自己的身体。要知道,留着青山在,不怕没柴烧,身体乃革命的本钱也。千万不要有这样思想:三十岁前我用命换钱,三十岁后我用钱换命。要好好想想,没有了好的身体,我们还能做什么!所以,请记住:努力工作,从珍惜生命做起!

  生活并不是笔直通畅的走廊,让我们轻松自在地在其中旅行。生活是一座迷宫,我们必须从中找到自己的出路。我们时常会陷入迷茫,在死胡同中搜寻。但如果我们始终深信不疑,有一扇门就会向我们打开,它或许不是我们曾经想到的那扇门,但我们最终将会发现,它是一扇有益之门。

——引自《谁动了我的奶酪》
  最后,让我引用<WINDOWS游戏编程大师技巧>书中一句话来结束本文:"当你看到眼前有列过山车,请坐上去,不要犹豫。张开你的臂膀,尽情体验个中滋味,一直坚持到游戏的最后,这就象生活一样。你的生活将不会留下太多回忆,除非你曾经反抗过、呐喊过,并用坚持不懈的努力向着完美伸出双臂。世上没有不可能实现的事情,只要你相信能做到,你就能做到!"

参考文献
C++经典问答(第二版) —— 周远成译
WINDOWS游戏编程大师技巧(第二版) —— 沙鹰译
设计模式-可复用面向对象软件的基础 —— 李英军等译
解析极限编程-拥抱变化 —— 唐东铭译
敏捷软件开发 —— 俞涓译
敏捷软件开发生态系统 —— 姚旺生等译
敏捷建模-极限编程和统一过程的有效实践 —— 张嘉路译
联系方式

地址:陕西省西安市劳动路90号院(台板厂家属院)六单元
邮编:710082
未来工作室(Future Studio)
EMAIL:jingzhou_xu@163.net

 

 
 


 

javascript设计模式【上】

参考《javascript设计模式》[美]Addy Osmani一书,下面介绍使用javascript经常会使用的主要设计模式。本博文是使用ES5语法的【上】篇,还有一个【下】篇,ES6语法会单独写个...
  • future_todo
  • future_todo
  • 2017年01月03日 10:25
  • 570

成为首席软件工程师的一些经验

成为首席软件工程师或技术榜样既是一个伟大的责任,也是一个很好的职业机遇,但中间的过程却是艰辛的。 对自己和自己的工作负责,与尽可能地推卸团队的责任是有着很大区别的。 许多软件开发人员做起自...
  • qq_29882585
  • qq_29882585
  • 2016年09月20日 16:03
  • 618

《软件需求最佳实践》与《掌握需求过程》对比

最近公司要考察需求技能,抱着总结经验,提升技能的心态,看了两本关于需求的书籍,一本是被公司奉为需求人员教科书的《软件需求最佳实践》徐峰著,一本是《掌握需求过程第三版》James Robertson著。...
  • happymatilian
  • happymatilian
  • 2016年10月27日 16:40
  • 1629

VC++ 常用编程技巧总结

VC++6.0的使用以及编程技巧整理 1、MDI子窗口一启动就最大化      BOOL   CChildFrame::PreCreateWindow(CREATESTRUCT&   cs...
  • bcbobo21cn
  • bcbobo21cn
  • 2017年04月01日 22:28
  • 7402

团队愿景和团队章程的问答?

1,团队愿景是什么?团队对指导原则的共同理解,包括了使命,目标,预期的行为,价值观,和最终成果,由团队识别定义并得到使用。 2,团队愿景不是什么?一般而言,团队愿景不是团队计划,不包括团队所要完成的任...
  • zhangmike
  • zhangmike
  • 2016年08月25日 07:49
  • 1350

【文学杂谈】徐宥 - 我的大学

徐宥目前是计算机专业的 Ph.D.,导师Yixin Chen,本科毕业于南大数学系。这篇文章是其应出版商之邀而写的一篇回忆录,详细介绍了其大学之前及大学四年的生活,包括他找工作,考研和出国的经历。从中...
  • chenlu5201314
  • chenlu5201314
  • 2016年06月13日 16:13
  • 722

strom学习总结——我从三个纬度开始:maven工程、徐明明博客和应用场景。

关于storm学习,我从三个纬度开始:maven工程、徐明明博客和应用场景。 1、maven工程 pom文件配置     central  Maven Repository Swi...
  • chouzhouzhou
  • chouzhouzhou
  • 2014年10月23日 11:15
  • 2107

学习ucosii要用到的几本书和软件

原帖地址:http://bbs.ednchina.com/BLOG_ARTICLE_2020186.HTM 打算学习一个嵌入式操作系统,研究了一下决定还是先研究一下ucosii,一方面权当学习C...
  • parasoft
  • parasoft
  • 2014年05月15日 14:06
  • 1306

徐东山:腾讯云安全的使命和技术实现

徐东山:腾讯云安全副总监, 2005 年进入腾讯并服务至今,历任后台开发、后台策略安全等岗位。从 2010 年腾讯开放平台和腾讯云启动迄今,一直从事腾讯云安全相关的业务规划和系统建设工作。对海量服务系...
  • codebay118
  • codebay118
  • 2017年05月23日 19:00
  • 257

程序员新年愿景

2016年已经到来,2015的痕迹却深深地烙印在了我肥大的肚皮上。也许未来这一切都是浮云,不过我其实希望的是我的肚子可以成为浮云。 希望新的一年可以将个人的学习和思考以一种阶段性的总结和成果的形式记录...
  • u012143360
  • u012143360
  • 2016年01月02日 01:34
  • 553
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[ZT]杂谈:人与软件 作者:徐景周
举报原因:
原因补充:

(最多只允许输入30个字)