When people talk about programming they make all kinds of wild comparisons. They talk about jobs and workers and unicorns and they imagine that their metaphors are so simple and they have named their tools so clearly that anyone can understand what’s going on. Programming is fundamentally about being comfortable with abstractions. To some people, when you explain server processes by saying “a worker performs a job” all they can picture is a little man in overalls wiping sweat off of his brow while he completes a difficult task. They want to know what it’s doing, really.

The thing is, the truth is even crazier than the metaphor. What it’s doing is sending little signals over wires and flipping circuits on and off. Computer programming is somehow simultaneously the most real and logical activity and yet complete and utter madness. The entire industry is built on clever metaphors and abstractions. Nothing is actually what you describe it as, it’s just a series of stories we tell to “simplify” things. Sometimes we think of people who can’t understand these things as illogical, they don’t have the reasoning skills to parse it all out, but really maybe they’re just super literal.

As I grow as a developer, I find that I’ve started to understand much more complicated topics much more quickly by really learning to embrace the abstractions. At first when I was in code school I wanted to understand everything down to the most fundamental aspects, then I realized I couldn’t without spending years learning to program in machine code (and even then I’d have to understand the hardware bits to really get it), so I started to just follow steps and patterns. However, you obviously can only get so far with just following patterns. Now, as I grow, I’m getting to ask the difficult questions and really try to understand things again and the more I understand and embrace abstractions, the better I get.