Do you want to write code faster, with fewer bugs, and feel confident that what you write is good?
Over the years, programming has evolved, and many new platforms and tools have been created. Most of the tools aren’t very useful, but a few are.
Here are the 11 tools that have helped make my programming a bit easier and more successful:
Tool #1: Linting
Every language these days has a selection of Linting tools. These are programs that parse your code to detect and flag best practices. Linting tools enforce consistency of code style among all those in your team, can detect complexity, unused variables, naming conventions, or a long list of other infractions that help you to keep your code clean.
If you’re code environment doesn’t have linting built in, get a better development environment, or install a plugin. Linting is a great tool for improving your programming skills.
Tool #2: Dash
Google and Stack Overflow are great resources for solving quick questions you have about something you need to do but having a local copy of documentation to reference can speed you up tremendously. Dash is a Mac App that lets you search through documentation for various languages and frameworks quickly and easily. It copies them locally so it works when you’re offline too.
Everytime you search online for an answer to a question there are two things that can go wrong:
- You get distracted reading articles, browsing things and loose time
- You get the answer you want without enough knowledge to understand it, copy/paste and promptly forget how it works.
Reading real documentation often forces you to learn something new. Well written documentation will explain things enough to give you a firmer foundation to help you remember it the next time you encounter similar questions.
Tool #3: A Solid Text Editor/IDE
I have been using Atom for the last couple months as a coding editor. I’ve always personally felt that IDEs can often do too much which makes me uncomfortable. Which ever side of the fence you’re on, one thing is clear. You need to get yourself a great editor.
This is the primary tool you use when coding – don’t be afraid to spend a little bit of money to make your life better. Take the time to truly master this tool. Write your own plugins, customize the shortcuts, tweak the theme, read a book!
Tool #4: Vim
Yes, vim is a text editor, but regardless of your editor of choice you should also know how to use vim. Especially if you work on servers. Vim is installed by default on just about every Linux machine, so it’s the workhorse that is very nearly always available for you to use.
Tool #5: Git
There are many methods for managing source code versions. Git is the one you should be using. CVS and SVN are long dead, Mercurial and Baazar lost out to git. Even if you just are coding locally, without any other developers git is a gift that will someday save your ass. There is really no excuse not to have your code under source control.
If you want a GUI for interacting with git – checkout SourceTree.
Tool #6: Commandline
A master of the commandline can accomplish a lot of things with relative ease. One of the nice things about a commandline interface is that if you know how to do something on the command line (as opposed to in a GUI) you know how to automate it or turn it into a script without any additional thought. With a GUI you know how to do something by moving and clicking the mouse – and it’s unlikely you’ll every investigate how to do that task any faster even if you have to perform it 1000 times.
Tool #7: GitHub
You’re using git right? GitHub makes git better in several ways. By adding Issues, Wikis, Pages, you can plan your Todos and publish your documentation. You can easily give access to repos to new people when they join the team, or make things public so anyone can fork your project. Use Github webhooks to plug in and automate your own workflows.
Have a public face to yourself and your company. Github is the first place I look when checking out a potential new hire. Your github profile is the modern extension of your resume.
Tool #8: Newsletters
K, this isn’t really a tool, but I think it’s important. Reading the various Google+ Pages, Reddit subreddits, Twitter, and blogs for the languages, tools and frameworks you use, is simply too much noise to reasonably parse. I suggest signing up for a weekly newsletter instead. A much more reasonable weekly digest of the most important new things will keep you up to date, without sucking up all your time.
Tool #9: Books
Books are often underrated by software developers. Unlike blog posts which are often written quickly and published in the first draft. Books are often written by multiple authors, reviewed by a panel of experts and edited by professionals. These extra filters helps to lift up the quality of content in a book much higher than you find laying around on the web.
If knowledge a $20 book gives you saves you 10 minutes then it’s paid for itself. It’s much more likely that a good book will save you days. A great book could help you double your efficiency.
Tool #10: Continuous Integration/Unittests
I have found that different languages and tools necessitate different levels of unit testing. Python is relatively explicit and APIs are generally consistent – python code usually behaves the way you expect it to. Ruby syntax on the other hand is prone to ambiguity, has multiple syntaxes for the same things, is poorly documented and often implicit in how things work. Even after over a year of full time Ruby development under my belt I trust that any untested code is broken.
Continuous Integration runs your tests after every commit, or every change you make locally. By running tests often you can catch regressions quickly before they become an embarrassing bug.
I recommend using a web service like Travis-CI. Setting up your own CI Server can be a bit of a pain.
Tool #11: Practice
If you hired a coach to teach you how to play tennis, you expect to run drills, learn how to grip, swing, stand and step. You’d hit thousands of balls until the mechanics of how to hold the racket, swing and step become so instinctual that they can be performed without thought. You would practice several times per week, for 1-2 hours each time just performing basic moves. It would be months before you actually are ready to play a game.
Nobody practices anymore.
I believe that deliberate practice is what differentiates an average developer from a 10x developer. Practice with the languages, frameworks and libraries you use and the tools you write with. Every API that you memorize will add up to hours of saved time searching Stack Overflow.
Writing code doesn’t have to be hard. There are a ton of free tools out there that can help you write better code faster.
The 11 tools I mentioned above are the main ones I use on my projects. Give them a shot. They’ll change your coding experience.
What other tools do you use when coding?