NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

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

关注

评论

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

国家超算深圳中心计划2年内提升计算能力至少1000倍;图神经网络的生成式预训练论文解读

京东科技开发者

云计算

酷睿i5-10600KF对标锐龙7 3700X,游戏表现领先且售价更香

E科讯

Go 与异步 IO - io_uring 的思考

IceberGu

Linux 异步IO io_uring Go 语言

sharding-jdbc 分库分表的 4种分片策略,还蛮简单的

程序员小富

Java 分库分表

为什么11·11物流一年比一年快?奥秘就在这里!

华为云开发者联盟

物联网 物流 仓储

MySQL-技术专题-STRAIGHT_JOIN

洛神灬殇

【架构师训练营 1 期】第六周学习总结

诺乐

架构师训练营第 1 期第 7 周作业

业哥

物联网时代存储告急 边缘存储如何缓解存储压力?

京东科技开发者

云计算 云服务 云存储

网络直播打赏背后的套路:刺激用户不理智消费

石头IT视角

Flink State 误用之痛,你中招了吗?

Apache Flink

flink

只需三步,带你从0到1玩转React,附源码我一定给你讲明白

小Q

Java 学习 编程 架构 面试

华为20级工程师吐血整理出600页Spring微服务架构设计,绝了!

996小迁

Java spring 编程 架构 微服务

轻量型GPU应用首选 京东智联云推出NVIDIA vGPU实例

京东科技开发者

人工智能 gpu

进“大厂”的故事

北风

职业规划 职业成长 大厂

接口测试(apipost、jmeter和python脚本)

测试人生路

Python 接口测试 测试工具

从零实现一个动态表单设计(编辑)器

徐小夕

Java 编辑器 H5 Node React

阿里二面惨败,痛定思痛狂刷1000+面试题,成功五面上岸滴滴(面经+面试题分享)

Java架构追梦

Java 架构 腾讯 面试 蚂蚁金服

用时半个月,终于把2020年各大公司的Java面试题精选整理成文档了

Java架构之路

Java 架构 面试 编程语言

区块链数字货币商城系统开发技术

薇電13242772558

区块链 数字货币

产品经理团队的管理秘法

马踏飞机747

管理 产品经理 团队

阿里P8架构师呕心沥血整理的【Docker实战】文档带你玩转Docker。

Java架构之路

Java 程序员 架构 面试 编程语言

给打工人熬一锅「毒」鸡汤

Java_若依框架教程

程序员 打工人 毒鸡汤

JAVA魅力之神奇的数组带给你不一样的乐趣

小Q

Java 学习 架构 面试 数组

Java-技术专题-时间工具类的使用方案

洛神灬殇

基于服务设计的线上展览

京东科技开发者

云安全

丑陋的程序员

程序员陆通

程序员 职场 认知

2020双十一终极清单!阿里云CDN&视频云最全优惠攻略

阿里云Edge Plus

CDN

华为云FusionInsight湖仓一体解决方案的前世今生

华为云开发者联盟

数据库 华为 仓库

MySQL-技术专题-创建临时表

洛神灬殇

详解软件行业低代码开发平台以及敏捷开发方案

Marilyn

敏捷开发

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