不记录,等于没读。
这里是我阅读《程序员修炼之道》这本书的记录。
本章介绍一些处理文本的工具。
每一个开发者都应该有自己的工具箱,我们熟知其中每一个工具特性和用法,并且定期向工具箱添加新的工具。
我们用工具处理纯文本
作为程序员,我们需要各种知识。保存知识的格式有两种:纯文本和二进制。使用纯文本存储知识是最佳方式,这是因为:
- 纯文本是自解释的数据,它和创建它的应用程序是相互独立的
- 二进制格式的问题是,理解数据所需的上下文与数据本身是分离的。数据与含义剥离。
那么,什么是 纯文本
?纯文本由可打印字符组成的,构成某种用来传递信息的形态。有用的纯文本具有以下特性:
- 可以被人类直接阅读,并且
- 可以被人类理解。
可理解很重要,要注意 人类可读
和 人类可理解
的区别。比如 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 编辑器的快捷键。
-
当编辑文本时,以字符、行、代码段为单位移动光标及选择
Ctrl
+←
/→
:以单词为单位移动游标Home
/End
:光标移到行首/行位Ctrl
+Home
/End
:光标移到文件首和文件尾- 以代码块为单位跳转:无,需要插件才可以
文本选择
需要多加一个Shift
键。 -
当编辑代码时,在各种语法单元 (配对的分隔符、函数、模块等) 之间移动。
这里
配对的分隔符
是指分隔代码元素的字符,比如字符串的双引号、代码段的大括号({}
)等。Ctrl
+Shift
+\
:在匹配的分隔符之间跳转
-
做完修改后,重新缩进代码
Shift
+Alt
+F
:对选中代码片段或整个文件格式化
-
用单个指令完成代码块的注释或取消
Ctrl+K
Ctrl+C
:增加行注释
(//
)Ctrl+K
Ctrl+U
:取消行注释
Ctrl
+/
:切换行注释
(按一次注释,再按一次取消注释)Shift
+Alt
+A
:切换块注释
(/* */
)
-
撤销并重做
Ctrl
+Z
:撤销 (Undo)Ctrl
+Y
:重做 (Redo)
-
把编辑窗口切割成多个面板,然后在它们之间跳转
Ctrl
+\
:将文件水平切割,当前文件被复制到右侧面板中Ctrl
+1
、Ctrl
+2
:分别跳转到第 1 个面板和第 2 个面板
-
跳转到特定的行号
Ctrl
+G
:跳转到当前文件的指定行Ctrl
+T
:跳转到工作区中的符号
-
对选出的多行进行排序
-
搜索普通字符串,然后重复上一次的搜索
Ctrl
+F
:在当前文件中搜素字符串。在搜索框中按Enter
键跳转到下一个搜索项,按Shift
+Enter
键跳转到上一个搜索项。Ctrl
+H
:在当前文件中替换。Ctrl
+Shift
+F
:在整个工作区中搜索字符串Ctrl
+C/R/W
:
-
基于框选或某个模式匹配的结果,临时创建多个光标,并行地在多个光标处编辑文本。
Ctrl
+Shift
+Alt
+ (方向键):列 (框) 选择
-
跑一下当前项目的测试
使用 CMake 创建的工程。
Shift
+F5
:编译并执行Ctrl
+F5
:调试
-
显示/隐藏资源管理器:
Ctrl
+B
逐步游刃有余:
- 编辑时自省。每次发现自己在重复做某件事情的时候,找到更好的方法;
- 不断重复,将方法内化成一种肌肉记忆。
版本控制
那些不能记住过去的人,注定要重蹈覆辙。
版本控制的好处包括但不限于:
- 总是可以将软件回退到以前的某个版本。
- 跟踪变化来回答诸如此类问题:这行代码是谁改的?当前版本和上周版本的差异在哪里?这个发布版本中,我们修改和增加了哪些代码?
- 打标签,标识出软件的不同发布版本。
- 允许两个或多个用户同时处理同一组文件,甚至是同一文件并发更改。
- 创建分支。把变化隔离出去。
- 不仅仅是管理代码,你的文档、PCB、配置文件等都可以用版本控制管理。
在 Windows 环境下,我自己正在使用的版本控制工具是 Git
+ TortoiseGit
。Git 提供版本控制服务,TortoiseGit 提供一个图形化界面,具体使用方法参见我的博客,我写了一些列的 TortoiseGit 入门教程,点击 这里 。
在 Linux 环境下,我使用 Git
+ VsCode
。
文本处理
学习一门文本处理语言。Shell、Python、Ruby 等等。运用这些工具,你可以快速地定制自己的工具,或者是为想法建立原型。
工程日记
准备一个纸质笔记本,记下正在做的事情、记录调试时的变量值、记下暂时搁置的事情、记录一些想法等等。记录有以下好处:
- 它比记忆可靠
- 为你提供一个地方,用于保存于当前任务无关的想法
- 当你停下来,把东西写上去的时候,大脑可能会换挡,提供一个反思的机会
当我发现需要在草稿纸上写下什么的时候,就会打开我的笔记本,翻到最新的一页,首先记录当前的日期,然后将内容记录下来。
我会在调试时记录故障的现象和已经排除的假设、测试数据等。等到故障排除后,我会在一个专门的笔记本上记录 BUG 的现象、调试的过程,问题的根源,从中得到的教训,如何避免等信息。从 2018 年开始记录以来,我已记录了两大本的素材。
本文用到了以下书籍的观点:
- 《UNIX&LINUX大学教程》
本文参考了以下网页内容:
- VsCode 快捷键 (Windows):点击这里跳转
每一份打赏,都是对创作者劳动的肯定与回报。!