程序员必练六项目:从数据结构到操作系统,计算机教授为你画重点
鱼羊 编译整理量子位 报道 | 公众号 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)
- 文件系统
电子表格电子表格应用程序(如Excel)将文本编辑器和编译器的挑战结合在了一起 。
在这个项目中 , 你需要学会如何在内存中表示单元格内容 , 并实现用于方程式的编程语言解释器 。
电子游戏机模拟器这是一个操作系统+编译器的二合一挑战项目 。
- 现状|程序员现状揭秘:平均年薪20.36万,Java人才需求量最大
- 联网时代|34岁转行做程序员是否还有成功的机会
- 最新|2020年12月最新购机推荐,这六款各有优点,实用党首选
- 最多|用户最多的中国APP:拼多多第六,淘宝第二,榜首用户超12亿
- 东六环|250吨“大块头”入井 东六环改造工程将进入盾构阶段
- 合作|六国合作!澜湄水资源合作信息共享平台网站开通
- 程序员学英语第1天——JavaScript 程序测试的介绍1
- 这些错误,程序员经常会犯,你了解过吗?
- 浅谈如何开好一家手机维修店(六):指南舟手机维修培训学校
- 三头六臂钛强悍 映众RTX3060TI显卡首发
