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) 但是不得其法。

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 证明什么呢?
- 项目的难度
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 以上的文件都占多少比例?
答案和讨论见评论区 😄
相关文章:
Unix 和 Windows 的有趣比较
Unix 和 Windows NT 比较 来源于这两本书,把两本书对照来读,发现很多有意思的地方: 《Unix 传奇》 https://book.douban.com/subject/35292726/ 《观止 微软创建NT和未来的夺命狂奔 》 Showstopper!: The Breakneck Race to Create Windows…...
算法(三)——贪心算法
文章目录 定义基本原理基本思路优缺点优点缺点 经典案例及解析找零问题问题描述贪心思路算法解析java代码示例 活动选择问题问题描述贪心思路算法解析java代码示例 车辆路径问题问题描述贪心思路算法分析java代码示例 定义 贪心算法是指在求解问题时,总是做出在当前…...
LeetCode 704.二分查找
LeetCode 704.二分查找 思路🧐: 在本篇以及之后几篇的博客中,博主将会用二分法进行解答,以此巩固二分题型。二分法一般用于具有二段性的数据中使用。比如该题为有序数组,需要我们查找一个目标值target,分析…...
Linux介绍与安装CentOS 7操作系统
什么是操作系统 操作系统,英⽂名称 Operating System,简称 OS,是计算机系统中必不 可少的基础系统软件,它是 应⽤程序运⾏以及⽤户操作必备的基础环境 ⽀撑,是计算机系统的核⼼。 操作系统的作⽤是管理和控制计算机系…...
使用 rbenv 切换 Ruby 版本
1. 查看当前 Ruby 版本 首先,查看当前系统中安装的 Ruby 版本: ruby -v如果你已经安装了 rbenv,可以列出通过 rbenv 安装的 Ruby 版本: rbenv versions2. 安装 Ruby 版本 如果你想安装新的 Ruby 版本,使用以下命令…...
C语言(结构体练习)
设计一个结构体,存放一个学员信息并显示,存放两个学员信息,算他们的平均分。 #include <stdio.h> #include <string.h>// 定义结构体 typedef struct {char name[50];float score; } Student;// 函数声明 void display(Student student); f…...
你了解网络层的 ICMP 吗?
你了解网络层的 ICMP 吗? 一. 什么是 ICMP二. ICMP 的工作原理三. ICMP 的结构四. ICMP 的常见应用五. ICMP 的局限性与安全性六. 总结 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神…...
清理C盘小记
突然C盘就爆满了,想当初还是给他预留了120G的空间,感觉到现在也不够用了,担心出现死机的情况就赶紧进行了清理。有一说一,清理回收站是真的有用。 参考:C盘清理指南,清理出30G起,超详细总结&am…...
Excel中如何消除“长短款”
函数微调可以可以实施,简单且易于操作的气球🎈涨缩更妙。 (笔记模板由python脚本于2024年12月17日 06:19:13创建,本篇笔记适合用Excel操作数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Fre…...
超越 RAG 基础:AI 应用的高级策略
作者:来自 Elastic Elastic Platform Team 我们最近与 Cohere 举办的虚拟活动深入探讨了检索增强生成 (retrieval augmented generation - RAG) 的世界,重点讨论了在概念验证阶段之后构建 RAG 应用程序的关键注意事项。我们的演讲者是 Elastic 的首席解…...
[shader]【图形渲染】【unity】【游戏开发】 Shader数学基础2-认识点和矢量
在计算机图形学和Shader编程中,点和矢量是两种常见且基础的数学对象。它们在空间中的作用和性质是理解图形渲染的关键。本篇文章将深入探讨点(Point)和矢量(Vector)的定义、特性以及它们之间的关系。 1. 点(Point)的定义 在数学和计算机图形学中,**点(Point)**用于…...
微软开源Python Markdown转换工具
分享一个microsoft开源的Python工具——markitdown,轻松将各类文件转换为Markdown格式。 markitdown支持的文件格式 PDF(.pdf)PowerPoint(.pptx)Word(.docx)Excel(.xlsx)图片(支持EXIF元数据和OCR识别)音频(支持EXIF元数据和语音转录)HTML(包括对Wikipedia...
安装与配置MongoDB 6.0以支持远程连接
安装与配置MongoDB 6.0以支持远程连接 目录 安装curl工具下载并导入MongoDB 6.0 PGP密钥向APT导入MongoDB 6.0版软件包的资源链接安装MongoDB依赖libssl1.1安装MongoDB启动并检查MongoDB服务状态进入MongoDB Shell交互式执行环境设置MongoDB开机自启配置MongoDB允许远程连接 …...
零衍门户国际化:助力拓展全球视野
概述 零衍系统管理平台统一门户管理,支持门户看板灵活配置,同时提供场景化的门户模板,丰富的门户组件,可协助用户快速搭建企业专属门户。 随着零衍产品的不断成熟,国际化需求日益增多,客户期望零衍门户可…...
mysql免安装版配置教程
一、将压缩包解压至你想要放置的文件夹中,注意:绝对路径中要避免出现中文 二、在解压目录下新建my.ini文件,已经有的就直接覆盖 my.ini文件内容 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirD:\\tools\\mysql-8.1.0-win…...
kafka的处理的一些问题 消费延迟
kafka的处理的一些问题 消费者客户端不但没有背压而且内存充足,但产生的消费延迟越来越大在Kafka的Leader副本宕机时 消费者客户端不但没有背压而且内存充足,但产生的消费延迟越来越大 比如我们这个kakfa集群一共有3个Broker节点 TOp1有5个分区…...
旅游创业,千益畅行,开启新的旅游模式!
在当今旅游市场蓬勃发展的时代,旅游卡项目如一颗新星闪耀登场,而千益畅行旅游卡服务更是其中的佼佼者,为广大旅游爱好者带来了全新的旅游体验与机遇。 一、旅游卡项目是如何运作的呢? 千益畅行旅游卡服务的运作模式犹如一部精心…...
集成自然语言理解服务,让应用 “听得懂人话”
如今,应用程序智能化已成趋势,开发者想要实现智能化,那么首先需要赋予应用理解自然语言的能力,使其能够准确地听懂人话,进而响应用户需求,并提供一系列智能化服务。比如用户语音控制应用程序帮忙订票&#…...
利用notepad++删除特定关键字所在的行
1、按组合键Ctrl H,查找模式选择 ‘正则表达式’,不选 ‘.匹配新行’ 2、查找目标输入 : ^.*关键字.*\r\n (不保留空行) ^.*关键字.*$ (保留空行)3、替换为:(空) 配置界面参考下图: …...
[HNOI2002] 营业额统计 STL - set集合
文章目录 [HNOI2002] 营业额统计题目描述样例输入 #1样例输出 #1 提示题解相关知识点set [HNOI2002] 营业额统计 STL - set解题 题目描述 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
