No Such Thing As "From Scratch"

As a college student learning to program, I had a strong independent streak. I wanted to do everything “from scratch” - no libraries, no frameworks, just me and the code. Only later did it occur to me to ask what a programming language was, how it worked and - the question that most threatened my self-sufficiency - who had made them.

As I found answers, I had to admit that I wasn’t doing anything from scratch after all. Instead, I came to understand that the languages I was using were the product of layers of abstraction - from machine language to assembly language on up the scale to the highest-level programming languages. At every step, I realized, some human or humans had abstracted common patterns of use into something more readable, concise or accessible. And unless I wanted to be writing in 0s and 1s, I had to accept these human-built tools.

It was a tough lesson for a independence-obsessed 20-year-old, but slowly I learned: it’s okay not to do everything by yourself. Instead of idolizing self-sufficiency, I became inspired by the idea of collaborative, accumulated creation. Sure, I could spend my life doing things on my own: reinventing the wheel, as the saying goes. But what if, instead, I spent my life learning about wheels and all their mechanical cousins and finding new, creative, useful, beautiful ways to use them? Sure, sometimes that might involve building my own wheel: either to make sure I understood wheels or to make a new kind of wheel. But if I did “invent” a wheel, it would not be because I was afraid to use what others had built.

So I let go of the myth of self-sufficiency and became a grateful heir to abstractions: programming languages, libraries, frameworks. I accepted these tools, and they empowered me to build and create in ways that would have been impossible a generation ago. And that was even better than doing things from scratch.

Written on June 3, 2018