让非程序员了解开发过程


66

当为一家主要不是编程公司的公司开始一个项目时,人们的期望之一是最后会有一个成品,其中没有任何错误,并且可以立即完成所需的一切。但是,这种情况很少发生。

有什么方法可以管理期望并向非程序员说明软件开发与其他类型的产品开发有何不同?


有时您处于“控制中”,并且您的非技术同事以自己的方式很聪明,而不是无知,谦虚和好奇。在另一端(例如在我的情况下),您可能正在与一个想要在1小时内完成魔术的人一起工作,并且您发现自己在解释为什么公司应该尊重开发人员。不用说我正在找工作。您处于什么样的环境中,因为答案可能是“逃离,逃跑!”。
Job

Answers:


34

如今,几乎每个拥有计算机的人都遇到过“错误”的概念,因此您可以从这里开始。“应用程序失败的最烦人的方式是什么?将其乘以十,如果我们不投入足够的资源进行测试和维护,您将获得用户的体验。”

并且不要低估与非程序员建立良好工作关系的价值。如果您可以确定自己的判断是可以信任的,那么当您发出警报时,即使您不做Y pronto,X也会失败,即使他们不完全理解您的理由,他们也会认真对待您。


+1指出这一点。如果技术专家和非技术专家之间几乎没有相互尊重,那么对项目而言,没有什么比这更危险。
mhr 2013年

28

我发现成功的一种方法是:

我们都知道,一台计算机只能准确地执行其操作。

编程是我们现在告诉计算机以后要做什么的方式。

这意味着您的行为现在的行为方式是由于编写了计算机上正在运行的任何代码的每个人的共同意图。考虑到操作系统,驱动程序,编程环境,库等的复杂性,不难发现,在大多数系统中,涉及的人员必须超过2万,而涉及的人员可能超过10万。

每个人编写的代码反映了他们自己的理解,动机,意图和能力。鉴于该系统的正确的操作要求,所有这些20K人写的代码没有错误互动-即所有的代码必须在内涵和要求的行为的解释达成一致,suprising事实是不是因为我们的错误,但我们很少。


4
为“现在告诉我们以后想要的东西” +1。同样,大多数软件都会做新的东西。

12

IMO,我发现敏捷过程(例如Scrum,Crystal等)提供的透明度在向普通利益相关者展示开发方式方面大有帮助。


1
如果您要进行100%的开发,这是一个极好的策略。如果开发人员的任何部分由另一方处理,您可能必须做出一些妥协。
JBRWilkinson

3

用隐喻来解释是一个漏接的抽象,但是这里有一些对我有用的想法:

请注意,所有这些解释都不能作为草率工作的借口。

可以将计算机程序视为机器,其中每个变量都是运动部分。这甚至使琐碎的程序也变成了由数百个运动部件组成的机器。

当这种方法失败时,我会回到一个事实,即虽然可以从数学上证明程序没有错误,但是这会花费大量时间,因此不值得付出努力。

最后,我问英特尔和微软是否无法避免错误,他们对我们的期望如何?


2
关于Microsoft的很好一点
Casebash 2010年

1
并非不可能证明程序可以做到这一点。但是,计算机无法说出是否有任何给定的程序最终会停止执行该操作。

1
-1 @ThorbjørnRavnAndersen是正确的。这篇文章是错误的。有可能证明程序是正确的(直到某种正确性概念为止),我们中有些人一直在这样做。我认为发布者误解了暂停问题的认识论后果,因此使非程序员与虚假主张相混淆。
菲利普·JF

2

我已经更详细地回答了类似的问题,但是要点是:“编程就像建立工厂或装配线。”


真伤心 我相信编程是一门艺术。您尝试构建具有很多功能的东西,并以少量的简单命令,方法和类为基础。通常,您不使用锤子-尝试以自己希望的方式精心塑造事物……
mhr 2013年

@mri-任何实际建立工厂的人都会告诉您,无论工厂机械的设计水平如何,其部分零件仍必须手动安装。我们的工具可能会简化手工拟合,但我们(我们大多数人)不再是“制作”汇编代码,以利用周期和内存边界。就像美丽的“手工制作”工匠风格的家具一样,它得益于当今的自动化。
DaveE

2

传统的说法是项目管理三角:范围,成本和进度这三个相互竞争的标准;通常表示为“便宜,快速,良好-选择两个”。

结束一家集设计,开发和部署过程中,一个产品的期望是相对自由的设计缺陷和运行与指定的功能是完全合理的。对于项目,过程或专业,相同​​的期望是完全不合理的。

那些基于科学的硬性或软性专业人士不会经历探索,形成不准确和不精确的概念化过程,遵循非最佳(或纯属错误)策略,通过反复试验发现有效的方法并重复进行一遍又一遍地处理,直到资源用完或性能达到足够的水平?

尽管过程可以渐近地达到更高的质量水平,但是没有任何过程没有缺陷。

对于医疗行业来说确实如此,因为战术经常涉及猜测和协议,而且大部分活动基本上都是在调试大多数为湿器的机器。对于土木工程和建筑业来说,确实必须对新工程材料的应用进行现场验证,尽管严格遵守标准,但经过多年的服务后,它可能突然失效。对于汽车领域而言,确实如此,因为老化和操作条件的变化通常会通过所应用的工程或维修服务无故障而影响性能直至故障点。在这些方面,软件开发与这些专业在本质上并没有什么不同,它的重点只是设计新颖的,有目的的机器。


