程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点

鱼羊 编译整理量子位 报道 | 公众号 QbitAI编程这件事 , 光有理论是不够的 , 动手实践是必修课 。
不过 , 从什么项目入手 , 往往让人犯了难 。
程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点文章插图
程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点文章插图
如果你还在纠结 , 应该拿什么项目来开始自己的编程练习 , 不妨来看看这份“程序员都应该尝试的挑战性项目”清单 。
这是田纳西大学助理教授奥斯汀·亨利(Austin Z. Henley)结合自身经验 , 给出的良心推荐 。 不仅总结了知识要点 , 让你在学习中有的放矢 , 还贴心整理了拓展阅读资料 。
你可以多次构建这些项目 , 每次从中收获新的知识 。
每当我不知道该拿什么练手 , 或者想学习一种新的编程语言或框架时 , 我就会从以下项目中选择一种开始coding:
每个程序员都应该尝试的挑战性项目文本编辑器不使用GUI框架中内置的文本框组件 , 要如何搭建支持光标移动、选择、插入和删除操作的文本框?
这个项目中 , 存在两个主要挑战:

  • 如何将文本文档存储在内存中
  • 学习文本光标在流行的编辑器中的行为
不要小看这些基础的功能 , 其中有许多细节值得注意 。 比如当光标位于文本当中 , 按下向上箭头 , 光标会移动到何处?
程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点文章插图
△图源:Austin Z. Henley如果你觉得这太简单 , 还有进阶测试:
  • 撤销/重做
  • 自动换行
最后总结一下知识要点:
  • 用于存储文本的数据结构:数组 , rope , gap buffer , piece table
  • 文本光标的行为和实现
  • 撤销/重做的设计模式:记忆 , 命令
  • 分离文本视觉和记忆的抽象
别忘了还有拓展阅读哟:
程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点文章插图
2D游戏-太空侵略者即使是最简单的游戏也需要考虑数据结构和设计模式 。
在这个项目中 , 你的任务是从头到尾实现一个定义明确的游戏 。 最好使用SDL , SFML , PyGame这样的2D图形库 。
程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点文章插图
△图源:Austin Z. Henley第一步 , 创建对象移动的效果 。
第二步 , 了解有关游戏循环的所有信息 。 游戏实际上是在绘图、获取用户输入和处理游戏逻辑之间循环 。
第三步 , 处理用户输入 。
第四步 , 学习如何创建和管理所有游戏对象及其状态 。 比如如何生成动态数量的敌人 。
第五步 , 学习如何应用游戏的逻辑 。 子弹头位置何时更新?什么时候会有更多敌人出现在屏幕上?怎么判定敌人被干掉了?游戏何时结束?
甚至 , 在进阶阶段 , 你还可以考虑引入AI , 来制造更加“智能”的敌人 。
编译器-Tiny BASIC从头开始编写一种非常小的类似于BASIC的语言编译器 , 然后将其编译为任何其他语言 。 比如 , 用Python编写可以输出C#代码的Tiny BASIC编译器 。
程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点文章插图
△图源:Austin Z. Henley知识点:
  • 词法分析
  • 句法分析
  • 递归下降解析
  • 抽象语法树
  • 语义分析
  • 优化passes
  • 代码生成
迷你操作系统从这个项目开始 , 难度就加大了 。
操作系统依赖于硬件 , 因此入门门槛比较高 。 但这个项目可以帮助你更好地理解计算机底层都发生了什么 。
作者亨利推荐了一本免费电子书《使用Rust构建RISC-V操作系统》作为入门教材(地址见文末) 。
程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点文章插图
△图源:Austin Z. Henley知识点:
  • 交叉编译
  • Bootloading
  • BIOS中断
  • x86模式
  • 内存管理和分页
  • 排程(Scheduling)
  • 文件系统
如果以上四个项目 , 你都觉得so easy , 那么就来尝试一下最后这两个高难度项目吧 。
电子表格电子表格应用程序(如Excel)将文本编辑器和编译器的挑战结合在了一起 。
在这个项目中 , 你需要学会如何在内存中表示单元格内容 , 并实现用于方程式的编程语言解释器 。
电子游戏机模拟器这是一个操作系统+编译器的二合一挑战项目 。