漫画之类的书,翻得就是快,不得不感慨:1960s ~ 1980s 真是大师云集的年代呀。
主要内容摘录如下:
1、冯·诺依曼体系架构
- 使用二进制编码。
- 存储设备与中央处理器分开,以保存数据和指令。
- 包含五大逻辑组件:输入设备,输出设备,控制单元,算术逻辑单元和内存部件。
2、软件职业的出现
- 早期只有硬件才被视为真正的科学和工程,编程不被重视。
- 汇编语言出现后,程序员不再与抽象的二进制打交道了,改用了助记符。
- 此时,汇编器会将汇编指令翻译成机器码(即二进制)在计算机上执行。从此,软件开发这个新的社会工种出现了。
- 职业称谓变化过程:计算员(computer)--> 编码员(coder)--> 程序员(programmer)。
3、Unix 纪年
- 肯·汤普森和丹尼斯·里奇开发 Unix 时,需要给系统确定一个时间的起点,当时是 1970 年,直接就用 1970-01-01 00:00:00 作为了 Unix 纪年。
- 因为所有具有时间概念的系统都需要一个纪年开始的标记,从这个点开始往后累计时间,所以就有了 Unix 纪年。
- Unix 时间,按累计秒数的方法来存储时间,对 32 位系统来说,会出现溢出,而溢出的那一天为:2038-01-19 03:14:00。
4、IDE(Integrated Development Environment)
- 基于字符界面进行编辑、编译、调试的 IDE 在 20 世纪 70 年代就出现了,但没火,直到 GUI(图形界面)的出现。
- 现在的 IDE 集成了众多功能于一身:编辑器、语法高亮、调试器、代码分析、版本控制、测试、重构等。
- IDE 的好处是降低了开发人员学习各种开发工具的负担,从而将主要精力专注于代码开发身上。
5、1979年,Glenford J.Myers 第一次把“调试”和“测试”进行区分,从此测试成为一个独立的社会分工。
6、自由开放的精神
- 1983 年, Richard M.Stallman 建立 GNU 项目,目标是开发一系列必备软件,从内核、编辑器、标准库到常用软件以替代商业性 Unix。
- 1985 年,他发表《GNU 宣言》并成立自由软件基金会。
- 1989 年,Sir Tim Berners-Lee 提出了 WWW(World Wide Web),他还亲自实现了第一个 Web 服务器,第一个 Web 浏览器,以及 URL,HTML,HTTP 等技术。
- 1991 年,Linus Torvalds 把自己的业余作品 Linux 发布到互联网上,从此,Linux 开启了它的帝国之旅,成为最自由的操作系统。
7、敏捷宣言
- 2001 年开发者们在犹他州雪鸟城聚集,交流轻量级软件开发方法的经验,发布了《敏捷宣言》。
- 其四大原则是:个体和互动高于流程和工具、客户合作高于合同谈判、响应变化高于遵循计划以及工作的软件高于详尽的文档。
8、容器技术
- 容器和沙箱不是新鲜事,但 Docker 通过镜像把它们玩出了新花样。
- Docker 镜像统一了开发、测试和生产环境,真正做到了“一次构建,到处运行”,从此一场 PaaS 领域的战火开始在各大云计算厂商之间熊熊燃起。
- Google 的 Kubernetes 最终在容器编排领域横扫六国,一统江湖。
9、编程语言 PK[1]
名称 | 发布时间 | 作者 | 特点 | 适用范围 | 备注 |
---|---|---|---|---|---|
Plankalkul | 1945 | 德国:康拉德·组斯(Konrad Zuse) | 第一款高级编程语言 | 未广泛使用,作者使用它写了世界上第一个自动下棋程序 | |
Assembler | 1951 | 英国:莫里斯·威尔克斯(Maurice Wilkes) 团队 | 使用助记符代替二进制数字串,大大解放了生产力,导致软件行业出现 | 计算机硬件相关开发 | |
Fortran | 1957 | 美国:IBM 约翰·巴科斯(J. Backus)团队 | 接近数学公式的自然描述,在计算机里具有很高的执行效率,易学,语法严谨 | 广泛地应用于并行计算和高性能计算领域:科学计算、数值分析和工程设计等 | 首个支持添加代码注释的编程语言 |
Lisp | 1958 | 美国:约翰·麦卡锡(John McCarthy) | 函数式编程的起点,用一种简单的数据结构表(list)来代表代码和数据,即列表转换思维 | 人工智能领域 | |
Basic | 1964 | 美国:约翰·乔治·凯梅尼(John George Kemeny)和托马斯·库尔茨(Thomas E. Kurtz) | 简单易学的高级语言,提供清晰友好的错误信息,并且可以解释执行 | 计算机早期很火,是必学编程语言,现在用 VB 开发桌面程序也还有 | |
Simula 67 | 1967 | 挪威:奥利-约翰·达尔(Ole-Johan Dahl)与克利斯登·奈加特(Kristen Nygaard)等 | 第一门面向对象语言,引入了类、对象、继承和虚函数等概念 | 后续多种面向对象语言都受其影响 | |
Pascal | 1970 | 瑞士:尼克劳斯·埃米尔·维尔特(Niklaus Emil Wirth) | 是当时简洁优美、编译速度最快的语言 | 用于教学外,还可以进行系统开发 | 彼时 C 语言还未诞生 |
C | 1972 | 美国:丹尼斯·里奇(Dennis Ritchie) | 结构化编程语言,运行速度快 | 操作系统内核主要开发语言,Linux Kernel 有超过 98% 的代码用它编写 | 肯·汤普森(Ken Thompson)设计了 B 语言,丹尼斯·里奇在其基础上设计了 C 语言 |
C++ | 1985 | 丹麦:本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup) | 把面向对象的 Simula 语言很多特性融入到了 C 编译器,使其成为一门多范式编程语言,灵活且性能高 | 大规模软件开发首选语言之一,比如大型游戏等 | 最复杂的编程语言,没有之一 |
Perl | 1987 | 美国:拉里·沃尔(Larry Wall) | 通用的脚本语言,是高端、通用、解释型、动态的编程语言家族 | 系统管理员最爱,处理文本十分方便 | 灵活的脚本带来的不便是:别人看不懂你写的代码 |
Python | 1990 | 荷兰:吉多·范罗苏姆(Guido van Rossum) | 广泛使用的解释型、高级和通用的编程语言。支持多种编程范型,包括函数式、指令式、反射式、结构化和面向对象编程。同时,它还有动态类型系统和内存自动垃圾回收功能,以及一个巨大而广泛的标准库。 | 应用广泛,尤其受非计算机行业科研工作者的喜爱,目前在 AI 领域非常火 | 人生苦短,我用 Python |
Java | 1995 | 加拿大:詹姆斯·高斯林(James Gosling) | 拥有跨平台、面向对象、泛型编程的特性 | 广泛应用于企业级 Web 应用开发和移动应用开发 | 一次编写,到处运行 |
Ruby | 1995 | 日本:松本行弘(まつもとゆきひろ) | 面向对象、指令式、函数式、动态的通用编程语言 | RoR(Ruby on Rails)的出现让其在 Web 开发领域一骑绝尘,成为互联网服务的优选语言和框架 | 编程最重要的就是开心 |
JavaScript | 1995 | 美国:布兰登·艾克(Brendan Eich) | 解释性动态编程语言 | 前端开发不可或缺,浏览器必须支持的语言 | 任何能用 JS 实现的应用,最终都必将用 JS 实现 |
PHP | 1995 | 丹麦:拉斯姆斯·勒多夫(Rasmus Lerdorf) | 通用计算机脚本语言 | 尤其适用于网络开发并可嵌入HTML中使用 | PHP 是世界上最好的编程语言 |
Go | 2009 | 美国:罗伯特·格瑞史莫(Robert Griesemer)、罗勃·派克(Robert C. Pike)及肯·汤普森(Ken Thompson) | 静态编程语言,语法简单,依赖 CSP 理论实现了高性能的网络和多进程 | 云原生领域一支独大 | C 太原始,C++ 太复杂,Go 刚刚好 |
Rust | 2010 | Graydon Hoare | 安全、并发、实用(支持垃圾回收,安全的并发模型,以及媲美 C++ 水平的性能),支持多种编程范式:函数式、并发式、过程式以及面向对象 | 在系统编程领域替代 C 的征程上,是最有力的竞争者 |
10、Unix is very simple, it just needs a genius to understand its simplicity.