跳到主要内容

保存的帖子

背景中的软件工艺

Dave Nicolette |龙头
戴夫尼科尔特 高级顾问
读: 背景中的软件工艺

背景中的软件工艺

关于过去几年中变得流行的术语有一些辩论:软件工艺。基本思想是,作为软件专业人士,我们应该关注我们工作的质量。毕竟,我们否则会在哪里?

这可能听起来是一个无害的概念,但你可能会惊讶于一些人对这个词的本能反应。到底是什么让他们不喜欢呢?

我遇到了两个反对意见;更准确地说,有两大类反对意见:

  • 作为专业人士,我们应该专注于向客户提供业务价值,而不是我们工作的技术细节;亚博vip9通道和
  • 广泛称为“软件开发”的活动并不是真的工艺,所以这个词软件工艺不适合。

我认为这些是有效的顾虑。我也认为我们需要能够谈谈我们的工作,而无需前言,并通过段落长的免责声明捍卫我们选择说出或写作的每个单词。所以,让我们在中间的某个地方找到我们可以见面的地方。

我们应该专注于价值还是技术技能?

一个广泛关注的领域是软件专业人员需要记住价值他们的工作。在这种情况下,我们的意思是价值在精益的意义上:价值是由我们的客户定义的,而不是松散的意义上,任何稍微有用的东西都可能被视为“有价值的”,如果你斜眼看得合适的话。换句话说,价值是客户愿意支付哪些人。

例如,大多数能称之多的软件开发人员了解的重要性测试在他们的工作中。但是,客户不会基于其测试覆盖率购买软件产品。这不是他们付出的“东西”。作为开发人员我们重视测试,但这并不使其成为客户定义价值。

令人担忧的是安全,监管合规性,可访问性,审计性和可用性相同。一种缺乏这些东西的软件产品,简单地未完成。(批准,有一些产品,其中一个或多个这些因素是其满足其市场需求的能力的关键;但是现在让我们不要继续正切。也许以后。)

当然,客户希望我们的产品正常工作并宽容普通错误。这是一个基线期望,而不是价值主张。

这是一个反对这个词的一个症结,软件工艺。有担心通过专注于我们工作的技术细节,我们将失去焦点客户的需求。

表面上,这听起来像是一个有效的问题,但在反对意见本身中,可疑的未声明的假设很普遍。

当软件开发团队收到行进订单时(是的,我知道你不喜欢那样;熊一分钟),关于产品的潜在客户价值的所有决定已经制作。开发团队的任务是实现产品。呼吁专注于技术优先级。这种焦点在右侧上下文和正确的时间内应用,不会干扰或降低向客户提供的价值。实际上,软件产品本身就是主要的,在许多情况下只要用于交付该价值的车辆。它必须建好。

现在,让我们回到关于前进命令的攻击性声明……开发团队喜欢将自己视为价值流的一部分,他们一部分。它只是评估市场的角色,确定客户需求,分配资金,或优先考虑工作。最好是他们对他们提供的价值明确了解,但他们的日常和分钟的焦点必须继续建立正确的东西,相信他们的同事在价值流的其他部分确保我们都是建立正确的东西

当然,在非常、非常、非常、非常小的业务中,这是不同的。大多数软件开发人员都深埋在大型企业IT部门的内部。他们不知道真正的客户需要什么。他们从未见过真正的客户。如果他们在组织中换到一个能让他们接触到真正客户的职位,他们就会从动手软件开发中脱离出来。所以,当他们处于技术角色时,专注于技术卓越是合适的。

那么,它是一件工艺还是不是吗?

是的,是的;它是不是。

作为人类的相对较新的活动(仍然很好的百年历史),软件开发并没有足够长的时间,让人们感觉好像真的明白它是关于什么的。同时他们正在努力了解软件开发,它在他们的脚下变化;这仍然是一个紧急的纪律。大多数人都依靠隐喻来帮助他们获得对他们不明显的想法的处理。软件开发有各种称为工程,建设,制造,科学,艺术,人类合作和工艺。那是吗?

