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 以上的文件都占多少比例?

答案和讨论见评论区 😄

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化大屏UI组件库:B端科技感素材PSD

在数据可视化领域,一个出色的大屏UI设计不仅能够准确传达数据背后的信息,更能提升用户的视觉体验。然而,对于UI设计师而言,设计这样一款界面往往面临着寻找合适设计素材的挑战。为了应对这一难题,我们推出了这款数据可…

爬虫逆向学习(十四):分享一下某数通用破解服务开发经验

阅前须知 这篇博客不是教大家怎么实现的,而且告知大家有这个东西,或者说一种趋势,借此分享自己大致的实现经验。具体的实现我也不好整理,毕竟是在别人的基础上缝缝补补。 前言 使用补环境方式破解过某数的同学都知道&#xff0…

结合Gitee、PicGo和Typora构建一个免费的个人笔记工具

文章目录 📝小引言📝步骤与内容📝简单使用Typora📝Gitee和GitHub📝使用GiteePicGo打造自己的图床Gitee建仓库Node环境配置PicGo软件安装及配置Typora测试 📝美化Typora 📝小引言 不知道大家在写…

快速本地化部署 OnlyOffice服务 ( Linux+Docker)

文章目录 一、OnlyOffice介绍📖二、集成OnlyOffice🧩2.1 环境准备🖥️2.2 搜索镜像2.3 拉取镜像2.4 查看镜像2.5 创建容器2.6 进入容器配置2.7 重启服务2.8 添加字体字号2.9 测试OnlyOffice服务 三、在线预览office文档四、Cpolar内网穿透 一…

数字产业化和产业数字化到底是什么?

“数字产业化”和“产业数字化”在很多官方文件和领导人讲话中都是成对出现的,这两个术语看起来非常相似,但它们作为数字经济的两个重要组成部分,既有联系又有区别。 在谈数字产业化和产业数字化之前,我这里需要先给大家介绍一个概…

RabbitMQ中的Work Queues模式

在现代分布式系统中,消息队列(Message Queue)是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件,支持多种消息传递模式。其中,Work Queues(工作队列)模式是一…

数据结构(二叉树)

前言: 在数据结构那片浩瀚无垠、仿若神秘宇宙的天地里,二叉树宛如一颗散发着独特光辉、极为耀眼的星辰。它就像一位技艺精湛的建筑师,运用独特的二叉分支结构,精心构建起层次分明、秩序井然的数据组织 “大厦”。根节点仿若大厦的…

React简单入门 - [Next.js项目] - 页面跳转、AntD组件、二级目录等

须知 1Next.js 官网(英文)Next.js by Vercel - The React Framework2Next.js 文档(中文)简介 | Next.js 中文文档3React官网(中文)https://react.docschina.org/learn4Ant Design组件总览组件总览 - Ant Design5tailwindcss类名大全 官网英Justify Content - TailwindCS…

【MySQL数据库】Ubuntu下的mysql

目录 1,安装mysql数据库 2,mysql默认安装路径 3,my.cnf配置文件 4,mysql运用的相关指令及说明 5,数据库、表的备份和恢复 mysql是一套给我们提供数据存取的,更加有利于管理数据的服务的网络程序。下面…

elasticsearch设置密码访问

1 用户认证介绍 默认ES是没有设置用户认证访问的,所以每次访问时,直接调相关API就能查询和写入数据。现在做一个认证,只有通过认证的用户才能访问和操作ES。 2 开启加密设置 1.生成证书文件 /usr/share/elasticsearch/bin/elasticsearch-…

深入理解 CSS 文本换行: overflow-wrap 和 word-break

前言 正常情况下,在固定宽度的盒子中的中文会自动换行。但是,当遇到非常长的英文单词或者很长的 URL 时,文本可能就不会自动换行,而会溢出所在容器。幸运的是,CSS 为我们提供了一些和文本换行相关的属性;今…

Java 垃圾回收机制详解

1 垃圾回收的概念 垃圾回收(Garbage Collection,GC)是自动管理内存的一种机制,用于释放不再使用的对象所占用的内存空间,防止内存溢出。垃圾回收器通过识别和回收那些已经死亡或长时间未使用的对象,来优化…

RabbitMQ全局流量控制

RabbitMQ全局流量控制 流控机制流控是对什么进行控制?rabbitmq进程邮箱流控机制是什么? 流控原理流控原理流程 流控状态显示流控对象流控机制对象主要进程各进程状态情形分析 性能提升提升队列性能方式 当消息积压时,消息会进入到队列深处&am…

Jetpack Compose赋能:以速破局,高效打造非凡应用

Android Compose 是谷歌推出的一种现代化 UI 框架,基于 Kotlin 编程语言,旨在简化和加速 Android 应用开发。它以声明式编程为核心,与传统的 View 系统相比,Compose 提供了更直观、更简洁的开发体验。以下是对 Android Compose 的…

40 基于单片机的温湿度检测判断系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用dht11温湿度传感器检测温湿度, 通过lcd1602显示屏各个参数,四个按键分别可以增加温湿度的阈值, 如果超过阈值,则…

【cocos creator】按照行列数创建格子布局

调用 this.creatLayout(5, 5, this.boxNode, this.rootNode) //限制数量 this.creatLayout(5, 5, this.boxNode, this.rootNode, cc.v3(0, 0), 10, 10, 23) /*** 创建格子布局* param xCount 列数量* param yCount 行数量* param prefab 预制体* param root 根节点* param root…

211-基于FMC的1路1.5G ADC 1路 2.5G DAC子卡

一、板卡概述 FMC-1AD-1DA-1SYNC是我司自主研发的一款1路1G AD采集、1路2.5G DA回放的FMC、1路AD同步信号子卡。板卡采用标准FMC子卡架构,可方便地与其他FMC板卡实现高速互联,可广泛用于高频模拟信号采集等领域。 二、功能介绍 2.1 原理框图 2.2 硬件…

前端性能优化(理念篇)

前端性能优化(理念篇) 前言 其实前端性能优化,按照我的理解,首先你公司的硬件条件跟其它资源跟的上,比如服务器资源,宽带怎么样,还有后端接口响应如何,这些资源都具备后&#xff0…

Y3编辑器文档4:触发器1(界面及使用简介、变量作用域、入门案例)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域 三、入门案例3.1 使用触发器实现瞬间移动3.…