HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

  • 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:001266
用户头像

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

关注

评论

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

人工智能对游戏世界的革新

测吧(北京)科技有限公司

测试

八个针对高级职位的高级 JavaScript 面试题

树上有只程序猿

JavaScript 程序员 面试

一文读懂GPU的十个重要参数

Finovy Cloud

gpu GPU服务器 GPU渲染

愿意折腾、相信未来的年青人,都在2050

赵新龙

TGO鲲鹏会 2050

AI如何改变设觉特效

测吧(北京)科技有限公司

测试

关于低代码这件事儿

互联网工科生

低代码 应用开发 可视化开发

Wasm软件生态系统安全分析

OpenHarmony开发者

OpenHarmony

人工智能在新能源和环境领域的角色

测吧(北京)科技有限公司

测试

软件测试 | AI革命性技术未来的领域

测吧(北京)科技有限公司

测试

illustrator 2023 beta版ai功能 Illustrator 2023 mac(Ai2023矢量设计软件)v27.8.1中文激活版

mac

Illustrator 苹果mac Windows软件 矢量图形编辑软件 Illustrator 2023

安全攻防丨反序列化漏洞的实操演练

华为云开发者联盟

安全 开发 华为云 华为云开发者联盟 企业号9月PK榜

点对点传输技术在智能交通中的应用:实现车辆间的实时通信

镭速

大文件传输 点对点文件传输

网线,是选圆线还是扁线?什么材质优选?

小齐写代码

颠覆传统数据集,开启人工智能新篇章

百度开发者中心

人工智能 数据 文心一言

RabbitMQ 如何实现延迟队列?

王磊

Java Java面试题

2023最新大数据传输慢的真正原因与对应解决方案

镭速

大文件传输 大数据传输

孙文龙理事长参加第二十五届中国国际软件博览会开幕式并发表主题演讲

开放原子开源基金会

物联网的崭新时代:AI驱动的智能世界

测吧(北京)科技有限公司

测试

聚焦2023全球智博会 百度CIO李莹:大模型加速工作生产力变革

Geek_2d6073

软件测试/测试开发丨Web自动化测试 关键数据记录

测试人

Python 程序员 软件测试 自动化测试 测试开发

软件测试/测试开发丨Python 数据结构与算法

测试人

Python 程序员 软件测试 测试开发

小灯塔系列-中小企业数字化转型系列研究——固定资产管理测评报告

向量智库

DevSecOps 中的漏洞管理(上)

禅道项目管理

DevOps

如何调试 C# Emit 生成的动态代码?

互联网工科生

C# Emit

总投入超5000万元的开源大赛火热报名中

开放原子开源基金会

开源

引领生产力新时代

百度开发者中心

人工智能 文心一言

什么样的家庭条件,现在还招人?

赵新龙

TGO鲲鹏会 招聘

mac上好用的解压缩软件 iFastZip - Extract RAR&ZIP&7Z中文版

mac大玩家j

Mac软件 解压缩软件 解压缩工具

row_number函数的不稳定性

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号9月PK榜

Little Snitch 5 小飞贼工具 +Little Snitch 5 激活密钥

胖墩儿不胖y

防火墙 Mac软件 防火墙软件

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