Code Monkey home page Code Monkey logo

cs-notes's Introduction

  • 该笔记部分插图来自各种书籍、课程或其他资料,如果涉及到任何版权行为,请联系我,我将删除内容。
  • 文中所有内容,与本人现在,之前或者将来的雇佣公司无关,本人保留自省的权力,即你看到的内容不一定代表本人最新的认知和观点。

笔记的意义

  1. 在初学时

    • 在学习时记下笔记有助于记忆
    • 在整理时重构笔记有助于搭建知识体系 随着进一步学习,我们对同一知识的理解发生变化,会动态的调整笔记(重构知识体系的过程)
  2. 在实践时
    通过笔记快速的回忆起学习时的理解或者查找对应的知识点

但随着时间的推移,笔记的作用减少了

  • 常用的、重要的知识点内化于心
  • 零碎的、细节性的知识现用现查

此时笔记更像是”当年攻城略地时的纪念品“

Plan of 2023

下面的讨论既是我2023年的学习计划(实际上是计划在毕业一到两年内完成),也可以作为计算机本科生的学习路线,是CS自学指南的一个子集,没有提及基础知识的学习(比如语言、数据结构),可以使用其他的学习路线作为补充。提到的课程是年年更新,有些东西可能只在某一年的课程中有。

下面的部分描述我觉得也可以作为CS专业和其他相近专业的核心区别

  1. 让我们有一个我们的机器:PA(C)

    在计算机底层,其实是以ISA(指令集架构)为中心的,向下芯片厂商按照ISA的规定的指令设计和制造电路,向上软件开发者按照指令集提供的指令设计程序。在指令集层面有树大根深的x86、精简指令集ARM以及开源新贵RISC-V等等
    其中围绕RISV-V指令集的相关生态欣欣向荣,一生一芯 就是这样的一个项目,它试图让我们体验一个RISC-V指令集芯片从设计到流片的全过程,这里有很多知识更偏向电子信息专业,我们需要找到一个切面作为学习的分界线避免过度递归学习。
    NJU PA可以作为一生一芯的子集,它是编写这样的一个x86程序:一个模拟RISC-V指令集机器运行的程序。在这个实验中,我们不需要了解芯片设计的知识,只需要按照RISC-V的指令集想办法编写一个C项目,它可以接受一个RISC-V指令代码作为输入,然后输出的就是这段RISC-V指令代码的逻辑。

到这里我们相当于有了一个“实体的机器”,我们可以把编写的(机器代码)程序放在里面运行

  1. 在我们的机器上搭建一个操作系统:THU rCore(Rust)

    这里其实有其他选择,比如有两本经典的带读者从头制造一个mini os的书籍,但是粗略接触觉得有点过时(其实也没过几年,计算机领域实在是发展太快了);或者是MIT的xv6、清华的uCore也是非常好的选择,不过我突然意识到“目前流行的语言能够在市场占领一定的生态位确实有其独特的地方”,所以想趁机学习一下Rust

    这个课程是使用Rust语言编写一个运行在一个基于RISC-V的机器的操作系统

至此我们已经有了一个完备的机器。

在体系结构方面的学习肯定还要提到《CSAPP》,无论是它的作者、授课老师还是Lab都享誉全球。

  1. 编写一个C语言编译器:chibicc(C)

    想象一下,我们已经有了一个具有操作系统的机器,如果我们有编译器可以将我们写的代码编译成可以运行在我们机器上的RISC-V指令集程序,是一件多么激动人心的事情啊。
    B站视频,录制这个视频的佬是基于Rui的chibicc,Rui把原本x86架构的改为RISC-V架构,并配有大量注释和316个commit,这个视频相当于一个跟随学习的视频

至此我们已经有了一个相当于RISC-V架构的机器,上面运行有一个操作系统,并且我们自制了一个C编译器使我们编写程序并编译成可运行在这个机器的程序,计算机三大浪漫已完成其二。

  1. 带我们的机器走进互联网:standford CS144(Modern C++)

    上面的机器只能编写运行单机的程序,尝试将它们连接起来,当多个机器可以通信,我们设计程序就可以有更多的想象空间了。这门课的Lab就是用现代C++实现TCP/IP模型协议栈

    实际上模型中还有网络接入层,这里其实也有很多知识,不过感觉更偏向网络工程这个专业

  2. 更好的管理数据以制作更好的程序:数据库CMU15-445(Modern C++)

    随着程序规模的扩张,对数据的管理提出了新的要求,比如数据的结构还有当多用户对同一数据进行读写的一致性问题,于是数据库理论应运而生,这门课就是带我们用现在C++实现一个关系型数据库

至此,相当于我们制作了一个计算机,并编写了基本但并不简单的系统程序(OS、Complier、DB),以及完成了计算机互联的基础设施。
下一阶段就是如果在这些基础设施上编写更好的程序,我们进入了软件工程专业的领域

分布式

互联网中的数据是海量的,要处理这样的数据仅靠单机是无法在一个可以接受的时间内完成的,而且有些场景(诸如转账)天然就是分布式的。所以编写部署在集群的程序是很有必要的。但是天然具有分布式的算法(比如用于路由器表更新的距离向量算法,本质是最短路Bellman-Ford算法)是稀有的,如果统筹集群的算力和存储空间是一个复杂问题。

  • 入门网红课程MIT 6.824(Golang)

    2023年:好像改名了。

    以论文解读的形式带我们学习分布式的方方面面

log

  • 2023.01.17笔记软件从Typora转向Obsidian,LaTeX中的&对齐全部失效,暂时没有时间修改

cs-notes's People

Contributors

flottant avatar zweix123 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.