写点什么

实现创造、协作和创新能力的软件工程

  • 2018-04-18
  • 本文字数:2559 字

    阅读完需:约 8 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Dave Farley 提出,软件工程作为一门学科,必须基于反馈、增量、实验和经验做不断迭代。仅有工匠精神是不够的,工程是一种增强创造、协作和创新能力的放大器。工程原则是持续交付的基石。初始就严格要求,可确保创建更具创新性的更优解决方案,用更少的时间修复生产中的错误,并在部署和配置中应用解决方案。

“软件工程”一词是在 1968 年一次 NATO 的会议上首次使用的。Mary Shaw 指出,尽管在工程原则上已取得了一些进步,但是软件依然尚未构成工程

多年以来,软件开发方法上的持续努力,业已确立了一些支持商业实践的生产方法。但它并没有奠定工程实践所需的技术基础。

Dave Farley 是一位独立软件开发人员和顾问。在 QCon 2018 伦敦大会上,他做了题为“反思“软件工程””的报告。InfoQ 以问答、展示、总结和文章等形式全面报道了本次大会。

InfoQ 采访了 Farley,采访内容涉及:软件工程的定义因素,软件工程的重要性,技艺是如何与工程相关联的,以及应如何构建工程思维。

InfoQ:您如何定义“软件工程”?

Dave Farley:我认为,对于什么是“工程”,软件开发人员存在着很多的误解,更不用说“软件工程”了。我似乎让自己莫名其妙地陷入到大量关于“桥梁建筑”之类的讨论中。因此,我首先要说明“工程”(Engineering)是有别于“生产工程”(Production Engineering)的。第一次去做一件事,与第一千次做同一件事是非常不同的。工程是一个深入创新的学科!想一想那些创造出“好奇号”火星探测车、“重型猎鹰”运载火箭以及第一款 iPhone 的工程技术吧!

由此,我对工程的定义是:

工程是一种应用经验性科学方法寻找如何解决实际问题的有效方法。

我认为要实现软件工程这种“经验性的科学方法”,一些具体细节必须要部署到位。在我看来,称得上是“软件工程学科”的技术必须是:

  • 迭代的;
  • 基于反馈的;
  • 增量的;
  • 实验性的;
  • 经验性的。

我在 QCon 伦敦大会上的演讲“反思软件工程”中,详细阐述了各项内容。

InfoQ: 什么使软件工程如此重要?

Farley:在当前世界中,软件是重要的!奇怪的是,我们这些软件开发人员可能是当前最大程度上改变世界的人。软件依然是一门年轻的学科,并将持续爆炸式增长。

我的看法是,大多数软件开发人员可能从未见到过在软件开发中应用的、真正可称为“工程”的原则。一旦实际应用了这些原则,可看到效率在速度和质量上得到了显著的提高。

这并不奇怪,因为植根于工程的“科学”,是人类最有效的解决问题技术。我认为,我们应该将科学应用于软件开发这个十分棘手的问题上。

另一个看待问题的角度是将软件开发作为一种职业。大众排放造假丑闻,导致包括软件开发人员在内的数人锒铛入狱。从道义上和经济上看,我们应对自己所做出的决定、所创建的代码负责。我对软件行业的一贯看法是,我们常常会忽视这些责任。除非我们能把握并控制责任,否则责任就会完全落在我们的头上。

建造出会致人死亡的桥梁、汽车或飞机的工程师,将承担其专业上的责任。我们同样面临这一挑战。如果我们在测试、衡量和评估我们的想法时,并未没有遵循有效的原则,那么我们对自己的行为会有什么防护措施?

最后给出我个人的观点。与一些工程学科合作,这是一件非常有乐趣的事情。这可创造出更好、更具创新力的问题解决方案。如果在工作中更自律一些,就可以解决更大的问题,花费更少的时间修复生产中的错误,或者给出部署和配置上的解决方案。在我看来,“工程”充分利用了并扩展了我的能力,并且不会以任何方式减损软件开发的创造性。

InfoQ: 工匠精神是如何与工程关联的?

Farley:在我看来,“软件工匠”(Software Craftmanship)运动的产生,源自于上世纪 90 年代和 2000 年初人们对“大型仪式”和瀑布式流程等方法的恐惧心理。这类规划方法中包括大量的“发现”,对于可变过程而言基本上是错误的模型。相较而言,工匠精神是一个进步。

工匠精神曾是一种正确的做法。但是如果我们从生产的历史发展看,就会发现工匠过程其实是一个低质量的过程。设想一下,是否可以依靠工匠去制造 iPhone 或喷气式战斗机,或者由工匠领衔去实现太空计划?

仅有工匠精神是不够的。工程是一种放大器,它并不会妨碍我们的创造、协作和创新能力,而是会加强它们。

