开发软件需要什么样的思维方式

来源:78oa 发布时间:2013-06-10 17:20:13 点击数:
 
  软件开发需要什么样的思维方式,深圳市鑫星空软件有限公司的研发工程师把多年的开发经验作了一个整理,在此分享给准备进入开发事业的朋友。软件开发思维有很多挑战,通过获取和利用系统知识,我们可以战胜很多困难。实际上大部分挑战是我们人类与系统之间相冲突的本性。我们的情感和本能很容易改变我们的思维方式,所以掌握系统思维方式的第一步就是要学习如何跟自己合作。
 
  1、 一味的追求时间是最大的障碍
  当我们胸有成竹的时候,我们就会全力以赴。可是,最优增长速率通常会比可能的最快增长速率要慢得多。领导往往为已经成功的项目增加很多人手,但总体进展就会变慢,因为交流所用的花费增加,以及团队成员之间失去默契。在没有对代码进行合理重构及改善的情况下,开发者快速的为系统添加新的功能,会使系统变得难懂,而且难以修改。
 
  2、 盲目的修改比问题本身更严重
  有些共知的方法可能会更危险,比如在编程的时候喝啤酒,来减轻不切实际的任务期限带来的压力。由于不信任全职开发者,一家公司雇佣了大量的承包商来开发核心功能。结果,系统不具有概念完整性,自己公司的开发者看不懂,并且无法做出修改。所以,公司员工也不了解相关领域的知识、解释以及概念。
  开发者会走捷径,拷贝相似功能的代码来赶进度,并且争取尽快发行第一个版本。他们一开始进展迅速,最终代码就会变成一个大麻烦。
 
  3、 善变和不切实际的需求是潜在的老虎
  我们善于为出现的困难寻找原因,即使这些原因很牵强,并且远非是真正的根本原因。为了按时完成系统,开发团队不再接受来自客户的需求改变。客户对发行的软件不满意,管理层迫使开发者同意,并且在给系统做出任何修改之前撰写详细的技术说明。结果开发者失去了为系统做出任何改进的动力,并且开始拖延。
 
  4、 管理层不切实际的承诺来刺激开发人员
  短期的激励方案,会给开发人员带来短暂的休息和状况的暂时改善,但是不会从根本上解决问题。这些问题终究会使情况变得更糟。例如管理层给开发团队承诺:如果开发团队能够按时完成系统开发,公司会提供巨额的奖金。一个团队开始努力的工作,但很快他们就意识到这是不可能实现的。于是开发者变得悲观并丧失动力。
 
  5、 次优管理方式将会导致开发团队丧失协调性
  没有整体了解系统,往往会做出次优决定。项目经理往往通过生成的代码量和迭代过程中实现的功能数来评估开发者。而开发者往往会生成大量无用代码。管理层承诺,每发现一处系统bug,测试者将得到5美元。测试者对跟开发者合作不再感兴趣,并且不再试图消除产生bug的根本因素,团队之间良好而且高效的关系不复存在。
 
  6、 闭门造车出门不合辙
  我们喜欢将问题归咎于客观条件,或对别人指指点点,甚至对此深信不疑。但是,我们自己以及问题的原因都是系统的一部分。人们不会使用一个公司优秀的社会化应用,用户喜欢简单实用的东西,并且不会感激你辛勤工作的成果。
 
  7、 传统的管理方案未必是最优的方案
  当解决问题时,我们会感到很高兴。我们经常不考虑后果。令人感到意外的是,我们提出的解决方案可能会产生反作用,并带来新问题。作为对取得巨大成功的团队的奖励,公司决定为团队中的少数骨干成员发放奖金并晋升职位。团队中的其他成员会感到不公平,并且会丧失积极性。最终使团队成员之间的关系更加紧张,后续项目也就很难再取得成功。
 
  8、 静一静也许是解决问题的最好方法
  当事情的进展结果并非如我们所愿时,我们会固执地坚持自己的方法。我们没有时间来停下来思维并寻找更好的替代方案,而是“义无反顾”地向前冲。有时候虽然解决了问题,但往往又发现深陷于其他问题之中。
  当一个系统远未完成时,经理通常会不断催促员工加班加点地工作,并且要求按时完成。系统bug数量的持续增加及整体质量的急剧下降,导致更多的延误。因此,需要做更多的工作来部署软件系统。
  为了满足新系统的要求,开发者勇敢的对原有的系统架构进行扩展,但死板陈旧的方法已经不能满足这些新需求。他们忙于做这件事,以至于没有时间停下来仔细分析并且改变方法,从而导致系统质量下降。
 
  9、 千万不可照搬你“了解”的方式
  在生活中学到的一些解决方案能够帮助我们轻易地并且更早的地获得成功。我们总是试图把它们强加到任何情形上,而忽略了特殊的背景以及相关人员。
  开发者还没有准备好接受结对编程或者测试驱动开发这样的实践时,敏捷教练强行实现完全的极限编程。这会给任何敏捷方法带来压力、冲突以及负面影响。开发者把设计模式应用到任何地方,这是徒劳的,而且这会让系统变得复杂。
 
  10、小改变可以有大效果,大改变未必有大效果
  像改变公司政策、愿景或者广告用语这样显而易见,并且关系重大的解决方案往往不起作用。相反,小而普通,但持续的改变却会带来大不相同的效果。开发者每天都与客户进行交流,并且做出大部分决定。
  因此,能够更好地理解客户的需求、做出更好的决定并且给出最优的解决方案。开发者为系统的每项功能设计自动化单元测试。因此,设计更灵活、人们更自信、系统在每此修改之后都能得到完全的测试。
 
  上面的十条系统思维模式告诉我们,任何解决方案都有一定负面的影响和潜在的后果,我们一定要从中学习,选择最优方案。
  这些软件开发需要的思维方式,可以让大家在以后开发软件的过程中,通过这些思维的学习,少走前辈们走过的弯路,也对现在从事系统架构师、软件研发工程师都有很大的帮助。