软件开发是一种工程形式吗?

在某些方面,是的。在过去的几年里,我们学到了一些东西,并以这样或那样的方式将其编纂成软件设计原则。应用这些原则对我们来说是明智的,而不是重复前几代开发者的所有错误。所以,是的,在专业级别的软件开发中有一定程度的“工程严谨性”。

你已经听说过一些这些原则。他们是这样的东西关注点分离参考透明度, 和界面隔离。他们通常会在一些简洁的首字母缩写中包装,这很容易记住,如把握或坚实。

刚刚定义的一些原则不足以使软件开发成为真正的工程学科。这只是一个比喻。毕竟,没有人必须获得专业的工程师凭证来获得工作写作软件。

软件开发等施工吗?

在某些方面,是的。大多数业务亚博vip9通道应用程序在某些框架或容器的控制下运行。至少,代码取决于提供某些核心功能的操作系统,例如算术,并提供对支持/输出等支持功能的访问。许多当代应用程序生活在多层其他软件中,如Matryushka娃娃:操作系统运行一个服务器,该服务器托管一个基于实现参考体系结构的框架的应用程序的容器。

首先,业务解决方案通常包括在不同平台上生亚博vip9通道活的多个应用程序。整体解决方案有一个建筑学,这是从建筑业借来的概念和术语。消息在组件之间流动的方式、数据的结构化方式、异常的处理方式、数据库完整性的维护方式都有“体系结构”。是的,这和建筑工程有一些相似之处。

但这只是一个类比。您可以为不完整的软件产品提供“垂直切片”功能,您的客户可以使用它。你无法送到一间房子的第二卧室,一切都是居住的。所以,它并不像建筑。

软件开发像制造业吗?

在某些方面,是的。软件开发和制造之间的主要区别是事实软件不是物理的。这对如何构建和交付有几种影响:

  • 我们不会从原料生产软件产品的每个副本。我们只是建立第一个,然后根据需要复制它。
  • 交付是可行的部分并从客户那里得到关于如何改进它的反馈。实体产品就更难了。

除了这些区别之外,构建软件的活动和运行装配线的活动之间还有许多相似之处。即使我们没有一次又一次地复制相同的小部件,我们也遵循了一组一致的步骤来构建软件解决方案的每个增量。如果不是这样,就不可能实现软件交付管道的自动化。是的,这和制造业有一些相似之处。

软件开发是科学吗?

在某些方面,是的。整个领域从科学研究中出现。计算机科学的科学方面包括正式逻辑(数学领域),电子,物理,化学,神经科学等。建筑软件方法首先由应用科学的人员阐述。至今,与软件相关的大学学位计划往往是(a)计算机科学或(b)管理信息系统。最近只有教育机构签署了活动软件开发作为一个离散的纪律。因此,软件开发在科学中具有深厚的根源。

写入软件的一些域名比商业应用程序开发更为“科学”。亚博vip9通道数学和统计应用,人工智能和其他领域呼吁开发的软件直接实现科学原理和模型。在这些域名工作的开发人员必须有很强的了解科学。

然而,在大多数情况下,世界上的软件开发并不完全是“科学”。显然,目前使用的大多数现有的遗留代码都不看起来好像是由任何科学思想的人设计的。和从业者的大多数研磨软件开发和支持工作不需要太多“科学”。它大多数涉及重复,在同一代码基础上一次又一次地进行常规修改。

所以是的,有一些有效的类别与科学,但建筑软件的活动并不完全应用科学。这只是一个比喻。

软件开发是艺术吗?

在某些方面,是的。软件的设计和开发可以非常喜欢任何其他创造性的活动,并且可以在写一段音乐或诗歌时体验相同的情绪反应。您在所有优雅,恩典和美容中观看您的创作......及其故障。任何体面的日本花艺品都可以解释小缺陷在创造艺术中的作用,如花卉安排或软件就是瞬态的。从业者经常使用与艺术相关的词来描述他们欣赏的软件。

