编程春节十二响编程实现_编程的第三个十年:变革的时刻

编程春节十二响编程实现

第三章个人编程史

如果说前二十年是黑暗时代,那么1970年代就是文艺复兴时期。 在古典计算时代和现代编程时代之间架起一座桥梁。 对于整个西方社会来说,这是一个巨大的变革时期,编程世界也不例外。 编程正接近成为我们今天所知道的活动的边缘。 无需对计算机硬件有深入了解就可以编写代码。 基于CRT的VDT最初是在IBM System 360中引入的,最初的价格与计算机本身的价格相同,因此变得负担得起且普遍。 新的编程语言改变了人们的工作方式,并且在本世纪末,个人计算机以合理的价格出现了。

1970年代也是我的叙述开始个人化的时候。 尽管我本人直到八十年代才开始编程,但是当我学习该技术时,对我而言,程序员的文化和七十年代的历史对我来说仍然是非常真实和当代的存在。 我所写的人中,大多数是我的英雄,当我刚开始我的工作时,他们正处于他们职业生涯的巅峰时期,从那时起,我亲自使用了将要写的大多数系统和语言。

一个极其重要的系统是Unix™。 它由AT&T贝尔实验室的五个程序员组成的团队创建,可从一个硬件平台移植到另一个硬件平台。 它的发行版包括操作系统本身的源代码。 因此,Unix™被“移植”到许多不同的硬件平台上。 这是独立于特定硬件平台的操作系统的开始。 一般而言,很难夸大Unix™对计算的影响,而更具体地说,是对编程技术的影响。

从最初运行诸如MS-DOS和CP / M之类的小型操作系统的个人计算机的角度(我个人的观点)来看,Unix™具有“大联盟”的光环。 功能丰富,令人印象深刻的灵活性,有时难以理解,而其他功能强大而简单。 当我开始在Unix™中工作时,我感到自己来了。 对我的老板们来说,我是精英。 当通用汽车电子数据系统公司要求GE信息服务公司建立Unix™服务器场来控制其Sainte-Thérèse工厂的Camaro汽车的计算机喷漆时,我就是他们派来的人。 我知道Unix™! 但是,从真正的大型联盟(大型机和小型计算机的操作系统)的角度来看,离现实还差得远。

Unix™由致力于“真实”操作系统Multics的团队开发。 在那些日子里,“真实的”操作系统(由“真实的”程序员使用)在大型,功能强大且极其昂贵的计算机上运行。 他们的工作之一是尽可能谨慎地管理这种昂贵的资源。 因此,他们的代码中有很大一部分专用于复杂的用户管理,其帐户具有配额或计算机时间分配,并且运行程序“作业”时从帐户中删除时间的代码。 他们管理着作业之间的分隔,优化CPU使用的“时间分片”,与终端,磁盘和打印机的通信协议,以及一长串其他内容。

Unix这个名字是个玩笑,是一个文字游戏。 它被设计为开发人员的游乐场,故意缺少Multics的所有复杂控件,因此它是Un -Multics,它是Uni- user,因为它缺少标准的用户功能。 但是与此同时,操作系统本身是一项非常认真的工作。 它旨在为程序员开发软件提供一个高效的平台,并且具有统一的哲学:“系统的力量更多地取决于程序之间的关系,而不是程序本身。”²它具有体系结构上的一致性:终端,打印机,甚至磁盘和网络适配器都通过一个简单的通信模型以相同的方式处理。

而且它是可编程的。

当一个人从AT&T购买Unix™(花费2万美元)时,它附带了源代码。 当时的含义令人震惊。 直到此时,操作系统几乎都是由计算机硬件制造商专门为特定计算机或一系列计算机创建的,并且一直在保护商业秘密。 以任何方式修改操作系统不仅是不可能的,而且是不可想象的。 通过非常规地包含源代码,AT&T使得任何被许可方都可以做两件事,这是新颖的:他们可以对其进行修改,并且可以对其进行编译并在具有C编译器的任何计算机上运行它(这很快变成了很多), 意味着程序员可以替换计算机附带的原始操作系统!

