Let’s talk about reinventing the wheel. A major philosophy I have always believed in is learning as much as you can about the ins and outs of all the tools you use. Peer into the GitHub repos of libraries you use, and try to get a real glimpse at how the gears in the author’s brain are turning.

But most of all, I suggest to anyone who wants a true understanding of the frameworks, libraries and tools they use — build your own. Go ahead, reinvent the wheel.

I hear people talk about reinventing the wheel as if it’s a bad thing, but how else are you supposed to get a real, deep understanding of how these things are built? Building clones of things that are already in existence will help you understand that these frameworks, libraries, programming languages we use everyday are not magic. They have bugs and oddities just like we’ve all written at some point.

When I first started programming, I tried making games. After a while, I realized that I wanted to learn more about how the game engines I used worked internally — how all the interdependent moving parts of the system form a whole. Building my own programming languages made me write more efficient code. These projects may never see the light of day. But building them was invaluable, and shaped the way I program today.