软件开发充满挑战,而且乐趣无穷,然而总有一些因素阻止团队成功完成 IT 项目。这些因素通常与工具和技术无关,是人阻碍了项目的成功。 Venkat Subramaniam 日前谈到日常软件开发的事实和谬误。他在最近的 CodeMash 2009 大会上作了一个主题演讲,谈及开发人员和项目经理为了保证项目成功应该注意哪些因素。
Venkat 在主题演讲中提到下面这些软件开发的谬误:
更多的资金和时间可以解决我们的问题:
Venkat 说,在开发项目时,清晰的“业务目标”非常重要。他给出的统计数据中提到:在项目中有 64% 实现的功能很少使用或是从未使用过;项目持续时间越长,成功的可能性就越小。他认为:软件开发人员要开发“有能力、有意义的软件(capable and relevant software)”。
大厂商提供的东西就一定好:
他质疑是否真的有必要用 EJB (在某些情况下)让开发工作变得复杂和过于“重量级”。对于这个问题,开发人员应该承担一定的责任(因为使用 EJB 实现几乎所有的用例)。EJB 的大规模采纳,厂商之间的技术竞争(而不是需求)有一定的原因。需求应该决定技术,而不是由技术决定需求。而且在创新出现之前就急着标准化,这样的发展方式不怎么样。 Rails 和 Spring 类似框架的出现告诉我们:先创新再标准化,由社区而不是厂商驱动,确实可以产生实用、有意义的开发框架。
我们进行离岸外包是因为可以节省资金:
Venkat 谈到目前的离岸外包模型,并对其是否有效提出了质疑。他对比了另一种模型:公司在美国本土完成所有的工作,可是仍然不能成功。所以他提出下面这个问题:为什么让设计人员和开发人员远隔重洋,你就期待能得到不同的结果?很多公司使用离岸外包模型,是因为即使项目失败了,成本的开销却可以比以前少,也就是所谓的“Fail-for-Less”策略。他建议:项目经理应该雇佣聪明能干的开发人员,这些人应该有很强的自学能力,再给他们配备最好的开发工具,这些工具要能把握软件开发工作的本质,而不可华而不实。由精干的开发人员组成的小型团队,其效率要胜过水平低下的开发人员构成的大型团队。他强调:既然离岸外包已经不可逆转,我们就应该充分利用全世界范围内的人才。
动态语言不安全:
他提到:Java 是强类型语言,可如果编码时不小心,还是有可能得到 ClassCastException, Ruby 和 Groovy 也是这样。单靠强类型并不能改进代码质量。编译器有用,但是经常被过于看重,因为没有哪个编译器可以完全验证程序员的意图。他也推荐开发人员应该利用像 Scala 这样的全新动态语言。
静态类型是保证代码清晰的关键:
Venkat 说:有了纪律,开发人员不管使用哪种语言,都可以编写出易于阅读、理解和维护的代码。为了保证代码清晰易懂、易于维护,他建议使用下列实践:
- 让方法和类的名称具有可描述性。
- 编写短小的类和方法。
- 让团队互动和交流。
- 编写自动化单元测试。单元测试可以覆盖各种正常和异常的状况,它会强迫你用正确的方式设计。
他也提及单元测试在软件开发生命周期中的重要性。单元测试等同于实际使用的软件,可即使它这么好,很多程序员也都不太愿意用它。单元测试有助于提升代码的质量,如果代码可以测试,它的设计就是好的。在演讲的总结阶段,Venkat 强调:要表示出软件的“意图”,这非常重要。
查看英文原文: Venkat Subramaniam on Facts and Fallacies of Everyday Software Development
评论