当前位置: 首页 > 科技观察

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

时间:2023-03-17 23:39:03 科技观察

本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处用于转载。对于编程,光有理论是不够的,动手实践才是必修课。然而,从什么项目入手往往是困难的。如果您仍然想知道从什么项目开始您的编程实践,请查看这份“每个程序员都应该尝试的具有挑战性的项目”列表。这是田纳西大学助理教授AustinZ.Henley根据自身经历给出的良心推荐。既归纳了知识重点,使你的学习有的放矢,又贴心地整理了延伸阅读材料。您可以多次构建这些项目,每次都获得新知识。每当我不知道该练习什么,或者想学习一种新的编程语言或框架时,我都会从以下项目之一开始编码:每个程序员都应该尝试的具有挑战性的项目文本编辑器如何构建支持光标移动的文本框、选择、插入和删除而不使用GUI框架内置的文本框组件?在这个项目中,主要有两个挑战:如何在内存中存储文本文档。学习流行编辑器中文本光标的行为。不要小看这些基本功能,还有很多细节值得注意。例如,当光标在文本中时,按下向上箭头,光标会移动到哪里?△来源:AustinZ.Henley如果你觉得这太简单了,还有进阶测试:undo/redowordwrap最后总结知识点:用于存储文本的数据结构:array,rope,gapbuffer,piecetable用于撤消/重做的文本光标行为和设计模式:文本视觉和记忆抽象的记忆、命令分离不要忘记进一步阅读:2D游戏-太空入侵者即使是最简单的游戏也需要考虑数据结构和设计模式。在这个项目中,您的任务是从头到尾实现一个定义明确的游戏。最好使用像SDL、SFML、PyGame这样的2D图形库。△来源:AustinZ.Henley第一步是创建物体运动的效果。在第二步中,学习所有关于游戏循环的知识。游戏实际上在绘图、获取用户输入和处理游戏逻辑之间循环。第三步是处理用户输入。在第四步中,学习如何创建和管理所有游戏对象及其状态。比如如何生成动态数量的敌人。第五步,学习如何应用游戏逻辑。子弹位置什么时候更新?什么时候屏幕上会出现更多的敌人?如何判断敌人已经被杀?比赛什么时候结束?甚至,到了高级阶段,还可以考虑引入AI,创造出更加“智能”的敌人。编译器-TinyBASIC从头开始??编写一个非常小的类BASIC语言编译器,并将其编译为任何其他语言。例如,编写一个在Python中输出C#代码的TinyBASIC编译器。△来源:AustinZ.Henley知识点:词法分析、句法分析、递归下降分析、抽象语法树、语义分析、优化通道、代码生成、迷你操作系统。从这个项目开始,难度就增加了。操作系统依赖于硬件,所以进入门槛比较高。但是这个项目可以帮助您更好地了解您的计算机引擎盖下发生的事情。作者Henry推荐一本免费电子书《使用Rust构建RISC-V操作系统》作为入门教材(地址见文末)。△来源:AustinZ.Henley知识点:交叉编译BootloadingBIOS中断x86模式内存管理和分页调度(Scheduling)文件系统如果你觉得以上四项这么简单,那就试试最后两个难的项目。电子表格Excel等电子表格应用程序结合了文本编辑器和编译器的挑战。在本项目中,您将学习如何在内存中表示单元格内容以及如何为方程式实现编程语言解释器。Videogameconsoleemulator这是一个操作系统+编译器二合一的挑战项目。挑战在于编写一个行为类似于真实CPU和其他硬件组件的虚拟机。Henry的建议是从一个简单的虚拟控制台开始,例如CHIP-8。该网友的建言献策博客一出,在HackerNews和Reddit上受到了广大码农的欢迎。有网友表示:这些项目让我接触到完全不同的领域和问题,比日常工作更有动力。此外,网友们纷纷献计献策,推荐了几个入门的优质项目:从零开始构建数据库raytracervectorgraphicseditorimagedecoderwebpagechatroompicalculatornumberofdigitsgeneralterminalutility(suchasgrep)FTPclient客户端和服务器那么,这些项目中的任何一个是否激发了您的灵感?谈话很便宜。给我看代码。来练习吧~