懒惰程序员的百宝箱:提升工作效率的七大神器

管理员账号

2019-10-09

Perl之父Larry Wall曾在 Programming Perl 一书中提到:

程序员的三个美德是懒惰、不耐烦和傲慢。

懒惰,是程序员美德的第一要素。Larry Wall所说的“懒惰”,并不是安于现状和不思进取,而是付出最少的时间或者精力来达到同样甚至更好的目标。“懒惰”的程序员会尽量使自己的代码既实用又有很好的可读性,这样可以节省后面的很多维护成本;还会尽力完善代码中的注释及文档,以免别人问自己太多问题,更擅长使用各种工具,从方方面面提升自己的效率。

本文选自《程序员的三门课:技术精进、架构修炼、管理探秘》一书,本文会向你介绍一些非常实用的工具,这些工具可以大大提升你的工作效率,全方位把你武装成一名“懒惰”的程序员。

对于开发者,尤其是Java开发者来说,使用开发工具编写代码真的可以大大提升工作效率,因为现在很多IDE都有很强大的工具,不仅提供了代码补全、错误提示、自动编译等功能,还提供了各种插件,方便和其他工具融合,能大大提升写代码的效率及代码质量。

目前市面上主要有两款Java代码开发工具:Eclipse和IntelliJIDEA,这两款开发工具之争由来已久,不过最近几年,IntelliJIDEA逐渐撼动了Eclipse的霸主地位,成为开发者的首选开发工具。在2013年的Google I/O大会上,Google推出了新的Android集成IDE“AndroidStudio”,其最大的转变就是从Eclipse切换到了IntelliJ IDEA。

笔者也经历过从Eclipes转向IntelliJ IDEA的过程,相比之下,Intellij IDEA在某些方面确实比Eclipse更加出色一些,配合Mac OS操作系统上的快捷键,真的可以在开发效率上提升一大截。

关于开发者使用的IDE,Jet Brains做过一项调查,结果显示:有59%的开发者使用IntelliJ,有30%的开发者使用Eclipse,只有不到5%的开发者使用Sublime和Vim等普通文本编辑器。

程序员在协作开发时不可避免地要使用版本控制工具对代码进行管理,版本控制工具主要用于存储和追踪被管理的文件的修改历史,是软件开发者的必备工具。

目前市面上比较成熟的版本控制工具有CVS、Visual SourceSafe、PVCS、Subversion(SVN)和Git等,SVN和Git的使用较为广泛。

无论是SVN还是Git,都提供了很好的版本控制功能,例如对代码的统一管理、冲突解决、代码权限控制、分支开发和合并等。开发者应该熟练掌握SVN和Git,比如代码拉取、代码提交、代码合并和冲突解决等,尤其要掌握一些Shell命令,这可以节省大量的时间。

虽然目前有很多开源代码及很多公司的内部代码都倾向于使用Git进行代码托管,但我们不能保证所遇到的所有代码都使用了Git。公司规模越大,使用SVN进行代码托管的可能性便越大,毕竟迁移也是需要一定成本的。

自动化构建指自动创建软件组建的一组进程,包括将计算机源代码编译成二进制码、将二进制码包装成软件包并对其进行自动化测试。很早以前的自动化构建都是通过创建Make来完成的,后来发展为GNU Make。随着时间的推移,如今的软件开发主要使用更优秀的自动化构建工具来完成,例如Java世界中的三大构建工具Ant、Maven和Gradle,如今,Ant几乎要退出历史的舞台了。

Maven和Gradle之所以能够赢得众多程序员的青睐,主要是因为它们在依赖管理、冲突解决、项目构建、项目结构管理和插件机制等方面的出色表现。

所谓一图胜千言,无论是自己梳理思路,还是给别人讲解,图案都是很好的形式。而且,程序员还经常要做一些PPT等,有了这些画图工具,就能大显身手。

1)思维导图——XMind

人类大脑的最自然思考方式是放射性思考,也就是我们常说的发散性思维。我们通常在思考一个问题的时候,都是以一个思维点为起点,然后不断进行发散式展开的。如果我们将这个思考过程通过图形化的方式表达出来,就是一张思维导图。思维导图可以有效地把思维模式表现出来,有利于人脑的扩散思维的展开。如图所示是一张关于“提升工作效率的软件”的思维导图。

XMind是一款非常实用的商业思维导图软件,采用Java语言开发而成,具备跨平台运行的性质,且基于EclipseRCP体系结构,支持插件通过编写XML清单文件扩展系统定义好的扩展点,帮助用户在真正意义上提高生产效率,被著名的互联网媒体Lifehacker评选为“最佳头脑风暴和思维导图工具”及“最受欢迎的思维导图软件”。

