New technologies generate a lot of noise as they work their way through the hype cycle and it’s hard for newcomers to figure out what they should learn. Only a small number of these new technologies will survive the test of time, most will be forgotton, but the FOMO is real.
While there’s value in the process of learning the new hotness, I think you’ll see a higher lifetime return when you invest in learning the basic tools of the trade - the skills that you’ll use day in and day out, and skills that will transfer well from one job to the next.
So without further ado, here’s my list of Things Every Developer Should Learn.
- Unix tools
The keyboard is the developer’s primary tool and every developer should learn to use it efficiently which means learning to touch-type using all of your fingers. When you have to think about where the keys are then your brain isn’t completely focused on the code. I don’t care how fast you are with your hunt-and-peck technique, it’s not as efficent as touch typing and it makes you look like an amateur.
Touch typing allows your thoughts to flow freely from your mind to the computer with minimal friction. This unobstructed flow of thought frees up mental cycles to think about what you’re coding, not how you’re inputting it. It conserves mental energy.
Learning to type is easy. With a little bit of dedicated practice each day for a few weeks you’ll be typing 50 wpm before you know it.
You need to be understood.
The ability to express oneself clearly, concisely, and unambiguously in the written word is a superpower in our field. The majority of communication in modern organisations happens through written words: Slack, MS Teams, emails, Jira + Confluence.
When writing, assume that your audience has the attention span of a goldfish. They will skim. Their brains are hard-wired to interpret text as fast as possible, so if your writing isn’t simple and easy to digest then it’s going to be misunderstood. Clarifying those misunderstandings later can take an inordinate amount of time.
Learning to write well takes time but you can put some simple measures in place to immediately improve your writing.
- Read it out loud before hitting “send”.
- Move your question to the front.
- Re-order the words.
- Choose simple words.
- Use the fewest words possible.
- Limit each correspondence to a single topic or question.
Your goal is to communicate, not to win a Pulitzer.
I’m going to assume that if you’re reading this, then you can indeed read. When I refer to reading as a skill, though, it’s primarily about being able to focus on the words or code in front of you; resisting the urge to skim; stopping your mind from inferring content that isn’t there. Read the content deliberately, carefully, attentively.
Whether you’re reading a white paper, technical documentation, or the latest propaganda from your CEO, being able to quiet your mind will vastly improve your ability to absorb the material. Personally, I find it impossible to absorb reading material while listening to music.
Recognise that the author’s first language may not be English, so when the words don’t make perfect sense then seek clarification (nicely and privately) from the author.
Reading code is an extension of this skill. Examine each statement, desk-exec the algorithm on paper if necessary. If all else fails, start a throwaway refactoring to aid in your understanding. Treat comments with a healthy serving of skepticism.
Unix provides a plethora of powerful tools that can produce huge productivity gains for developers. Take the time to learn your shell of choice: command completion, history search, variables, settings, dotfiles etc.
The standard set of Unix command-line tools can be used to great effect for efficiently processing text data: grep, awk, sed, cat, tr, sort, uniq, and pipes, to name but a few. With a little finesse you can take messy inputs and turn them into usable data with just a few moments of thoughtful command-line composition.
Process management, output redirection, network tools - there’s always something to learn. Unix is ubiquitous, and learning what it has to offer will make you a valued technologist.
If you’re stuck on MS Windows then you still have options available to you such as Git Bash, Cygwin, or the built-in Linux subsystem.
You need a scripting language in your toolbelt to automate mundane tasks, whether it’s in your day-to-day flow on your laptop or on remote servers. Sometimes you’ll use it for complex, one-off tasks, or to pre-process a text file to use as input, or to produce a report by pulling data from an API like Jira.
Choose a language that’s likely to be available on the machine that you need it. I’d suggest you learn some basic Unix shell scripting and a higher-level language like Python. The scripting language’s usefulness drops off rapidly if your script needs to download the internet - not all servers will have access to the internet - so try to stick to the core language features and avoid relying on too many libraries. The less you have to install, the better. Less friction, more productivity.