我认同“软件工匠”运动中的许多理念,特别是学徒风格的培训、持续学习和改进等。这些理念同样适用于“软件工程”学科。这类工程学科使我们得到进一步的提升,可在我们陷入困境时指引前进的道路,并扩大了我们的工作质量和生产力。

InfoQ: 如何建立工程思维?

Farley: 我认为这可归结为一种“代代相传”的改进。如果我们认同“软件工程”中的一些原则,那么就应该将其传承下去,形成一种常规并可预料的做法!

我给出的原则就是一个很好的出发点,即基于快速反馈、增量、实验和经验进行迭代。

我偏向于认为,发展持续交付的方法就是以这些工程原则为基础,但必须做得更加深入。

对于什么是真正有效的工作,我认为目前存在所存在的共识要高于我以前所见过的,至少在我们认为是自身专业领域思想领袖的人群中是如此。因此,对于再次尝试定义“软件工程”的真正含义,当前应该是一个很好的机会。

如果我们能够就该定义达成广泛的一致,那么我们就可以着手建议教育机构和专业团体教授去正确的内容。举一个小例子,在学习“计算机科学”的人中,有多少人了解了“科学方法”以及“实验”在该课程中的重要性?有多少人将“道德”作为该“专业”课程的一部分?此类问题普遍存在于大多数的工程学科中。

InfoQ: 如何评价当前这一代开发人员、初级和高级技术人员?为遵循软件工程,他们应怎样做?

Farley:我对所有(初级或高级)软件开发人员的第一条建议是,在解决问题中采取更为科学的方法,正确对待科学方法。

基于实验做出思考,收集数据做出决定,实验你的想法。不要认定你的第一个猜测会是正确的。事实上,应假设你的所有猜测都是不正确的,并且采取如下的方式工作:1)有助于快速发现自身错误的方式;2)一旦犯错误但并不会判你死刑的方式。

InfoQ: “工匠”和“工程师”两者有什么差别?

Farley: “工匠”只是猜测事情可能会工作。而“工程师”做出猜测,对猜测采取措施,以确定其中可能出错的地方。

查看英文原文: Software Engineering for Creativity, Collaboration, and Inventiveness

2018-04-18 19:001223
用户头像

发布了 391 篇内容, 共 133.9 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

为什么私有方法上的Spring Cache注解不生效?

看点代码再上班

spring 源码 程序员 spring aop Spring Cache

【LeetCode】一手顺子Java题解

Albert

算法 LeetCode 1月月更

一、什么是计算机

喵叔

28天写作 1月月更

Kubernetes集群监控

Rayzh

Kubernetes 云原生 Prometheus

复盘2021,像做产品一样来做自媒体

菜根老谭

自媒体 菜根老谭

设计原则与思想:单一职责原则

努力努力再努力

架构训练营 模块八

dog_brother

「架构实战营」

040022-week1-algorithm

InfoQ_70156470130f

保姆级教程,终于搞懂脏读、幻读和不可重复读了!

王磊

架构实战营模块八作业

孙志强

架构实战营

架构实战营 - 模块八作业

随风King

「架构实战营」

为什么每次加入一个新的团队,都会觉得遗留系统是一坨“屎”?

蔡超

重构 架构设计 团队文化

模块8作业

忘记喝水的猫

架构训练营

看金沙遗址-理科生博物馆的正确打开方式

wood

成都 300天创作 博物馆 金沙遗址

模块八总结

Geek_1d37ea

架构训练营

是分是合?探讨影响研发组织设计的主要因素

菜根老谭

企业管理 研发组织 组织设计

莫让虚线管理形同虚设,再论研发组织的设计逻辑

菜根老谭

企业管理 研发组织 组织设计 虚线管理

架构训练营 - 模块 8 作业

焦龙

架构训练营

设计消息队列存储消息数据的 MySQL 表

Beyond Ryan

模块8作业

Asha

架构训练营 - 模块八作业

VegetableBird

架构训练营

模块八 设计消息队列存储消息数据的 MySQL 表格

小朱

架构实战营

架构训练营 模块八作业

吴霏

#架构训练营

模块八作业

Geek_1d37ea

架构实战营

Excelize 2.5.0 正式发布,这些新增功能值得关注

xuri

Java golang Excel go语言 Excelize

架构实战营模块八作业

spark99

架构实战营

设计消息队列存储消息数据的 MySQL 表格

渐行渐远

架构实战营

02 Prometheus之监控方法论及指标

穿过生命散发芬芳

Prometheus 1月月更

Rust 入门 快速配置 Rust 开发环境并编写一个小应用!

贾献华

rust

【架构实战营】模块八作业

liu🍊

Kubernetes集群日志搜集

Rayzh

Kubernetes 云原生 ELK Stack

实现创造、协作和创新能力的软件工程_文化 & 方法_Ben Linders_InfoQ精选文章