Don’t forget to sharpen your axe

The famous vampire hunter Abraham Lincoln once shared the following drop of wisdom:

Give me six hours to chop down a tree and I will spend the first four sharpening the axe.

I know murdering vampires is not in your immediate plans, and most likely you don’t even have an axe. But we can extract something valuable from this quote for less interesting professions: take the time to learn the tools of your craft.

This is as true for software development as it is for any other craft. Easier said than done, though. Developers have too many tools to learn. So many that it’s impossible to master them all. We have to choose a few of them to focus on. And it’s not as easy a choice as it seems, especially when you’re just starting out. So in order to help, I’m sharing the tools I believe have the bigger impact in making you a more well-rounded developer.

Your main programming language

There’s nothing wrong with being a polyglot programmer. It actually makes you a better developer, because you’re exposed to different ways of writing code. But that doesn’t mean you shouldn’t know any language beyond the basics. You should have a deeper understanding of at least one programming language. Enough for you to feel comfortable writing code using said language without having to Google every minute. It will be a valuable skill when you need to write more complicated software.

Your main framework

Programming languages are cool, but sometimes it’s hard to build something meaningful without frameworks. So it makes sense to properly learn whatever framework you choose as your main framework. It’ll enable you to be more productive and build better applications. You’ll also know beforehand when your framework it’s not a good choice for a project. This will save you from wasting your time building a solution that won’t be that good in the end.

The Command Line

When we’re starting our journey as software developers, the command line seems so intimidating. Everything we do with GUI applications seems so much more complicated to achieve using the command line. But as we get more experience, we realize that the command line is actually much more powerful than GUI applications. It’s just not as intuitive for newcomers. But once we overcome its learning curve, the command line becomes a powerful ally. Fortunately, there’s a free ebook to help us get there: The Linux Command Line. By the way, despite its name, you can apply the majority of its content on macOS as well.


It’s hard to deny that Git is the most important version control system in the world. It’s so important that it’s almost impossible for a professional developer not to know its most basic commands. But there are some lesser-known commands that you should also become familiar with. Commands like git rebase and git cherry-pick, for example. There’s also a free ebook to help you with here: Pro Git.

A relational database management system (RDBMS)

At some point, most applications need to persist data for later use. A relational database is the option of choice in many of these cases. Therefore it makes sense to know better how such a critical piece of the puzzle works. This means that even though you’re probably using an ORM, you should learn how to write SQL. It will allow you to write better queries even when using your favorite ORM.

It’s also important to learn about performance in relational databases. A good chunk of the time spent handling a request in a web application happens in the database. So you should learn how to write queries that don’t take more time than they should.

Another essential knowledge about relational databases is the proper design of their tables and their relationships. If you design good databases, you’re not only improving performance, but you’re also eliminating duplication of data, and securing their integrity.

Your text editor or IDE

There’s no code without a text editor or IDE. It can be something as simple as Notepad++, or something as complex as IntelliJ IDEA. Every day you spend several hours using these applications, so being proficient with them makes a lot of difference in your productivity. To get to that point you should learn its advanced features. Things like multiple cursors, code snippets, split panes, Git integration, and keyboard shortcuts, among others.

You can also improve your text editor/IDE capabilities with plugins. Don’t be shy here, try as many as you can, and keep the ones that make sense to you. It’s surprising how much of a difference a good set of plugins can do.

Your browser developer tools

Modern browsers do much more than just render pages. They offer a powerful set of tools that can make your life much easier. You can use these tools to inspect and change elements in your page, add new HTML or CSS code, debug JavaScript code, analyze HTTP requests, and see how your page looks in different resolutions, among a bunch of other features. So spend some time learning these tools, whatever it’s your browser of choice. And in case it’s Google Chrome, there’s a website called DevTools Tips that can help you with that.

Everyone has gaps in their knowledge

Software development is a huge topic. You can live 200 years and you won’t learn half of everything there’s to learn about it. So don’t feel bad for having gaps in your knowledge. This post was created because I know I need to get better at many of the items above. The only developers that have nothing else to learn are the ones who lie about it. As long as you keep improving, you’re in a good spot.