有人说这是废话。软件不能美观或优雅,与大教堂一样。这些人,也许缺乏对他们所选职业的热情。如果他们有它,他们就会完全了解软件可以和大教堂一样美丽(即使来自义卖的软件也更受欢迎)。

可能是最实用的与艺术平行是价值的谨严的做法用于构建软件开发专业知识。正如音乐家必须每天练习基础(尺度,开管 - 建筑练习,手指灵巧练习等),那么一个软件开发人员从常规参与代码Dojos和其他实践学习活动,以及定期做法“side projects” where it’s safe to make mistakes, and you can learn without impacting a real project schedule.

所以是的,有一些有效的艺术平台,但软件开发并不完全是艺术。这只是一个比喻。

软件开发人类活动而不是技术人员吗?

在某些方面,是的。有些人将软件开发描述为协作,人类活动,因为在他们的经验中,“凝胶队”与关键业务利益相关者的和谐合作,已经实现了最佳成果。亚博vip9通道它肯定可以自己写非常好的软件。但是,当您在团队设置并作为团队的一部分工作时,常规沟通技巧和人类互动技巧(给予和接收反馈,解决冲突等),可以制造或打破项目。

在我看来,这是一个有效的隐喻,在限制内。在人类努力的许多领域,能够与他人合作很重要。在许多领域,协作小组产生的思想结果远离结果,任何团队成员都可以单独制作。然而,软件开发并不完全是这样的,或者是唯一的。这只是一个比喻。

软件开发是工艺吗?

最后,工艺的事情。

在某些方面,它是一个工艺,是的。到目前为止,你可能会猜到我要去哪里。

木制家具可以在自动装配线上搅拌。很多人都会乐意在宜家和目标等商店购买它。最好的木制家具是由工艺品创造的。他们仔细选择了每块木头,并与作品的性质和谐地塑造成它“想要”的形式。它们使用钻机来构建自己以引导组装,使得一组中的每个椅子都是相同的。然而,当一块不适合正确时,他们可以适应。他们在这里刮掉了一点,在那里沙子。他们会出现一些麻烦,以尽量减少他们使用的胶水量,如果可能的话,它们避免螺钉。他们尽可能完美地制作每件。这是追求完美,因为与劳动者相反的是工艺品。 And it’s the追求完美,不是成就这是重要的。

当我与一支开发人员合作时,当他们采用工匠的态度时,它总是一种乐趣。每个团队成员都在每个任务中追求完美,无论是将一个声明块添加到配置文件,重构单位测试,或设计新功能。最终结果比在不完全与其职业携带的人不经意的人们不经意的情况下完成了那么好。

当我说“最终结果”时,我认为这两个价值都以其创造者和其他有专业背景的创造者和其他人欣赏他们正在看的解决方案的美容。两者都很重要。

所以是的,具有工艺的有效相似之处。所有这些都是积极的;没有人贬低客户定义的值。但仍然,这只是一个隐喻。

软件开发是软件开发

在我的经验(40年来,FWIW)中,有时候建筑软件的工作类似于上面呈现的一个或多个隐喻。但这并不是他们中的任何一个,或者所有人都在一起。这是一个独特的活动。

所以,是软件工艺一个有用的比喻?我认为它和任何人都一样好。I’d like it if people whose professional work may be described as “applied logic” would cease and desist from halting as soon as they see or hear a word they think they disagree with, and proceed to find out what the writer or speaker is really talking about before they criticize. Asking too much? Maybe.

下一个>敏捷2017 - Em Campbell - 漂亮

评论(1)

  1. 伊万史密斯
    回复

    软件是您用来解决问题的工具,而不是问题本身。所以使用你的时间和脑力来解决这个问题,让工具给你一只手。我同意您的意见,这些是对软件开发的有效问题。感谢分享..!!

    回复

发表评论

您的电子邮件地址不会被公开。必需的地方已做标记*