我与IDEA的不舍情缘

JetBrains这家来自于捷克的公司是一家真正伟大的公司,它向全球的广大开发者提供了诸多的生产力工具,让我们这些以编程为生的程序员们能够真正享受到编程的乐趣。JetBrains的产品线十分丰富,从大名鼎鼎的IntelliJ IDEA、PyCharm、PhpStorm、WebStorm、RubyMine到移动开发利器AppCode,再到今年初正式发布的数据库管理一站式工具DataGrip,以及团队协同开发工具YouTrack、TeamCity等等,每一个产品都在各自的领域中傲视群雄,当仁不让。




此前得知CSDN与JetBrains公司合作举办了『JetBrains远征赛之使用技能征集』活动,同时CSDN编辑也邀请我为活动写一些文章,由于自己使用JetBrains公司的各种产品已经有很多年了,期间也积累了不少的经验和使用感受,同时也写过不少关于JetBrains公司产品的文章,便欣然接受了邀请,于是才有了下面这些文字。由于标题字数有限制,因此标题只写了IDEA这一工具,不过本文将会介绍IntelliJ IDEA、WebStorm与DataGrip这3个分别面向Java、前端与数据库的工具;他们也是我在日常开发工作中频繁使用的工具。


工作近10年来,我目前主要从事系统架构设计工作,每天的主要工作内容是规划系统设计方案、优化系统、核心模块代码的编写以及指导团队成员。可以这么说,我每天的绝大部分时间都是在编写代码,因此一款趁手的IDE就显得尤为重要了。现在,我每天游走在Java、Python、Angular、React、Node、iOS与Android之间;这每一项技术都需要有相应的工具作为支撑,值得一提的是,这其中我所使用的大部分IDE都来自于JetBrains,下面是我Mac Dock栏上的JetBrains公司部分工具图标一览:




在我的积极推动下,现在项目组所有成员也都从原来所使用的各种工具转向了JetBrains产品。由于一直在做Java开发,因此就从Java IDE IntelliJ IDEA开始说起吧。


IntelliJ IDEA——Java开发者所需的唯一工具




与很多Java开发者一样,我从2007年研究生毕业后进入到公司从事Java相关开发后就一直在使用Eclipse工具栈(包括MyEclipse)进行Java系统的开发工作,这种情况一直持续到2012年;期间也积累了丰富的Eclipse使用经验,同时感受到Eclipse的强大以及插件体系的精妙之处。不得不说,Eclipse是一款伟大的产品,免费、使用人数众多,上手比较轻松,我相信这也是很多Eclipse使用者的直观感受。


随着Maven的日渐流行,我们的项目开始转向Maven进行依赖与项目生命周期的管理。当我使用Eclipse与Maven进行集成时,我感受到了深深的挫败感;在2012年那个时候,Maven已然成为了Java构建事实上的标准,然而遗憾的是,Eclipse与Maven的集成做的非常差劲,通过Maven插件导入Maven项目后需要进行大量的手工设置,这些设置非常容易出错,相信当时很多人都遇到了和我一样的境况(因为当时通过Google搜索Eclipse与Maven集成会看到大量的文章,都是为了解决集成方式先天不足这一问题)。这些本来应该由IDE帮助我们完成的事情却转嫁给了开发者,显然这不是我想要的结果。经过不断尝试后,虽然成功完成了Eclipse与Maven的集成,但中间的操作步骤却异常繁琐,而且还要注意先后顺序,团队的每一名成员都需要按照这个步骤来才能顺利完成集成工作;新人加入团队后也要重复这一过程。当时我就在想,有没有其他IDE能够比Eclipse在这方面做的更好呢?于是,我想到了IntelliJ IDEA。当时,Java领域知名的三大IDE分别是:Eclipse、IntelliJIDEA与NetBeans(相信现在也是这个局面)。由于个人不是太喜欢NetBeans,于是就下载了IntelliJ IDEA试用。安装完毕后发现IDEA已经集成了Maven功能,于是通过git将仓库中的Maven项目导入进来,待系统刷新完毕后令我惊讶的一幕发生了:IDEA已经自动识别出了这是个Maven项目,并且完成了一切的设置工作;可我什么都没做啊,IDE已经自动帮助我完成了全部的设置工作,接下来我要做的就是编码——程序员的主要工作。这简直太令我震惊了,在Eclipse中需要花费那么久才能搞定的事情,使用IDEA竟然短短几十秒就由工具帮助我全部自动完成了。激动之余我开始了对IntelliJ IDEA的尝试与探索。