通过与汽车进行比较,可以得出一个很重要的观点,那就是对已部署应用程序进行持续维护的好方法。
2013年

0

如果您对诸如核反应堆控制,深空通信或医疗植入设备(等)等高可靠性软件开发有所了解,则可以解释一下该项目管理和质量保证级别的成本和交付时间结构可能会比一般企业为其软件项目所能承受的价格高出许多。


0

您可以将其与他们可以看到的东西进行比较,如果可能,请每天使用。

例如,汽车。汽车起步时要比我们今天使用的精致和可靠的设备少得多。尽管汽车制造已有100多年的历史,但软件的使用寿命可能只有其一半左右。可提供具有重大定制功能的汽车,其中一些包括在价格中(例如颜色选择),其他一些包括引擎尺寸,变速箱类型,车轮/轮胎,内饰水平是重要的成本驱动因素。

汽车和软件有许多功能,质量和成本驱动因素。然后,您可以讨论软件技术,专业知识的可用性,甚至可能是在何处构建的,都将产生很大的变化。适当的开发周期(例如,每年更改很小的模型,大约每三年更改一次车身/引擎/平台)是由客户需求和复杂的设计过程共同驱动的。有些产品看上去小巧而笨拙(例如本田雅阁(Honda Accord)),但每年都会得到改进,直到获得最高评价为止。

汽车具有召回(通常比软件升级贵得多)并且通过对零件清单进行更改(例如修正错误)来进行逐步改进,并且经常需要长期支持(例如向后/向前兼容)。汽车的大部分成本是在您开车回家之后产生的。在您更新和升级客户时,大部分软件成本来自初始产品发布之后。

在某些情况下,您可以引用包括软件或其他软件产品的知名产品。例如,电话在首次销售后就有发布周期,更新和添加功能的方法,以增加收入。电话很好地说明了向前/向后兼容性。太多了,人们不会抛弃旧的去买新的。太少了,客户迫切希望拥有一部在合同到期之前就不会讨厌的电话。

Windows,Microsoft Office,Web浏览器和网页等产品都是可以在讨论中使用的软件。它们已按年度或三年周期进行更新,但可能会更频繁地进行自动更新。它们具有漏洞和安全漏洞,这些漏洞和安全漏洞会在不同程度上影响客户,但尽管我们已尽力而为,但它们仍是其中的一部分。客户可以免费获得修复程序,但通常会以捆绑形式(有时是单独模块或通过许可证密钥)来支付增强功能。

微软,苹果,谷歌和亚马逊等行业领导者都为用户提供了相对便宜的客户。但是他们有巨大的费用使那些产品成为可能。他们的经验表明,软件价格昂贵,但有价值且有利可图。他们经常在质量,拥有所需的所有功能以及在适当时机进入市场之间做出折衷。并非他们生产的每种产品都是成功的,有时他们会通过重命名,改善营销和销售,或减少损失并利用他们在后来的产品中获得的知识,将狗变成赢家。


0

也许尝试以一对一的方式或以小组的形式逐步浏览它们,这些是您必须开发的软件用例。当他们描述用例时,请确定可能发生不同情况的情况下的要点(意料之外但并非不合理的情况)。开始列举它们,要求一些澄清,并说明需要做出或确定的所有决定和方向,以及这样做时的权衡。一直走下去,直到它们被绊住,无法给您答案。让他们了解,您现在与他们一起正在做的事情,就是您整天要做的事情,可能是您自己做的,可能是方向不明确的,无论是决定课程还是编写代码,都要花费数百或数千个任何人可能会或可能不会布置的用例。当有 如果您没有想到自己,就不能保证程序会做什么。也许它做“正确”的事情,也许要注意。这就是一个错误。这就是为什么编写软件需要时间。您所花费的时间越少,您考虑和适应的案例就越少,在未知情况下该程序更有可能无法执行“正确”的事情。


0

成本和时间。

时间

设定期望在Y的时间内交付X。它将仅此而已。然后告诉他们下一个版本在什么时间会有什么。最初,他们可能会惊讶地认为构建X会花费Y的时间-在这里您可以解释花费的时间和构建软件的复杂性。如果他们不感到惊讶,那么您要么会花费更少的时间,要么他们会比您想像的更了解构建软件。

成本

这是史蒂夫·麦康奈尔(Steve McConnel)的《代码竞争》(Code Compete)书中的内容(引用内存,因此,如果我不能以相同的效果传达它,请原谅)-客户很容易要求新功能。作为产品经理,您不应说出客户的要求。您应该估算构建该新功能所需的工作量和成本。他们会慢慢理解,新功能确实不值得花时间/金钱,或者甚至根本不需要。我不建议您使用此武器吓e他们,但请诚实地使用它,这可能有助于将重点推向目标。


-2

隐喻是泄漏的抽象,但是它们几乎没有带您进一步了解。

我最喜欢的是,尽管构建软件的过程通常类似于建造房屋的过程。但是,将其更精确地视为创建一个系统,该系统根据一些参数打印出自定义架构的蓝图,并为其每个用户构建一个不同的蓝图。在极客谈话中,这是元架构。


-2

我发现,当您向他们展示编写代码的含义时,它实际上可能会有所帮助。向涉众显示您正在使用的代码库。即使选择了好的变量名和方法名,大多数人也会认为您正在使用某种黑魔法。也许他们会明白,为什么您需要超过几天的时间来为其软件实现新功能。


IMO这是一个坏主意。这就像把拖把交给客户,告诉他清洁湿地板有多困难。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.