Hacker Tools 是 MIT 的一系列讲座,介绍了在软件开发等场景中,能够大幅度提升效率的工具,例如 Shell 脚本、纯文本编辑器、版本控制系统等。

虽然对于课程中的大部分内容,很多人都应该或多或少的接触过,但是通过这门课程,能将这些知识系统的整理下来,从而在今后遇到问题时,能够意识到需要使用哪些工具,并主动尝试去使用。所以,如果想要进一步提升自己在电脑使用、软件开发方面的效率,推荐大家学习一下这一系列课程。

在我学习 Hacker Tools 之后,通过本文以思维导图的形式整理了课程的主要内容,方便进行查漏补缺和针对性的学习。

思维导图:Hacker Tools 简介

Update:

MIT 已在 2020 年推出了新的课程 The missing semester of CS education。该课程对原来的 Hacker Tools 进行了优化和调整,推荐直接学习该课程:

虚拟机与容器

链接:Virtual machines and containers

使用虚拟机或容器,可以不破坏原有环境的情况下,方便地运行程序。这一节对虚拟机和容器做了简要的介绍。

比较好玩的是练习题,需要在虚拟机里完成删除所有文件(rm -rf),运行 fork 炸弹:(){ :|:& };:)等实验,完全满足了熊孩子们的破坏欲😂。

思维导图:Hacker Tools 虚拟机与容器章节

Shell 与脚本

链接:Shell and scripting

这一节介绍了 Bash 的基本用法和使用技巧。通过 Bash 不仅仅可以简单地运行程序,还能通过一系列语句实现让多个程序协作、通过条件循环执行程序、后台运行等复杂功能。

如果想要更加系统地学习 Bash,推荐阅读以下文档:

思维导图:Hacker Tools Shell 与脚本章节

命令行环境

链接:Command-line environment

这一节介绍了运行命令行所需的环境,包括 alias 别名,framewark,终端模拟器,命令行工具等。通过合理配置命令行环境、选择合适的工具,可以使自己更加高效、舒适地使用命令行。

对于我来说,主要使用 iTerm 2 终端模拟器,并使用 zsh + oh-my-zsh 做为默认的 shell。

思维导图:Hacker Tools 命令行环境章节

数据(文本)的处理

链接:Data wrangling

软件开发过程中,经常会遇到需要处理大量文本的场景,例如在日志中迅速找到自己需要的信息,并以一定的格式输出。这时候,就需要合理地组合使用 grep, sed, 正则表达式,sort, uniq, head, tail, awk, wc 等工具。

另外,对于需要获取统计计数、进行数据分析的地方,还可以使用 bc, st, R 等数学运算,使用 gnuplot 绘制图表,将数据可视化。

RegexOne 是一个正则表达式的互动教程,帮助掌握正则表达式基础知识。

思维导图:Hacker Tools 数据(文本)的处理章节

纯文本编辑器

链接:Editors

熟练掌握一种文本编辑器,能够大幅度提升代码和文本的处理效率。本节课程以 Vim 为例介绍文本编辑器的一些使用技巧。

VimGolf 能够通过在线游戏的方式练习 Vim,提升 Vim 技巧。

思维导图:Hacker Tools 纯文本编辑器章节

版本控制

链接:Version control

通过版本控制工具,可以记录代码、文档的历史版本,方便后续回顾、进行修改回退、团队协作。

这一节以 git 为例,介绍了版本控制工具的基本用法。同时建议大家在了解 git 的同时,顺便了解一下 Mercurial,以便于选择更适合自己的工具。

思维导图:Hacker Tools 版本控制章节

Dotfiles

链接:Dotfiles

Dotfiles 是 UNIX 等系统下以 . 开头的隐藏文件,例如 .gitignore. 这些文件通常为纯文本格式,用于保存软件配置。

通过 dotfiles 可以软件进行个性化设置。另外,由于 dotfiles 是文本文件,所以可以通过符号链接的形式进行集中管理,方便进行版本控制、配置转移、配置同步、快速在新电脑上安装和设置软件。同时,在 GitHub 等网站上,也有不少其他人分享的 dotfiles 供自己参考。

思维导图:Hacker Tools Dotfiles 章节

备份

链接:Backups

养成备份的习惯,能够减少设备故障、文件损坏造成的损失。对于备份,除了合适的工具,更重要的是掌握备份的原则和方法,避免备份失效等情况。本节对备份工具,以及备份所需要考虑的种种因素进行了介绍。

对于我来说,重要文件主要保存在三处:电脑、NAS、Amazon Glacier. 具体内容可以参考我的 NAS 使用笔记

思维导图:Hacker Tools 备份章节

自动化

链接:Automation

部分任务需要定期自动执行,例如周期性地运行备份脚本。对于大部分 UNIX 系统来说,可以使用 cron 来周期性地运行程序。

思维导图:Hacker Tools 自动化章节

系统分析与诊断

链接:Machine introspection

在系统出错、出现异常时,通过一些工具观察系统运行状态,能够更容易地发现问题。

思维导图:Hacker Tools 系统分析与诊断章节

程序分析与调试

链接:Program introspection

本节介绍了程序调试、程序性能分析常用的一些工具,如 GDB.

思维导图:Hacker Tools 程序分析与调试章节

软件包与依赖管理

链接:Package/dependency management

不少编程语言和 Linux 发行版都有自己的包管理系统。通过包管理系统可以方便地安装软件和 lib.

在软件包管理系统中,经常遇到依赖的问题:一个软件需要另一个软件才能正常运行,所以安装一个软件包的同时,也可能会同时安装其他的软件包。多个软件包之间可能存在依赖、互斥,或者两个软件包分别依赖第三个软件包的不同版本等关系。在软件数量比较多的时候,这些依赖关系会变得非常复杂,甚至会导致依赖冲突。

思维导图:Hacker Tools 软件包与依赖管理章节

系统定制

链接:OS customization

通过对操作系统系统的定制和个性化设置,使系统能够更加满足自己的使用习惯。

由于我正在使用 macOS,我使用的窗口管理、快捷键定制、自动化等工具,课程中没有提到。如果有机会,我可能会单独写一篇文章来总结。

思维导图:Hacker Tools 系统定制章节

远程登录

链接:Remote machines

使用 SSH,除了能够登录远程电脑的控制台,还能实现文件传输、通过端口转发访问远程网络服务、X11 转发等功能。

在网络质量不好的环境中,可使用 mosh 代替 SSH,获得更好的体验。

思维导图:Hacker Tools 远程登录章节

浏览器与 Web

链接:Web and browsers

网页浏览是使用电脑最常见的操作。本节从快捷键、浏览器定制、网页修改、浏览器扩展等角度介绍了浏览器的高级用法。最后介绍了通过脚本处理网页、实现 Web 自动化。

思维导图:Hacker Tools 浏览器与 Web 章节

安全与隐私

链接:Security and privacy

本节介绍了如何通过在互联网环境下提高安全意识,保护自己的安全和隐私。

思维导图:Hacker Tools 安全与隐私章节
最后修改日期: 2021-05-11

留言

Felix Leong 

整理得後好。向您學習一下。另外,思維導圖是用哪個工具做的?

回复 Felix Leong 取消回复

发布留言必须填写的电子邮件地址不会公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据