去东京大学读 PLT 了,本文留作纪念。

前言(与正文无关)
我观念是,这东西真不需要全民学。。(但是万一有兴趣,整理一条正常点的路供入门)。中途放弃完全没问题😂。不要有任何压力。
在本文修改过程中发现了 https://csdiy.wiki/ 介绍了很多课程,本文更多是比较详细的流程介绍。此路线仅供参考。
提到的课程默认为课程 + 你能搜到的各种学习心得,题解,甚至是小型社区。
书默认为书 + 各种题解 + 你能搜到的各种分析文章。本文提到的书在
  • github
都能下载到。
如果 link 失效了,https://web.archive.org/ 是好工具。

必须

先通读
提问须知
在知乎,有很多人邀请我回答编程问题,但很多问题问得没有章法,让人看了只好默默关闭窗口。这里我给点提示:问编程问题,最重要的是能让别人能轻松复现你说的现象,最好的办法是提供 SSCCE。贴代码最好的方式是 gist.github.com和 ideone.com 。 所谓 SSCCE,就是能复现你描述的现象的完整能编译运行的(短)代码。你提供的代码要让我拿到之后立刻就能编译运行。不要只贴那个你认为关键的成员函数,你不把完整的 class 贴出来,我怎么知道这个成员函数用到的那些成员变量是什么类型的? 如果你问的问题本身是编译错误,那么你提供的代码应该能让我在我的机器上用我的编译器立刻复现出同样的错误。或者直接用 贴代码和编译器输出。 如果以上方法都行不通,那复现故障还有一个终极办法,你建一个 VPS,复现现象,给我 root 或者 sudo 权限,我有空登上去看看。本条只适用于 muduo 相关问题。 1. 贴代码不要放截屏,更不要拿手机拍屏幕。为了执行你的代码,难道要我手工把代码敲一遍? 2. 提供完整信息,不要只提供你认为重要的信息。如果我两三个来回还不能获得我想要的信息,多半就会放弃继续回答了。 a. Linux 还是 Windows b. Linux 发行版。不要光说 Ubuntu,谁知道你用的是 12.04 还是 14.04? c. x86 还是 ARM d. 32-bit 还是 64-bit e. gcc 版本,是系统自带还是自己编译安装 f. boost 版本,是系统自带还是自己下载的 g. 完整的编译链接参数 h.
提问须知
可能的误区
no hello
请注意,这个场景中基思本可以提前几分钟得到答案,也不必让蒂姆等待,而蒂姆本来可以立刻开始思考这个问题。 人们这样做通常是出于礼貌,避免像面对面或者打电话时候那样唐突地直接提出请求。但现在已经是 2022年了,聊天方式也和以前完全不同。对于绝大多数人来说,打字比说话慢得多。所以尽管你的初衷是好的, 而实际上你只是在让对方等待 你说出自己问题,这是非常没有效率的(某种意义上有些烦人)。 类似的场景有: 请直接问问题! 😫 如果你觉得很直接地说 "嗨" 并问一个问题有些唐突,可以适当地在你的消息前面加上一些寒暄。 例如: "嗨老铁,你咋样了?还有你知道那个事儿什么时候截止吗?" "还可以,咱们可以抽空聊聊。: )" "行,如果你不忙,能帮忙更新一下 NFR 吗?" 等等 这也许看起来很繁琐,但在你得到开头的寒暄的回复之前问你关心的问题,也能够做到 延时沟通 。如果对方不在,而你在他们回来之前就离开了,他们仍然可以回答你的问题,而不只是盯着"在吗?"感到不知所措。 当你做到了这些,大家都会开心!🎉 这不是非常严重的事情(一定程度上👀),所以请不要对送你来看这个网站的人 生气 。 也就是说,如果你看到某个人的状态 / 简介里包含这个网站的地址,那么你如果仅仅对他说:"在吗" 或者 "你好",就请做好被无视的心理准备。 本站点基于 nohello.com 制作。头像取自 * The Office*。 于 GitHub. 开源。 本网站支持下列语言:
no hello

