Giter Club home page Giter Club logo

cs-notes's Introduction

Disclaimers

  • 该项目是我个人的笔记,部分会刻意制作成Blog,但大部分仍然是我个人的Note,除非特殊声明,否则不建议作为学习资料。
  • 该笔记部分插图来自各种书籍、课程或其他资料,若涉及任何版权行为,请联系我,我将删除内容。
  • 对于课程笔记,我(自认为)严格遵循Academic Integrity,虽然在笔记中可能记录思路,但是代码是Private的,如果有不合适的地方,请提醒我。
  • 文中所有内容,与本人现在,之前或者将来的雇佣公司或组织无关。
  • 本人保留自省的权力,即你看到的内容不一定代表本人最新的认知和观点。
  • 项目下所有文章除特别声明外,均采用CC BY 4.0 CN许可协议,转载请注明出处。

Reference

Blogs

笔记意义

  1. 在初学时

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

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

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

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

现在看来笔记不是一个结果,而是一个过程。我工作之后,少有整块时间学习,基本是在地铁上学的,读资料的时候确实感觉学到了东西但是很快就忘记。不能即时记笔记意味着不能建立(并重构)知识框架,也不能通过整理进行反复记忆。这样就导致学完之后对知识的吸收很少,如果能充分记笔记就可能会有更好的学习效果。

花有重开日人无再少年呀。

学习阶段

Quick Start -> 实践 -> Manual or Reference

  • 知识无尽,不要递归学习,要选择“合理的抽象”

笔记方法论

  • 如果笔记只是Manual的搬运,为什么不STFM呢?

几个原则

  1. 熵增定律:
    不要去追求极致的秩序,因为那意味着巨大的成本和极大的不稳定性
  2. 奥卡姆剃刀:如无必要,勿增实体
  3. 抽象与平衡:过低的抽象带来了思维负担,过高的抽象意味着抽象成本。

Always-Day-One

我认为计算机最有普遍意义的天赋只有一种——行动力

  • 立刻去做的行动力
  • 坚持去做的行动力
  • 发心:

    • 自用:我个人有强迫症,想让自己在计算机领域的知识体系很系统,但熵增定理告诉我们这样阻力很大,我希望通过笔记去对抗它
    • 费曼学习法:我会设想有一个人在看这篇记录,用词尽可能有易读性,比如说明简介下资料内容、推荐程度和适合人群
  • 说明:我本科的学习方法论是理论结合实践螺旋上升

    • 理论结合实践:Donald Knuth曾经说过"If you find that you’re spending almost all your time on theory, start turning some attention to practical things; it will improve your theories. If you find that you’re spending almost all your time on practice, start turning some attention to theoretical things; it will improve your practice.",我这里也提供一个工程类的视角理解这句话,如果我们要写一本教材,我们要选择一个主题,我们希望可以写出这个主题的方方面面,各个层次、各个细分以及它们的发展和现状。但我们发现如果一本教材想要实现理论和实践相结合是要做取舍的。如果想概念方面面面俱到,很难辅以实践,各个概念分别给出实践很零散,而且并不是所有的概念都有适合学习的实践。目前对这个问题的一种解决方案就是开发相对独立的配套实验嘛。还有一个方案就是专门写实践的书籍,这本书就是主要讲怎么实现某个东西,然后在这个过程中讲这个领域的相关概念,那么我们发现这样组织就很难展示尽可能全面的概念。所以我在资料的选择方面就涉及上面说的几种类型的资料。
    • 螺旋上升:这个是理论结合实践在时序上必然体现的结果,我们可能对某个领域的某个概念以不同的视角“重新”学习。

数理基础

  • 数学基础:

    • 微积分:
      • 宋浩:应付期末、草草看完,早忘光了。
    • 线性代数:
      • 宋浩:应付期末、草草看完,早忘光了。
    • 概率论:
      • 宋浩:应付期末、草草看完,早忘光了。
    • 信息安全:
      • 《深入浅出密码学》:比较推荐,我目前需要的绝大部分密码学知识都来自这里,在做Web3或者其他东西时对这方面不犯怵了
  • 物理基础:上课(很少听讲),学校老师讲的应该算挺好的。

  • 电子基础:

    • 数字电路
      • 上课(草草看完录播),学校老师讲的确实挺好的。
      • 《编码·隐匿在计算机软硬件背后的语言》:这本书的范围比数电这个科目要大,是从最基本的逻辑门开始直接干到概念性的计算机,但是偏简单,为了平缓的学习曲线放弃了深度,适合高三

