【51CTO.com快译】常言道:“工欲善其事,必先利其器。”开发人员时常需要使用各种工具,来加快其代码的编写速度。就算在代码的测试环境,他们也会趋向使用各种脚本与工具。通过与业界许多经验丰富的开发和测试人员的深入交流,我们收集了目前七种最常用的代码工具,可方便您提高团队的整体工作效率。
1. Linux I3窗口管理器(Window Manager)
开发人员一直能够受益于Linux所提供的灵活性和自由度。而I3就是在此基础上,提高了用户对于编程环境的完全掌控能力。总的说来,I3窗口管理器针对Linux提供了轻量级、开源的平铺风格,可用于控制窗口在屏幕上的外观和位置。由于被平铺显示在操作系统的GUI(图形用户界面)顶部,因此I3可以通过自动调整窗口大小和重新排列窗口,来避免用户的工作屏幕上出现窗口的重叠。以下是I3窗口管理器的主要特点:
- 简单高效:作为一款轻巧的工具,I3是专为开发人员设计的、具有最小的处理能力。
- 键盘控制:I3内置了广泛的、适用于不同操作的快捷键组合。当然,您也可以将其他快捷方式直接添加到其config文件中,以移动平铺的方式,打开终端,更改布局等代替鼠标的操作。
- 有效地使用屏幕:通过使用I3提供的平铺,您不必在同一个窗口中切换大量的选项卡,而能够以平铺的方式打开任意数量的窗口。这对于那些需要在多个终端上来回切换的系统管理员,以及需要使用和测试多个终端的用户来说十分方便。
- 自定义主题:您可以根据自己的偏好,来自定义I3的外观,包括微调其背景、窗口外观与操作行为、以及通知界面等。
专家建议:使用I3的工作区
I3有一项非常实用的功能:开发人员可以将各个窗口分组为带有不同编号的工作区,以便在不同的区域运行不同的工作流。您可以通过索引或按下super按钮的方式,来隐藏其他的窗口,只突显主工作区窗口,并能够保持在不同的工作区之间快速切换。
此外,对于拥有双显示器的用户而言,他们可以在每台显示器上先打开一个工作区,然后只需一次性快捷键操作,便可将主工作区切换并投射到指定显示器上。这将大幅提高他们的生产率。
2. Vim
适用于各大主流平台的Vim,是大多数编程语言的首选文本编辑器。它可以通过为开发人员提供自定义的快捷键组合,来提高编程的效率。Vim具有多种文本编辑模式,其中每一种模式都可以针对某项特定的任务进行优化。例如:您可能为Python设置一种模式,而为C++设置另一种模式。这些模式允许相同的快捷键针对不同的语言,发出迥异的操作命令。此外,用户可以在共享的.vimrc.文件中,配置Vim的快捷方式。
专家建议:使用DRY的原则,来设置Vim快捷方式
开发人员一直推崇着DRY(Don’t Repeat Yourself)的思想,即:不要重复实现自己已实现的功能。也就是说,尽量将需要重复实现的功能性代码模块化,以便在下次需要的时候,直接调用之。我们可以在设置Vim快捷方式时,延用类似的原则。例如,如果您发现自己手头的工作,经常需要使用Java来实现某个二进制搜索树时,则可以通过设置快捷方式,以粘贴一段已写好的二进制搜索树的模板。
3.Bash
Bash是一款为GNU项目开发的免费Unix shell。一直以来,它都被用作Linux、MacOS、甚至是Windows 10的默认登录shell。其实,Bash还能支持数百种可以从应用程序内调用的命令。
Bash的亮点体现在脚本上。用户不必逐一输入一组命令,而可以通过一个包含了所有执行命令的shell脚本文件,让它们依次自动执行。同时,由于Bash里的命令比较偏底层,因此用户无需打开桌面应用,即可操纵各种文件与内存。例如,您可以创建一个Shell脚本,在无需调用文件管理器的情况下,系统性地将某个硬盘内的全部内容传输到另一台设备上。可见,Bash不但效率更高,而且能够执行更为专门的任务。
专家建议:使用Bash的历史
您可以使用如下Bash历史的获取方式,来进一步提高执行的效率与能力:
多窗口的历史记录:
默认情况下,Bash只会记录已打开的第一个实例的历史命令,而不会记录后续窗口的历史信息。不过,您可以通过命令:shopt -s histappend,让所有活动的Bash窗口都可以记录历史命令。
重复上一条命令:
您可以使用键盘上的向上箭头、或ctrl+p组合键,来查看最近执行过的一条命令。
反向搜索历史:
您只需按下ctrl+r的组合键,即可在Bash的历史中搜索过去的命令。Bash会使用自动填充的方式进行匹配。如果有多行匹配,您可以再按一次ctrl+r,以便在其中循环选择。
4.函数式编程(Functional Programming)
函数式编程是一种声明式编程范例,可用于构造那些具有纯函数集合的程序。这些程序往往是由一些基本的函数单元,组合构造而成。值得注意的是,声明式编程关注的是构建什么,而不是如何去实现。它通过提供数学上和逻辑上的范例,来方便用户轻松地设计出声明式编程。
函数式编程比其他方法更具模块化。它通过将程序拆分为较小的功能函数,以便用户在整个程序中实现复用。当然,用户也可以根据模块化的函数,仅复用整个方案中的某一部分。
此外,由于函数式编程里的数据保持不变,因此不会产生任何副作用。例如我们有某个函数是从n开始,需要将n传递给function1,然后将function1的结果输入给function2。下面是两种不同方法的伪代码(pseudo-code):
块式方法:
int n = 5; n = function1(n); n = function2(n); return n;
函数式方法:
int n = 5; return function2(function1(n));
在函数式方法中,我们通过function1(n)直接将n传递给function2,而不是去扩充n,因此这种声明方式保证了n所传递的值不会发生改变,进而保证了该函数在使用中不会产生任何副作用。
专家建议:函数式思维,不仅仅是语言
适合此类范例的函数式编程语言有:Clojure、Scala和Haskell等。尽管它们的功能强大,但是对于初学者来说并不容易上手。新手程序员需要先在自己熟悉的编程语言中,试着通过如下方法,来训练和使用函数性思维:
- 利用map、reduce等操作,改变以前的块式编程思想。
- 练习在每次编程中,使用局部作用域的变量和函数,来减少副作用。
- 由于递归方案需要函数性思维,因此在实践中优先考虑递归方案。
5.Reflect
回归测试是确认已开发的软件,能够在更新后仍可正常运行的过程。这几乎是每个开发人员必经的过程。但是由于需要涵盖所有可能的错误,因此该过程也会相当繁琐。
Reflect通过为任何网站创建自动化回归测试来解决此类问题。它不需要任何安装,即可与任何JavaScript框架协同使用。其具体操作步骤如下:
- 进入“记录测试”模式
- 加载网站的当前工作页面
- 单击需要测试的功能
- 停止记录测试,这将生成一个测试脚本,以模拟各种点击
- 输入目标网站的测试版本地址
- 激活测试脚本
- 查看记录下的结果
通常,测试结果会将发生问题时的截屏片段,发送到JavaScript控制台,以便用户从源头处迅速开展问题诊断。这种“一次性创建录屏,多次模拟测试”的方式不仅可以为用户节省大量的手动测试时间,还可以自动生成每个测试的视频记录,以展示确切的错误信息。简而言之,鉴于Reflect的简单性、可重复性和准确性,它正在开发人员中变得越来越流行。
专家建议:Reflect的高级功能
除了上面介绍的Reflect主要服务,它还能够提供如下高级功能:
- 通过规划某项测试在停顿任意时间间隔后进行,可确保目标网站能够在无人值守的情况下,照常提供服务。
- 将测试计划与故障通知相结合,以减少网站在中断时的响应时间。
- 如果需要更改测试,只需编辑和重新记录某个单击操作或某几个部分,而不必重新录入整个过程。
- 在更改网站的界面时,可使用自动化的视觉检测工具,来检测那些与输入预期值相距甚远的故障元素。
6.正则表达式
正则表达式(Regular expressions,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可以解析出表达式中的关键部分,并将其转换为解释性的句子形式。同时,当您将鼠标悬停在内容说明上时,该工具能够突显其对应在表达式中的确切位置。下图便是上面那个复杂示例的具体功能性说明,以及对应的、以颜色编码的形式突显出的不同部分。
在节省开发人员解读冗长的正则表达式的宝贵时间的同时,RegExr还消除了用户对于公式库的死记硬背。在其界面的一侧,您可以查找到完整的公式库,及其对应的用途说明。您只需单击它们,即可将公式插入表达式中。此外,RegExr还可以向待测试的表达式中,填入各种文本,以提高测试的覆盖率。
专家建议:避免使用冗长的正则表达式
尽管RegExr可以协助我们解析较长的正则表达式,但是此类长表达式毕竟晦涩难懂。而且,让单个表达式来完成所有的搜索参数,往往是一个既耗时,又容易出错的过程。因此,在实际项目中,您的团队应当优先考虑那些便于理解且较短的表达式表现形式。例如,我们可以尝试着构建多个较小的表达式,让每个表达式都仅搜索一到两个字符串。这样不仅解决了上述问题,而且能够方便您在后续的项目中,对部分或所有表达式进行重用。
小结
综上所述,我们介绍了7种能够协助开发团队提高效率的代码相关工具和软件。其中最为常用的莫过于Vim、Reflect和RegExr了。尽管这些工具的学习曲线缓陡程度不尽相同,但是只要您掌握了它们,并且能够灵活地使用它们,就一定能够节省出数小时的开发时间,以及数千次的鼠标击键。快去试试吧。
原文标题:7 Coding Tools That Will Maximize Your Effectiveness,作者:Ryan Thelin
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】