介绍

软件开发者也需要有自己的工具箱,这个工具箱里面应该有各种常用的工具,并且需要提前学习使用,达到对工具有一定的了解程度,这样遇到问题时才会想起来使用。软件开发者的工具箱就像平时家里的工具箱一样,并不常用但是一定要有,在有需要时能马上用上。

更新

  • 2022-08-01 增加 Vagrant+VirtualBox 安装 Ubuntu 22.04 实践
  • 2022-07-10 初次发布

计算机教育中缺失的一课

开设此课程的动机

在传统的计算机科学课程中,从操作系统、编程语言到机器学习,这些高大上课程和主题已经非常多了。 然而有一个至关重要的主题却很少被专门讲授,而是留给学生们自己去探索。 这部分内容就是:精通工具。

这些年,我们在麻省理工学院参与了许多课程的助教活动,过程当中愈发意识到很多学生对于工具的了解知之甚少。 计算机设计的初衷就是任务自动化,然而学生们却常常陷在大量的重复任务中,或者无法完全发挥出诸如 版本控制、文本编辑器等工具的强大作用。效率低下和浪费时间还是其次,更糟糕的是,这还可能导致数据丢失或 无法完成某些特定任务。

这些主题不是大学课程的一部分:学生一直都不知道如何使用这些工具,或者说,至少是不知道如何高效 地使用,因此浪费了时间和精力在本来可以更简单的任务上。标准的计算机科学课程缺少了这门能让计算 变得更简捷的关键课程。

这是我非常喜欢的一个公开课,推荐详细了解 ,可以解答为什么要学的问题。

课程虽然有文字版本,但是依然强烈推荐视频版本,因为这种东西需要他人进行讲解,只看文字完全无法知道实际效果是什么样子的。

Bilibili 有搬运的视频,视频是 1080P 并可以切换中英文字幕。推荐使用手机、平板离线缓存,然后在路上或午休时间看。

学习方法,一定要实践,推荐使用 Vagrant + VirtualBox 安装 Ubuntu。环境信息:

安装配置过程:

  1. 安装 VirtualBox
  2. 安装 Vagrant 后重启操作系统。
  3. 新建一个目录,例如:linux
  4. 使用 cmd/PowerShell/Git Bash 执行以下命令,实测这几种终端都可以使用。
1
2
3
4
cd linux
vagrant init ubuntu/jammy64
vagrant up
vagrant ssh

在执行完 vagrant ssh 后就进入到了 Ubuntu 中,可以执行各种命令了。实测以上软件版本是兼容可用的。

跨平台

优先选择跨平台的软件,这样在不同平台上都可以获得一致的体验与功能。一般需要支持 Windows macOS Linux,在不同平台之间保持交互的一致性,减少思维负担。

浏览器

这是访问外界的工具,要选择一款好用的。

  • Google Chrome 市占率最高的浏览器,功能强大,没有特别需求建议使用。默认在国内无法同步。
  • Microsoft Edge 支持垂直标签页,可以充分利用宽屏显示器的特点充分利用空间。默认在国内可以同步。

对网页标准支持的好,同时支持各种各样的扩展。

文件资源管理器

这是人管理内部数据的工具,要选择一款高效的。

资源管理器 较为笨重,如果一定要用,需要配合 Listary 之类的增强软件。

Double Commander 双列式文件资源管理器,功能齐全。

文本编辑器

VSCode

全能型编辑器,支持打开目录作为项目,然后全局搜索。开发活跃,固定一月一版本。

Vim

大部分平台上都会配置 Vim 编辑器,学会了 Vim 就可以非常方便地在各种平台上修改文件了。 大多数 IDE 都会提供 Vim 模式,例如 Visual Studio、Visual Studio Code、Intellij Idea 全系软件等等。

正则表达式

推荐使用这个网站写正则,可以快速了解到不同的字符含义:RegExr: Learn, Build, & Test RegEx。刚开始时可以多练习,多使用上面的网站了解正则表达式是如何解析的。注意不同的编辑器、编程语言支持的正则表达式特性不同、语法不同、转义符不同。

推荐这本 132 页的小薄书,内容很少很精炼,可以快速上手。

版本控制

分布式版本控制