并不是说AT&T完全摆脱了严密保护的商业秘密思想。 每当我在上面编写Unix时,我都会在其旁边添加一个商标符号。 对于任何碰巧是70年代和80年代程序员的读者来说,这都是一个笑话。 AT&T因狂热地追求商标侵权而臭名昭著。 Usenet的传说是,即使是不带™的Unix的偶然提及,也会引起公司法律侵略的风暴,这是如此可怕,以至于可能要花费数年的时间。 因此,我们许多人在每次提及该名称之后都小心翼翼地(非常讽刺地)插入了(tm)。 我希望我至少对记得那些日子的一两个读者微笑。

那么Unix如何帮助提高编程效率呢? 由于其重视程序之间交互的理念,Unix规定了一个标准的简单协议,程序可以通过该协议与其他程序以及与计算机及其所有外围设备(文本)交换数据。

这听起来似乎微不足道。 没什么。 任何对Unix甚至技术熟练的人都听说过这句话:“在Unix中,所有内容都是文件”。 实际上,这意味着程序将句子“ Hello World”发送到打印机,屏幕,另一个程序或磁盘上的文件以进行存储方面没有任何不同因为所有这些东西似乎都该程序作为磁盘上的文件。 实际上,在传统的Unix使用中,程序本身不会做任何这些事情。 用户 (也是程序员)会。 用户将键入命令HelloWorldProgram> lpt1 ,将Hello World程序的“标准输出”(称为stdout )定向到Line Printer 1或HelloWorldProgram |。 WordCount将Hello World的输出通过管道传递到程序,该程序将计算其在“标准输入”上收到的单词数。 通过标准化程序与自身以外的任何事物交换数据的方式,Unix促进了一种思维方式,这种思维方式将对程序的编写方式产生深远的影响。 当您使用Facebook帐户登录其他网站时,您将受益于Unix率先无缝集成各种程序的理念。 当您的手机打开地图程序为您提供指导或打开电子邮件程序以发送电子邮件时,这是因为Unix告诉程序员“系统的功能更多地取决于程序之间的关系,而不是程序本身”。

因此,Unix程序通常很小,只做一件事,例如tail ,它读取一个文件(请记住: 所有内容都是一个文件),并将最后10行发送到其标准输出,对于程序来说,这通常是正常的。在编写时要考虑其他程序。 例如:Unix程序man ,它显示各种程序的用户手册条目。 man的作者不必费心编写代码将较长的手册页分成可读的块,因为根据Unix的哲学, man的输出应通过管道传递给另一个程序,例如lessmore ,这些程序可以“分页”。将长文件(记住: 所有内容都是文件)分解为屏幕大小的页面的程序,允许用户通过按空格键来“翻动”页面。

因为这个理念, 的程序员能够利用由以下 (或更多 )的程序员完成前期工作。 您可能会想到,这种编写程序的新方法对生产率产生了巨大影响。

较小的程序更易于编写,错误更少,需要时更易于调试,并且易于维护。 如果您每天稍微打扫一下厨房,那比每月尝试一次大清洁要容易得多。 编程就是这样,因此编写较小的程序(依赖于其他先前编写( 以及经过测试和调试 )的程序)比编写大型“厨房水槽”程序要更有效率。 或我称之为:“世界统治计划”。

这是一个非常重要的想法。 这是我正在写的书的中心概念,本系列摘录是这本书的一部分。 我深信Unix的哲学,最好的编程方法是在强大的统一框架内编写小型程序组件,然后将它们链接在一起。

还有一件事……

1972年,Unix团队创建了一种语言来帮助他们编写操作系统。 该语言被称为C。它可以说是有史以来最有影响力的编程语言。 我还可以争辩说,这使生产力倒退了几十年。

<-该系列的上一篇文章
该系列的下一篇文章->

[1]编程既是Knuth想要的艺术,也是一种手Craft.io品。 两者不是互斥的。 当谈论创造力时,它是艺术。 当谈到严格和精通时,这是一种技巧。

[2] Kernighan,Brian W和Rob Pike。 UNIX编程环境 。 新泽西州恩格伍德·克里夫斯(Englewood Cliffs),普伦蒂斯·霍尔(Prentice-Hall),1984年。

本文摘自我即将出版的《混沌工厂》 ,该书解释了为什么大多数公司和政府无法编写“有效”的软件,以及如何对其进行修复。

翻译自: https://hackernoon.com/the-winds-of-change-1970-1980-c1baa1c07872

编程春节十二响编程实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值