Unix 和 Windows 的有趣比较

Unix 和 Windows NT 比较

来源于这两本书,把两本书对照来读,发现很多有意思的地方:
《Unix 传奇》
https://book.douban.com/subject/35292726/

《观止 微软创建NT和未来的夺命狂奔 》
Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft

https://book.douban.com/subject/3699395/

在这里插入图片描述在这里插入图片描述

1. 创始人的教育经历

首先是创始人的信息,他们都是 1942 年前后生人,但是家庭环境和个人成长经历很不一样:

Unix:
Dennis Ritchie (1941) 老爸是贝尔实验室的科学家,他获得哈佛博士,1966年 进入贝尔实验室实习随后成为正式员工。

Kenneth Thompson (1943) UC 伯克利硕士, 1966年进入贝尔实验室。 他喜欢自由自在的生活,对加入大公司不太感兴趣,贝尔实验室花了不少努力请他去实验室参观,并后续诚恳邀请他入职。

在这里插入图片描述

Brian Kernighan (1942) 多伦多大学学士,普林斯顿博士,1967 进入贝尔实验室实习随后成为正式员工。大学时开始编程 (COBOL,FORTRAN) 但是不得其法。
年轻时的 Brian,他一直留着大胡子,比较显老

Windows NT:

David Cutler (1942) 密歇根州 Olivet 文理学院的学士

贫苦出身,和父亲(汽车厂的清洁工)缺少交流,在学校时展现出聪明才智,并且在各种体育项目都是明星球员。他靠体育奖学金上了大学,但是受伤中断了体育生涯。1965年毕业后拒绝了 GM 的程序员 offer (那时候程序员职业名声不好),而进入杜邦公司。 他开始并不喜欢计算机编程,由于工作的原因不得不学,被触动后决定要成为强者,半夜去学习,成功地在 IBM 大型机上实现实时系统处理化学数据。

在这里插入图片描述

2. 学习方法

他们学习编程都不是一学就精通。 但是都喜欢熬夜折腾。

Ken Thompson:午夜之后会用自己的钥匙去开机房,在大型机上折腾直到第二天早上 8 点。 "我很快乐,毫无雄心壮志,是一个没有目标的工作狂“

David Culter:半夜去上机,犯各种错误,然后从错误中学习。

关于折腾, 我们教授(女)曾经说,当年上机时间非常宝贵,女生通常把算法考虑非常仔细,把代码仔细地打在卡片上,上机一次运行就成功,于是高高兴兴地下机了,其实对具体的电脑了解不多。 男生通常很自信,但是程序经常不对,在机器上折腾很多次。 后来,女生都当了老师,男生大多去做实际开发工作了。

我在Unix 系统上也喜欢折腾, 经常把机器搞崩溃,半夜重装系统。 😃

3. 编程的能力

Ken Thompson: 开发了国际象棋程序 Belle,是第一个拿到国际象棋大师称号的程序。 他在一台快要过时的PDP-7 (8K * 18位 内存)写了一个游戏,然后写了简单的文件系统。 正好他妻子带娃走亲戚,不在家三周时间,他用这三周时间写出操作系统的的其他模块。