专业基础

  • 信息学导论:

    • csdiy.wiki:我没开玩笑,我在刚上大学时看了无数人的学习路线规划,感觉抄来抄去,但是csdiy属实是有世界观刷新感觉,强烈推荐。
    • Crash Course Computer Science:神奇的网课,语速极快的overview了CS的各种Topic,比较推荐高中毕业
  • 编程入门:

    我有点遗忘在第一次接触编程的感觉了,不太能换位到一个初学者的视角;不同人进入编程世界的入口是不一样的,这个阶段可能会花一些时间找找感觉。

    • CS61A(SICP, Structure and Interpretation of Computer Programs):CS-DIY的第一门课,还没看过,SCIP也被称为是一个常看常新的书,比较向往,先Mark下。
    • Acwing Linux基础课/Missing-Semester:这两门课有一小部分重叠,主要讲Linux的操作和工具,我觉得非常实用,前者内容更少,所以讲的更细致(给了很多演示),但是它是服务于它自己后面的课程的,够细但不够多,所以需要后者作为补充;后者非常的全面,会讲到我们在实际开发中会遇到但是不会有人系统讲的东西。强烈推荐。
  • 编程语言:

    语言是互通的,一个新语言的诞生必然要考虑用户教育成本,一个显而易见的方案就是和之前的语言更像。
    所以我在编程语言的学习方案从开始是系统的看大部头的书籍到后是面看Quick Start文档然后直接上手。

    • C:

      • 《C Primer Plus》:C语言学习的不二之选,我当时有C语言基础,但是不够系统,于是看的这本书,用了五天五夜,看完后可以在小范围当语言律师了。
    • C++:

      so上的学习资料推荐

      • 《C++ Primer Plus》:不推荐,我选择它的原因是因为它和《C Primer Plus》是同一个作者。这里我最初理解它不被推荐是因为内容是C++98,在阿尼亚佬的提醒下,不是这本书不合时宜而是内容上本身就有错误的。

      下面的几本书真是值得反复刷呀。

      • 《C++ Primer》(以下简称c3p):毫无疑问的成为C++初学者的第一本书,比较推荐,但我个人认为它还是有股C++98味儿。

      下面的几本书必须要二刷,因为c3p毫无疑问是给新手准备的,但是C++太深奥了,刚看完c3p肯定要继续看下面来学习更Modern的特性和最佳实践,但是在没有足够实践的基础上绝对是理解不到位的,在充分实践后再来看会有崭新的体验。

      • 现代C++30讲/32讲:一个课程的文字记录,是《C++ Primer》必要补充。本身更多是提纲挈领的说明一些要点,对细节想要更深刻的理解肯定要看更多的资料。或者它本来就是一个提纲,为我们打开Modern C++的大门。
      • 《Effective Modern C++》:本来想看《Effective C++》的,它被称为Effective类书籍的鼻祖,但看评价觉得它不够Modern,而这本书是它的continuation和correction。强烈推荐!惊叹于C++的博大精深,这本书对我个人而言说清了很多我过去模棱两可的事情,看完之后越发感觉自己还是C++的初学者。

      我也想大言不惭的表达下该如何学习C++,推荐叔叔的博客。好吧我写不出比叔叔更好的,“眼前有景道不得,崔颢题诗在上头”,算了算了。

    • Python:

      • Manual,Python这种语言看Manual就行啦
      • B站码农高天,他是CPython的Contributor,Python相关教程很不错,合适想精深Python的。
    • Golang:

      • Manual,Golang官方的Tour of Go就非常好呀。
    • Rust:

      • rustlings:真的不由得感叹一句“太现代了!”,它的思路是提供很多无法编译的Rust代码,然后供我们修改,在实践中理解Rust的各种语法(显然这些Bug涉及的语法特性应该是难度递增的)。它的特色是提供了全自动交互环境,就像玩游戏闯关一样。具体的,我以我的流程为例,将项目Fork到自己的github中,然后clone下来,在本地搭建好Rust相关环境后,编译rustlings。然后在项目目录下打开VSCode,不需要Explorer,整个屏幕就有一个编辑区和终端,然后让他们左右放置(一般我都是上下放置),然后在终端启动rustlings watch,就会自动找到最近的需要修改的代码,VSCode的终端是可以点击链接打开,自然就拿到了需要修改的文件,然后保存,终端自动重新测试,错了给出编译报错,成了给出下一个需要修改的Bug。这就很像游戏呀。然后rustlings watch是有hint的,因为我没有学过Rust,直接以练代学,所以基本每个我都hint一下,它会给出Rust Book的链接,这个时候我再去看书。整个学习体验棒极了。
  • 数据结构/算法竞赛:

    • Acwing算法全家桶,我不想评价Acwing和yxc,但结合性价比,这个可能是国内最适合初学者的一套教程了。
  • 编译原理:

    编译原理在整体计算机知识体系中似乎是一个比较独立的部分,但是我个人感觉非常有学习的必要

    • 它为我们展示了计算机看待程序的视角
    • 它为我们展示设计编程语言的方方面面
    • 《Crafting interpreters》:这本书自底向上手把手的带读者使用C语言实现一个有闭包、类、垃圾回收的动态类型语言。是我2023年看到的最好的技术书(这个受到了《Effective Modern C++》的冲击),总之非常推荐。
  • 体系结构:

    个人感觉计算机组成原理、体系结构、操作系统(的一部分)并不能泾渭分明的划分,这里以体系结构统称

    • 王道考研的计组课:应付期末,草草看完。
    • CSAPP/CMU15-213:纯纯看书,没有做课后作业、没有看课程录像。先鸽了。
    • 南大ICS PA:只看了余子豪的课,还没来得及做实验,应该也鸽了。
      • 让我对计算机底层有了全新的理解
      • 学到了很多对Coder来说很珍贵的的品质:Unix哲学、如何提问、STFW/STFM/RTFSC等等
  • 操作系统

    • 王道考研的操统课:应付期末,草草看完。
    • MIT6.S081:资料方面只看了xv6 Manual和野生课程内容翻译,然后直接啃实验,以实践为主,缺乏理论由OSTEP补充。
    • 南大蒋炎岩操作系统/OSTEP:蒋老师说他的课是OSTEP导读,但蒋老师的课很有个人风格,推荐课程;蒋老师评价OSTEP为最好的自学OS的资料,我的第一本英文书,全程在地铁上看完的,没有课后作业,没有记笔记,非常推荐(其实中文版就翻译的挺好,没必要硬啃英文版)
  • 计算机网络

    • 谢希仁的《计算机网络》(第七版):教材
    • Stanford CS144(2023):使用C++20实现了字节流、重组器、TCP的两端、数据链路层和网络层的接口、IP的路由选择。其中的项目结构(包括CMake相关代码)和几个Util类(地址的封装、文件描述符的封装、Socket的封装)都挺值得学习的。做完才意识到删除了往年最难的部分,难度低了很多,应该适合新手。遗憾的是这就导致后几个实验比较零碎,未能得到一个完整可用的TCP协议实现。
  • 数据库

    • 王珊、萨师煊的《数据库系统概念》(第五版):教材

      萨师煊先生是我国数据库的奠基人。

    • 《Build Your Own Redis with C/C++》和《Build Your Own Database From Scratch》:分别用C with STL实现mini Redis和Go实现mini关系型数据库,我个人完成了第一个和第二个的B+Tree部分(有bug),第一本中我将作者的C实现改成Modern C++实现,但是对于侵入式数据结构还是一股C味儿,后面有机会可能结合CRTP重写。对于第二本,写出的B+Tree不符合预期,而且作者使用的B+Tree是比较特殊的变种,作者没有好好描述、网上也没有很好的描述,于是作罢,以后有机会写15445吧。

    • B站Moody老师,相当于15445的课程翻译。

    • CMU 15445 Lab 2023 Spring。

  • 其他:

    • 并行计算:
      • 《大规模并行处理器程序设计》:散步佬给了极高的评价,不知道我后面有没有机会接触这方面的。
    • 图形化(GAMES)

