程序员修炼之道 06:基础工具

不记录,等于没读。

这里是我阅读《程序员修炼之道》这本书的记录。


本章介绍一些处理文本的工具。

每一个开发者都应该有自己的工具箱,我们熟知其中每一个工具特性和用法,并且定期向工具箱添加新的工具。

我们用工具处理纯文本

作为程序员,我们需要各种知识。保存知识的格式有两种:纯文本和二进制。使用纯文本存储知识是最佳方式,这是因为:

  • 纯文本是自解释的数据,它和创建它的应用程序是相互独立的
  • 二进制格式的问题是,理解数据所需的上下文与数据本身是分离的。数据与含义剥离

那么,什么是 纯文本?纯文本由可打印字符组成的,构成某种用来传递信息的形态。有用的纯文本具有以下特性:

  • 可以被人类直接阅读,并且
  • 可以被人类理解。

可理解很重要,要注意 人类可读人类可理解 的区别。比如 Field19=467abe ,我们都可以阅读这些文本,但是不能理解 467abe 什么意思。

将知识用纯文本保存,这样做有以下好处:

  • 防备知识过时:人类可读形式的数据与自描述数据更有生命力。只要数据还在,就有机会用到,甚至当时产生数据的应用程序已经无法再使用。
  • 工具丰富:计算机领域中的绝大部分工具都可以对纯文本进行操作
  • 易于测试

我们用 Shell 调用工具

在 Shell 中,你可以:

  • 调用 所有能用的工具;
  • 通过管道用各种方式把工具 组合 起来;
  • 搜索文件、查询系统状态,过滤输出;
  • 通过对 Shell 编程,为经常执行的事情构建复杂的宏指令。

如果你之前只在 Windows 等 GUI 环境和集成开发环境 (IDE) 中工作,你可能更习惯于在图形界面中 点击 来完成任务。你可能会觉得在黑乎乎的 Shell 中输入各种命令、执行程序很怪异、难用、落伍。在图像界面中,通过点击 一样 能做好每件事,不是吗?

答案是:“不能!”

  • 对于简单操作,图形界面非常好,干起来更快更方便。移动文件、阅读邮件,浏览网页,在图形界面下体验都更好。
  • 第一天容易使用的界面,在你有经验之后将不一定是你希望使用的界面。图形工具的好处是所见即所得,但弱点也与此有关,那就是所见即全部!有时候你会觉得灰心:你虽然拥有电脑,但电脑却不受你控制。
  • 无法把常见的功能 自动化 ,也无法 组合 工具。

Shell 需要花费大量的时间才能熟练掌握。如果没有花很多时间研究所用系统的 Shell 命令,那么下列代码可能让你心存畏惧:

grep '^import ' *.java |
 sed -e's/.*import *//' -e's/;.*$//' |
 sort -u >list

然而,投入一些精力去熟悉 Shell,事情很快就会开始步入正轨。何况,你总会碰上复杂的任务。永远不要愚蠢地认为计算机界面应该“直观”到对初学者立即有用,复杂的任务需要复杂的工具,而复杂的工具需要时间来掌握

加强编辑能力

你需要尽可能毫不费力地操作文本,要游刃有余地使用编辑器。这是因为:

  • 节省时间
  • 思考会变得流畅:将想法呈现在编辑器中没有阻塞,一气呵成,编程会受益。好比开车,新手一定会仔细考虑要做的每个动作,而有经验的驾驶员靠本能开车。

