程序员应该造的五大轮子

每个程序员都有一个操作系统梦吧, 我记得年轻的时候, 意气风发,给女朋友说过要做一个像Windows那样的操作系统,女朋友当时很崇拜的样子,十多年过去了,孩子都上学了, 这件事我不敢给她提了。

最近有个同学在微信上问我, 又提到了这回事:

我双手支持、赞成,因为写不了Windows, 造个轮子还不是不错的。

尤其是学生阶段,有充裕的、大块的时间,造轮子再合适不过了。

01 操作系统

造轮子操作系统当排名第一,原因前面也说了,操作系统的诱惑实在太大,在一个裸机上运行一个系统,让冰冷的机器听从自己的指挥, 让这个系统管理所有的硬件,支持上层的应用,说实话, 有一种当上帝的感觉。

但是造操作系统难度也是最高的, 首先得理解Intel CPU的那一大堆细节, 什么实模式、保护模式、A20, GDT, IDT, 中断处理...... 深入进去,如果你不头晕脑胀一段时间,说明你还没有透彻理解。

系统的启动得用汇编编写, 度过了这一段难熬的时间,才能进入C语言的世界,去实现进程调度、内存管理、文件系统、I/O管理。

我觉得一般人写个玩具,体验一下和硬件打交道的感觉,在实践中精确理解进程、线程、文件等抽象就够了。 只有大神才会在上面折腾GUI, 移植游戏,然后搞成了Linux ,宁静OS

难度指数:5颗星

吹牛皮指数:爆棚

相关书籍:

《操作系统真象还原》

《Orange'S:一个操作系统的实现》

《Linux内核设计的艺术》

《Linux内核完全剖析》

02 数据库

排名第二的我认为是数据库, 但现实中我发现很少有人去写,不知道是什么原因,也许是吹牛皮指数太低?

其实数据库是很有料的:

1. 编译原理的知识

因为你得做SQL语句的解析,转化成内部的数据结构。

不需要特别深入,因为现在有很多趁手的工具了,例如Antlr,挺好用的。

2. 索引

B+树, 因为关系数据库存储需要用它

3. 事务

你需要自己去实现事务,undo ,redo日志等。

深入一点的话要考虑事务的隔离级别。

4. 查询优化

对数据库感兴趣的同学,强烈推荐SQLite,可以从最早期的源码开始看起。

难度指数 :4颗星

吹牛皮指数:??

相关书籍:

惨,中文的居然没有,可以去看SQLite官网,资料很齐全

03 网络软件

第三名是网络程序。这个范围很广,可以是:

像Ngnix 那样的HTTP服务器:实现HTTP协议,学习epoll,反向代理,模块化设计等等

或者像Tomcat这样Web应用服务器,既支持HTTP协议,又可以运行Servlet和JSP。

或者是Redis这样的高性能的缓存服务,学习它和客户端的协议设计,如何快速地存取数据,对外提供的API,持久化等。

有人说它们属于中间件,也有道理,因为不是OS和数据库这样的基础软件,又不是单纯的应用软件,将来工作以后,日常打交道非常多,造一个轮子,发到GitHub上, 写到简历中,非常吸睛。

难度指数:4 颗星

吹牛皮指数 :5颗星

相关书籍:

《Redis设计与实现》

《How Tomcat Works》

04 虚拟机

第四名是虚拟机, 这个轮子也是我非常推荐的。

以Java为例, 写个虚拟机能非常透彻地理解Java 的字节码,因为在执行之前,必须要解析.class文件,在实现执行引擎的时候,得理解栈帧、本地变量表、方法区、堆等概念。

然后还得实现各种指令:存储指令、栈指令、数学指令、比较指令等

如果你还能实现垃圾回收,那就更牛了!

折腾一圈下来,这门语言对你基本上就没有什么秘密了。再去看别的语言和虚拟机:怎么都长得差不多啊!

难度指数:4颗星

吹牛皮指数:5颗星

相关书籍:

《自己动手写Java虚拟机》

《深入理解Java虚拟机》

05 编程语言

最后是编程语言, 造这个轮子的人更少,因为现在编程语言很成熟, 即使你造出来了,估计也是没人用的。

现在GitHub火热的都是那些“文言文编程”,“东北话编程”,没啥实战意义,在自媒体的追逐下一时比较吸睛,但是热点一过就烟消云散。当然,你要是追求流量那另当别论。

造编程语言主要的知识是《编译原理》, 这门课喜欢的人不多,讨厌的不少, 在公司也很少用到相关的知识,所以除非你对编程语言有强烈的爱好,否则大概率是赔本的。

不过造编程语言很可能会让你对“为什么XXX的语法这么设计”有较深理解,并且会培养独特的“品味”, 这点儿挺不错。

难度指数:4颗星

吹牛皮指数:就看你的语言有多少人用了

相关书籍

《自制编程语言》

《编程语言实现模式》


可能有人要问了,你BB这么多,你自己写过啥,造过啥轮子?

这真是个好问题,我还真造过,答案就在我的公众号“码农翻身”中。

posted @ 2021-06-30 16:31  码农翻身  阅读(2699)  评论(6编辑  收藏  举报