The Biggest Lie

Lots of good careers require a college degree. Development isn't one of them.

The Biggest Lie
Photo by Jeswin Thomas / Unsplash

I have always loved computers. Ever since I can remember I have been around them, working on them, playing games on them, and just generally kicking the tires to see what I could do.

When I was little my dad worked for the government contractor EG&G doing various things. Being a “computer guy” himself he managed to bring home old parts and machines that his company was getting rid of. Intel 286’s mostly, some old IBM hardware, that sort of thing. It was awesome. Here I was, probably about 6 or 7 years old, elbow-deep in CMOS, learning how it worked. One of the best days of my childhood was when he brought home an old Toshiba T-series laptop.

Not my actual laptop, but very similar. Mine was black, too.

It was heavy, it was slow, but it was mine and I took it everywhere. It weighed about 15 pounds but I didn’t care. I used that laptop for writing my journal, playing DOS games like “Knights of the Sky”, and dreaming up shenanigans in Q-BASIC (notably, a DOS clone that made it look like all your stuff was gone; it was 1998 and it was hilarious). That laptop was really the start of my development journey but it was not a direct line between it and now. There was one big, huge, outrageous lie that sent me wandering into the desert for decades:

You have to be good with math to be a computer programmer.

As I went through high school I discovered something: I hate math. Advanced math made my brain hurt in ways that it had never felt before and sucked the soul out of my ears every time I stepped foot into Mr. Shin’s 3rd-period Algebra II/Trig class. It's a miracle that I even graduated high school considering that to this day I still don’t know how I passed that class. I was one of those people who thought Geometry was one of the easiest classes of my sophomore year, and Algebra II/Trig was one of the hardest of my Junior year. I hated it so much that I stopped taking “real” math classes after that year, instead opting to take Business Math my senior year (and I’m glad I did! Thanks to that class I actually know how to do my own taxes, something that really should be basic general knowledge for everyone but actually isn’t). And my brief college career was no different. Once my year-and-a-half of college was over, the highest math I had taken was pretty much just a recap of Algebra I and II (failed the math placement test, and took remedial math with the rest of us normal non-math people).

It is objectively fair to say that I am bad at math. I don’t want to be — I would love to understand calculus because I love physics and my alternate-reality dream is to be a physicist — but I am. But I am also a computer programmer.

It seems to me that there is a fundamental misunderstanding as to the nature of software development by the general public and probably some within the industry as well. That misunderstanding is twofold: 1) you have to take a computer science course to be a good engineer, and 2) code is just math with slightly different rules. Both of which are patently false. Computer science courses only qualify you to be a computer scientist, not a software engineer. Can a CS degree be beneficial? Yes. Understanding at an intimate level stacks, frames, memory management, being able to speak in binary, and whatever else can be helpful. Is it required? Absolutely not. And code is certainly not just Weird Math. Here is where a certain important distinction needs to be made: code is not math, its logic. Software code is like a bad nested Venn diagram where one circle is inside the other: all software is logic, but not all logic is software, just like some software is math, but not all software is math. To be a good programmer you have to understand how logic works; you have to be able to follow a train of thought or a trail of functions from one end to the other, always keeping the big picture in your head and following its branches logically. You have to be able to reason about how things work and why they might not be working. You have to know basic concepts like why recursion is resource intensive, but not the mathematical proofs behind it. Saying to someone that “you have to know math to be a programmer” is like saying “you have to be a blacksmith to build a house”. Sure, its helpful to know how to make a hammer, but you just need to know how to use it.

This is one of the reasons we have such a shortage of talent in the development world, and probably STEM fields as a whole: we have trotted out these trite axioms with the intention of showing kids what it takes to be certain things, all the while not understanding that we’re creating mental barriers to entry into those same fields. These kinds of falsities exist everywhere:

  • You have to be an engineer to be an astronaut
  • You have to study law to be a politician
  • You need a degree to make money
  • The Browns are a good football team
  • You have to learn piano before learning any other instrument

Most astronauts are military pilots or scientists, not engineers. Geologists, chemists, botanists, teachers, and many more have flown into space.

There are no requirements for becoming a politician. In fact, almost anyone can run for office and win.

Lots of good careers require a college degree. Development isn't one of them.

Piano is good for teaching the basics of chord theory and music theory, but not required. Just like CS provides a foundation for other advanced topics, the piano does the same, just that it's easier to play piano by ear than Python.

It's important to remember that there’s no rule book to life and no instruction manual. What works for one person may or may not work for the next; figure out what you like and just go do it. Don’t give up, don’t let go, and don’t let anyone tell you otherwise.