强烈推荐的两个神级教学项目: nand2tetris 与 MIT6.828

nand2tetris

  • 难度:★★★★☆
  • 推荐:★★★★★

nand2tetris 项目有一本书叫《计算机系统要素》,也有英语的视频教程。如果英语不好的可以看书,内容是一样的。

这本书主要讲解了计算机原理(1-6章)、编译原理(7-11章)、操作系统相关知识(12章)。不要看内容这么多,其实这本书的内容非常通俗易懂,翻译也很给力。每一章背后都有对应的练习,需要你手写代码去完成,堪称理论与实践结合的经典。

这里引用一下书里的内容简介,大家可以感受一下。

本书通过展现简单但功能强大的计算机系统之构建过程,为读者呈现了一幅完整、严格的计算机应用科学大图景。本书作者认为,理解计算机工作原理的最好方法就是亲自动手,从零开始构建计算机系统。

通过12个章节和项目来引领读者从头开始,本书逐步地构建一个基本的硬件平台和现代软件阶层体系。在这个过程中,读者能够获得关于硬件体系结构、操作系统、编程语言、编译器、数据结构、算法以及软件工程的详实知识。通过这种逐步构造的方法,本书揭示了计算机科学知识中的重要成分,并展示其它课程中所介绍的理论和应用技术如何融入这幅全局大图景当中去。

全书基于“先抽象再实现”的阐述模式,每一章都介绍一个关键的硬件或软件抽象,一种实现方式以及一个实际的项目。完成这些项目所必要的计算机科学知识在本书中都有涵盖,只要求读者具备程序设计经验。本书配套的支持网站提供了书中描述的用于构建所有硬件和软件系统所必需的工具和资料,以及用于12个项目的200个测试程序。

全书内容广泛、涉猎全面,适合计算机及相关专业本科生、研究生、技术开发人员、教师以及技术爱好者参考和学习。

而且,这本书的门槛非常低,只要你能熟练运用一门编程语言即可。

本书从与非门开始教你一步步构建一个完整的计算机(1-6章);从第 7 章开始一直到第 11 章,需要完成三个编译器(汇编编译器、VM 编译器、Jack 语言编译器);最后一章则需要完成操作系统部分功能。

如果你完成了本书所有的项目,则会获得以下成就:

  • 构建出一台计算机(在模拟器上运行)
  • 实现一门语言和相应的语言标准库
  • 实现一个简单的编译器

我已经把这本书所有项目都完成了,耗时两个月(每天 3 小时)。答案放在 github 上,还建立了一个 QQ 交流群,如果有不懂的可以加群里探讨一下。

MIT6.828

  • 难度:★★★★★
  • 推荐:★★★★★

这个项目是 MIT 大学开源的一个操作系统课程,官网是 https://pdos.csail.mit.edu/6.828/2018/schedule.html。该项目主要有以下几个优点:

  • 循序渐进,从浅到深,让人更容易接受
  • 理论与实践结合,每讲解一个知识点都有对应的练习需要完成
  • 做这个项目的人很多,网上资料和答案非常多

只要你跟着项目走,从 Lab1 开始,一步一步的做到 Lab6,就能实现一个简单的操作系统内核。以下是 6 个实验的内容简介:

  1. 引导PC,讲解 bootloader
  2. 内存管理
  3. 用户进程及中断
  4. 抢占式多任务处理
  5. 文件系统
  6. 网络驱动程序

不过这个项目比起 nand2tetris 要难,门槛较高。如果没什么基础的话,建议做这个项目之前先看看下列资料:

这个项目也花了两个月才完成,不过只做了 Lab1-6 实验,挑战任务和家庭作业都没做。答案放在 github 上,有兴趣可以看看。

原文地址:https://www.cnblogs.com/woai3c/p/12590304.html

时间: 2024-10-08 21:45:14

强烈推荐的两个神级教学项目: nand2tetris 与 MIT6.828的相关文章

程序员神级跳槽攻略:什么时候该跳?做什么准备?到哪里找工作?

