Some of the Best Coding Tools Aren't Coding Tools

craser

Chris Raser

Posted on November 28, 2017

Some of the Best Coding Tools Aren't Coding Tools
"That which hinders your task... is your task." -Sanford Meisner
Enter fullscreen mode Exit fullscreen mode

Okay, so you've got Sublime cooking, IntelliJ is a seamless extension of your will, and Charles is watching your web traffic. QUnit, jUnit & Jenkins have teamed up and have your back like the little floating "bit" from Tron.

Good start.

But some of the best coding tools out there aren't specifically coding tools. Let's talk about those.

Password Manager: Test logins, addresses & credit cards.

You're already using a password manager to hold your credentials for your dev box, test server, Jenkins, Jira, Splunk, GitHub, StackOverflow, and the dozen or so other logins you need to do your job, right? Good.

It can do more.

When I need to test with a certain type of account, I have one ready to roll in 1Password. Ditto for fake MasterCard, VISA, AmEx, and PayPal accounts. If I need to test the international shipping form, I have addresses for Antwerp, London, Beijing, Dubai, Lima, Seoul, Harare, and Vancouver. No more copy & paste, no more typos.

No, this is not a substitute for actual automated testing. But it seriously helps when you get a note from customer service saying, "Drop shippers can't use the international shipping form! Help!"

Snippet Tool: Code boilerplate, branch names, ticket links, etc.

TextExpander, Breevy, and Alfred are perennial favorites in this area. Dash is also popular, and IntelliJ and other IDEs have good built-in support for snippets.

They're all good, but I like TextExpander, mostly because it has a lot of great functionality built in, and lets me use my snippets in any app on my machine.

TextExpander runs in the background and listens to your keyboard input. When you type a particular string, it instantly replaces it with a stored value. For example:

I type... I get...
tstampx 2017.11.28-12.21.48
todayx Tuesday, Nov 28
yesterdayx Monday, Nov 27

I also use it for typo correction:

I type... I get...
retrun return
Chirs Chris

You get the idea.

java.text.DecimalFormat uses the symbol ¤ to indicate where you want the locale-specific currency symbol. Do you know how to type a ¤? Me neither. So I bound that character as a snippet, and now when I type currx, I get ¤.

I type... I get...
currx ¤

How often do I use that? Rarely. But I never have to look up that symbol again.

When I need placeholder text in web pages, I just type loremx, and I get 200 words of pseudo-Latin nonsense. Simple, but incredibly useful.

The real magic starts when you use TextExpander to run scripts in the background and emit the output. (It'll run shell scripts & JavaScript directly.) I type jtitlex, and TextExpander runs a script that fetches the title of the ticket I'm working on from Jira's REST API. If I type tlx, I get the URL of that ticket. tkx gets me its Jira ID.

Why would I do such a thing? Just think back to every email you've ever received that asked, "What's the status on the frob issue?" When I get those, the first line always clarifies exactly what issue is being discussed, with a ticket number, title, and link to the ticket in the ticket system. That's done using a few TextExpander snippets, so it takes three seconds and I never have to switch windows.

Part of communicating well is quickly clearing away confusion. A snippet tool is a powerful means of making that easier.

I have another script called vm-boilerplate that reads a Velocity template file and generates some Java boilerplate for binding the necessary input values. So I just type vmtx, hand TextExpander the name of the file, and TextExpander then runs my vm-boilerplate script and drops the output into whatever editor I'm using. Works everywhere, less typing, no typos, no missing parameters. (Because after decades of bitter conflict, we still haven't settled the fileName vs. filename debate.)

I also have a little script called tebind that I use to bind TextExpander snippets from the command line, or from other scripts. So snippets don't have to be hard-coded values; I can re-bind them on the fly based on other processes.

TextExpander is far more than just a text replacement tool. Its scripting capabilities let you automate any quick information lookup you do, or to trigger scripts that automate text generation.

To-Do List Manager: Keep your act together.

The choice of what to-do list manager to use, how to use it, or even whether to use one is a hugely individual one. If your system works, I'd never presume to tell you how to improve it.

I use OmniFocus, but there are lots of good options out there. For years, I used a Moleskine datebook, and that worked great. I also used Things for a while, and liked it. And there's a great note here at dev.to about building a great system right into Gmail.

For me, it's invaluable to be able to hit Alt-space, type in a to-do item & due date, and then get back to what I was doing. This is awesome in meetings. I can quickly capture all the stuff I need to follow up on without losing track of the conversation.

And I don't just put my to-do items in there. I also enter items like "Expect data flow chart from Thor" with tomorrow as the due date. That's my reminder to check in with Thor if I don't get that chart I need.

And once it's on my to-do list, I completely clear my mind and get back to what I was doing. OmniFocus remembers all my tasks and due dates so I don't have to.

In general, I'm a Getting Things Done guy. Use whatever philosophy/method works for you. If you haven't seen Randy Pausch's lecture on Time Management, stop reading this article and go watch it. It'll be time very well spent.

Application Switching & Automation

Here, I like Alfred, but there are free options out there that are just as good. (I use Alfred for other stuff too, so I've elected to pay for the license. I have it, so I might as well use it.)

I have a set of keyboard shortcuts that launch or switch focus to particular apps. Cmd-Shift-Ctrl-J pulls up my browser. Cmd-Shift-Ctrl-K pulls up my IDE. Cmd-Shift-Ctrl-L opens Terminal. I like this much better than Cmd-TAB. It lets me switch apps purely by muscle memory. (Also: yes, I have chordx bound in TextExpander to Cmd-Shift-Ctrl-.)

The Big Picture

Ultimately, all of these tools are about clearing away organizational and mental clutter so you can focus your attention instead of being constantly pulled into the weeds.

When faced with any hindrance, there are two solutions. One is to sidestep the problem and make it irrelevant. The other is to get so good at dealing with it that it stops being a hindrance and becomes an advantage.

When I first started taking CS classes, I'd hear classmates say things like, "Why do we have to use cvs? Why can't we just keep a copy of the project on the network drive? That should be fine, right?" Having to check files in and out, deal with merge conflicts, etc, felt like a hindrance, and they were tempted to sidestep it.

But we all know that having a version control system is so much better that it simply never comes up for discussion on real software teams. The right solution is to get good at using git/hg/svn that we can reap the benefits with minimal pain.

Effective coding rests atop a foundation of general-purpose organizational and communication skill. If you find yourself constantly pulled away from productive work to spend time on housekeeping stuff, shaking your fist at the sky won't help. What will help is getting really good at that housekeeping stuff so that it doesn't pull you into the weeds any more.

💖 💪 🙅 🚩
craser
Chris Raser

Posted on November 28, 2017

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related