I am not a poet nor am I prone to making public displays of affection but I can’t help myself. I love you so much.

In the beginning

I’ve always had some kind of tool to help me write code. I’m almost embarrassed to say that I started my life as a programmer with a syntax highlighting text editor and an FTP program. I’d write my code, save it, FTP it to the server, and then run it to see if it “worked”. I know that sounds crazy now but it was the turn of the century and I was young and didn’t know any better.

My first IDE

After a few years of programming like that, I switched to my first IDE. Its capabilities blew me away. I loved its automatic code formatting, intuitive code navigation, auto-completion, Subversion integration, and that it was free. But it wasn’t a perfect relationship. My IDE was slow, ugly, and hard to use at times. We had more than a few rough patches when it threw a tantrum and refused to comply with my commands. The more I grew as a programmer, the more I struggled with its limitations.

When I met you

And then I found you and I fell in love at first sight. When you imported my project from Git and were up and running within minutes, I knew I made the right decision. I dumped my other IDE immediately and never looked back. You can do everything my other IDE could do and so much more. You are worth every penny.

How you make my life easier

You understand that I, like all humans, have extremely limited cognitive capabilities. My working memory is pathetically small and my ability to think is limited and easily exhausted. Unsurprisingly, I make mistakes when I get tired. But you do whatever you can to reduce my cognitive load and that makes us excellent partners.

Your basic features are perfection

For example, if I just type the first couple of letters of something, you suggestion completions. And when I’m trying to remember what arguments to give to a method call, you helpfully show them below my cursor. You’re amazing at refactoring–the best I’ve ever seen. And when I need a hand remembering how something works, documentation, method signatures, and more are just a hotkey away.

You helped me standardize the formatting on my project and wrangle my line endings, file encoding, and convert my tabs to spaces. You take care of all the brackets and code formatting so I can focus on the logic and problem I’m trying to solve.

Your search and replace functionality is powerful, configurable, and lightning fast. I couldn’t imagine it being any better.

Inspections and static analysis

I love your code inspections. You constantly scan my code and point out errors or possible problems. It was humbling to see how many problems you found with my code when I first ran your inspections but you never gloated.

Yet, as good as your inspections are, you also support my favorite third-party static analyzers right out of the box. And I don’t mean a button I can press to run the other static analyzers in a terminal. I mean full integration so they run automatically and appear on my screen like native inspections. Brilliant.

I love that you are helping me rid my world of the ternary operator. It’s a conditional disguising itself as an assignment and I think it’s evil. I know this is my personal pet peeve and I’m grateful that you are configurable enough to find it and flag it any time it appears in my code.

inline if statement not allowed example

Git integration

You help me get along with Git, which is no small feat. When we look back at Git in thirty years, we’ll be baffled as to how such a terrible tool became the dominant version control system. Can you think of another piece of popular software that’s harder to master? Anyway, Git is the best VCS for my needs right now and you help smooth off the rough edges and hide the hideous details.

Your graphical merge conflict resolution feature is amazing. And I can’t imagine what I’d do without the plug-in that periodically fetches from origin and unobtrusively lets me know what’s changed. Thank you.

Testing support

You were built with testing in mind. I can run my unit tests at the touch of a button or hotkey. I can easily run all my tests, or just a folder, or just a file, or just one test or just one test case. You also support more complicated testing setups thanks to your support for unlimited test suite configuration files. And when I wanted to experiment with property-based testing, you were super-cool about it. That’s flexibility.

You are so easy to use

I don’t personally know the people who designed and wrote you but please pass along my compliments. They spared no expense in making you insanely as easy to use, highly configurable, and extremely powerful all at the same time. You get better with every update and I can’t wait to see everything you’ll be able to do as you continue to improve over the next five to ten years.

You’ve helped me increase the quality of the code I write and the speed with which I write it. So, even though we’ve only been together for a couple of years, I can’t imagine my life without you.