Hacker Tools 是 MIT 的一系列讲座,介绍了在软件开发等场景中,能够大幅度提升效率的工具,例如 Shell 脚本、纯文本编辑器、版本控制系统等。
虽然对于课程中的大部分内容,很多人都应该或多或少的接触过,但是通过这门课程,能将这些知识系统的整理下来,从而在今后遇到问题时,能够意识到需要使用哪些工具,并主动尝试去使用。所以,如果想要进一步提升自己在电脑使用、软件开发方面的效率,推荐大家学习一下这一系列课程。
在我学习 Hacker Tools 之后,通过本文以思维导图的形式整理了课程的主要内容,方便进行查漏补缺和针对性的学习。
Update:
MIT 已在 2020 年推出了新的课程 The missing semester of CS education。该课程对原来的 Hacker Tools 进行了优化和调整,推荐直接学习该课程:
虚拟机与容器
链接:Virtual machines and containers
使用虚拟机或容器,可以不破坏原有环境的情况下,方便地运行程序。这一节对虚拟机和容器做了简要的介绍。
比较好玩的是练习题,需要在虚拟机里完成删除所有文件(rm -rf
),运行 fork 炸弹(:(){ :|:& };:
)等实验,完全满足了熊孩子们的破坏欲😂。
Shell 与脚本
这一节介绍了 Bash 的基本用法和使用技巧。通过 Bash 不仅仅可以简单地运行程序,还能通过一系列语句实现让多个程序协作、通过条件循环执行程序、后台运行等复杂功能。
如果想要更加系统地学习 Bash,推荐阅读以下文档:
命令行环境
这一节介绍了运行命令行所需的环境,包括 alias 别名,framewark,终端模拟器,命令行工具等。通过合理配置命令行环境、选择合适的工具,可以使自己更加高效、舒适地使用命令行。
数据(文本)的处理
软件开发过程中,经常会遇到需要处理大量文本的场景,例如在日志中迅速找到自己需要的信息,并以一定的格式输出。这时候,就需要合理地组合使用 grep
, sed
, 正则表达式,sort
, uniq
, head
, tail
, awk
, wc
等工具。
另外,对于需要获取统计计数、进行数据分析的地方,还可以使用 bc
, st, R 等数学运算,使用 gnuplot
绘制图表,将数据可视化。
RegexOne 是一个正则表达式的互动教程,帮助掌握正则表达式基础知识。
纯文本编辑器
链接:Editors
熟练掌握一种文本编辑器,能够大幅度提升代码和文本的处理效率。本节课程以 Vim 为例介绍文本编辑器的一些使用技巧。
VimGolf 能够通过在线游戏的方式练习 Vim,提升 Vim 技巧。
版本控制
通过版本控制工具,可以记录代码、文档的历史版本,方便后续回顾、进行修改回退、团队协作。
这一节以 git 为例,介绍了版本控制工具的基本用法。同时建议大家在了解 git 的同时,顺便了解一下 Mercurial,以便于选择更适合自己的工具。
Dotfiles
链接:Dotfiles
Dotfiles 是 UNIX 等系统下以 .
开头的隐藏文件,例如 .gitignore
. 这些文件通常为纯文本格式,用于保存软件配置。
通过 dotfiles 可以软件进行个性化设置。另外,由于 dotfiles 是文本文件,所以可以通过符号链接的形式进行集中管理,方便进行版本控制、配置转移、配置同步、快速在新电脑上安装和设置软件。同时,在 GitHub 等网站上,也有不少其他人分享的 dotfiles 供自己参考。
备份
链接:Backups
养成备份的习惯,能够减少设备故障、文件损坏造成的损失。对于备份,除了合适的工具,更重要的是掌握备份的原则和方法,避免备份失效等情况。本节对备份工具,以及备份所需要考虑的种种因素进行了介绍。
对于我来说,重要文件主要保存在三处:电脑、NAS、Amazon Glacier. 具体内容可以参考我的 NAS 使用笔记。
软件包与依赖管理
链接:Package/dependency management
不少编程语言和 Linux 发行版都有自己的包管理系统。通过包管理系统可以方便地安装软件和 lib.
在软件包管理系统中,经常遇到依赖的问题:一个软件需要另一个软件才能正常运行,所以安装一个软件包的同时,也可能会同时安装其他的软件包。多个软件包之间可能存在依赖、互斥,或者两个软件包分别依赖第三个软件包的不同版本等关系。在软件数量比较多的时候,这些依赖关系会变得非常复杂,甚至会导致依赖冲突。
系统定制
通过对操作系统系统的定制和个性化设置,使系统能够更加满足自己的使用习惯。
由于我正在使用 macOS,我使用的窗口管理、快捷键定制、自动化等工具,课程中没有提到。如果有机会,我可能会单独写一篇文章来总结。
远程登录
使用 SSH,除了能够登录远程电脑的控制台,还能实现文件传输、通过端口转发访问远程网络服务、X11 转发等功能。
在网络质量不好的环境中,可使用 mosh 代替 SSH,获得更好的体验。
浏览器与 Web
网页浏览是使用电脑最常见的操作。本节从快捷键、浏览器定制、网页修改、浏览器扩展等角度介绍了浏览器的高级用法。最后介绍了通过脚本处理网页、实现 Web 自动化。
留言
整理得後好。向您學習一下。另外,思維導圖是用哪個工具做的?
思维导图工具我用的是 MindNode: https://mindnode.com/