Teach Yourself Computer Science
... or how being an impostor is a conscious choice
Impostors are those who in trying to deceive others, pretend to be someone else. Aspirants are those who have ambitions to achieve something.
On occasions, I deceive myself into believing that I'm more capable than in reality. I don't do this on purpose but rather as a coping mechanism to avoid feeling unequipped. On those occasions I am an impostor.
Feeling unequipped is not unnatural, the deception is. Feeling unequipped is the result of comparing myself to what I aspire to be. When I acknowledge this and work towards improving, I am an aspirant instead of an impostor.
Being an impostor or an aspirant is the conscious choice to either lie to myself or strive to become what I aim to be.
This is a general idea applicable to different aspects of life. What I want to convey here is how elusive this idea was in my aspiration to become a better software engineer.
It took some time to learn how to recognize and avoid the deception. I will explain it's origin and how I was able to remediate it.
The origin of the deception
I wanted to change career to software engineering. The goal was to get a job and I thought the most efficient path to get there was to follow what recruiters required.
It worked well for me, I got the job, so it seemed equally reasonable that to grow in my career I had to continue on that path.
For the next years I focused on learning tools, frameworks and libraries. Again it worked well, I got a better job.
The origin of the deception was the result of the apparent success and the quick "wins" some tools would appear to give me. Once originated, lies like this would fuel the deception:
I'm pretty good at this [fundamental concept] already, let's learn some [sought after tool] instead
- Me, the impostor
Any harmful deception contains some truth, that's why they can be pervasive. Learning those tools seemed to be making me a better engineer. Not that I cared to check if this was in fact the case, reality was reinforcing this deception and I was happy with it.
...until I was not.
It turns out that reality can crown or crucify you. Reality was not kind anymore, it showed my inability to solve complex problems. The difficulty of the trade started to outpace my skills and I could barely get by. Unhappiness and frustration began to creep in.
What type of software engineer are you?
For me, git has always been magical. A piece of software that solves a complex problem that has a huge impact on its users.
The trajectory of my growth gave no indications that I could ever reach a point where I could build something like that. Hence, I concluded that I was being an impostor.
The important part now was to understand why I was being an impostor. The problem was not aspirational or motivational, I was putting the effort into what I thought was necessary.
The answer came one day as I read this article and it all clicked:
There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they're familiar with a few high level tools.
Aha! That was me! I was the guy familiar with some tools but unable to do challenging, innovative work, like git. That article described what I was dealing with and how to fix it: Teach Yourself Computer Science!
Check your trajectory
It's almost certain I will never build something like git, but as long as I'm working towards that aspiration, I will not be an impostor.
- Me, the aspirant
There's a lot of work to put into this. But the good thing is that I don't have to learn everything to benefit, as long as the trajectory I am on is the correct one. In fact, learning fundamentals has applications to problems I deal with daily. Everyday I become a better software engineer!
This is not to say that tools are not important. Libraries and frameworks increase our productivity allowing us to build more and faster. But big and beautiful ideas are at the foundation of computer science. Unlike modern tools, they have been around for decades or centuries and provide excellent return on the time I invest in studying them.
I am currently focusing on Computer Architecture and Programming. I have learned much in the last months. I am on the trajectory to become an engineer who thrives and can do challenging and innovative work.
That is my aspiration and as long as I'm on that trajectory I know I won't be an impostor. To help keep me on the trajectory, I record the journey to teach myself computer science:
- The Elements Of Computing Systems