最近在跟 MIT 的 Missing Semester 课,说实话这课名起得就很直白——”缺失的课程”,意思就是学校里那些没人教但你天天在用的工具。Shell、Git、Vim、tmux、正则表达式… 这些东西你迟早得会,不如早点系统学一下。
为什么这门课重要
我在学 CS61A 的时候就发现了,课程默认你会用终端、会用 Git 提交作业。但是学校真的没教过这些啊… 幸好 MIT 把这门课公开了,而且内容非常实用,不是那种念 PPT 的水课。
“The missing semester of your CS education” — 这门课的 slogan 简直太真实了
Shell:你和电脑对话的方式
很多人觉得终端很可怕,黑乎乎的窗口、看不懂的命令。但其实 Shell 就是你和电脑之间的”直接通道”,比点鼠标快多了。
几个我觉得最有用的命令:
find— 在文件系统里搜索文件,比 GUI 的搜索快得多grep— 在文件内容里找关键词,写代码调试必备xargs— 把前一个命令的输出当成后一个命令的参数pipe (|)— 把命令串起来,Unix 哲学的核心
举个实际例子,假如你想找到项目里所有包含 “TODO” 的 Python 文件:
find . -name "*.py" -exec grep -l "TODO" {} ;
一行搞定,不用一个个文件打开看。
Git:不只是 commit 和 push
之前写过一篇 Git Workflow 的文章,但 Missing Semester 里讲的更底层一些。比如 git rebase 和 git reflog 这两个东西,很多人不敢用,但其实理解了就很安全。
关于 git rebase,我的理解是:它把你的分支”搬到”另一个分支的最新提交上,让历史变得线性。听起来很危险?其实只要记住一个原则——
不要 rebase 已经推送到远程的分支,只 rebase 本地的。这样就不会出问题。
而 git reflog 就是你的”后悔药”。不管你做了什么骚操作(reset、rebase、甚至误删分支),reflog 都记录着所有 HEAD 的移动历史。找到对应的 commit hash,checkout 回去就行。
tmux:终端里的”多窗口”
这个工具我之前完全没听过,用了之后发现真香。简单说,tmux 让你在一个终端窗口里开多个面板,还能断开 SSH 之后保持会话不中断。
最常用的场景:SSH 到服务器,开了一个长时间运行的任务,结果网断了——没有 tmux 的话任务直接没了。有了 tmux,重新连上 tmux attach 就回来了。
# 新建会话 tmux new -s mysession # 断开后重新连接 tmux attach -t mysession # 分屏 Ctrl+b % # 左右分屏 Ctrl+b " # 上下分屏
正则表达式:看起来像乱码但超好用
正则表达式(Regex)可能是最让人又爱又恨的工具了。第一次看 ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$ 这种东西,谁不迷糊?
但你不需要记住所有语法,常用的就那么几个:
.— 匹配任意单个字符*— 前一个字符出现 0 次或多次+— 前一个字符出现 1 次或多次d— 匹配数字w— 匹配字母和数字^和$— 行首和行尾
我的经验是,先从简单的开始,比如 grep -E "error|warning" log.txt,然后慢慢加复杂度。不要一上来就想写一个完美的正则,那样你会疯的。
Vim:编辑器之神还是神之编辑器
Vim 的争议很大,有人说它过时了,有人说它是最好用的编辑器。我的看法是:你不需要日常用 Vim,但至少得会基本操作。因为你迟早会遇到只能用终端编辑文件的情况(比如 SSH 到服务器改配置)。
最基本的几个操作:
i— 进入插入模式(开始编辑)Esc— 回到普通模式:w— 保存:q— 退出:wq— 保存并退出dd— 删除一行/keyword— 搜索关键词
掌握了这些,至少不会出现”我被困在 Vim 里出不来了”的尴尬场面。
写在最后
Missing Semester 这门课最大的价值不是教你某个具体工具,而是让你意识到:工具是可以被系统学习的。很多人(包括之前的我)都是遇到问题才去搜一下,用完就忘。但如果你花时间系统学一遍,效率提升是指数级的。
课程链接:https://missing.csail.mit.edu/,强烈推荐过一遍。不用全部看完,挑你最不熟的部分先学就行。