大家好,我是小北。 最近看到一个问题,说为什么大学 C 语言课不顺便教一下 Makefile、gdb 等工具链。 回想了一下,好像确实是这样,以前大一学 C 语言的时候都是直接用 Dev C++/ VS 这样的集成开发工具,不太懂编译、链接,更别说 gdb、gcc了,直到后来学习写 OS 的课程才接触到这些命令行工具,也是看完 CSAPP 才明白链接。 而在很多学校的 CS 课程设置中,会学操作系统、计算机网络、编译原理、数字逻辑、图形学、机器学习等课程,但没有一门课系统的交给我们如何正确高效的使用计算机工具。 比如 shell 脚本、版本控制、Debug、性能探测、常见的 Linux 命令。 像 grep、awk、sed 这些瑞士军刀般的命令其实是极大的提高了我们的开发幸福感。 这一整个主题其实是围绕着计算机生态系统的知识,这门课的缺失导致我们大多数人都是在需要的时候,临时去 Google 上搜,然后跟着别人的命令复制拷贝,解决问题了,这就过了,没解决,那就换个关键词。 这不仅导致效率低下,而且会让我们缺乏系统的软件开发素养,这也是我一直觉得差点意思的地方。 也很难找到一本书或者一门课能够完美的覆盖各个主题,都是在网络上零散的学习一些。 而 MIT 就开了一门叫做 Missing Semester 的课程。 关于如何高效使用这些计算机工具的课程,算是补齐了 CS 教育中缺失的那一课。 我问了很多不同学校的同学,发现国内似乎还没有学校会开设类似的课程,毕竟这玩意不好考试。 总不能默写命令吧? 下面介绍下 MIT 这门课程,官方介绍:
官网的课程计划: ![]() 这些主题看似不是 CS 专业中最为核心的课程,但却是我们每天开发工作中都会接触的。 高效的掌握这些工具,对我们日常学习、开发、工作都会产生最大的影响, 对于开发来说,这会让我们感觉工作很顺畅,不会写着写着又去谷歌搜索“怎么用命令行分割字符串”、“怎么设置定时任务”类似的问题。 这里介绍几个课程主题: 命令行命令行可以说是日常开发工作中使用频率最高的工具了。 比如我们可以使用别名、脚本以及构建系统去自动化执行一些周期任务,同时避免在文档中不停地复制粘贴命令,或者「忘记运行某个程序」、「忘记传递某个参数」等。 例如,快速搜索历史记录可以节省大量时间。 下面这个栗子会展示一些使用 convert 命令为 shell 历史记录做索引的相关技巧: ![]() 版本控制版本控制是开发大型软件项目的必备工具。 如何在多人协同开发的项目中协调各个参与者,保持代码及时更新,避免冲突,这都依赖版本控制工具。 版本控制工具也是从集中式诸如 SVN(鹅厂以前使用得多)逐步过渡到分布式的版本控制如 Git。 这门课会教一些比较使用的 Git 知识,比如如何向开源项目共享代码(pull request),如何使用 git bitsect 来查找破坏单元测试的提交,然后用 git revert 去修复: ![]() 文本编辑器文本编辑也是命令行环境下常见的操作,我们通常需要登录到服务器,然后对配置文件、数据文件等做一些修改。 同时,有些人也非常喜欢使用类似的文本编辑工具来写代码,这样基本可以脱离鼠标。 在这门课里也会教授一些高级的 vim 知识,如宏特性等。 比如这个例子展示了如何使用 vim 将 html 的 table 标签转换为 csv 格式: ![]() 除了这几类以外,还会讲授到如何使用 tmux 进行多窗口操作,保持服务器登录;fd、rg 等进行文件查找;如何使用命令行快速进行文本数据处理等。 用一门课的时间系统学习换取学习、科研、工作中更高的效率,应该是很划算的。
目前国内有小伙伴也把视频配了中文字幕,大家可以去看看: https://space.bilibili.com/1010983811 |
|
来自: mynotebook > 《待分类》