不得不说的是,由于具备了多年的Eclipse使用经验,因此对于Eclipse的各项功能与操作方式都了然于心了,特别是Eclipse的界面风格。但一开始使用IDEA时感受到了极度的不适应(后来在与很多新人沟通IDEA使用情况时发现,这几乎是每个IDEA新手的共同感受,看来习惯的力量是巨大的),菜单项、命令方式、操作方式、特别是快捷键(实际上,IDEA提供了Eclipse风格快捷键,可以在首选项的键盘设置中进行配置)都存在着巨大的差别,这其中界面风格的差别尤为突出。IDEA的界面与Eclipse是完全不同的(我们不能说哪一个更好,其实更多的是习惯造成的),这一点对于新手来说是比较难以克服的。据我所知,有不少IDEA新手在使用IDEA不到一天的时间后就放弃了,究其原因还是难以逾越习惯的心魔。好在自己对于新事物的适应能力比较强,经过了一周左右的不断尝试后,终于降伏了IDEA这一庞大的工具。使用得越多越能感受到IDEA的强大与贴心。


实际上,IDEA也提供了非常强大的插件体系,用于补充和完善IDE自身的功能。而且,IDEA现有的插件已经非常丰富了,比如说用于git .ignore文件处理的.ignore、用于thrift接口定义文件编写的Thrift Support、用于编写markdown文档的Markdown support、用于编写FreeMarker模板文件的FreeMarker support,以及用于在IDEA中模拟VI操作的IdeaVim等等。除此之外,IDEA自身就已经通过插件的方式提供了对诸多框架与语言的支持,比如说Spring、Hibernate、Struts2、Nodejs、Scala、单元测试、React、Bash、CoffeeScript、YAML、Gradle、GitHub等等。凭借着自身强大的功能与完善的插件体系,IntelliJ IDEA为开发者提供了开箱即用的便利性,这对于开发者效能的提升是显而易见的。





提起IntelliJ IDEA,就不得不提到它的快捷键。IDEA的快捷键之多、之方便为广大开发者津津乐道。众所周知,开发者在进行开发工作时,双手尽量不要离开键盘,因为从键盘切换到鼠标然后再回到键盘这看似不经意的动作,实际上每天做多了就会对效率造成一定的影响;IDEA凭借强大的快捷键与Alt+Enter功能(无论何时,这个快捷键都会给你与当前上下文相关的智能提示,这是个极具价值的功能)能极大提升开发者的生产率(当然了,前提是需要花一些时间熟悉IDEA的常用快捷键,这样才会事半功倍)。


目前项目的后端使用Gradle进行构建,使用git进行版本控制与管理,使用的技术栈有Spring、Spring MVC、MyBatis、Thrift、Kafka等,IDEA同样对其提供了完备的支持。开发者无需离开IDEA就可以完成几乎全部的日常开发工作,IDEA提供的Terminal(Mac下)支持也是非常有益的,这样就无需在IDEA与Terminal之间频繁切换了。

 

另外,值得称道的是IDEA对于Java8 Lambda表达式与调试的强大支持。众所周知,调试是我们日常开发中必不可少的一环,IDEA在这方面给予了我们最大的支持,当程序暂停在断点处时,编辑器会直接在界面上显示出当前上下文环境下所有变量的值,这对于开发者对程序执行流程的理解上无疑是帮助巨大的。



从图中可以看到,断点处的变量值直接就显示在了变量旁边,这一特性能有效提升调试的效率。


