程序员的生产力始于需求而非工具

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/07/programmer-productivity

Marco Behler是一位资深开发者与市场营销人员,同时也是Marco Behler GmbH的创始人。近日,Behler就程序员生产力这一话题展开论述,在社区产生了较大的影响。

你真的知道影响程序员生产力的关键因素是什么吗?是VIM、Emacs、最新的Haskell Web框架,还是钟爱的NoSQL数据库呢?遗憾的是,如果你将关注点放在工具、框架或是流程上,那就说明你还是没有真正理解这个问题。我认为,影响程序员生产力的关键因素在于起点:恰当的需求。

作为开发者缘何要关注需求,这难道不是业务人员的事情?

当然了,创始人/产品经理/团队领导必须要关注这个问题:到底开发什么才能让客户最终埋单呢?但如果从开发者的视角看待这个问题会是怎样的呢?有时会出现这样的情况,有人拍打桌子,大叫:现在就开始开发XYZ,马上,立刻,如果中间出现问题,我们可以在开发过程中解决,这就叫做先发优势?其实,我们称之为:尽快开始,但永远不会结束。很有可能你所开发的一半以上的东西都是不清晰的。

你怎么知道自己完成了?

意料之中的,如果不能完全理解需求,那就会导致遗漏,当问起什么时候能够开发完,你可能会忘记这个,忘记那个。那么该如何测试不清晰的需求呢?这与你喜欢的BDD工具没有任何关系。如果输入不清晰,那么测试也不会清晰,输出就更不清晰了。

你总是自我激励,对吗?

不过更糟糕的是,频繁的不清晰的需求是个信号,表示业务人员不确定客户到底想要什么。遗憾的是,这也表示你所开发的很多工作都是徒劳无益的。如果这种情况频繁出现,就会对程序员的生产力造成很大的破坏,这将严重影响程序员的效率。

到底什么才是恰当的需求?

那么什么才是恰当的需求呢?我认为恰当的需求的制定过程应该是下面这个样子的:

  • 需要业务人员与程序员共同讨论,并且经过双方充分的沟通
  • 需要不断拆解、拆解、再拆解
  • 不断打磨,经得起推敲

我是个程序员,需求的事与我无关?

诚然,在大型组织中可能会有专门的业务分析师,他们的主要工作就是在将详细的需求规范传递给实现团队之前对其进行不断的完善。在理想情况下,这么做是完美无缺的,你只需坐在那儿编写代码就行,不过实际情况却并非如此。

无论怎样,组织的规模越小,程序员需要处理的事情就越多。公司的创始人可能会拍着桌子大喊:作为程序员的你不仅要负责实现,还要关注需求的产生过程。

无论怎样,你都应该成为一名专家

对于你来说,可能阅读AngularJS 2.0的升级路径要比与客户讨论领域问题和需求更有趣。不过,我想说的是,你的技术、对框架或算法的理解只是你每天工作的一部分。对于所有开发工作来说,基础则是“恰当的需求”。

Behler的文章刊出后很快就引起了众多开发者的共鸣,很多人也纷纷表达了自己的观点,下面摘录出一些典型反馈以飨读者:

Sasi Pallekonda说到:

说得太棒了!开发者不仅要考虑该使用什么数据结构,还需要思考需求是如何匹配最终用户的,并且如何实现需求,读了Behler的文章获益匪浅。

Erik Gollot说到:

非常同意文中的观点,我现在对如何编写好的需求非常感兴趣,因为根据我的经验,用户故事是远远不够的。

Wes Higbee说到:

非常同意Behler的看法,对此我也做了深刻的思考,我认为:方向要比速度更为重要,只有确定了方向,速度才是有意义的,否则再快的速度也是徒劳无益的。

Jussi Laasonen说到:

很多时候,人们都认为敏捷软件开发只不过是“立刻开始构建XYZ”,但事实上,这么做是完全错误的。

Fayez Naccache说到:

我已经在我们称之为精益创业的组织中工作6个多月了。在这期间,我们没有计划、没有详细需求、没有你所说的恰当的需求。我觉得工作起来非常困难,一点动力都没有。我很喜欢文中的这句话:尽快开始,但永远不会结束;还有无论怎样,组织的规模越小,程序员需要处理的事情就越多。这对我现在的工作来说真是再恰当不过的描述了。

Eliseu Monar说到:

Eric Evans曾介绍过一种“普适语言”,可以消除团队成员之间沟通的障碍,我非常喜欢这本书。Martin Fowler对此也有过介绍:

普适语言是Eric Evans在Domain Driven Design一书中所使用的术语,用于描述如何在开发者与用户之间构建出一种通用且严格的语言。该语言应该基于软件开发中的领域模型,因此它应该是非常精确的,因为软件是无法处理模糊问题的。

Evans表示在与领域专家沟通时使用普适语言是非常重要的,这有助于测试和领域模型的实现。此外,普适语言(以及模型)还应该随着团队成员对于领域理解的不断增强而不断演化。

普适语言的提出者Eric Evans对此则认为:

通过大规模使用基于模型的语言,我们可以构建出一个完整且可理解的模型,该模型由一些简单元素构成,这些简单元素最终能够表达出复杂的概念。领域专家应该对那些笨拙且无法传达领域含义的术语或结构持反对意见,开发者应该警惕那些影响设计的模糊之处与不一致性。

Behler关于程序员生产力的文章引起了很多人的共鸣,同时他也专门编写了一本名为Customer Requirements的图书。该书主要介绍了需求沟通的技巧、如何恰当地进行估算、如何防止模糊不清的需求产生、如何与同事和客户沟通需求、恰当合理的需求对于开发与测试会产生哪些积极影响,同时每一章都提供了实际的例子供大家参考。