工程能力

  • 分布式系统:

    • MIT6.824:看完了部分课程的讲义和完整的课程字幕翻译记录,主要以了解知识点为主,因为我的实习项目就是分布式存储,工业界的实践就在眼前,所以课程实现没有做。
  • 虚拟化:

    • 《自己动手写Docker》:
  • 系统设计:

    • 经典《DDIA》:
    • 《凤凰架构》
  • 业务开发:

    • Acwing工程课的Django和前端:优势的很简单,缺点是太简单;低年级可以看看,否则没必要了。
  • 优秀开源代码源码阅读

  • 金融科技:

    • Max Dama《Max Dama on Trade》:Max Dama的博客汇总
    • 《Trading and Exchanges: Market Microstructure for Practitioners》

产品经理

  • 《超级转化率》

  • 《增长黑客》

  • 金融

    • 基金或者证券从业资格证教材

非技术类

  • 纯文学:

    • 小说:
      • 肯·福莱特的世纪三部曲
    • 文学理论:
      • 《文学讲稿三种》-美-弗拉基米尔·纳博科夫
      • 《给青年人的十二封信》朱光潜
  • 哲学:

    • 韩炳哲
    • Bilibili学院派
  • 历史:

    • 尤瓦尔·诺亚·赫拉利的简史三部曲
    • 《枪炮、病菌与钢铁:人类社会的命运》-贾德·戴蒙
    • 世界电子地图册-Bilibili王晓
  • 经济学:

    • Bilibili翟东升
    • 《棉花帝国》
    • Bilibili小德MOMO
  • 人际理解力:正如张作霖说的”江湖不是打打杀杀,江湖是人情世故“,我也有一定的体会,这里并不是所谓的人情社会,而且互相交换经济价值或者情绪价值,本质是一个美好的事情,但是这里肯定是有方法论的

    • 《君主论》-马基雅维利

    • **:**的传统文化在耳濡目染中已然成了我们价值观的底色,那么里面到底有什么呢?需要感受下

      • 费孝通的《乡土**》
      • Bilibili蒙克MK
      • ***选集
      • 《**历代政治得失》
      • 《参谋助手论》
      • 曾仕强
    • 心理学:

      • 《潜规则》-吴思
      • 《血酬定律》-吴思
    • 死亡:

      • 《末日船票》罗小茗
  • 人的成长:这也是我成长过程中的体会,至少在年轻的时候,人的观念变化是比较剧烈且频繁的,这种变化是通过一次次事件,一次次和别人的交流。这样的变化也发生在任何人的成长过程中,如果TA们将其写成一本书,读这样的书就像和一个前辈说话,TA表达TA成长过程中观念的变化,我们自己也会有所感悟。

    • 《优秀的绵羊》:作者是耶鲁大学招生相关的工作人员,本身的教育经历也非常丰富,他观察并和很多同学交流意识到,排名很高的院校的学生简历非常漂亮,但是普遍缺乏我理解为做事的发心和真挚的人际关系感情,这要么已经在他们中暴露出心理问题,要么他们职业中后期出现迷失;后面讲了现在整个美国高等院校招生现状的历史由来,其实这里有很多我国高效的影子。后面讲了作为学生怎么避免这种情况,即博雅教育+尽可能多的接触不同圈层的人(无论向上还是向下)。最后更进一步批判精英阶层的一些问题(可是又有什么用呢?)
    • 《被讨厌的勇气》
  • 商业嗅觉:你猜这种东西可以有意识培养么?

    • 瑞·达利欧

    • 互联网:

      • 《黑客与画家》
      • 《复盘网飞》-美-马克·伦道夫
      • 《精益创业》
    • 芯片:

      • 《我在硅谷管芯片:芯片产品线经理生存指南》
    • Bilibili取景框看世界

    • Bilibili王政东

  • 自然科学:

    • 瑞安·诺思的《万物发明指南:时间旅行者的生存手册》
    • 美国史蒂文·约翰逊的《我们如何走到今天:重塑时间的六项创新》
    • 哈福德的《塑造世界经济的五十项伟大发明》
    • 马克·米奥多的《迷人的材料:10种改变世界的神奇物质和它们背后的科学故事》
    • 卡尔·奇默的《病毒星球》
  • 未分类:没看过且没有接触过比较好的讲解肯定不知道属于哪种类型呗

    • 《思考,快与慢》
    • 《胜者思维》-金一南
    • 吴军:
      • 数学之美
      • 浪潮之巅
      • 文明之光
      • 大学之路

cs-notes's People

Contributors

flottant avatar infinite-war 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.