十年,孩子都上小学了,我的Windows还没写完

Posted 码农翻身

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十年,孩子都上小学了,我的Windows还没写完相关的知识,希望对你有一定的参考价值。

每个程序员都有一个操作系统梦吧, 我记得年轻的时候, 意气风发,给女朋友说过要做一个像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这么多,你自己写过啥,造过啥轮子? 

这真是个好问题,我还真写过,我把答案放到了我的小号“想躺平的程序员”,今天的文章就能看到。

建立小号是怕失联, 详情参见《谨防失联,请保存》, 小伙伴们一定要关注啊!

以上是关于十年,孩子都上小学了,我的Windows还没写完的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin University-----学习经历(还没写完)

新闻发布系统还没写完,请看下集

Xamarin University-----Xamarin Mobile Certification Exam考试经历(还没写完)

18.2.26深信服Web实习生补坑(已拿到offer)----持续更新中,还没写完

基于STM32H743设计UI界面心得(还没写完)

自定义view--仿照 体育app,股票,基金,电商,区块链APP 数据信息栏展示(还没写完)