XMind的程序主体由一组插件构成,包括一个核心主程序插件、一组Eclipse运行时插件、一个帮助文档插件和一组多语种资源文件插件,对Eclipse用户非常友好。

XMind不仅可以绘制思维导图,还可以绘制鱼骨图、二维图、树形图、逻辑图和组织结构图(Org、Tree、LogicChart、Fishbone),并且可以方便地在这些展示形式之间进行转换。用户可以导入MindManager、FreeMind数据文件,灵活定制节点外观、插入图标、丰富的样式和主题。其输出格式有HTML和图片。

2)UML画图工具

UML(Unified Model Language)即统一建模语言,又被称为标准建模语言,是用来对软件密集系统进行可视化建模的一种语言。开发人员在做详细设计时,免不了要和各种UML图打交道,例如用例图、类图、对象图、时序图、活动图和状态图等。

简单来说,开发人员在写代码之前就需要了解需求,在这之后要对软件系统进行建模,将抽象的语言描述转换成可视化的模型。而在建模过程中需要一种标准的语言,这种语言就是UML。

目前市面上有很多UML画图工具可供选择,它们均能满足基本的画图功能,下面简单列举几种。

•Rational Rose:是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具,主要用于可视化建模。

•Visual Paradigm for UML(VP-UML):是一种功能强大、跨平台、使用便捷、直观的UML建模和CASE工具,它可以被整合在其他CASE工具或者其他IDE工具中。Visual Paradigm for UML支持UML建模、数据库建模、对象关系映射、逆向工程和Java双向工程等,功能异常强大。

•StarUML(SU):是一款开源的UML开发工具,支持绘制用例图、类图、序列图、状态图等9种常用的UML图,具有发展快、灵活、可扩展性强等优点,唯一的不足之处是在反向工程时只能生成类图,不能生成类之间的关系。

Markdown是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber),允许人们使用易读易写的纯文本格式编写文档,然后将文本格式转换成有效的XHTML(或者HTML)文档。

作为程序员,我们除了要具备编程的硬技能,还要具备写作的软件,而首选的写作方式就是Markdown。目前,很多大型博客网站都开始支持使用Markdown写文章,这无疑是对程序员的一种示好行为,著名的代码托管网站GitHub也支持使用Markdown语法来编辑README文件等,如图所示。

关于Markdown的编辑器,目前市面上也有很多选择,主要有Mou、MacDown、Typed和Bear等,还有很多在线的Markdown编辑器,在后面的在线工具章节中会详细介绍。

还需要提及的一点是,其实使用哪种Markdown编辑器并不很重要,重要的是程序员应该掌握常用的Markdown语法。这样写出来的文章或者文档,可以在任意支持MD语法的平台上查看。

前面介绍过Java开发常用的IDE,但是在某些情况下我们仅需要打开一个单独的文本文件,比如打开一个XML格式的文件、一个JSON格式的文件等,这时一款好用的文本编辑器就派上用场了。

SublimeText是一款流行的代码编辑器软件,可运行在Linux、Windows和Mac OS X等操作系统之上,是许多程序员喜欢使用的一款文本编辑器软件。它具有代码高亮、语法提示、自动完成且反映快速的编辑器软件,不仅界面华丽,还支持插件扩展机制,如图所示。

Atom是GitHub专门为程序员推出的跨平台的文本编辑器,因为有简洁、直观的图形界面而受到了广大程序员的青睐,而且它有很多有趣的特点:支持CSS、HTML、JavaScript等网页编程语言;支持宏,自动完成分屏功能,集成了文件管理器;支持Mac OS、Windows和Linux操作系统,支持Node.js所写的插件,并内置由GitHub提供的Git版本控制系统。多数的延伸包皆为开放源代码授权,并由社区建置与维护。

Notepad++也是一套被广大程序员选用的纯文本编辑器,基于同样开放源码的Scintilla文本编辑组件研发而成,整个项目起初被托管于SourceForge.net,曾经两度获得SourceForge社区选择奖——最佳开发工具。Notepad++在2010年6月被托管于TuxFamily,现被托管于GitHub。

除了以上介绍的一些必备软件,还有些常用工具也是程序员在日常工作中必不可少的,例如Host绑定、HTTP调试等。

1)Host绑定

在日常开发工作中,我们对Host绑定肯定不陌生,因为我们几乎每天都要和它打交道。我们可能经常要在不同的Host绑定之间来回切换,尤其是在Java Web开发中,在本地开发测试时可能使用的是一套Host绑定,在测试环境部署之后提交给测试人员进行测试时又要使用另一套Host绑定。在测试之后,要经历预发布、灰度发布等,都需要一套新的Host绑定。采用好用的Host绑定工具可以大大节省Host绑定切换的时间。

