原文作者:Jeff Atwood

2009年7月,Tom DeMarco在《IEEE Software》杂志上发表了一篇论文,题为“Software Engineering: An Idea Whose Time Has Come And Gone?”(软件工程:这个概念已经过时了?)。读后让我大跌眼镜。你也来看看吧:

年出版)。很多初露头角的软件工程师在量化工作和规划项目时都把那本书奉为圭璧。如今我在反思之中,我想知道:书里的建议在那时候正确吗?现在还有用吗?我现在仍然相信“度量”是任何成功的软件开发活动所必需的吗?我的回答全部是否定的。

我慢慢地得出这样的结论:软件工程——这个概念流行过,但现在已经过时了

无论是现在还是将来,软件开发总是带有点试验性质的。尽管实际的软件构造未必是试验,但它的概念却是。这是我们应该专注的地方。我们原本也应该一直专注在这方面。

读过上面这些文字之后,如果你的脑袋瞬间爆炸了,不必紧张,我也一样。为了缓解你的头痛,我强烈建议你完整地读一下那篇论文。文章不长,也就两页。(点击这里下载PDF文件,英文或阅读中文版

要知道,Tom DeMarco(汤姆·迪马可)可是软件行业里最受尊敬的权威人物之一。他与Timothy Lister合著了具有开创性并且辉煌一时的《人件》,还有很多其他堪称经典的软件项目管理方面的图书,比如《与熊共舞》。对于一个像Tom这样德高望重的人,他居然站出来声嘶力竭地喊着“软件工程已死”……我们也只有瞠目结舌的份了……

这应该算是一件大事吧!让人惊慌失措的大事!

然而,它同时也是一种解脱,就好比是(举重运动员)从胸口挺起了一个决定性的重量。现在我可以公开承认了,作为一名软件开发者,在过去5~ 10年的职业生涯旅途中,我慢慢地认识到:我们所做的是技艺,而不是工程。我可以骄傲地说这句话了!我已经释然,对自己没有丝毫的怀疑!

最近,Joel Spolsky(我的创业合作伙伴)似乎也有相似的顿悟。他在“The Unproven Path”(未经证实的方法)一文中这么写道:

关于如何开发软件,我内心深处一直坚持着一些想法。但是,我几乎从未对别人说过。事实证明,没说是明智的,因为当组织成形时,几乎所有这些原则都用不上。

这是为什么呢?我仍然在试图解开其中的谜。在业务和软件工程方面,我曾抛弃了7条承载着自己信念的原则,结果却安然无恙。那么,是我过去太过于谨慎了吗?也许是因为那只是一个对我来说不太重要的项目(不是我的主营业务),所以我才愿意“鲁莽”一些。但那次经历却很好地给我提了一个醒:在做一个全新的东西时(并且你不知道将来何去何从),把一些条条框框抛之脑后并无大碍。

没错,需要的话,我可以在软件工程方面为你正在做的项目提出很多防御性的告诫:项目类型(项目要完成的使命当然是很关键的)、规模(自然要向Google看齐)、目标受众(显然每天要有几百万用户)等等。

但是,我不想那么做。

Tom DeMarco似乎在说(最起码,我想这么说):在软件开发项目上,控制其实是一种错觉。如果你想推进你的项目,唯一可靠的方法是培养起一种高超的软件技艺和职业精神。

每天都兢兢业业地磨练着手艺的那些程序猿和程序媛,他们对创造充满了热情,做着一些对他们自己很重要的事情(或许还能通过某种微妙的方式改变世界)——这些人和他们的项目才会最终取得成功。

其他的一切都毫不相干!

Jeff Atwood:软件工程已死?的更多相关文章

  1. 转:Jeff Atwood倾情推荐——程序员必读之书

    Jeff Atwood倾情推荐——程序员必读之书 英文版:<Code Complete 2>中文版:<代码大全(第二版)>作者:Steve McConnell译者:金戈  汤凌 ...

  2. Jeff Atwood倾情推荐——程序员必读之书

    英文版:<Code Complete 2>中文版:<代码大全(第二版)>作者:Steve McConnell译者:金戈  汤凌  陈硕  张菲出版社:电子工业出版社出版日期:2 ...

  3. wp已死,metro是罪魁祸首!

    1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...

  4. 泰泽新闻:英特尔三星双否认泰泽Tizen系统已死

    7月8日 据媒体TizenExperts报道,关于“Tizen系统跳票”的传闻已经遭到了英特尔和三星否认. 此前传闻三星自行研制的智能手机Tizen操作系统流产,但如今已经遭到了官方的否认. 英特尔三 ...

  5. Android首席设计师宣称移动概念已死,开发人员应该面向屏幕编写应用而非移动

    腾讯科技对Android首席设计师Duarte"移动已死"訪谈内容的翻译错得离谱,被到处转载,误人视听. 而要真正理解Duarte所想表达的含义,须要深入了解互联网前沿设计理念以及 ...

  6. MVC模式已死

    MVC模式:Model模型 View试图 Control控制器,是目前主流模式,被当作服务器软件入门基本模式学习和掌握,主流框架Struts 1/2 JSF Wicket基本都顺理成章支持MVC模式. ...

  7. 王垠:Lisp 已死,Lisp 万岁!

    王垠:Lisp 已死,Lisp 万岁!_IT新闻_博客园 王垠:Lisp 已死,Lisp 万岁!

  8. JVM学习记录-对象已死吗

    前言 先来回顾一下,在jvm运行时数据区,分为两部分,一个部分是线程共享区,主要包括堆和方法区,另一部是线程私有区分包括本地方法栈,虚拟机栈和程序计数器.在线程私有部分的三个区域是随着线程生和灭的.栈 ...

  9. [转载]致创业者:APP已死 服务永生

    前几日,有位创业者和我讲他在带领团队做一个将爱踢球的人集中在一起的App,我告诉他你的创业方向错了.原因在于你的目的是要为爱踢球的人提供服务,而你现在却在竭尽全力的做App,你应该做的是设计你为爱踢球 ...

随机推荐

  1. JSON概述

    错误理解:         一直以为JSON就是对象,拥有跟js对象类似的特征:{key:value}形式, 以至于在自己的思维定式中就出现了一种很可怕的情景:居然不知道怎么去解释习以为常的json是 ...

  2. 用 ConfigMap 管理配置 - 每天5分钟玩转 Docker 容器技术(159)

    Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...

  3. koa2+webSocket 聊天室

    做了一个简单的的聊天室,用来看看 koa和 websocket的使用还是挺好的,已经放到gitHub. https://github.com/zhaowanhua/koa2WebSocket

  4. spring的@Transactional(rollbackFor=Exception.class)的使用

    Spring框架的事务基础架构代码将默认地只在抛出运行时和unchecked exceptions时才标识事务回滚. 也就是说,当抛出个RuntimeException 或其子类例的实例时.(Erro ...

  5. 修改原生单选框样式(vue单选组件)

    一.效果如图 二.实现 修改单选样式 //html <div class="radio-wrap"> <input type="radio" ...

  6. H5canvas基础

    本篇文章开始讲解HTML5的核心功能之一:Canvas 通过Canvas可以动态生成和展示图形.图表.图像以及动画. Canvas API功能非常多,我们将讨论最常用的功能. 我们先新建一个canva ...

  7. ECC公钥格式详解

    本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥,最后介绍如何使用Java生成.解析和使用ECC公钥. ASN.1 Abstract Syntax Notation ...

  8. 日历类和日期类转换 并发修改异常 泛型的好处 *各种排序 成员和局部变量 接口和抽象类 多态 new对象内存中的变化

    day07 ==和equals的区别? ==用于比较两个数值 或者地址值是否相同.  equals 用于比较两个对象的内容是否相同   String,StringBuffer.StringBuilde ...

  9. CSS 常用的命名规则

    (1)页面结构 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sidebar 栏目:column ...

  10. FJUT寒假作业第二周C题解(位运算)

    题目来源:http://210.34.193.66:8080/vj/Contest.jsp?cid=161#P2 题意比较好理解.如果直接按题目要求一步一解.一定超时.作为一个懒人也不会这么暴力一个肯 ...