鱼羊 校对重新整理
程式设计整件事,光有方法论是不如的,亲自动手课堂教学是必修。
不过,从甚么工程项目侧发力,常常让人难上加难。
如果你还在苦恼,如果拿甚么工程项目来已经开始自己的程式设计练,何不来看一看这本“开发人员都如果试著的诱惑力工程项目”目录。
这是密西西比理工学院现职副教授奥斯丁·威廉(Austin Z. Henley)紧密结合另一方面实战经验,得出的良知所推荐。不但归纳了科学知识关键点,阳光普照自学中如何有效,还周到重新整理了开拓写作数据资料。
你可以数次构筑那些工程项目,每天由此斩获捷伊科学知识。
每每我无人知晓道该拿甚么展枝,或是想自学一类捷伊程式设计语言或架构时,我就会从下列工程项目中优先选择一类已经开始coding:
每一开发人员都如果试著的诱惑力工程项目
文档编辑器
不使用GUI架构中内建的类型信息模块,要怎样构筑全力支持母吕氏终端、优先选择、填入和删掉操作方式的类型信息?
这个工程项目中,存在两个主要考验:
怎样将文档文档储存在缓存中自学文档母吕氏在盛行的GUI中的犯罪行为不要小瞧那些基础的机能,其中有许多技术细节更为重要。比如说当母吕氏位于文档之中,挪动向下斜线,母吕氏会终端到何方?
如果你觉得这太简单,还有进阶测试:
撤销/重做自动换行最后归纳一下科学知识关键点:
用于储存文档的数据结构:数组,rope,gap buffer,piece table文档母吕氏的犯罪行为和实现撤销/重做的设计模式:记忆,命令分离文档视觉和记忆的抽象别忘了还有开拓写作哟:
2D游戏-太空侵略者
即使是最简单的游戏也需要考虑数据结构和设计模式。
在这个工程项目中,你的任务是从头到尾实现一个定义明确的游戏。最好使用SDL,SFML,PyGame这样的2D图形库。
第一步,创建对象终端的效果。
第三步,处理用户输入。
第四步,自学怎样创建和管理所有游戏对象及其状态。比如说如何生成动态数量的敌人。
第五步,自学怎样应用游戏的逻辑。子弹头位置何时更新?甚么时候会有更多敌人出现在屏幕上?怎么判定敌人被干掉了?游戏何时结束?
甚至,在进阶阶段,你还可以考虑引入AI,来制造更加“智能”的敌人。
校对器-Tiny BASIC
从头已经开始编写一类非常小的类似于BASIC的语言校对器,然后将其校对为任何其他语言。比如说,用Python编写可以输出C#代码的Tiny BASIC校对器。
科学知识点:
词法分析句法分析递归下降解析抽象语法树语义分析优化passes代码生成迷你操作方式系统
从这个工程项目已经开始,难度就加大了。
操作方式系统依赖于硬件,因此入门门槛比较高。但这个工程项目可以帮助你更好地理解计算机系统底层都发生了甚么。
作者威廉所推荐了一本免费电子书《使用Rust构筑RISC-V操作方式系统》作为入门教材(地址见文末)。
科学知识点:
交叉校对BootloadingBIOS中断x86模式缓存管理和分页排程(Scheduling)文件系统如果以上四个工程项目,你都觉得so easy,那么就来试著一下最后这两个高难度工程项目吧。
电子表格
电子表格应用程序(如Excel)将文档GUI和校对器的考验紧密结合在了一起。
在这个工程项目中,你需要学会怎样在缓存中表示单元格内容,并实现用于方程式的程式设计语言解释器。
电子游戏机模拟器
这是一个操作方式系统+校对器的二合一考验工程项目。
考验内容是,编写一个虚拟机,让虚拟机可以像真实的CPU和其他硬件模块一样运行。
威廉的建议,是从简单的虚拟控制台侧发力,比如说CHIP-8。
网友建言献策
博客一出,在Hacker News、Reddit上受到了广大码农们的欢迎。
有网友说:
那些工程项目能让我接触到完全不同的领域和问题,比我日常的工作更能激励我。
并且,网友们纷纷建言献策,又推举出好几个优质上手工程项目:
从零构筑数据库光线追踪器矢量图形GUI图像解码器网页聊天室pi计算器的位数通用终端实用程序(如grep)FTP客户端和服务器所以,那些工程项目是否激发了你的灵感?
Talk is cheap. Show me the code. 快亲自动手练起来吧~
传送门
博客地址:
http://web.eecs.utk.edu/~azh/blog/challengingprojects.htmlHacker News讨论(内含更多工程项目所推荐):
https://news.ycombinator.com/item?id=21790779《使用Rust构筑RISC-V操作方式系统》:
http://osblog.stephenmarz.com/index.html— 完 —
量子位 QbitAI · 头条号签约