SwitchHosts是一个非常方便、快捷的Host绑定切换工具,免费、开源,支持预发高亮、方案多选、单击行号快速切换注释、系统菜单栏快捷切换、方案导入导出等功能。

2)HTTP调试

在日常的Web开发中,我们除了会和Host绑定打交道,还经常会和RESTful API打交道,有时我们需要一个工具来帮我们发送HTTP请求,或者说是模拟HTTP请求,比如帮我们发送POST请求等,这时就需要一款可以模拟发送HTTP请求的工具。

Postman是Google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的Chrome插件。除插件外,也提供软件下载。它可以模拟各种HTTP请求,从常用的GET、POST到RESTful的PUT、DELETE等,甚至可以发送文件及额外的Header等。Postman可以将Response内容的格式自动美化,将JSON、XML或者HTML都整理成我们可以阅读的格式。Postman还支持编写测试脚本,可以快速检查Request结果,并返回测试结果。总之,Postman是一款非常不错的可以用来做HTTP调试的软件。

《程序员的三门课:技术精进、架构修炼、管理探秘》

于君泽 李伟山 张洪亮 彭首長 刘朋 著

我们都有一个共同的梦想——成为更棒的程序员,但是如何做?如何学习和精进自己的技术?如何做业务分析和架构设计?如何做技术管理?本书就广大程序员都很关注的问题提供一些思路和方法。

本书内容分为三大篇

第1篇介绍程序员的技能成长路径,介绍如何通过学习来加速成长,并讲解非常重要的业务分析和设计知识;

第2篇详细介绍了架构修炼中的必备架构思维模式、架构设计过程,还通过真实案例剖析了架构设计的核心要素及关注点,以及如何通过架构设计来把控质量和风险;

第3篇总结了做技术管理的诀窍,揭秘如何从准备做技术管理到实现自我管理再到实现团队管理。

作者简介

于君泽,某互联网公司技术专家,在分布式系统架构设计、高并发系统设计、领域建模、研发管理、内建质量等方面有较多心得,乐于交流和分享,曾创立技术社群“中生代技术”。维护技术公众号“技术琐话”。

李伟山,现任某人工智能公司技术总监,江湖人称“山哥”,在分布式系统架构设计、高并发系统设计、系统稳定性保障等方面积累了丰富的实践经验,擅于利用数据分析解决实际问题,对新技术有浓厚的兴趣,乐于分享。个人技术公众号:技术方舟。

张洪亮,网名Hollis,知名技术博主,个人技术博客(http://www.hollischuang.com)阅读量达数百万。90后程序员,2015年毕业于哈尔滨理工大学,现任某互联网公司技术专家,专注于Java研发、技术架构及程序员的成长等方面。个人技术公众号:Hollis。

彭首長,熊猫优福联合创始人,聚美优品前技术总监。在团队管理、领域设计、分布式架构、高并发设计、IoT架构等方面有丰富的实践经验,擅长行业分析,对新技术高度敏感,热衷于技术实践且乐于分享。

刘朋,高绩效团队教练,教练型领导,中生代技术社区联合创始人,北京大学理学学士、工学硕士。现就职于中国移动(成都)5G产业研究院,曾任诺基亚通信(成都)有限公司研发经理。在敏捷实践、高绩效团队教练技术、技术团队管理等方面积累了丰富的经验,并总结出一套特别适合程序员突破自身瓶颈、快速成长的领导力模式。

读者评论

相关专题

相关博文

  • (三)spring cloud云服务架构代码结构详细讲解

    Omaye 2017-11-28

    上一篇我们介绍了spring cloud云服务架构 - particle云架构代码结构,简单的按照几个大的部分去构建代码模块,让我们来回顾一下: 第一部分: 针对于普通服务的基础框架封装(entity、dao、service、co...

    Omaye 2017-11-28
    650 1 4 4
  • Spring Cloud构建微服务架构—配置中心

    醜人 2017-11-17

    Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务...

    醜人 2017-11-17
    268 2 2 2
  •  Spring Cloud构建微服务架构—服务容错保护(Hystrix服务降级)

    Spring Cloud构建微服务架构—服务容错保护(Hystrix服务降级)

    醜人 2017-11-17

    在开始使用Spring Cloud Hystrix实现断路器之前,我们先拿之前实现的一些内容作为基础,其中包括: eureka-server工程:服务注册中心,端口:1001 eureka-client工程:服务提供者,两个实例启动...

    醜人 2017-11-17
    186 2 2 2