编程的第三个十年:仅仅是生产力吗?

个人编程史第三章的第二部分。 在这里阅读第一部分

编程的第三个十年:仅仅是生产力吗?

生产率

生产力一词带来很多负担。 多年来,程序员的生产力是每天/每周/每月用代码行来衡量的。 这种方法有几个缺陷。

让我们以一个名为life的小型游戏程序为例,让两个具有不同技能水平的程序员用两种语言编写该程序:C和汇编语言。 在C语言中,这是一个57行的程序。 汇编语言版本为97行。 假设C程序员每行花费60秒(这实际上非常快),而汇编程序员编写代码的速度甚至比C程序员更快,每40秒写一行代码。 创建汇编语言版本将花费65分钟,而C语言版本则需要57分钟,因此,即使汇编程序员每天编写的代码行增加了33%,也花费了15%的时间。

我们可以说汇编语言程序员的工作效率更高吗? 如果我们每天用代码行来衡量,她肯定是。 如果我们按取得成果所花费的时间来衡量,则不会。 当您认为两个程序员的薪水不同时,事情变得更加不清楚,因为写更少行的程序员的报酬也可能更低,因此“每行”的成本也更低。

我们至少可以比较两个使用相同语言工作的薪水相同的程序员吗? 让我们考虑一下这种情况:两位程序员用C编写生活中的游戏。Slow上尉(我们将他称为C)需要一整天的时间来编写97行高度优化的代码,这些代码占用100 KB的磁盘并在不到一秒钟的时间内加载。 Showboat船长花了同一天的时间,设法找到一种方法来使用970行代码(其中97行就可以了)编写一种程序,该程序占用一兆字节的磁盘并需要10秒钟的加载时间。

现在告诉我:谁是生产力更高的程序员?

更多代码不会自动使程序变得更好。 我们真的要激励人们写更多不必要的行吗? 比尔·盖茨(Bill Gates) 称其为“制造世界上最重的飞机”的比赛,以此来贬低通过代码来衡量生产率。¹在本系列的后续部分,我将以同样的基本思想引用拉里·沃尔(Larry Wall)。

另一个最受欢迎的度量单位是“功能点”,这是一个概念性单位,应该代表最终用户的离散功能。 例如,登录功能将是一个功能点(FP)。 更改个人资料照片的能力将是另一回事。 在现实世界中,几乎没有人计算功能点,也没有能力跟踪在给定FP上花费了多少程序员时间。 因此,几乎每个使用FP /日“作弊”来衡量生产率的人都使用行业标准转换因子来表示: 这种语言通常每个FP使用这么多行代码,而语言通常使用那么多行。 然后,您将代码行除以转换系数,从而将其转换为功能点。 显然,这并不比第一种方法更好。 还有其他两种或三种方法,没有一种更好。

因此,当我写有关软件开发中的生产力的文章时,我所诉的是常识,而不是指标。 我认为生产力的提高可以帮助您更快或更好地成功完成软件产品而无需花费更多。

编程的第三个十年:仅仅是生产力吗?

新手和高手

我之所以说C可能使生产力降低几十年的原因,与我的书的中心论点紧密联系,我的书中的主题是现代编程是手工艺的 ,没有高级程序员就无法成功。 我绝对喜欢的编程笑话(当然来自Jargon File )是用koan风格编写的,这是一个谜语,旨在帮助禅宗僧侣获得启迪。

一个新手正在尝试通过关闭电源然后再打开来修复损坏的Lisp机器。
奈特(Knight)看到学生在做什么,严厉地说道:“您不能仅通过对机器重新通电来修理机器,而不了解发生了什么问题”。
骑士关闭机器后再打开。
机器运转了。

Lisp²机器的主要设计师之一汤姆·奈特(Tom Knight) 知道在对机器重新加电时他在做什么 ,这就是为什么机器对他有用,而不对新手有用,因为新手“不了解出了什么问题”。

C就是这样; 它几乎是汇编语言。 它功能强大,而且很危险。 这是魔术。 在主程序员的手中,C语言中的正确用法可用于编写操作系统,其他语言或操作我们赖以生存的设备,例如汽车上的防抱死制动器。 在不太确定自己在做什么的人的手中,该魔术咒语可能会破坏一块硬件,清除数据或留下细微的错误,这种错误很长一段时间都不会被发现,并且一旦发现就几乎不可能被发现。注意到不良的副作用。

C使编程回到了Mel的时代请参阅本系列的上一章 ),在FORTRAN,COBOL或ALGOL中不可能实现辉煌的欺骗。 当时其他新语言也将无法使用。 BASIC,Pascal,Forth和SmallTalk。 但是在C语言中,您只需要指向一个内存地址就可以了。 就像梅尔一样。

这是东西:

如果每个程序员都像Mel一样出色,那么这种编程将非常可爱。 我们所有人都将使用经过优化的代码,这些代码运行速度超快并且不会出错。 但是不幸的现实是, 并不是每个程序员都那么优秀 就在发布C时,情况会变得更糟。

编程的第三个十年:仅仅是生产力吗?

