Roberto is a software engineer at HireArt, a jobs marketplace that uses online challenge-based interviews to match applicants and companies.

A common question people ask after their first programming course is: “How do I keep getting better?” My answer is to pursue projects that allow you to make your unknown unknowns into known unknowns.

What do I mean by this?

First, let me tell you a little about my experience. Before I knew anything about programming everything about it was mysterious to me; everything was an unknown unknown. How does a word processor work? When I open a website, where does the information come from? I had no idea how to get a full answer. It all seemed like magic and the task of understanding how it all worked appeared overwhelming.

During your first course you acquired a great deal of knowledge. For example, you learned that programs are written in clearly defined programming languages. You learned that, before a program runs, it gets translated into instructions a computer can understand. You also found out about if-statements, loops, functions and how assemble them into complete programs. In other words, many unknown unknowns — things you didn’t know existed — turned into known knowns.

But on top of that, some unknown unknowns became known unknowns. You most likely learned that there are special programs called compilers and interpreters that take care of converting the code you write into something a computer can execute. This is remarkable, because now you know that later you can learn about something called compilers and understand exactly how they work.

Why is this a good thing?

Great developers don’t understand every single thing there is to know about programming. Rather, they have a clear, high-level picture of how the different tools at their disposal work in concert. For example, an expert web developer might not know a great deal about cryptography, but she’s aware that it’s hard, and she understands that it’s better to use code created by people who have studied a lot of cryptography instead of trying to write it herself. Without this known unknown, she could have made some serious mistakes. At HireArt, as in any other tech startup, we are constantly faced with new technical challenges. Sometimes the right solution isn’t obvious, but having a very good general picture of the solution space helps us get to it quicker. For example, we use machine learning to improve the way we screen candidates for a specific job. None of us had a deep background in machine learning, but we knew of it, and that it could help us, so we were able to find the right technique quite quickly.

What’s a good way of practicing this approach? Start working on a project.

Now, sooner or later you’ll have to use other people’s code in your own projects. Programmers often encounter the same problems, so they build libraries, pre-packaged solutions to these problems, that they can use in many different contexts. Moreover, these libraries are commonly open source, which means that anyone can read their code and understand how they work.

Libraries work best when they hide their inner workings and let you stay focused on what you’re trying to build. A secret to improve as a programmer is, once in a while, to let your curiosity run free and allow yourself take a peek under the hood.

So choose a library that accomplishes something you’re curious about (say, user authentication) and read through the code. You’ll probably have a hard time understanding all of what’s going on, but soon you’ll recognize the broad strokes of the solution. These are unknown knowns becoming known unknowns before your very eyes!

So remember to keep broadening your picture of the programming world by figuring out first what you don’t know. Then you’ll have a good map to guide you when you’re later looking for detailed answers.

Roberto Thais
Software engineer, HireArt