An introduction to life-enhancing JetBrains Tools

May. 15, 2017

Introduction

The fields of Cancer Research and Human Genomics, while presenting some very hard and interesting problems that touch the domains of Computer Science and Software Engineering, do not always have the resources to aquire or use the latest and greatest software tools. In particular it can be really difficult to justify such expenditures.

Choosing the right tools can significantly improve developer quality of life as well as productivity. The folks at JetBrains were kind enough to support our development in these important fields, so as a thank you, we want to talk about what gets us so excited about using their tools.

IntelliJ IDEA

IntelliJ is a very intuitive, robust, and dare I say it, enjoyable way of programming in Java. Both the Community and Ultimate version include many features that accelerate the process of developing our software. While much of the appeal of IntelliJ is, as the cliche goes, that it just works, we highlight a few life-enhancing features that our team takes advantage of or is aided by.

Duplicate Detection

IntelliJ can detect copy-and-paste code that someone lazily (cough) added into the code-base and allows you to quickly navigate between duplicates.

duplicate code detection

Smart Quick Fixes

IntelliJ can highlight areas that are potentially buggy or just non-optimal. A particularly nice touch is that pressing Alt-Enter will present a large number of context-sensitive options for fixing things. These options can range from suggesting a fix (that can be applied file or project wide), suggested improved code, annotations for hiding false positives, and configuring the check itself.

smart quick fixes

Context-sensitive Plugin Suggestion

So you’re starting a new project or reinstalling your system. You open up a new file and IntelliJ suggests useful plugins which let IntelliJ understand types of code:

context-sensitive plugin suggestion

It’s a small touch, but appreciated.

Code-style Importing

So you like IntelliJ but your team likes Eclipse. Or vice versa. Keep things in sync and reduce un-necessary or distracting formatting challenges by taking advantage of IntelliJ’s ability to import code formatting files from Eclipse, from CheckStyle, or from other IntelliJ installs.

Intuitive Debugging

While debugging, an intuitive interface allows you to quickly inspect variable values.

intuitive debugging

Note the display of variables in-line with code and displayed via tool-tips.

PyCharm

While most IDEs, editors, and tools usually face stiff competition or viable alternatives, few stand head and shoulders above the competition in the way PyCharm does. From writing small scripts, to command line tools, to full fledged web applications, if your weapon of choice is Python, PyCharm will empower development like no other. PyCharm is also available in both Community and Professional editions.

A lot of the features mentioned in the previous section about IntelliJ hold true for PyCharm. You can expect goodies like excellent debugging support and great plugins.

Virtualenv

When writing Python applications it is essential to manage your dependencies in a way that isolates them from your system as well as making them reproducable. The canonical way of doing this is by creating isolated Python environments using Virtualenv.

PyCharm provides excellent support for creating, managing, and using your environments. At project creation you can choose to create a new environment or should you have an existing one already you can have PyCharm use that one. You can of course swap and create these enviroments for existing projects too.

Project Interpreter management, showing the current environments installed dependencies.

The UI, in addition to showing your dependencies in a concise way, also displays possible updates and allows you to search for additional packages found in PyPI or any other repository you may have configured.

PEP8 and Style

PyCharm will continuously monitor your code style to make sure it adheres to the PEP8 style guide for Python. You can of course configure additional style rules and enforments, such as when to line break around parentheses and braces for example.

Frameworks

The framework support provided by PyCharm, in particular web frameworks, is simply best in class. If you are looking to creating a Django webapp serving Jinja2 templates or a small Flask app with a React SPA for a front-end, PyCharm is your one stop shop for everything. Need to access a MySQL instance or manage a docker deployment? PyCharm will still have you covered.

All the supported run configurations should speak for itself.

You can debug and trace your execution not just through your back-end Python code, but also through your front-end UI code. Having done a considerable amount of full-stack development, having full support for the latest JavaScript and TypeScript is a huge bonus.

Django

A special mention is needed for the support provided for Django projects. Just to quickly list a few of the benefits:

  • Project structure awareness
  • Code Completion for tags, templates, and views
  • Django documentation
  • Comprehension of routing and settings specific to Django
  • Template comprehension and debugging
  • manage.py integration
With a keyboard shortcut you can quickly access a console for running commands from Django's manage.py

To be perfectly honest, I do not want think about working on large Django projects without PyCharm.

DataGrip

DataGrip styles itself as a database IDE. Some might raise an eyebrow to the term “Database IDE” but I assure you it is an accurate description. In addition to being able to view tables, sort through data and query, it really does provide an excellent development experience for the writing and testing of complex queries.

One tool to rule them all

Some readers might be all too familiar with the experience of having multiple database tools, one for each particular flavor that they happen to work with. I too used to be like you. Having to work with several microservices of varying maturity, some running with H2 or sqlite in development, others in prod with MySQL or PostgreSQL, it quickly becomes annoying to have to jump between multiple tools.

The various sources you can configure.

DataGrip allows us to use a single tool to view, debug, and run queries on all the varying systems that we are responsible for, unifying and simplifying the configuration I need to manage.

Write, Execute, Explain

Depending on the complexity of queries you intend to write, and the tools at hand, it can be cumbersome to write multi-select multi-join queries without having to test and retest different components in isolation of the main query.

DataGrip gives you a truly interactive environment from which you can write your queries, with autocompletion based on both your SQL dialect and structure of your database. One very cool feature is that you can test nested queries in isolation with just the tap of a hotkey (cmd-enter on a mac).

Executing a nested query.

In addition to just executing you can also obtain an explain view of your query, allowing you to identify any spots for effeciency gains.

It should also go without saying that all the code warnings and suggestions you may be familiar with in the other JetBrains tools are also present.

Conclusion

It’s always both interesting and a good exercise to see the tools and techniques that others use as well as well as reflecting on whether or not there are better methods of accompishing the same tasks. Hopefully this article provides a few data points in this regard and makes a convincing case as to why we feel that the tools discussed here improve developer quality of life.

Dusan Andric, Team Lead
Software Architect and a full-stack software developer who enjoys tackling all manner of problems. Has a passion and history working in scientific and healthcare related fields. Will yell about the importance of testing. Loves dogs.
Denis Yuen, Software Developer
Back-end developer making sense of a multiverse of cloud technologies, virtualization, infrastructure, and workflow tools. Making sure that the office isn't destroyed to make way for a hyperspace bypass. Also loves travel, good food, and history.