需要什么程度才算游刃有余?这里有一些列表。其中给出了 VsCode 编辑器的快捷键。

  1. 当编辑文本时,以字符、行、代码段为单位移动光标及选择

    • Ctrl + / :以单词为单位移动游标
    • Home / End:光标移到行首/行位
    • Ctrl + Home / End:光标移到文件首和文件尾
    • 以代码块为单位跳转:无,需要插件才可以

    文本选择 需要多加一个 Shift 键。

  2. 当编辑代码时,在各种语法单元 (配对的分隔符、函数、模块等) 之间移动。

    这里 配对的分隔符 是指分隔代码元素的字符,比如字符串的双引号、代码段的大括号({})等。

    • Ctrl + Shift + \:在匹配的分隔符之间跳转
  3. 做完修改后,重新缩进代码

    • Shift + Alt + F:对选中代码片段或整个文件格式化
  4. 用单个指令完成代码块的注释或取消

    • Ctrl+K Ctrl+C:增加 行注释 ( // )
    • Ctrl+K Ctrl+U:取消 行注释
    • Ctrl + /:切换 行注释 (按一次注释,再按一次取消注释)
    • Shift + Alt + A:切换 块注释 ( /* */ )
  5. 撤销并重做

    • Ctrl + Z:撤销 (Undo)
    • Ctrl + Y:重做 (Redo)
  6. 把编辑窗口切割成多个面板,然后在它们之间跳转

    • Ctrl + \:将文件水平切割,当前文件被复制到右侧面板中
    • Ctrl + 1Ctrl + 2:分别跳转到第 1 个面板和第 2 个面板
  7. 跳转到特定的行号

    • Ctrl + G:跳转到当前文件的指定行
    • Ctrl + T:跳转到工作区中的符号
  8. 对选出的多行进行排序

  9. 搜索普通字符串,然后重复上一次的搜索

    • Ctrl + F:在当前文件中搜素字符串。在搜索框中按 Enter 键跳转到下一个搜索项,按 Shift + Enter 键跳转到上一个搜索项。
    • Ctrl + H:在当前文件中替换。
    • Ctrl + Shift + F:在整个工作区中搜索字符串
    • Ctrl + C/R/W
  10. 基于框选或某个模式匹配的结果,临时创建多个光标,并行地在多个光标处编辑文本。

    • Ctrl + Shift + Alt + (方向键):列 (框) 选择
  11. 跑一下当前项目的测试

    使用 CMake 创建的工程。

    • Shift + F5:编译并执行
    • Ctrl + F5:调试
  12. 显示/隐藏资源管理器:Ctrl + B

逐步游刃有余:

  • 编辑时自省。每次发现自己在重复做某件事情的时候,找到更好的方法;
  • 不断重复,将方法内化成一种肌肉记忆。

版本控制

那些不能记住过去的人,注定要重蹈覆辙

版本控制的好处包括但不限于:

  • 总是可以将软件回退到以前的某个版本。
  • 跟踪变化来回答诸如此类问题:这行代码是谁改的?当前版本和上周版本的差异在哪里?这个发布版本中,我们修改和增加了哪些代码?
  • 打标签,标识出软件的不同发布版本。
  • 允许两个或多个用户同时处理同一组文件,甚至是同一文件并发更改。
  • 创建分支。把变化隔离出去。
  • 不仅仅是管理代码,你的文档、PCB、配置文件等都可以用版本控制管理。

在 Windows 环境下,我自己正在使用的版本控制工具是 Git + TortoiseGit。Git 提供版本控制服务,TortoiseGit 提供一个图形化界面,具体使用方法参见我的博客,我写了一些列的 TortoiseGit 入门教程,点击 这里

在 Linux 环境下,我使用 Git + VsCode

文本处理

学习一门文本处理语言。Shell、Python、Ruby 等等。运用这些工具,你可以快速地定制自己的工具,或者是为想法建立原型。

工程日记

准备一个纸质笔记本,记下正在做的事情、记录调试时的变量值、记下暂时搁置的事情、记录一些想法等等。记录有以下好处:

  • 它比记忆可靠
  • 为你提供一个地方,用于保存于当前任务无关的想法
  • 当你停下来,把东西写上去的时候,大脑可能会换挡,提供一个反思的机会

当我发现需要在草稿纸上写下什么的时候,就会打开我的笔记本,翻到最新的一页,首先记录当前的日期,然后将内容记录下来。

我会在调试时记录故障的现象和已经排除的假设、测试数据等。等到故障排除后,我会在一个专门的笔记本上记录 BUG 的现象、调试的过程,问题的根源,从中得到的教训,如何避免等信息。从 2018 年开始记录以来,我已记录了两大本的素材。


本文用到了以下书籍的观点:

  • 《UNIX&LINUX大学教程》

本文参考了以下网页内容:






每一份打赏,都是对创作者劳动的肯定与回报。
千金难买知识,但可以买好多奶粉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值