In his recent newsletter titled Rob Conery talks about learning the “foundational” skills of the industry. This got me thinking; what would I include on my list of foundational skills?
,In his newsletter, Rob lists five foundational technologies but calls out two in particular that stand out to him:
- Your Editor
- SQL
I’d agree on both counts. Pick a text editor and learn it well. It doesn’t matter if you don’t pick the most popular, or the one your colleagues use. Pick one you like and invest time in learning how to use it.
On my list, I’d add two more foundational skills. These are things that I’ve found myself returning to time and time again.
- Command Line Comfort
- Regular Expression Familiarity
I’ve deliberately avoided saying you need to be an expert in either. We have documentation and the Internet to help with syntax and specifics but familiarity with both is what has given me the confidence to turn to them in some unexpected scenarios.
Command Line Comfort
There is a Graphical User Interface (GUI) for everything these days and absolutely nothing wrong with using one. I use them all the time. However, I often find myself dipping into the command line several times a day.
Whatever you find yourself working on, it’s highly unlikely that it is a self contained system that runs on your laptop. You’ll be deploying your code somewhere. Your code will talk to another service running on a different host. You’ll want to control how your service runs. You’ll find yourself reaching for the command line.
Use cases
- Accessing SSH access to a remote system or container
- Navigating and manipulating files on disk
- Stringing tasks together (piping)
- Tweaking how an application or process starts
- Viewing the logs for a running process
Surprise example
Many of the things I do on the command line feel so mundane that they hardly feel worth a mention. The reality is, these are the things, compounded over the course of a career that have given me the most benefit. But, there have been surprising examples where the command line has come to the rescue.
One of the most surprising examples for me has been using the command line to record screencasts for demonstrations and workshops. Rather than recording a video, there are tools (see asciinema). Think of these as ultra sharp, tiny, copy/pasteable recordings of your screen.
Where to start
Rather than recommend a particular course or blog post, I’m going to recommend some tasks for you to begin with. Even after a couple of decades in the field, I still find myself searching for “How do I do x on the command line?”. Don’t forget to include your operating system of choice in the query.
- List the files on your desktop
- Create a folder and create a file in that folder
- Add some text into the file
- Count the number of lines in the file
- Find lines containing a particular word in a file
- Run an application
- Connect to a remote system
This is just the start. There are all sorts of weird and wonderful things you can do with the command line once you build up familiarity. And no, you don’t need to remember how to do all of this.
Regular Expression Familiarity
Regular expressions (regex, regexp) are sequences of characters that identify patterns in text. They allow you to write more complicated “find” queries. Instead of just looking for strings of text, they allow you to find, extract (and often replace) patterns in text. The ability to work with patterns is what gives regular expressions their power.
You can find regular expressions in your IDE (find/replace), on the command line (using tools like sed
, grep
, awk
, ag
), and in your favourite programming language. They are everywhere.
Use Cases
- Search and replace
- Querying log files
- Data format validation
- Text transformation
Surprise example
My most common use for regular expressions is querying log files. It’s so common that I often forget that I’m doing it. One of the most unexpected use cases came when we mistakenly deleted the inter-store routing information for a large retailer. Without this data, the retailer was unable to move or query stock between stores. Without accurate stock information, they were unable to support online orders, stock refresh, or financial reporting activities. Regular Expressions to the rescue.
We had the log files from the deletion event. Each log line contained the information we needed to re-populate the inter-store routing information. But it was in the wrong format. We used regular expressions to extract data from the deletion log and generate a file to restore the routing information.
We got lucky in this scenario, the deletion logs contained everything we needed. But without regular expressions, it would have taken significantly longer to re-populate the data.
Where to start
- RegexOne - gentle intro
- RegexLearn - jump right in
- RegExr - RegEx playground
- RegEx101 - RegEx playground
Why are these foundational?
My aim is not to suggest that anyone should drop what they are currently learning and focus on picking up these two skills. My advice would be to reflect on the work that you’ve been doing and look for skills or technologies that remain constant between projects or employers. The thing that makes these skills foundational is the fact that they go with you from one job to the next. They are the foundations that you build on for everything you end up doing. Investing a little time developing these foundations while not ignoring the exciting new technology you’ll be picking up on the next project can have significant long term benefits.
Other Skills
In this post I’ve focused on the technical. But it would be wrong to conclude without highlighting that the most enduring skill we can develop is to learn how to work with and communicate effectively with people. Learning how to work effectively with people, including those personalities we find challenging, is one of the most effective things we can do. And for that, there are no tutorials.
What did I miss? What skills or technologies have you found yourself returning to over the course of your career so far?