• 程序员应该造的五大轮子


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

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

  • 相关阅读:
    leetcode 53. Maximum Subarray 最大子数组和(中等)
    leetcode 322. Coin Change 零钱兑换(中等)
    leetcode 72. Edit Distance 编辑距离(中等)
    leetcode 121 Best Time to Buy and Sell Stock 买卖股票的最佳时机(简单)
    leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)
    leetcode 241. Different Ways to Add Parentheses 为运算表达式设计优先级(中等)
    leetcode 474. Ones and Zeroes 一和零(中等)
    聊聊量化投资项目以及项目总结
    面试题
    【leetCode]跳跃游戏
  • 原文地址:https://www.cnblogs.com/onlyliuxin/p/14955164.html
Copyright © 2020-2023  润新知