Chasing Technical Depth.
Patrick Collison compiled a list of advice that he would give to people between the ages of 10 and 20.
I remember reading that list and feeling a flush of new motivation. I remember sharing with a friend and his response was
this is crazy
Before continuing reading this post, you might want to check it out here.
The first advice he gave was:
Go deep on things. Become an expert.
When I first read those 7 words, I did not know what to make of them. So I skipped them and focused on the sixth advice on the list:
Aim to read a lot.
But since the beginning of this month I have started thinking a lot about what going deep involved. That’s what this post is about.
When I got into programming, I had an idea for a platform to lend anything. I was going to name it Lendese. I thought about it a lot and I had established that I was going to build it, get into YC and grow it.
That was the plan.
Learning HTML and CSS showed me that the browser was canvass and I could be da Vinci if I wanted to be. It was a very beautiful feeling, very much like a super power.
I wanted to build Lendese so I quickly breezed through w3Schools tutorials
I asked people questions about the idea and from their explanations the idea was going to be super stupid given my environment. So I gave up on building Lendese and pivoted to becoming an engineer.
I did a little research on different kinds of software engineers and I decided that I did not want to be a frontend engineer largely because of media queries.
It traumatized me 😂.
I decided to become a backend engineer so instead of learning JS I decided to learn Ruby. So that I could use Rails.
I started learning it, then started blog posts about how Rails was dying and Go was growing so I switched camps.
Learning Go has so far been the best decision I have made in my career.
I learnt how to build APIs with Go, testing, the whole 9 yards and I enjoyed it. I was at the right spot between Ruby and Java in my opinion.
I was enjoying it till the first of this month.
Go gives you a peek into how things ran beneath the surface.
You could look at the source code of the libraries you were using in your code.
Connecting to databases usually involved DB drivers and raw SQL.
To me, that is a level of understanding lower than what most frameworks in other languages would expose to its users. Go exposed them to me and because of that my curiosity was fired.
On the 2nd of this month I started re-learning Maths.
On the 4th of this month I decided to do something wild.
I am going to build a social media app something like Twitter but all the components where going to be written by me. From the programming language that the servers where written in, to the database to the image processing pipeline. Everything.
How hard can it be?
That is a level of depth but I am also going to go a depth lower.
I am going to build an operating system. From kernel to GUI.
And a browser too.
From Julia Evans talk: So you want to be a wizard, I have come to understand and fully grasp a simple but extremely powerful fact.
Computers are not magic! They are logical machines that you can totally learn to understand.
Now I am putting in the work to learn about them.
In case you are wondering: if you came to the realization that going deep was beneficial, why are you just bloggin about it now?
The reason is, for the 16 or so days in between the 4th and today I have been spending a lot time trying to learn Rust to improve an old project instead of focusing on the target.
Happy hacking!