为什么说版本控制系统非常有用?即使您只是一个人进行编程工作,它也可以帮您创建项目的快照,记录每个改动的目的、基于多分支并行开发等等。和别人协作开发时,它更是一个无价之宝,您可以看到别人对代码进行的修改,同时解决由于并行开发引起的冲突。

Git

Git GUI 客户端

Git 需要 GUI 客户端来方便操作,需要直观、简洁、易用。

Fork

其他

截止到 2022-07-11 一共 47 种客户端

比较工具

Beyond Compare

支持比较各种内容

文本比较

可以指定忽略不重要改动(注释、空格、Tab)、忽略换行符改动

目录比较

可以快速比较两个目录之间的差异,可以选择是否比较文件内容、文件时间、文件名等等。这个功能也支持两个压缩包当作目录来比较。实际上有很多文件都是 zip 压缩文件,例如 ipa(iOS 应用)、apk(Android 应用)、jar、aar 库文件,Beyond Compare 可以这些文件配置为压缩格式,比较时自动使用目录比较而不用提前解压缩,大大减少了冗余无用文件。

二进制比较

只有二进制比较才能确定文件是否完全一致

三路合并

git 合并文件是以行为单位进行一行一行进行合并的 二路合并算法就是讲两个文件进行逐行对别,如果行内容不同就报冲突。 三路合并就是先找出一个基准,然后以基准为Base 进行合并,如果2个文件相对基准(base)都发生了改变 那git 就报冲突,然后让你人工决断。否则,git将取相对于基准(base)变化的那个为最终结果。

对于简单的改动,二路合并就够用了。但是发生冲突时,往往情况都比较复杂,这时更需要三路合并。Git 为冲突的地方自动生成冲突标记,并且将文件留给用户去处理,Git 并没有为用户建议任何一方的改动,只是单纯地记录下来。而 Beyond Compare 则会比较智能地给出合并文件的建议,提前帮用户准备好合并后的文件内容,并且可以快速地通过 GUI 面板选择任何一方的改动。这个智能建议大大地减少了用户的工作量。

强烈建议将 Beyond Compare 配置为 Git 客户端的外部冲突解决工具,在遇到内部比较工具不好用的时候可以快速调用 Beyond Compare。

压缩工具

BandiZip

Windows 平台软件

支持自动解压缩,如果只有一个文件或目录会解压到当前目录,否则解压到以压缩包命名的目录中。这极大地节省了时间,降低了心智负担。

MyZip

macOS 平台软件

磁盘工具

这里说的磁盘工具是指磁盘空间分析工具,可以快速用来查找大文件。下面的这两款软件,实测速度都是同类软件中最快的。

WizTree

Windows 平台软件

DaisyDisk

macOS 平台软件

抓包工具

抓包类工具最大的作用是显示现实中发生了什么事情,直接原样将其显示出来,这是非常强大的功能。

Charles

用于抓包 HTTP

Wireshark

用于抓包 TCP/IP

Shell

学会终端的基本概念与操作,需要了解 Windows 与 Unix 使用的终端。通过学习 Shell,可以了解到 Unix 世界。

Bash

Bash 是很多 Linux 版本的默认 Shell。

Git for Windows

在 Windows 上也有 Bash,就是 Git for Windows,内部集成了 Bash 及 Unix 相关工具。

例如批量转换换行符 :

1
find . -type f -name '*.lua.txt' -print0 | xargs -0 -I {} unix2dos --remove-bom {}

Zsh

macOS 系统默认 Shell

Python

学会使用脚本语言解决各种问题

Markdown

Markdown 重要的不是格式,而是语义。很多时候需要的是一级标题、二级标题、引用、强调等语义功能。

语法

Markdown 有基本语法与扩展语法,推荐主要学习基本语法,这是所有 Markdown 软件都支持的。扩展语法根据需要使用,例如 GitHub Flavored Markdown Spec,在这个网页中 (extension) 标记的是 GitHub 扩展的。

Typora

虽然很多软件都支持 Markdown,但是做法却是一个窗口编辑,一个窗口预览,与实际使用是割裂的。推荐使用 WYSIWYG 所见即所得的软件,这些软件有很多,但是做得最好的是 Typora。