程序员生产力这一话题是每一个开发人员都津津乐道的,那么对于你来说,影响生产力的因素都有哪些呢,不妨分享出来我们一同讨论。

时间: 2024-11-03 03:39:55

程序员的生产力始于需求而非工具的相关文章

程序员编程生产力相差10倍意味着什么?

在软件工程研究中,被验证得最多的结论就是对于同等经验的两个不同程序员,在效率和质量上可能会有10倍的差距.研究人员还发现,这种差距也适用于团队级别上,也就是说在同一行业内的不同的团队也是如此. 软件开发中的个人效率的变化 首先发现不同人在编程生产力上的巨大差距的研究,是1960年由Sackman.Erikson以及Grant三个人完成的.他们研究了工作经验平均在7年的专业程序员,并发现最好和最差的程序员写新代码的时间比为20∶1:调试次数是25∶1:程序大小是5∶1:程序的执行效率是10∶1.他

程序员眼中的 SQL Server-非聚集索引能给我们带来什么?

 我不会说一些数据库概念,所以只能用做一些实践来理解概念的意义,以下应用场景中的用例是虚拟出来的,只是作为个人研究使用. 程序员应该有刨根问底的怪癖,虽然这是个数据库问题. 应用场景 有一个 Product 表,字段如下: 数据添加脚本: begin tran declare @index int set @index=0 while(@index<1000000) begin insert into [dbo].[Product]([Name],Remarks,ProviderID,[Ti

Java程序员必备的6款最佳开发工具

工欲善其事,必先利其器.每一个 Java 程序员都有其惯用的工具组件.对于 Java 程序员,各种有用的软件和工具泛滥成灾.初级开发人员要么找不到合适的工具,要么在寻找过程中浪费了大量的时间.下面,我将为大家介绍 6 款 Java 开发必备工具. 1. Notepad++ Notepad++是编辑 XML.脚本,甚至做简单笔记的最佳工具.关于这个工具最棒的一点是,你在 Notepad++ 打开过的每个文件,即使你关闭之后,它仍然存在.所以它能减少因意外删除重要内容而造成的麻烦.它还可以当作比较插

给程序员推荐一些提高工作效率的工具

转载: IT江湖 2014年12月03日 于 IT江湖 发表 http://www.itjhwd.com/gcxytjyg-3/ 前几天给大家推荐了一些好用的软件,但是还有很多不错的软件,大家也都反馈了不少,下面我将继续为大家推荐一些高效率的软件,也欢迎大家补充.再次 声明,这些软件我都亲身用过,不喜欢的,或者觉得这些软件菜鸟才用的,那请你把鼠标移到右上角(windows)OR左上角(Mac)点击关闭,谢谢 给程序员推荐一些提高工作效率的工具(一) 给程序员推荐一些提高工作效率的工具(二) Be

深受程序员喜爱的4款Web开发工具,可极大的提高生产力

对于开发人员而言,时间始终是稀缺资源. 从严格的最后期限到多个项目——到出乎意料的需求——我们的时间总是有需求的.因此,我们一直在寻找有助于提高生产率的工具和流程. 接下来小编就将介绍4种Web开发工具,希望它们能够给身为程序员的你带来一定的额外生产力. 一起看看吧 一.通过Oh My Zsh掌握命令行 Windows和OS X的默认命令行界面(命令Prompt和Bash)可能令人生畏且难以自定义.如果你不是这方面的专家,你可能会重复那些可以自动完成的琐碎工作. Oh My Zsh是一个基于Zs

程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~

原文地址 10x 起源于技术界一个流行的说法,即最好的程序员是超级明星,其生产力相当于同行的 10 倍: Google 园区以好玩的设施闻名:小憩舱.球坑.按摩.干洗.随便吃到饱的自助餐.(为了拍人才马屁,留住人才): Facebook 最近宣布将会其女性员工冷冻卵子买单: 一名好的工程师能想出支撑上千万人的算法,而伟大的工程师想出的算法能支撑 10 亿人,其给公司创造的价值放大了 1000 倍. -- 看来,程序员是需要经纪人的.我记得,几年前我在一个群里,问过一个问题:1+1=?一个菜鸟程序

10年工作经验老程序员推荐的7个开发类工具

做.NET软件工作已经10年了,从程序员做到高级程序员,再到技术主管,技术总监.见证了Visual Studio .NET 2003,Visul Studio 2005, Visual Studio Team System 2008, Visual Studio 2010 Ultimate,Visual Studio 2013一系列近5个版本的变化与亲自使用.每一个版本都有深刻有意义的变革.Visual Studio .NET 2003 极力推广的Web Services虽然没有很流行,但是它开

10年.NET老程序员推荐的7个开发类工具

做.NET软件工作已经10年了,从程序员做 到高级程序员,再到技术主管,技术总监.见证了Visual Studio .NET 2003,Visul Studio 2005, Visual Studio Team System 2008, Visual Studio 2010 Ultimate,Visual Studio 2013一系列近5个版本的变化与亲自使用.每一个版本都有深刻有意义的变革.Visual Studio .NET 2003 极力推广的Web Services虽然没有很流行,但是它

《程序员修炼之道》之基本工具读后感

在第二章中,我知道了注意时效的重要性,然后在第三章,我了解到了我们如何去运用基本工具去让我们的时效性增强 第三章开头就有一句话让我的记忆十分深刻,那就是作为注意时效的程序员,我们手中的基本材料不是木头,不是铁块,而是知识,我们搜集顾客的需求,然后将其转化为知识,随后又在我们的设计,实现,测试,以及文档中表达这些知识. xml,sgml,html都是良好定义的结构的纯文本的例子,我们可以通过纯文本,做到某种二进制的能做的每一件事,包括这版本管理 然而纯文本也具有一定的缺点,存储空间较大,处理纯文本