愿源头与你同在,但要记住接吻原则;-)怀疑和批判性思维不是灵丹妙药,但可以帮助你更好地理解世界。
ACM的通信。1972年7月第15卷第7期(经许可转载;评论如下)。
1972年春季计算机联席会议午餐会上的讲话由新西伯利亚大学苏联科学院西伯利亚分院计算机中心信息处处长Andrei P.Ershov教授发表。许多与会者认为他的讲话特别中肯和深思熟虑。传播感谢作者,感谢AFIPS和SJCC技术委员会有机会向更广泛的听众介绍他的演讲。
我必须承认,当我收到出席这个午餐会的邀请时,我的第一个冲动是想知道在我之前有谁受到过类似的邀请。我在前面的宴会和午餐演讲者名单中发现了三位著名作家,两位国会议员,一位将军--但很难代表我们自己的计算机行业。这可能不是偶然的:我们的产业快速而广泛的发展,不可避免地增加了其周边接触的数量,结果是人们对外部世界的兴趣与日俱增。不过,很明显,要应付这个行业的严重问题,我们不单止要在舆论的镜子里看自己,更要从内心去探索。因此,我将允许自己自由地提请大家注意一些关于编程中至关重要的人的因素的意见。
我首先要说的是:现在是程序员的困难时期。要做的工作量在增加,工资却在减少。围绕着这一神秘职业的浪漫光环,如果它真的存在的话,正开始消退。软件公司正在像春天的雪一样融化。习惯于需求旺盛的专业人士现在发现自己在等待职业介绍所的账簿。即使是声称程序员是一种特殊类型的专业员工也受到了争议。更重要的是,对随心所欲的程序员兄弟会的权威正在悄悄落入管理员和经理的手中--他们试图让程序员的工作变得有计划、可衡量、统一和隐蔽。
我并不是要谴责这种倾向。作为一名管理员,我本人长期以来一直与程序员有关,因此,我通过为他们的工作的系统组织提供背景支持而做出了贡献。作为一名管理员,我可能会说,将编程与整个世界联系起来的关系网络尚未成熟。例如,考虑一下软件公司在过去十年中的激增。一家最小的软件公司可能更适合被称为软件小屋,它通常会被一群有能力的程序员在几周的时间里钉在一起,他们可能计划离开一个他们在其中获得了初步经验的大型组织。是什么推动了这样的倡议?在许多情况下,这是利润追求和摆脱过度监督的某种不切实际的愿望的混合,当然伴随着一些特别有趣和有用的技术软件想法。
然而,只有那些最初的动机很快从属于艰难的经济,并强加了等级制度和严格的纪律的团队幸存了下来--换句话说,所有这些原本将把软件集团赶出母公司屋顶的东西都被重建了。这类企业的历史有时会让人想起三只小猪的冒险经历:程序员兄弟会最终在一家戒备森严的软件公司结束了,但直到他们中的一小部分被无情的商业压力的狼风卷走。不要认为我在这里完全指的是美国的现实;我在这方面有更直接的个人经验。
因此,编程从属于大企业是一个不可回避的事实。然而,我认为将程序员转变为工人阶级的高薪群体存在一定的危险。如果要抵制这种倾向,程序员必须在自己的专业中找到某种内在价值体系,这种价值体系既能帮助他吸收工业工作方法,又能在必要时超越它们。
这最后一句话把我带到了我的第二个主题:这样的价值体系客观上是编程所固有的。然而,由于这些价值观并不是完全有意识的,它们需要解释和辩护。我提到的价值体系有很多基础,其中最重要的可能是程序员的专业地位(我在这里指的是广义的程序员,包括系统分析师)。不过,在这篇演辞中,我不会强调实质问题,而会集中讨论编程程序的美学或情感问题;我不会讨论程序员在将其产品投入市场时所获得的补偿,而会讨论当他独自处理程序和电脑时,对他造成影响的道德力量。
当然,你可能会问我:是否值得讨论这种情况的非物质方面?我的回答是,这只是部分原因,因为编程已经成为一项大规模的人类活动。在我看来,至少出于以下三个原因,编程是所有涉及大量男性的职业中最人性化的困难:
程序员组成了第一大群人,他们的工作将他们带到了人类知识的极限,这些极限以算法上无法解决的问题为标志,涉及到人类大脑的深层次秘密方面。
程序员的个人下推堆栈必须超过5-6个位置的深度,心理学家已经发现,这是一个普通人的特征,他的堆栈深度必须与他所面临的问题所需的深度一样深,再加上至少2-3个更深的位置。
在他的工作中,程序员面临的挑战是将一流数学家处理逻辑抽象的能力与更实际、更爱迪生式的才华结合起来,使他能够单独从0和1中构建有用的引擎。他必须把银行职员的精准和侦察的敏锐结合起来,再加上侦探小说作者的幻想力量和商人的冷静务实。最重要的是,他必须有集体工作的品味和对雇主公司利益的感觉。我知道,要克服这些困难,需要付出巨大的情感努力,只有通过有意识的深思熟虑和积极的内心态度才能做到这一点。如果亚瑟·海利写一部小说“计算机中心”,它肯定会成为最引人入胜的畅销书!
这就引出了我的下一篇论文。需要一种理解,一种对编程美感的感觉,而不仅仅是作为程序员的动力:对于那些管理程序员的人,特别是那些教育和培训他们的人来说,这是必要的。让我列举一些艰难的组织困境,只有当我们考虑到所有已经注意到的美学因素时,才能解决这些难题:是否有可能或有必要将大型程序的设计与实施分开?
我们应该在程序员身上寻找哪些个人能力?这些品质是否足够具体,我们可以在行政上加以考虑?
程序员应该如何培训?是(在大学)培养世界观,还是(在技术学院)强调与工作相关的技能?
所有这些问题只是软件管理一般问题的一部分。当然,我不会因为试图对这个非常复杂的问题进行系统分析而破坏你的消化能力。不过,请允许我作一些个人评论,试图将这些组织问题与对方案编制中人的因素的分析联系起来。首先,对软件开发中的装配线方法进行了评述。我个人认为流水线是最邪恶的发明。诚然,它将生产率提高到了闻所未闻的水平。然而,与此同时,它赋予了劳工状况一种以前不为人知的隐姓埋名的特征。在程序设计中,使用流水线组织可以破坏激励程序员的智力工作满足感,这样组织的工作的单调和程序员工作的困难之间的矛盾可能会导致神经症。想象一下,一个人被迫一天8小时,一周5天,一年50周,专门解决纵横字谜游戏,你就会明白一个专门编写某类程序组件的程序员面临的是什么。当然,因此,通过分工原则,即通过将程序员的任务分解为基本操作来提高程序员的生产率,绝非一件简单的事情。关于管理者和实施者:管理者与技术特定的劳动力打交道的能力通常是有限的。通常,项目经理更愿意将实施责任分配给刚离开大学两三年的年轻专家,而不是具有更丰富经验的人。这难道不是更偏爱年轻人的轻松可塑性,试图避免与一个更成熟、更有抵抗力的33岁的户主发生争执吗?这难道不表明,我们不知道如何提高实施者的职业尊严;不知道如何帮助他避免随着年龄的增长而失利;不知道如何让他继续有用,不仅对他必须与之共事的经理有用,而且对他自己和他未来的经理们都是如此?
关于世界观与工作技能,问题当然不仅仅是估计博士和软件技术人员之间的最佳比例,尽管这个问题提出了许多经理面临的人员配备问题--问题的实质是,编程需要一个人有一定的态度,一定的道德准备来履行他的职责。这一问题的实质是,编程需要一个人有一定的态度,一定的道德准备来履行他的职责,尽管这个问题提出了许多管理者面临的人员配置问题--问题的实质是,编程需要一个人有一定的态度,需要有一定的道德准备来履行他的职责。程序员是第二次工业革命的关键人物,因此他必须具有革命性的思维方式。
程序员是一个精英群体,这一点对我来说是相当明显的。在这方面,程序员的活动是对整个人类的重大挑战;我希望这一挑战将被接受。我将在下面回到这个想法上。
现在我想重申我演讲的中心论点,并肯定编程体现了丰富、深刻和新颖的美学原则,这些原则是程序员与其职业的内在关系所基于的,这些原则给了他智力和生动的情感满足感。这种审美根源于编程的创造性,源于编程所克服的困难,源于编程的社会意义。
定义任何职业活动的核心审美并不是一件简单的事情。这种审美是通过一系列将专业人士联系在一起的主观态度来实现的。我引用一句俄罗斯谚语:一个渔民从远处认出另一个渔民。一个职业的审美影响,并受到该职业的道德规范、该职业的技术主题和该职业的法律地位的影响。因此,我现在尝试讲述的节目的美学成分也具有主观性和预见性。
首先,我对编程美学的内在本质做了一些评论。编程的创造性不需要特殊的证明。
事实上,我可以断言,在其创造性的本质上,编程比大多数其他职业走得更远,更接近于数学和创造性写作。在大多数其他职业中,即使我们把老虎放进坦克里,我们也只是驯服了自然的力量。我们只是简单地使用物理和生物现象,希望能以一种聪明经济的方式,但不理解它们最内在的原理。然而,在编程中,从某种意义上说,我们走到了根源。现代认识论的一篇论文指出,我们了解我们能够编程的东西。这句话生动地描述了我们职业的极大主义。
编程的另一个非常重要的美学特征是对其成品的精确度要求非常高。当然,这是许多工程的特点。但是,编程请求
智能本身体现在完美的机器程序组合中。程序员在这个熟悉的奇迹中扮演着三位一体的角色。他觉得自己是程序的父亲和创造者,是运行程序的机器的儿子和兄弟,是为程序/机器组合注入生命的精神的载体。智力的这种胜利也许是编程最强大和最具特色的方面。
在使用机器时,一个诚实的程序员会表现出另一个特点。他把它和一个好的骑师和他的马联系在一起。他完全知道机器提供的各种可能性,但他不会允许自己沉迷于个人的智力懒惰,这意味着不计后果地花费计算资源。程序员与其工作的这种本质上的审美关系构成了防止盲目积累软件低效的最有效的保障,尽管这可能不会引起出售机器时间的公司的任何特别反对,但它会欺骗消费者,并为我们失去机器的全部能力。
第二组美学问题与节目的社会和公共功能有关。在第一次见面并试图分析一个大范围的社会现象时(毫无疑问,计算机出现在历史场景中就是这样一个现象),我们寻找足够宽泛的历史类比,为我们的推断和预测提供基础。正是在这个意义上,我们把计算机的出现说成是以智力工作产业化为特征的第二次工业革命。对于编程专业,可以提供另一个相同规模的类比。在我看来,软件的逐步扩展在很多方面都可以与印刷术的发明引发的现象相媲美。书籍的积累,每一本书都体现了作者对外部世界的看法,拓宽了一个社会理解的过程。以同样的方式,程序和数据库积累了世界的信息和操作模型,使我们不仅能够影响并预测世界的演变,而且以这种方式赋予我们对自然前所未有的力量。
今天成为一名优秀的程序员,就像在16世纪成为一名有文化的人一样,是一种特权。这一特权使程序员期望得到社会的认可和尊重。不幸的是,这样的期望并不总是能实现。我要说的是,如果要承认这一点,双方都需要努力。就程序员而言,他必须接受适用于所有专业人员的一般伦理原则,但对程序员有特殊的解释。对工作的态度主要有三种:
在程序员的世界里,前两个动机占据了第一位,尽管第三个动机应该是最绝对的。因此,我想说的是,程序员只有将对其编程只是其中一部分的目标的忠诚融入到他的内心态度中,才能实现与社会的完全和谐关系。
在谈到编程的社会功能时,我不能不注意到,一个尚未解决的技术问题,即使编程产生累积效应的问题,阻碍了编程充分发挥社会影响。解决这个问题是一项非常复杂的任务,但也是绝对必要的。关于这个问题,众说纷纭,众说纷纭。一些人说,目前正在运行的程序中只有一小部分具有持久的价值;另一些人说,OS/360已经是一个不朽的程序系统。为了将这个问题与我演讲的主题联系起来,我想说,让程序员看到他的产品是长期稳定使用的,将对他的职业自我观产生决定性的影响。
现在请允许我继续考虑上面列举的一些其他问题。首先是关于个人编程能力的几句话。我们面前摆着--我们需要--理想程序员的形象。当然,这是一个神话人物,但谁说我们的职业可以没有神话和童话呢?我们每个人肯定至少见过或听说过一位神奇的程序员,他的程序中没有一条指令可以删除,他每天编写一千条没有错误的指令。寻找理想和榜样是人的本性。正是为了提供这样一个参考点,我将在编程中继续讨论的首要问题上增加一个备注。断然宣布他们是不受欢迎的,至少是目光短浅。我一生中很幸运地遇到过几位这样的首席唐纳,尽管他们个性十足,挥霍无度,但他们为项目做出了无价的贡献,特别是在困难的情况下。所以我绝对主张充分认识和充分发挥个人在编程方面的广泛能力。
现在让我走吧
在阐述我的论点时,我已经将程序员描述为精英,并强调了编程的非常特殊的性质及其对有限的人类能力的深远要求。在结束时,我想回到这个问题上,并以不同的方式看待它。我上一次在美国是在1970年,当时我对麻省理工学院明斯基(MIT Minsky)的马文·明斯基(Marvin Minsky)和西摩·帕帕特(Seymour Papert)提出的儿童教育新理念印象深刻,帕帕特摒弃了儿童通过模仿下意识学习的陈词滥调。他们证明,当人们在头脑中形成行动流程图时,当子程序被分离出来,信息联系被追踪时,他们学习得最好。用两个球玩杂耍的问题,再加上我作为程序员的能力,帕普福尔斯教授是不可能不把自己搞得一团糟的。
.