热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么我认为软件方法论无效

原文连接:http:typicalprogrammer.comwhy-dont-software-development-methodologies-work我曾在大

原文连接:
http://typicalprogrammer.com/why-dont-software-development-methodologies-work


我曾在大型项目,小型项目,在庞大的团队和我自己,在僵化的环境和清爽的硅谷公司都呆过。我已经学会并使用了至少二十种编程语言。我经历过瀑布/BDUF(高层次设计优先),结构化编程,自上而下,自下而上,模块化设计, 组件,敏捷,Scrum,极限编程,TDD,OOP,快速原型,RAD,可能还有其他我忘记了。我不相信这些事情会有效。


[编辑:让我解释一下"不起作用"的意思。我的意思是他们不会提供一个可预知的或可复用的软件开发过程。我不是说用一种方法注定这个项目会失败。大多数软件开发方法都试图使编程成为一个更类似于工程的过程,在这点上它们是有缺陷的。


如何辨别方法是否有效?


方法是否起作用取决于以下标准: 团队生产力高效、保持快乐的心情、有预留buffer、目标可达性、可预见性强、责任化、沟通、人月、代码质量、开发工具等等。只要所测量的东西是正确的,每一种方法都有效。但就唯一真正重要的标准而言--在给定的时间和预算范围内满足需求--我没有看到任何方法能够提供一致的结果。


我自己的经验虽可看作是轶事, 但几乎是我所认识的每个程序员所共有的。事实证明, 轶事是所有人都有的: 对软件开发方法的严谨研究还没有完成, 因为不可能控制所有的变量。


尝试这一思想实验:设想两个程序员团队,在相同的环境中使用相同的语言和开发工具,使用相同的需求、时间表和预算。一个团队使用瀑布/BDUF,另一个使用敏捷技术。很明显,这不是一个好的实验:团队成员的个人技能和个性, 以及他们之间的沟通方式, 将会对结果产生很大的影响。


在库克软件开发方法论2003年的论文中(http://alistair.cockburn.us/People+and+methodologies+in+software+development)的总结中,不同的人,甚至在片刻间,所形成的一组一级车手的行为和结果。这些问题,如他们的相处情况以及他们的个性特征与他们工作角色的契合程度都会在方法论上对项目产生重大的影响。这一结果表明,人们的个人特征对软件方法的效果是有制约的。


我们自己最坏的敌人
当我在二十世纪七十年代开始编程时,管理层通过使用项目经理、业务分析师和高级程序员的层次结构严格控制了软件开发。我们没能选择语言或工具。我在公司里做了一些大型复杂的项目。有些成功了,有些失败了。程序员们通常会选择自己的工作方法与风格,以及他们的语言和工具。分析师已不再是大多数程序员经验的一部分,项目经理也已经被简化为"团队组长"和"ScrumMaster",对管理权威进行了阉割,并没有控制除了由团队协商一致决定以外的任何事情。


严格的管理,在Gantt图和日程表以及文档中被简化为"利益干系人"和"用户",进而抽象为"用户故事"。现在对我来说,参与到一个似乎没有“成人监督”的项目是很平常的事。令人惊讶的是,带给程序员的并不是恢复到“牛仔编码(时代)”-他们所采用或创建的方法更为严格,比我在1980年所经历的任何事情更充满了仪式感。事实上,今天的程序员比他们想象的二十世纪七十年代时代的COBOL商店更为僵化,更有宗教的方法论。我现在经常参与到一个或两个人所开发的项目, 他们背负着这么多的过程和 所谓的"最佳实践", 几乎没有真正的价值。


一旦一个编程团队采用了某种方法论,团队中的一些成员,或者仅仅是一个”弱者“,将被要求严格的坚持并把它变成一种宗教, 这几乎是不可避免的。由此产生的被动攻击比任何方法或技术决策都更快地扼杀了生产力。


存在有效的软件开发方法吗?


就我自己的经验而言,验证了库克和弗雷德里克布鲁克斯在没有银弹(http://www.cs.nott.ac.uk/~pszcah/G51ISS/Documents/NoSilverBullet.html)中所论证的,就是软件开发项目成功时,团队中的关键人物需要有共同愿景,布鲁克斯称之为"概念完整性"。这不是从任何特定的方法中产生的,而且在没有任何“过程”的情况下都可能发生。我知道在一个团队里工作的感觉,每个人都在“点击”,事情就会完成。我所不明白的是,为什么在BDUF(big design up front)、业务分析师共存糟糕的过去, 我的感觉比现在要好的多。


我认为程序员应该更多的去倾听并提高与同事合作的能力而不是一些仪式和工具,我们应该对过多的过程或方法持怀疑态度,这会让每个人都有更多的创造力。也许社交技能对程序员而言比其他人更难获得(我不相信这是真的),但是开发这些软技能肯定比尝试某种软件开发方法获得更大的回报。


推荐阅读
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
author-avatar
勉情于你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有