野蛮人在大门口

到目前为止,由于计算机的成本,程序员主要有两种:a)为*或大型公司工作的专业人员,以及b)使用编程进行研究的学者,通常是研究生。 两种类型几乎都是自学成才,非常聪明,并且几乎总是具有真正的亲和力或编码天赋。

但是现在,在七十年代,两个重要的事情发生了变化。 首先,学术机构正在创建专门用于编程的课程,创建新的“教学语言”,最重要的是,为本科生(偶尔还有幸运的高中生)提供了专门用于学习编程的分时帐户。

第二个变化是个人计算机的出现,首先是在家里组装了成套工具,然后是包装精美的消费品,其价格与旧车的价格相同。 对于那些确实喜欢自学的人来说,这将变得容易得多。 第一个批量生产的计算机套件Altair 8800,在生产的第一年即1975年发货了5,000台。 在三年中(1977-1979年),两台*个人电脑– TandyTRS-8³和Apple II –销量超过了15万台。 大约在本世纪初,全世界大约有多少台计算机存在。 BASIC语言只是其中包含的唯一软件。

从头开始,将其轻松地带到计算机附近很容易。

数以十万计的新程序员正在上课或正在自学,他们很快就会被释放到这个渴望计算机程序的世界。 这很快将大大增加程序员的队伍。

成为一名程序员已不再那么困难,并且编程已成为人们可以训练的有前途的职业 一旦成为激情和关怀的对象,编程就开始了他成为利润丰厚的职业的旅程,最终将吸引各种各样的人,他们对编程没有特别的热情或爱好,只是为了钱。

罗伯特·马丁(Robert Martin)直言不讳地讲述了他一生中发生的莫名其妙的转变。 在五十年代和六十年代,程序员群体的性别平衡相当,然后在七十年代,很快就变成了男性主导的领域。

在我看来,对于这种差异的一个合理的解释可能是编程从一种仅凭才华和热情吸引着人们的晦涩职业转变为一种有吸引力且利润丰厚的职业,并逐渐受到电气工程界的推崇。

当编程是一种晦涩的职业时,几乎没有竞争。 我认为,一旦编程成为一种有利可图的职业,竞争就很激烈,并且在一个以男性为主导的社会中,制度上的偏见确保了专门的教育和择业是男性的。

编程的第三个十年:仅仅是生产力吗?

神话与人

我要告诉您的关于70年代的最后一件事是1975年出版的《神话人月》 这本经常被前IBM经理Frederick P. *s Jr.引用的书,描述了他十年前在管理迄今为止最大的软件开发项目之一System / 360操作系统时所学到的教训。

令我惊讶的是,在现在重新阅读它时,我找不到像今天这本论文集四十多年前那样具有今天意义和分明性的单一分析或观察。 神话人月是一项开创性的工作。 不可能夸大其重要性以及它对整个计算行业的影响。 尽管我认为当时没人认可它,但这是第一个全面的软件开发生命周期(SDLC)方法。 它不仅描述了系统编程面临的挑战,而且还规定了(超过150页):

  • SDLC的阶段
  • 每个周期的时间分配
  • 如何估算
  • 如何工作
  • 如何组织组织
  • 如何管理程序设计
  • 如何计划迭代
  • 文件和治理
  • 通讯协议
  • 如何衡量生产力
  • 有关代码设计的一些特殊问题
  • 可交付成果和人工制品
  • 工具和框架
  • 如何调试和计划发布
  • 如何管理流程
编程的第三个十年:仅仅是生产力吗?

确实,左图所示的逐步路径版本出现在WW Royce 1970年的论文《 管理大型软件系统的开发》中,但与许多人相反,Royce并不主张使用它。 实际上,他发布了有关使用它的警告 他只是在描述时间的一般惯例以及与此有关的一些问题,而正如布鲁克斯五年后所做的那样,他做了一些
有关如何减轻这些问题的建议。

但是,与《神话人月 》中150页的详细处方相比,罗伊斯的建议占了10页。 罗伊斯的论文并不仅仅是呼吁采取行动的方法论。 这就是为什么我相信布鲁克斯拥有第一个书面方法的原因。

从现在开始的几章中,我将更多地讨论方法论,但不仅限于此。 仍然有一些故事可以讲八十年代的语言。

“不要在不理解说明的情况下简单阅读此处的说明。”
〜附带的配置文件
与Apache Web服务器捆绑在一起

<-该系列的上一篇文章

该系列的下一篇文章->

[1]“物理学家”。 有线 ,1995年, https://www.wired.com/1995/09/myhrvold/。

[2]您可能还记得我在第一章中提到过LISP,这是一种自1950年代末开始使用的有影响力的计算机语言。

[3]我的弟弟就是其中之一。 我是一名音乐家,每天有十分钟都对他的TRS-80感兴趣。 如果您那天告诉我们中的一个人,他将成为一名专业艺术家,而我将是一名计算机极客,那么我们俩都会以为您完全疯了。

From: https://hackernoon.com/the-third-decade-of-programming-just-was-is-productivity-c510507fa511