WebStorm——前端开发者的福音






目前的前端领域呈现出百花齐放、百家争鸣的景象,各种技术、框架、思想与库层出不穷。几年前还是用jQuery打天下的时代已经离我们渐行渐远。目前比较流行的方式是前后端分离,即前端通过Angular或是React等框架完成,后端则提供Rest接口供前端调用,前端使用Node与后端的Rest接口通信。这种做法的优势很明显。首先,前后端分离可以让前端开发者与后端开发者各施其职,互不影响。只需提前定义好通信的接口(HTTP+JSON),前后端开发者即可各自进行开发,不会因为后端某个功能没有完成而影响前端的开发(前端可以通过Mock的方式构造接口数据);同样,后端只需关注接口的正确性即可,因为所有功能都已经服务化了。另外一个优势在于,采用了前后端分离的方式进行开发,前端开发者就再也不必使用后端开发者使用的IDE工具了(在之前传统的类JSP开发模式下,前端开发者必须要先搭建好后端的开发环境才能顺利进行开发,然而这显然会造成前端效能的低下,毕竟前后端代码耦合到了一起是非常不利于开发和阅读的,虽然Velocity和FreeMarker等模板语言能够在一定程度上缓解这个问题,但还是无法从根本上解决)。正所谓一个硬币有两面一样,前后端分离也存在着一定的弊端,最为明显的就是对前端开发者的技能要求会更高,项目开始的开发成本会更高,中间增加了Node这一环节,会导致出现问题时解决起来变得更加困难。但总的来看,前后端分离是未来的发展趋势,也是我们应该深刻理解的思想。


JetBrains公司的WebStorm是一款专门针对前端的开发工具套件,它提供了大量的优秀特性来提升前端开发者的生产力。对于HTML、CSS及JavaScript的支持非常棒,代码提示、代码补全、格式化等功能一应俱全;此外,WebStorm还通过内建插件的形式对当今流行的前端开发框架与库提供了极其完备的支持,如Angular、React、CoffeeScript、Meteor、Yeoman、Nodejs等等,这些优秀的特性让前端开发者可以将精力放在重要的开发上,而非繁复的代码工程。




目前,公司的前端开发工具已经全部转至WebStorm,前端开发人员也对这款强大的IDE赞不绝口,极大提升了生产力。


DataGrip——数据库与SQL领域的瑞士军刀





DataGrip是JetBrains公司今年初才发布的一款数据库管理工具,它号称数据库与SQL领域中的瑞士军刀。值得一提的是,DataGrip的前身叫做0xDBE,在DataGrip发布前已经发布一年多了,我也在很早的时候就申请了0xDBE的试用资格,一路见证了0xDBE的不断发展壮大。与JetBrains产品线上的其他产品类似,DataGrip也提供了Windows、Linux与Mac版本。此外,JetBrains的其他产品如IntelliJ IDEA等也都通过插件的方式集成了DataGrip,这使得开发者能够更加方便地操作数据库。DataGrip支持几乎所有主流的关系数据库产品,如DB2、Derby、H2、MySQL、Oracle、PostgreSQL、SQL Server、Sqllite及Sybase等,并且提供了简单易用的界面,开发者上手几乎不会遇到任何困难。面对市场上已有的诸多老牌数据库管理工具(如MySQL WorkBench、Toad、NaviCat、phpMyAdmin、SequelPro、SQLWave等等),DataGrip要想获得用户青睐一定得有自己的看家本领才行。实践证明,DataGrip不辱使命,在众多同类产品中脱颖而出,迅速赢得了市场。我也在长时间使用DataGrip的过程中领悟到了JetBrains的软件设计哲学——易用且强大。


DataGrip的主要特性有:


提供了对主流数据库管理系统的访问

  • 市场上的重量级产品:Oracle、SQL Server、DB2与Sybase
  • 社区流行产品:MySQL、PostgreSQL
  • 小众产品:SQLite、Apache Derby、HyperSQL与H2

