7 种可最大限度提高效率的编码工具
在学习编程时,准开发人员通常会学习编写原生软件。然而,在实际工作中,开发人员会使用各种工具来加速编程。测试、运行各种脚本以及编程环境控制等常见任务只是额外工具发挥作用的几个例子。
问题是,市面上这类工具琳琅满目,很难分辨哪些才是最好的。通常需要多年的反复试验才能找到最有效的工具。为了帮您省去这方面的精力,我们咨询了一些经验丰富的开发者,了解哪些工具帮助他们提升了编程水平,并最大限度地提高了工作效率。
今天,我们将研究这 7 种工具:
困在家?免费获取 6 门前端课程
Educative 为生活或生计受新冠疫情影响的人们提供 6 门免费前端开发课程。学习这些课程,不仅能培养新技能,还能提升你的就业竞争力。
1. Linux I3 窗口管理器
开发人员长期以来一直使用 Linux,因为它具有灵活性和自定义选项。I3 进一步扩展了这些选项,让您几乎可以完全控制您的编程环境。
I3 是一款轻量级的开源 Linux 平铺窗口管理器。窗口管理器用于控制窗口在屏幕上的外观和位置。平铺窗口管理器更进一步,可以自动调整窗口大小和重新排列窗口,始终使用全屏空间,避免窗口重叠。这种平铺功能在操作系统图形用户界面 (GUI) 上进行,方便用户直接进行更改。
以下是 I3 Window Manager(i3wm)脱颖而出的一些方面:
-
轻量级: i3 简洁高效,只包含基本功能,没有多余的功能,专为开发者设计,以最大限度地利用处理能力。
-
键盘控制: I3 内置丰富的键盘快捷键,可满足您的各种操作需求。您还可以直接在
config
文件中添加其他快捷键。您可以移动磁贴、打开终端、更改布局等等,所有这些操作都无需鼠标操作。 -
总屏幕使用率:通过平铺,i3 确保您无需在一堆标签页中搜索单个窗口。您可以根据需要打开任意数量的平铺窗口,同时通过更大的窗口最大限度地减少眼睛疲劳。这种平铺系统非常适合需要多个终端的系统管理员或任何需要测试和草稿终端的用户。
-
自定义主题: i3 的外观完全可定制,以符合您的审美。Windows 或 macOS 等操作系统将某些视觉元素设置为不可更改。使用 i3,您可以自定义屏幕上的每一寸空间。您可以微调背景、窗口外观/行为、通知外观等等。
专家提示:使用 I3 的工作区
I3 最实用的工具之一是能够将窗口分组到编号的工作区中。开发人员通常会根据工作流程的不同部分设置工作区。您可以通过按下super
和工作区的索引来快速切换工作区。这将隐藏所有当前窗口并定位所选工作区的窗口。
优化工作区利用,提升工作效率。它们也适用于双显示器设置,因为您可以在每个显示器上打开一个工作区,只需按一下键即可快速切换当前工作区所在的显示器。
2. Vim
Vim 是一款适用于大多数编程语言的文本编辑器。这款以开发者为中心的文本编辑器注重按键绑定的自定义和编码效率。
它是一个模态文本编辑器,这意味着它可以有多种模式,每种模式都由用户针对特定任务进行优化。例如,您可以为 Python 设置一种模式,为 C++ 设置另一种模式。这些模式允许同一个按键根据语言的不同而具有不同的行为,例如特定于语言的快捷键。
与 I3 一样,Vim 完全由键盘控制。通过减少鼠标使用,您可以减少停机时间并减少工作流程中断。Vim 的设计使其几乎可以在所有主流平台上运行,是团队协作的理想选择。
最后,Vim 的所有快捷键都配置在一个可共享的.vimrc.
文件中。许多开发者将他们测试过的文件发布在 Github 上。从这些文件之一开始,您可以借鉴同行的经验,同时保留您的个人版本以供个人编辑。
专家提示:使用 DRY 原则设置 Vim 快捷方式
程序员所秉持的最核心范式之一就是DRY:不要重复自己。
我们在代码中将其视为识别重复代码行为并将其提取到模块化方法中的能力。这种模块化思维允许你只需输入一次每个行为,然后在以后需要该行为时只需调用该方法即可。
使用同样的范例来设置 Vim 快捷键以提高效率。例如,如果你注意到你的工作经常需要用 Java 实现二叉搜索树,你可以设置一个快捷方式来粘贴二叉搜索树模板。
3. Bash
Bash是为 GNU 项目开发的免费 Unix shell。长期以来,它一直被用作 Linux 的默认登录 shell,最近,它也被 MacOS 和 Windows 10 所采用。除了登录之外,Bash 还支持数百个可在应用程序内部调用的命令。
Bash 以其脚本化功能而闻名。您无需每次需要时都输入一组命令,而是可以保存一个包含所有命令的 Shell 脚本文件。每个命令都会按照输入的顺序执行。
Bash 的作用范围接近底层,这意味着这些命令无需打开桌面应用程序即可操作文件和内存。例如,您可以创建一个 Shell 脚本,系统地将硬盘驱动器的全部内容传输到另一台设备,而无需打开文件资源管理器之类的文件管理器。
通过绕过桌面应用程序,Bash 可以更高效地工作,并且通常可以执行更专业的任务。
请参阅 Educative 的“前 25 个命令”和“创建自定义命令”文章,以获取针对开发人员的所有最佳命令的备忘单。
专家提示:使用 Bash 历史记录
能否有效地使用 Bash 历史记录,决定了你是熟练掌握了 Bash 的哪一部分。为了确保你能充分利用历史记录,以下是一些你一定不会忘记的实用命令:
多窗口启用历史记录
默认情况下,Bash 仅记录第一个打开的窗口的历史记录,所有后续窗口的历史记录都会丢失。以下命令可使所有活动的 Bash 窗口写入历史记录,从此告别丢失命令的烦恼。
shopt -s histappend
重复上一个命令
重复执行上一次执行的命令是 Bash 的常用功能。您可以输入以下 4 条命令中的任意一条:
- 按向上箭头键查看最后一条命令并
enter
执行它 - 按此键
ctrl+p
查看最后一条命令并enter
执行它 !!
在命令行中输入1-!
在命令行中输入
!!
您可以通过在命令之前或之后添加其他元素来重复执行以下命令:sudo !!
反向搜索历史
您可以在 Bash 的历史记录中搜索过去的命令。只需按下ctrl-r
并开始输入搜索内容,Bash 就会自动填充匹配的行。如果匹配到多行,ctrl-r
再次按下即可循环显示。
4. 函数式编程
函数式编程是一种声明式编程。程序由单个或多个小型的一等函数组合而成,这些函数没有副作用。声明式编程专注于构建遵循“要做什么”而非“如何做”的解决方案。得益于该范式的数学和逻辑根源,您可以轻松设计声明式程序。
函数式编程比其他方法更模块化。将程序拆分成更小的函数,可以在整个程序中复用它们。更大的问题可以通过组合这些较小的模块化函数来解决。这使得您可以单独复用解决方案的任何部分。
最后,函数式编程的函数没有副作用。这意味着在函数式编程中数据永远不会被改变。
例如,假设我想编写一个程序,它以 开头n
,然后传递n
给function1
,最后将 的结果传递function1
给function2
。让我们看看这在伪代码中有何不同:
区块方法
int n = 5;
n = function1(n);
n = function2(n);
return n;
功能方法
int n = 5;
return function2(function1(n));
在函数式方法中,我们的函数不会产生任何副作用,因为n
的值会被使用但不会被改变。通过function1(n)
直接传入function2
而不是经过增强的n
,我们声明式地解决了这个问题。
专家提示:功能性思维,而非语言
有一些函数式编程语言强制执行此范式,例如 Clojure、Scala或 Haskell。虽然这些语言功能强大,但如果您不习惯函数式编程,过渡到这些语言可能会很困难。
首先,尝试用你当前的编程语言,以函数式思维进行编程。以下是一些方法:
- 使用计数器和循环中的类似操作来转变你的思维
map
,reduce
摆脱块编程 - 使用局部作用域变量和函数来练习减少副作用。尝试在每次编写代码时注意并减少副作用。
- 优先考虑递归解决方案,因为递归解决方案需要函数式思维来创建。在转向完全函数式之前,这将提供有效的练习。
5.反思
回归测试是确认开发的软件在更新后仍然正常运行的行为。由于软件更新非常频繁,回归测试是开发人员工作中的重要部分。然而,当我们必须涵盖所有可能的错误情况时,这个过程可能会非常繁琐。
Reflect 通过为任何网站创建自动化回归测试来解决这个问题。该软件无需安装,可与任何 JavaScript 框架一起使用。
工作原理如下:
- 进入“记录测试”模式
- 加载您网站当前的工作页面
- 点击您想要测试的功能
- 停止录制测试;这将生成一个测试脚本来复制您的点击
- 输入您网站测试版的网址
- 激活测试脚本
- 查看记录的站点结果。
测试结果将以视频的形式呈现,记录发生的情况,以及网络请求和 JavaScript 控制台的打印内容。一次性获取所有这些信息,可以让你快速诊断问题的根源。
您只需创建一次测试用例,即可在网站的整个生命周期内无限次地重复执行。这不仅可以节省您大量的手动测试时间,还能自动生成每次测试的视频录像,以记录准确的错误情况。
简而言之,Reflect 因其简单性、可重复性和准确性而受到开发人员的欢迎。
专家提示:Reflect 的高级功能
上面介绍的只是 Reflect 功能的冰山一角。以下列出了一些其他可以在 Reflect 中使用的实用功能:
- 安排在任何时间间隔完成的测试,以确保您的网站即使您不在也能正常运行。
- 将计划测试与故障通知结合起来,以减少站点中断的响应时间
- 如果需要更改测试,您可以编辑并重新录制 Reflect 测试中的单个点击或多个部分,而不必重新录制整个过程
- 在更改站点外观时使用自动视觉检测工具来检测与输入预期情况差异太大的故障元素
6. 正则表达式
正则表达式(regex)是一组描述搜索模式行为的字符。它们通常用于字符串搜索算法,以查找与模式匹配的部分。
Bash 有一个独特的正则表达式运算符=~
,用于搜索给定正则表达式模式的匹配项。例如,if [[ $digit =~ [0-9] ]]; then
将在字符串中搜索任何数字的实例。
除了 Bash,Python 和 Java 都支持正则表达式参数。
它们非常适合数据验证和其他文本处理任务,因为它们只需几个字符就能实现非常复杂的搜索参数。它们也为世界各地的开发人员所熟知,因为它们是计算机语言理论家建立的常规语言的一部分。
总的来说,它们易于上手,易于理解,并且具有极高的复杂度。学习正则表达式是拓展技能组合的好方法,它能让你轻松掌握 Bash、Java 或 Python 上的强大工具。
专家提示:使用正则表达式进行网页抓取
如今,正则表达式最常见的用途之一是网页抓取,即从海量网站中提取特定信息的过程。这是因为您可以使用正则表达式从更大的搜索字符串中提取与参数匹配的子字符串。
这种做法有很多应用,例如,您可以在竞争对手的网站上搜索特定产品的价格:
$:\s+([^\s]+)
此正则表达式会搜索美元符号后面的所有内容,并将其提取到一个单独的文件中。完成后,此文件将允许贵公司完全访问,以便比较数十种产品的价格。
以上只是使用单个表达式的一个例子。网页抓取是现代公司强大的工具,并且会越来越受欢迎。学习网页抓取的正则表达式可以让你在更具分析能力的开发职位上获得竞争优势。
7. RegExr
正则表达式虽然入门简单,但很快就会变得非常复杂。这个正则表达式可以匹配特定类型的 URL。
^(http|https|ftp):[\/]{2}([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4})(:[0-9]+)?\/?([a-zA-Z0-9\-\._\?\,\'\/\\\+&%\$#\=~]*)
您可以清楚地看到它们变得多么复杂。
RegExr 是一款免费的正则表达式可视化和测试工具,旨在简化复杂的正则表达式函数的理解。由于正则表达式是标准化的,RegExr 会解析正则表达式的所有部分,并将其含义转换为解释性句子。您还可以将鼠标悬停在这些解释上,以查看表达式中出现该解释的准确位置。
下面,我输入了上面使用的复杂示例,并使用了 explain 函数。看看解释是如何用颜色编码的,并突出显示给定的部分:
RegExr 可以节省您处理较长正则表达式的时间,也省去了您记忆库的麻烦。在网站页面上,您可以找到完整的正则表达式公式库及其用法。只需点击它们即可将这些公式插入到您的表达式中。
最后,您可以使用 RegExr 来测试您的表达式,方法是用示例文本填充“测试”区域。RegExr 将应用草拟的正则表达式来搜索示例文本,并高亮显示所有匹配项。您可以将鼠标悬停在这些匹配项上以获取更多信息,例如表达式的哪个部分导致了匹配项被选中。
专家提示:避免使用长正则表达式
虽然 RegExr 可以帮助解释较长的正则表达式,但它们总是比较短的表达式更难理解。优先使用较短的表达式,可以让您和您的团队更容易一目了然地理解表达式。此外,用一个表达式来填充所有搜索参数非常耗时,而且更容易出错。
尝试应用多个较小的表达式,每个表达式搜索一两个内容。这不仅可以解决上述问题,还能让你在后续项目中重复使用部分或全部表达式。
总结和更多资源
至此,我们完成了对 7 款工具和软件的梳理,它们将帮助你成为更高效的程序员。从 Vim、Reflect 到 RegExr,我们探索了一些开发者推荐的最常用、最喜爱的工具,也为开发者们提供了参考。
虽然其中一些工具有一个学习曲线,但我向你保证,通过掌握它们,你最终将节省数小时的时间和数千次击键。
你还有其他专业技巧或工具帮到你吗?欢迎在下方留言!