故事: 当时安装了Unix的PDP-11被放在贝尔实验室供大家使用,有一天大家伙发现Ken总是可以得到最高的权限轻松进入他们的帐户,在贝尔实验室这种高人云集的地方,这简单是太不能容忍了,于是有若干高人跳了出来,仔细分析Unix代码,找到后门,修改后再重新编译整个Unix,当所有人都以为这个世界应该从此清静了的时候,却发现Ken还是很容易就取得了他们的帐户权限,为此大家郁闷不已。至到很多年后,Ken才道出其中的原委,原来代码里确实存在后门,不过并不在Unix代码中,而是藏在编译Unix的编译器里,每次编译器编译时就会自动加入后门代码,而当时整个贝尔实验室都用的是Ken所写的C编译器。 (来源:https://i.linuxtoy.org/docs/guide/ch45s05.html)

David Culter: 他的同事评价他的编程能力: “他处理困难的问题和处理简单问题一样快。 ”
这说明,对于他来说,这些问题的复杂度都是一个等级,可能他期待更难的问题。

4. 典型程序员的特点是什么?

Unix 传奇:从书上的描述看, 这些人都是:友善,有合作精神,追求卓越。

Unix 创立者:对自己严格要求,经常鼓励别的同事(能在贝尔实验室工作的人非常聪明, 可能鼓励就足够了)

Unix 创立者们开会:几乎没有正式的会议,就是聊天,邮件,而且没有什么大的冲突。

NT: 作者这样描述 David Cluter,并说这是普遍程序员的特点:

// David Culter 的特点
single-minded (专注)
obsessive (执着,一根筋)
competitive (好胜).

David 对自己严格要求, 也用同样的标准要求所有团队成员。 他这样评价自己:

I thrive on stress. (我在压力下茁壮成长)

David 的团队开会的模式是: 前十五分钟平静地讨论会议议程,中间充满了有敌意的大嗓门,最后大家居然能微笑着走出会议室。

5. 程序员和领导的关系

**Unix:**贝尔实验室的行政领导通常不管程序员在干什么。 他们的管理方法是:找到优秀的员工,把新员工介绍给优秀的老员工,然后让大家自己寻找项目和合作者。

对于那些长年做一件事情(还没有成果)的人,管理层会保持耐心,以待长远。

不同部门的领导在互相评价兄弟团队的员工很少说:“我的人比你的人强”, 而更加会说 “别忘了你的人还做了一件好事”。

NT:
David Culter 在 DEC 公司的时候, 他的领导 Gordon Bell 给了他很大的自由度,并保护他不受其他人的打扰。 在Gordon 离职后,David 把团队搬到西雅图, 因为那时候波士顿到西雅图没有直飞的航班, 公司大领导很少来视察,他获得了很多自由。

加入微软后, 盖茨和鲍尔默都给了David Culter 很多空间, 但是也派了微软原生的程序员去合作,希望双方能磨合好。

微软公司的绩效评价经历了很多阶段,从末位淘汰到不同团队之间恶意争夺排名(尽管不同的工程师做的事情不具备可比性)。

6. 和先行者 OS 的关系

Unix 的先行者叫 Multics, 是GE,MIT,Bell Lab 等多方合作的项目,经历了典型的过度设计和拖延,最后Bell Lab 退出了合作。 然后两个程序员 (Ken,Dennis) 自己做出了简单的早期的 Unix , 一个 Minimal Viable Product, 足够好到能给同事们用,就行了。

NT 的先行者是 VMS,是 DEC 公司的还算成功的小型机的操作系统。 也是 David Culter 领导开发的。 David 在离开 DEC 公司前做的一个项目 Prism 失败了,被公司高层砍掉,他在项目解散会上流下了热泪… 随后加入了微软, 他想用 NT 证明什么呢?

  1. 项目的难度

Unix: 是几个非常聪明的计算机科学家和工程师写给自己用的简单操作系统。

1969:用汇编语言写的第一版,随后移植到别的PDP 机器上
1971: 发明了C 语言,
1973: 用 C 语言重写 Unix
1974: 正式向外界宣布,获得学术界的重视和采用
1978:大约有 600 台中型机使用 Unix
1979:版本 7 发布,随后Unix 走向了纷繁复杂的开源,变异,壮大之路。一路有各种版权纠纷伴随。

NT:是一个商业公司工程团队写给商业用户的操作系统。要支持 DOS,OS/2, Windows 应用程序。 要有现代化的操作系统内核,网络功能,应用程序支持,图形界面。

1989:早期设计
1990/1: 最小版本 (计划)
1990/7: Code Complete 代码完成 (计划)
1990/10: 应用程序 ready (计划)
1991/3: 最终版 (计划)
1993/7: 最终版 NT3.1(实际,比计划晚了两年)能运行在 12M 的内存,需要90 M 的硬盘。
在这里插入图片描述

8. OS 的设计哲学

Unix 的哲学

https://zh.wikipedia.org/wiki/Unix%E5%93%B2%E5%AD%A6

程序应该只关注一个目标,并尽可能把它做好。
让程序能够互相协同工作。应该让程序处理文本数据流,因为这是一个通用的接口。

感谢 Unix 的发明者和后来的维护者,布道者, 让我们可以使用 Unix,Linux,MacOS,iOS,还有很多其他的分支… … 也影响了几代程序员…

9. 下一代

Unix 的下一代是什么,它也很成功么? 一帮证明过自己的科学家来设计下一代的 OS,为何几乎没有人听说过呢?

请看 Plan9 的故事: Plan-9效应:为什么东西不坏就不要去修它_ IT技术精华 (taocms.org)

NT 的下一代是什么,它也很成功么?

Windows XP 是最成功的 NT 下一代,它在市场上服役的时间远远超过了原来的预期,微软 2014 年才停止发布它的安全更新。
然后进入质量和体验起起伏伏的后代:
Windows Visa:开发过程混乱,用户体验差
Windows 7:改进性能,提高稳定性,用户体验好
Windows 8:想一举搞定 PC 和 Mobile 体验,隐藏 “开始” 按钮,探索各种触摸界面… 用户反馈差
Windows 10: 综合满足了各方面的需求,还算不错,但是 PC 时代已经慢慢落幕了
Windows 11:还有人很在乎么?

David 视频采访,回顾了 Windows Longhorn 系统的开发历程,并坦言该系统所编写代码是“他见过最糟糕的”。
在这里插入图片描述

革命性的下一代:请搜索 Midori。

提问

如何用Shell 命令组合起来完成一个复杂的任务,请看例子:

如何用 awk sed 命令统计一个 Unix 系统中文件大小的分布情况?例如,10K,100K,1M,10M,1G,100G 以上的文件都占多少比例?

答案和讨论见评论区 😄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491012.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 系统应用重名install安装失败分析解决

Android 系统应用重名install安装失败分析解决 文章目录 Android 系统应用重名install安装失败分析解决一、前言1、Android Persistent apps 简单介绍 二、系统 persistent 应用直接安装需求分析解决1、系统应用安装报错返回的信息2、分析解决 三、其他1、persistent系统应用in…

【Unity基础】AudioSource 常用方法总结

在 Unity 中,AudioSource 组件用于控制音频的播放和管理。以下是常用的 AudioSource 控制方法及其说明。 1. 播放和暂停音频 Play():开始播放音频,如果是从暂停的地方继续播放,可以直接调用。Pause():暂停当前播放的…

【ADS射频电路学习笔记】2.阻抗匹配电路设计

本节课学习smith圆图匹配 1.史密斯圆图各功能介绍 首先调出s参数的控件 并增加两个端口 调出smith chart matching的控件 连接好端口在ADS中,默认是从负载端(term2)向源端(term1)做匹配的。 调节s参数控件的的频率扫…

01《Python数据分析》数据分析初探章节总结

目录 1 概述1.1 数据分析定义1.2 数据分析目标1.3 数据分析分类 2 数据分析方法3 数据分析流程4 寻找问题原因5 典型问题参考学习 1 概述 1.1 数据分析定义 数据分析1就是:用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论&…

杰理-LVGL-默认隐藏容器

杰理-LVGL-默认隐藏容器 lv_obj_add_flag(ui->screen_music_cont_tip, LV_OBJ_FLAG_HIDDEN)

软件需求概述(尊享版)

软件需求与软件分析 软件需求:用户角度,注重软件外在表现 软件分析:开发者角度,注重软件内部逻辑结构 面向对象分析模型 类/对象模型(全部的类和对象) 对象-关系模型(对象之间的静态关系&…

将PDF流使用 canvas 绘制展示在页面上(一)

将PDF流展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上进行绘制展示 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 Base64。 将 pdf 流传入该组件中使用 /** fo…

web遇到的安全漏洞

最近项目又在做安全漏扫,记录下遇到的常见的web安全问题 越权 漏洞介绍 攻击者可以在授权状态下,通过修改数据包的参数,操作超出现有权限操作的功能点。举例 修改密码时,可以通过修改名称参数,修改任意用户密码。 任…

12.11数据结构-图

无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。 有向完全图:在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图。 含有n个顶点的无向完全图有…

【Python】【数据分析】深入探索 Python 数据可视化:Matplotlib 绘图库完整教程

目录 引言一、什么是 Matplotlib?1.1 Matplotlib 的安装1.2 Matplotlib 的基本功能 二、Matplotlib 的基础绘图2.1 绘制折线图2.2 绘制柱状图2.3 绘制散点图2.4 绘制饼图 三、高级功能与定制3.1 设置图表样式3.2 使用子图3.3 保存图表 四、Matplotlib 流程图4.1 Mer…

3-机器人视觉-机器人抓取与操作

文章目录 3机器人视觉目录 1. 传感器和标定摄像头模型Intrinsic MatrixExtrinsic Matrix 标定内参标定手眼标定和外参标定 力传感器&其它传感器其它传感器 2. 神经网络和图像处理2D特征处理常见架构 训练流程推理流程部署流程2D 图像任务3D Point Cloud FeaturePointNet Ap…

从源码层级深入探索 Spring AMQP 如何在 Spring Boot 中实现 RabbitMQ 集成——消费者如何进行消费

本章节主要从底层源码探索Spring Boot中RabbitMQ如何进行消费,至于RabbitMQ是如何使用如何生产消息,本章不做过多介绍,感兴趣的小伙伴可以参考:从源码层级深入探索 Spring AMQP 如何在 Spring Boot 中实现 RabbitMQ 集成——生产者…

修改vscode中emmet中jsx和tsx语法中className的扩展符号从单引号到双引号 - HTML代码补全 - 单引号双引号

效果图 实现步骤 文件 > 首选项 > 设置搜索“”在settings.json中修改,增加 "emmet.syntaxProfiles": {"html": {"attr_quotes": "single"},"jsx": {"attr_quotes": "double","…

【小白51单片机专用教程】protues仿真AT89C51入门

课程特点 无需开发板0基础教学软件硬件双修辅助入门 本课程面对纯小白,因此会对各个新出现的知识点在实例基础上进行详细讲解,有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容,所有涉及…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

作者:羿莉 背景 对企业数据进行敏感数据扫描和保护可以提升企业或组织的数据安全。一方面敏感数据可能包括个人身份信息、财务记录、医疗记录等,定期扫描这些数据可以防止未经授权的访问和泄露。 另一方面,许多国家和地区都有关于数据保护的…

Redis和数据库的一致性(Canal+MQ)

想要保证缓存与数据库的双写一致,一共有4种方式,即4种同步策略: 先更新缓存,再更新数据库;先更新数据库,再更新缓存;先删除缓存,再更新数据库;先更新数据库,再…

spring学习(spring-bean实例化(无参构造与有参构造方法实现)详解)

目录 一、spring容器之bean的实例化。 (1)"bean"基本概念。 (2)spring-bean实例化的几种方式。 二、spring容器使用"构造方法"的方式实例化bean。 (1)无参构造方法实例化bean。 &#…

Qt WORD/PDF(二)使用 QtPdfium库实现 PDF操作、打印等

关于QT Widget 其它文章请点击这里: QT Widget GitHub 源码: QWidgetLearningPro (暂未更新) 姊妹篇: Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览 一、简介 QtPdfium 是基于Pdfium库的一个Qt绑定。Pdfium是一个…

【Leecode】Leecode刷题之路第82天之删除排序链表中的重复元素II

题目出处 82-删除排序链表中的重复元素 II-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 82-删除排序链表中的重复元素 II-官方解法 方法1:一次遍历 思路: 代码…

IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁

模拟环境 dev 分支开发完一个功能,需要合并到 master 分支,如果现在直接 merge 合并的话 git分支树会出现杂乱分叉,先把 master 分支 rebase 到 dev git分支树就会是整洁的一条直线 git rebase介绍 rebase:翻译成中文是重新设定,…