从敏捷开发中省钱

如果您不使用结对编程和代码审查作为教学工具,那将会浪费金钱

有一种简单的方法可以通过在关键团队中增加一些工作来节省很多工时,从而节省项目成本。 如果我想向已经超负荷的高级开发人员和架构师添加更多的工作,那么您一定以为我很疯狂,但是我相信您最终会同意的。 额外的工作(以后将为您节省很多)是经验不足的高级开发人员的代码审查和结对编程

错误的代码可以杀死你

我从几个长期运行的中小型项目中获得的经验使我得出一个明确的结论:如果有人教过他们如何编写代码,我每天都会在这个过程中挣扎着由经验不足的开发人员编写的五到九年的旧代码干净,高质量的代码,我们本来可以节省大量时间,以后再尝试理解代码并针对新要求对其进行修改而又不破坏其他内容。 而且,当然,一个糟糕的代码更容易腐烂,因为由于其难以理解,人们害怕触摸它,因此会创建复杂的结构以最大程度地减少必要的修改,而且还因为其灵活性不足以及可扩展性,新的或更改的需求导致其复杂性快速增长。 前面提到的问题是由于这样的错误代码没有遵循面向对象编程的最佳实践和理想而引起的,例如:

  • 小类,少量的短方法
  • 每个类别只有一个明确定义的职责
  • 每个类通常只有很少的依赖项,并且不了解其他大多数类和对象
  • 良好的职责分配和数据在类内部的良好封装所产生的模块化
  • (由于这些特性,编写单元测试也非常容易。)

另一方面,通常您会在错误的代码中看到一些反模式,例如:

  • God Class是一个非常大的类,几乎可以执行任何操作(实际上,我还遇到了一个相反的反模式,即“ Functor”或如何调用它,即每个方法都有自己的类,通常称为doIt或类似名称)
  • 神的方法–太长的方法做得太多–通常在神的课堂中
  • 复制和粘贴编程以及由此产生的重复代码和C&P错误
  • 整体代码,其中所有内容都取决于其他内容(因此,基本上不可能进行单元测试)
  • 有关环境的硬编码数据(日志文件的路径,DB驱动程序类,等等)
  • 变量的重用–相同的变量或对象的属性(或DB列)用于不同的用途,因此很难理解其实际含义(您会发现SSN实际上拥有员工的组织代码,您会感到惊讶吗?)
  • 过程编程和静态方法的过度使用,其中所有(通常很多)数据通过参数传递,而不是有效使用对象的属性

是的,如果您的壁炉很虚弱或容易发怒,那么维护一个错误的代码确实可以杀死您

通过结对编程和代码审查学习简洁编码

这绝不是说没有经验的开发人员是愚蠢的,或者他们不在乎高质量的代码(实际上,我经常会碰到他们对质量的尝试,尽管并不总是成功的痕迹)。 他们只是没有实际的机会来学习如何使代码质量栩栩如生,实践才是真正学习代码质量的唯一途径。 在这里,我们要讲到重点–我坚信, 代码审查 ,尤其是与高级开发人员的结对编程 ,是迄今为止学习如何创建高质量,干净代码的最有效,最快速的技术。 甚至只有几天的配对编程就可以打开小伙子的视线,并使他/她走在正确的轨道上。

通过观察已经是干净的代码实践者甚至是熟练的开发人员的工作方式和思维方式,并在他/她的监督下进行即时的反馈工作,我可以在很短的时间内学习到最重要的习惯(单元测试,从简单的设计和根据需要的重构开始,…),清晰的代码思考和开发模式以及最常见的设计和实现模式,以及分析和评估手头任务并区分重要任务的能力从不重要的。 没有比通过与有经验的人亲自合作解决实际问题,然后尝试将学到的东西应用于他/她提供反馈的方法更有效的学习方法。 您可以阅读许多书籍,但他们无法给您带来这种体验。 在最初阶段之后,我们可以放松联系和合作(除非我们很幸运能在XP商店工作),并用代码审查和讨论代替共享的开发。

把想法卖给管理层

可以理解的是,经理在培训新人这样的低效率工作上会犹豫地利用他/她最好的人的稀缺时间。 但是有必要了解一些基本事实,即代码只写一次却读了很多遍,并且典型软件的寿命通常是几年,比如5-10年。 因此,在开发过程中节省的时间(以牺牲其可读性和质量为代价)将在以后的多个时间中得到补偿。 IBM的一项统计数据声称,维护(和进一步开发)的成本通常比初始版本的开发成本高得多。 您可以在开发过程中节省更高(更高)的维护成本,但这就像靠贷款生活一样-通过向银行贷款,您现在似乎有更多的钱(在我们的域中有更多的时间到截止日期),但是您以后会偿还。 负责任和能干的经理的任务是向客户说明,如果她牺牲时间或预算来提高质量,那么以后的花费就会更多。 (实际上,对于任何大型项目而言,这种节省实际上都是值得怀疑的,因为其代码库的质量差会在开发过程中就已经影响到您了。)

因此,高层管理人员应鼓励并支持基于结对编程代码审查的新开发人员的引进过程,以防止以后产生大量损失。 如果您教他们却离开了,该怎么办? 好吧,您应该问问,如果您不教他们,但他们留下来,该怎么办! (正如最近有人在互联网上指出的那样。)

圣经后

我想说明一下,我不认为自己是精练的代码大师。 我有时编写糟糕的代码,但从来都不是完美的代码。 但是我相信,在对代码质量的持续追求中,我学到了一些有益的知识,可以帮助进一步推广。

摘要

年轻的开发人员通常不会在大学里学习如何创建高质量和整洁的代码,因此,尽管他们付出了所有努力,但有时他们仍会编写质量低下的代码,这会给其他许多人带来麻烦,并维护和发展该代码。软件更容易出错,价格昂贵且运行缓慢。 但是年轻的开发人员很聪明,有了正确的榜样,并且有机会在现实生活中看到并应用干净的代码实践,他们可以在短时间内改善很多。 给予他们这种机会的最好方法是让他们与经验丰富的开发人员一起工作,之后,当他们已经有了正确的思维定势时,他们可以保持正确的步伐并通过代码审查鼓励他们进一步发展。

当然, 配对编程 (或指导)和代码审查都必须是开放的,友好的活动,在这种活动中,双方都有平等的权利表达自己的声音并被倾听。 有经验的人不应忘记他们也可能会犯错,并且有时他们可以向年轻的人学习很多东西。

这篇文章的主要信息是,我们不应该忽视年轻开发人员的实践教育,因为通过投资很少的经验丰富的开发人员初期时间,我们可以使他们取得巨大的进步,而通过不断投资更多的时间,我们可以使他们能够保持快速增长。 这将导致其产品质量大大提高,从而避免浪费大量时间和金钱。

资源资源

免责声明
我个人要感谢我们的JCG合作伙伴Jakub与社区共享高质量的信息,因为本文最初发布在他的网络日志“ The Holy Java ”上。

知道我是不好的程序员,会让我成为优秀的程序员!

拜伦

相关文章:


翻译自: https://www.javacodegeeks.com/2011/03/save-money-from-agile-development.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值