1.引言 每年的3.4月份都是求职高峰时期,目前已进入6.7月份了,你已经成功换工作了吗? 这次我们想聊的,就是程序员跳槽这件事儿,我打算从三个方面来说: 1)程序员什么时候该跳槽? 2)跳槽前你需要做的准备工作? 3)到哪里找跳槽机会? 学习交流: - 即时通讯开发交流3群:185926912[推荐] - 移动端IM开发入门文章:<新手入门一篇就够:从零开发移动端IM> (本文同步发布于:http://www.52im.net/thread-1755-1-1.html) 2.本文作者 安晓辉

跟我一起学Vim补全神级插件--YouCompleteMe

最近重拾Vim,编译部署来补全插件YCM,这个插件的补全效果和在写C代码的时候的自动提示错误信息等还是十分棒的,写点心得下来,也算给自己做个备忘. 快速安装: 首先参考我的.vimrc配置,用Vundle安装好之后,进入YCM的文件夹.vim/bundle/YouCompleteMe会找到install.sh脚本文件.这个时候如果你需要C语言系的语义补全你需要在运行install.sh脚本之后手动加入命令--clang-completer,即可进行自动安装,此时YCM会去Clang的官网去下载l

VIM自动补全插件 - YouCompleteMe--&quot;大神级vim补全插件&quot;

VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe), 使用VIM的用户也多半感觉 IDE开发工具不够轻便,且IDE往往只支持特定的几种语言或者特定系统平台,多数人用来用去,还是觉得VIM最顺手,用起来最舒心. 下面这个VIM的自动补全插件——YouCompleteMe,为我们弥补了vim不能自动补全的缺憾.YCM不仅仅对C族语言的支持非常好,而且它

实在忍不住了,发一段神级代码,大家瞻仰瞻仰

跟这样的函数比起来,顿觉日月无光,天昏地暗,飞沙走石! 完全一派末日景象啊! 另外命名什么的就先无视吧……跟这么强大的封装比起来,命名算个屁啊! ----说下背景吧-------------- 上述代码是我强调了多次,MVC必须要用Model,然后要注意封装,结果这姐姐(工作2年多了都)就封装成这个德行了 -------------------- 同样一个函数,既能返回一个对象,还能返回这个对象中的某个属性啊服了工作这么多年第一次见这样的神级代码 .到处new,new你妹啊new! ------

用了TextMate才知道什么叫神级Editor

用了TextMate才知道什么叫神级Editor 一直用Eclipse作为开发Ruby和Java项目的IDE,但是太耗内存,再开个Firefox和虚拟机就可以直接将MBP弄残了..看到大家都对Mac下的TextMate赞不绝口,于是报着试试的心态装了个中文破解版玩玩(VeryCD上有下载),结果发现功能太TM强大了,简直是神级Editor,除了代码重构这种高级功能不支持外,其他常用功能完全秒杀Eclipse.. 学习起来也很简单,自带的帮助文档扫一遍也就够用了. 常用的快捷键: ??F 全文查找

女程序员做了个梦,各路大神惊现神级评论!

开心一刻! 都说程序猿是地球上比较特殊的物种,而女程序猿(也称程序媛)更是稀缺物种,集万千宠爱于一身.比如,Twitter上的一位女程序员仅仅是做了一个梦,马上引来了一众程序猿的围观起哄,惊现各种神级评论! 原文梦境 Twitter话题.png 神级评论 亡羊补牢型 把那个女人的指针指向你即可: 谁让你把男朋友设成public的: 心真软,就该把他的接口屏蔽掉: protected 逛街(youOnly): 设计问题,应该采用单例模式: 没做回归测试: 标准做法是做个断言: 注释掉了,逛街的参数

GitHub上关于docker的项目排名前十个介绍,同时推荐下两本gitbook

GitHub上关于docker的项目排名前十个介绍,同时推荐下两本gitbook 1. docker: https://github.com/docker/docker开发语言:Go ? 18,761 Stargazers支持者 ? 3,861 Forks被拷贝次数Docker - the open-source application container engine,这个就是docker本身了. 2. dokku: https://github.com/progrium/dokku开发语言:

Github欢乐多 PHP神级代码引发吐槽热

前日,github的PHP板块惊现一段能够提升70%运行效率的代码,引发了全世界众多网友的吐槽和调侃,“awesome!”.“well done!”.“PHP是世界第一语言!”平时不苟言笑,埋头苦干的程序员们充分发挥了其幽默的一面,github成为了欢乐的海洋. 先来看看这一段神级的代码: 这段代码所做的就是一件事情:禁用PHP的垃圾回收器.然后网友测试在使用禁用PHP的垃圾回收器后带来的效果就是: Before: Memory usage: 163.66MB (peak: 403.82MB),

神级bug解决方法

真的是神级bug,util包中的Arrays类导入不了,一直报错.原因:JDK 1.8和Myeclipse 8.5不兼容,导致java.util.Arrays类无法被编译.所以报错.解决方法:1.降低jdk版本.2.升高Myeclipse版本 原文地址:https://www.cnblogs.com/yanlongw/p/9315701.html