预先准备:

  1. 上网工具。
    1. 随意。能用就行(贴一个 affair ,均为不限时套餐 https://www.mojie.me/#/register?code=GUf3aUmD ,有土区节点)
    2. Linux 下工具的选择(if 你已经有了合适的 then 忽略就好 end)
      对于用机场的纯新手,clash for win 是全平台 + 傻瓜式。Make things done. (这个闭源,but it works)
      如果对 OSS 有执念,https://github.com/zzzgydi/clash-verge/releases但是比较新,还在完善。 反正能用.
      qv2ray 停更(好像有 fork 在更新,我不清楚),v2raya 开源,但是配置也许有点麻烦。
  1. 语言能力
    1. if 英语好 then 直接看教案 else 浏览器安装翻译插件 end
  1. 2025 年更新: Optional: 大语言模型, 具体见
    🧠
    Self learning in LLM era(WIP)

学习流程

学习顺序是从上到下。语言只是表达的载体,重点不是用了哪门语言。
https://zhuanlan.zhihu.com/p/456110373 61a 是 SICP 的 Python 版,更加“实用”+“简单”一点

SICP

  • JS
    • https://sourceacademy.org/ js 改写版,适合括号恐惧症。
      学完后,基本的程序思维就有了,下面的 C/C++ 是两门大学里大概率会遇到的语言。(if 业余自学 or 用不到 or 大学里没有 then 可以忽略 end)。

C

C 的类型声明很容易看晕,https://cdecl.org/

C++

《cpp primer》不是 Plus。虽然这书只有 C++11。但是基本的都有了。
彩蛋
仅十天用这书 + 几次讲解帮某大二网友通过了转专业 C++ 考试。而且是没有课,直接考的。
为什么没有 Java, 因为我目前不会写

下面开始学习解决问题的方法

算法

《算法 4》 或 cs61b(61b 我没刷,因为在之前就刷了几百题力扣 + 用算法 4 代替了,此外 61b 是 Java)
算法导论不适合初学者
理由
notion image
然后是练习。
读完开始做力扣,建议从树开始做。
为什么不推荐比如 hdu,vjudge 等的 oj 平台
前提:本文读者是初学者
oi/acm 更多是竞技,力扣更多是健身。力扣提供了友善的函数接口,可以不用管快读等。而且都有极其详细的评论区 + 题解。
为什么建议从树开始做
理由:树可以体现递归思想,dfs/bfs 都能化成树的搜索。甚至编译原理的 AST 也是一棵树。图是树的扩展。

然后是抽象到具体,代码是怎么变成指令的
https://godbolt.org/ 一个生成汇编/字节码的 playground
https://dogbolt.org/ 一个反编译网站

csapp

这课是基于 x86-64 体系的。
应该是最清晰的版本,如果听不懂可以去 bilibili / youtube 找带翻译的。
lab 可以在 的 labs/ 找到

CS61c

基于 RISC-V,侧重点不同, 反正都是好课
材料地址

学完这些,可以选择自己的方向了

选择上面这些课的理由:
同样是实现算法,有些人的代码就很整洁,有些人是一坨坨的 for 套 for 套 for, 逻辑分散,控制流极其凌乱。有些人是抽象成一个个子函数,功能分离。最小职责原则。
同样是解决问题。不同的算法有各自的优劣。
相同的算法,不同的写法,硬件上的效率不同。
 
下面是 roadmap。图片取自
notion image
 

DL

字面上的入门书。

Math

评价:虽然不少大学都有离散数学,但是教得太割裂了。举个小例子,为什么 sum 函数累加求和 ,s 要预先= 0,prod 累积,p = 1, 矩阵方阵累乘,p = 单位矩阵。 https://zh.m.wikipedia.org/zh-cn/單位元

CS70

非常贴合实际,有很多网红题,比如小岛居民眼睛颜色问题。

具体数学


假如想进阶语言,Python 方面推荐

进阶

python


你可能会注意到,上面的路线里没有什么 爬虫,怎么做网站,小程序开发 等。

代码维护

等到了这里,应该已经有一定量的代码积累了。
《代码大全》
《重构》

可选

JS

流水的框架,铁打的 JS,虽然 JS 一年一个新版本,但是加的特性也没多少。
《JS 红宝书》目前最新版 ES2019 ,虽然有点老了,但是包含了 ES6 就够了。
《犀牛书》太厚了。《js 精粹》太旧了。

留言或者疑问可发送至 i [at] asukaminato [dot] eu [dot] org
asuka minato 是谁
我老婆
 
Loading...
Steven Lynn
Steven Lynn
喂马、劈柴、周游世界
最新发布
我与 Dify 的半年
2025-3-9
我的2022年终小结
2024-11-9
记录雅思考试经历与一点学习心得
2024-11-9
Hackergame 2024 思路小结
2024-11-9
黑客松、日本、入职:我的2024下半年的总结
2024-11-9
NotionNext:基于Notion和NextJS的开源博客
2024-11-9