修改数据库对象并自动生成脚本


DataGrip提供了一个UI用以执行诸如创建/修改表、管理列、键与索引的操作。可以立即执行生成的代码,也可以在文本编辑器中打开,并直接操作DDL脚本。DataGrip提供了上下文感知的代码完成特性,能够帮助你更快地编写SQL代码。代码完成可以感知到表结构、外键,甚至是正在编辑的代码中所创建的数据库对象。DataGrip可以检测到代码中潜在的Bug,并即时提供最佳的修复建议。它能够立刻让你知道无法解析的对象,并且总能提供问题的修复建议。



高效编写SQL并消除重复的编码工作


借助于DataGrip,你可以通过代码完成特性更快地编写代码。只需输入数据库对象、标识符或是变量的名字即可,DataGrip会提供一个匹配的列表。DataGrip能够感知到完成JOIN从句所需的依赖,并提供函数与过程所需的参数类型,还可以给出INSERT语句的表结构。DataGrip提供了Live Templates用以生成语句的常见部分,你可以使用默认值,也可以创建新值。



在代码间导航并在输入时进行重命名


DataGrip能够解析出SQL文件中的对象引用。如果对变量或是别名进行了重命名,那么所有用到他们的地方都会相应地进行重命名。如果在SQL中重命名了数据库对象,实际的数据库中也会进行重命名。DataGrip能够正确解析出SQL代码中所有的引用,并帮助你对其进行重构。


IDE会展示出对象(表、列等等)的使用,还会在专门的视图中展示出变量。导航工具可以帮助你在编辑器、模式视图等各种上下文中选择对象。



处理数据并探索关系


你可以通过强大的表编辑器添加、删除、以及克隆数据行。通过过滤文本域可以只查看所需的数据,而无需编写WHERE字句。寻找所需数据的另一种方式是使用文本搜索。如果不知道哪一列包含了你所要寻找的数据,那么文本搜索就是一项非常有用的功能了。可以在文本搜索中使用正则表达式。通过外键数据导航可以转到当前行所引用的数据,反之亦然。



分析查询与比较结果


在单击Execute按钮时可以选择让DataGrip做什么事情——执行子查询、执行外部查询,或是执行整个脚本。只想执行特定的一部分代码?只需将其选中并执行即可。DataGrip还提供了执行计划,其结果集类似于表编辑器,包含了相同的选项,如添加/删除行、文本搜索与数据导航等。可以在diff查看器中比较两个结果集。



DataGrip基于IntelliJ Platform,带来了:

  • 拥有多种光标与语法感知选择的文本编辑器
  • 版本控制系统集成:Git、Subversion、Mercurial等等
  • 插件生态圈:Terminal、Textmate等等


不得不说的Android Studio——Android开发一站式解决方案


最后,不得不提的还有Android Studio——Google官方推荐的Android开发工具。




众所周知,过去Android的主要开发工具是ADT(Android Development Toolkit),它是基于Eclipse之上的一整套面向Android开发的插件集合,提供了Android开发的各种工具与调试器及模拟器等。不过,在去年底,Google宣布将停止对Eclipse Android开发工具的一切支持,转而将Android Studio作为官方推荐的开发工具。Android Studio是基于IntelliJ平台的,充分利用了既有的基础设施。对于那些熟悉IntelliJ IDEA平台的开发者来说,上手Android Studio是非常轻松的事情,这也是现在大部分公司进行Android开发所使用的工具。


总结


JetBrains是一家伟大的公司,它所推出的诸多工具面向软件开发的各个领域,从Java、.NET、PHP、Python、Ruby到iOS、版本控制、持续集成以及数据库管理,极大提升了软件开发者的效率。

 

作为一名开发者,我非常感谢JetBrains让世界变得如此美好,让我们的开发工作变得更加有趣,也让我深刻认识到——优秀的工具是多么的重要。

 

谢谢你,JetBrains!



你可能感兴趣的:(idea,webstorm,JetBrains,datagrip)