As someone being in the software development industry for some time, you most likely have already experienced the one or other hot debate about which IDE is better than another. Similarly to programming languages, frameworks or code style, there are quite a lot of options regarding IDE nowadays and as a result opinions vary. However, it's every developer's own choice which to choose as long as the primary goal of being productive with it is ensured. Most often there are just small things anyways, which help you out multiple times a day and thus make the developer experience a lot better. I want to take a look on some of these things, I don't want to miss anymore in my IDEs in the following paragraphs.
Navigation
Navigating quickly through your project provides you with the ability to efficiently find and look at the right things. Without that capability you would need to manually scroll through dozens of nested folders and hundreds of files to find your way which is definitely not practical in bigger projects. Here are my favourite navigation tools.
Find everywhere
Let's start with one of the most essential things which especially pays off in larger projects, namely the "Find everywhere" functionality. A keyboard shortcut to search a particular phrase in your whole code base is indispensable to me. Remembering all the places a method or object is used in a large code base is often impossible. Without this functionality changing particular interfaces is rather risky when working in dynamically typed languages like PHP or JavaScript like I usually do.
Go to
Another navigation technique I use a lot is the one of jumping to a particular place in my codebase with just a few key strokes. A proper IDE should provide an option to go to a file, class, module or method definition within seconds in my opinion.
Navigate back and forward
I am sure that you have been in situations where you were navigating multiple layers down a code path to grasp the details of a program's workflow. This is usually the case while reading code like during a review or inspection process. In such cases it helps a lot when you have a key combination which easily allows you to jump up and down the call hierarchy.
Code editing
While navigating helps you to efficiently find your way through the source code, a good IDE needs to support you in writing code efficiently as well. Let's have a look on my must-haves regarding this area.
Code completion
Although it can be considered as a "no-brainer" nowadays, it's still worth to mention that code completion and intelligent suggestions will boost your development experience dramatically. Certainly nobody wants to remember the exact name, parameters, return types and what else of each method he/she wants to call in his/her program. A proper code completion function, suggests you the right options for the current context as you type. It often saves you a lot of keystrokes and research on the Internet to understand what a particular thing (like a method, variable, etc.) does and how it needs to be used. Code completion has been an integral part in IDEs for a long time now and even for dynamically typed languages (like JavaScript) modern IDEs can offer you a lot of help.
Moving code
Another simple editing tool I really like is the ability to move lines or blocks of code up or down. To me it's a tiny functionality which I sometimes even subconsciously use while writing code. It often happens that you want the declaration of a variable closer to its first usage or a private method to go beyond a public one. Instead of cutting, moving the cursor and pasting, I like to have a keyboard shortcut for this.
Duplicate
Similarly to the editing function above, also the duplication shorthand is a small improvement which simply eases editing efficiency. Imagine you type out the initialization of an JSON object with hardcoded data. It might be a bit tedious to write all the quotes over and over again. Instead, if you have a simple keyboard shortcut, you could duplicate the first line, where you initialize the first property and then adapt just the keys and values. Although it might not look like an obvious improvement at first glance I encourage you to give it a chance and see whether it eases your editing flow.
Refactoring
The last section I want to look at in this article, is Refactoring. If you care about the quality of your code, Refactoring should be an integral part of your development process. There are some common things you usually do when refactoring code you or someone else on your team has written. Well thought out keyboard shortcuts can make the Refactoring process a bit smoother. I have picked another three, I want to take a look on.
Reformat and optimize
Every bigger project, especially when multiple people work on it, needs to have some conventions. Otherwise quality might degrade quickly. An essential thing is code style and formatting. As developer you want to focus on the problem you are solving instead of making sure whether you have indented that block inside this loop one space too much. Therefore a single action, no matter if it's done automatically or initiated by the developer, should reformat your code according to the conventions you have agreed on. Luckily, almost all IDEs nowadays can be configured in a way to support this and there are even standards and libraries which work among different IDEs to prevent any restrictions regarding IDE choice on your team.
Extract and Inline
It's typical that at my refactoring step, I want to extract certain expressions into a variable, method or constant to give it a name and improve the overall readability of a particular part of the code. In contrast it's sometimes better to save one line of code by removing an explicit variable or method and inline a particular expression. As these are common moves I do over and over again, I like to have an easy possibility to automatically do this extraction without writing the syntax out explicitly. Refactoring often is a step in the development process where you want to test whether things get easier to understand when implementing a particular change or not. Thus, it should not cost much time to do such changes and inspect the result. Otherwise some alternatives won't be tested anymore and you might miss out on improvements which might have made the code quality better.
Conclusion
For the customer the primary imperative is that the software he/she ordered, works as expected. However, it's also important that the software will be delivered on time which requires an efficient development process. We know that without proper tools, engineers can't deliver work in the expected quality in a short period of time as it is desired in nowadays highly demanding industries. For a software developer the IDE is a key tool in his/her work process and thus it might suit his/her needs to be productive. In the end it's about the combination of functionality offered by the IDE and the capability of the developer to use it efficiently.