前言
本仓库大部分内容来自MIT计算机教育中缺失的一课。
MIT-Missing-Semester 这门课覆盖了这些工具中绝大部分,而且有相当详细的使用指导,强烈建议小白学习。不过需要注意的一点是,在课程中会不时提到一些与开发流程相关的术语。因此推荐至少在学完计算机导论级别的课程之后进行学习。
The Missing Semester of Your CS Education 中文版
大学里的计算机课程通常专注于讲授从操作系统到机器学习这些学院派的课程或主题,而对于如何精通工具这一主题则往往会留给学生自行探索。在这个系列课程中,我们讲授命令行、强大的文本编辑器的使用、使用版本控制系统提供的多种特性等等。学生在他们受教育阶段就会和这些工具朝夕相处(在他们的职业生涯中更是这样)。
因此,花时间打磨使用这些工具的能力并能够最终熟练地、流畅地使用它们是非常有必要的。
精通这些工具不仅可以帮助您更快的使用工具完成任务,并且可以帮助您解决在之前看来似乎无比复杂的问题。
关于 开设此课程的动机。
日程
- 1/13: 课程概览与 shell
- 1/14: Shell 工具和脚本
- 1/15: 编辑器 (Vim)
- 1/16: 数据整理
- 1/21: 命令行环境
- 1/22: 版本控制(Git)
- 1/23: 调试及性能分析
- 1/27: 元编程
- 1/28: 安全和密码学
- 1/29: 大杂烩
- 1/30: 提问&回答
讲座视频可以在 YouTube 上找到。
开设此课程的动机
在传统的计算机科学课程中,从操作系统、编程语言到机器学习,这些高大上课程和主题已经非常多了。 然而有一个至关重要的主题却很少被专门讲授,而是留给学生们自己去探索。 这部分内容就是:精通工具。
这些年,我们在麻省理工学院参与了许多课程的助教活动,过程当中愈发意识到很多学生对于工具的了解知之甚少。 计算机设计的初衷就是任务自动化,然而学生们却常常陷在大量的重复任务中,或者无法完全发挥出诸如 版本控制、文本编辑器等工具的强大作用。效率低下和浪费时间还是其次,更糟糕的是,这还可能导致数据丢失或 无法完成某些特定任务。
这些主题不是大学课程的一部分:学生一直都不知道如何使用这些工具,或者说,至少是不知道如何高效 地使用,因此浪费了时间和精力在本来可以更简单的任务上。标准的计算机科学课程缺少了这门能让计算 变得更简捷的关键课程。
The missing semester of your CS education
为了解决这个问题,我们开设了一个课程,涵盖各项对成为高效率计算机科学家或程序员至关重要的 主题。这个课程实用且具有很强的实践性,提供了各种能够立即广泛应用解决问题的趁手工具指导。 该课在 2020 年 1 月“独立活动期”开设,为期一个月,是学生开办的短期课程。虽然该课程针对 麻省理工学院,但我们公开提供了全部课程的录制视频与相关资料。
如果该课程适合你,那么以下还有一些具体的课程示例:
命令行与 shell 工具
如何使用别名、脚本和构建系统来自动化执行通用重复的任务。不再总是从文档中拷贝粘贴 命令。不要再“逐个执行这 15 个命令”,不要再“你忘了执行这个命令”、“你忘了传那个 参数”,类似的对话不要再有了。
例如,快速搜索历史记录可以节省大量时间。在下面这个示例中,我们展示了如何通过convert
命令 在历史记录中跳转的一些技巧。
版本控制
如何正确地使用版本控制,利用它避免尴尬的情况发生。与他人协作,并且能够快速定位 有问题的提交 不再大量注释代码。不再为解决 bug 而找遍所有代码。不再“我去,刚才是删了有用的代码?!”。 我们将教你如何通过拉取请求来为他人的项目贡献代码。
下面这个示例中,我们使用git bisect
来定位哪个提交破坏了单元测试,并且通过git revert
来进行修复。
文本编辑
不论是本地还是远程,如何通过命令行高效地编辑文件,并且充分利用编辑器特性。不再来回复制 文件。不再重复编辑文件。
Vim 的宏是它最好的特性之一,在下面这个示例中,我们使用嵌套的 Vim 宏快速地将 html 表格转换成了 csv 格式。
远程服务器
使用 SSH 密钥连接远程机器进行工作时如何保持连接,并且让终端能够复用。不再为了仅执行个别命令 总是打开许多命令行终端。不再每次连接都总输入密码。不再因为网络断开或必须重启笔记本时 就丢失全部上下文。
以下示例,我们使用tmux
来保持远程服务器的会话存在,并使用mosh
来支持网络漫游和断开连接。
查找文件
如何快速查找你需要的文件。不再挨个点击项目中的文件,直到找到你所需的代码。
以下示例,我们通过fd
快速查找文件,通过rg
找代码片段。我们也用到了fasd
快速cd
并vim
最近/常用的文件/文件夹。
数据处理
如何通过命令行直接轻松快速地修改、查看、解析、绘制和计算数据和文件。不再从日志文件拷贝 粘贴。不再手动统计数据。不再用电子表格画图。
虚拟机
如何使用虚拟机尝试新操作系统,隔离无关的项目,并且保持宿主机整洁。不再因为做安全实验而 意外损坏你的计算机。不再有大量随机安装的不同版本软件包。
安全
如何在不泄露隐私的情况下畅游互联网。不再抓破脑袋想符合自己疯狂规则的密码。不再连接不安全 的开放 WiFi 网络。不再传输未加密的信息。
结论
这 12 节课将包括但不限于以上内容,同时每堂课都提供了能帮助你熟悉这些工具的练手小测验。如果不能 等到一月,你也可以看下黑客工具,这是我们去年的 试讲。它是本课程的前身,包含许多相同的主题。
无论面对面还是远程在线,欢迎你的参与。
Happy hacking,
Anish, Jose, and Jon