originally published on the Coding Duck blog: www.ccstechme.com/coding-duck-blog
This article is based entirely on my experience and contains my opinions on the titled subject matter. Many generalizations are made to make the article clearer and more understandable to a wider audience. I understand that on this topic, as with all topics, there are differences of opinions and situations where the general understanding I speak about would be overruled or rendered moot by a specific situation. Please allow me my opinions as I will allow you yours and understand that these generalizations are meant to help with fluidity, readability and ease of understanding.
So we've all heard the arguments around whether or not to pursue higher education in the field of computer science. With the ridiculous amount of boot camps, tutorials, meet ups, conferences, TED talks, free and paid courses and classes, paying tens of thousands of dollars for a formal education seems kind of silly. Allow me to clear the air on this matter as I see it:
That train of thought is 100% correct. But there is a catch that I will explain below.
In terms that I can personally relate to, and many people can understand, I will compare this journey to the same journey I went through learning self-defense.
When I was a kid, I lived in Boston, MA, USA. While there, many of my friends had after school activities they enjoyed. I loved to skateboard, play sports, tinker with machines, you know, kid stuff.
A couple of my friends however, took part in martial arts training, which I thought was pretty cool until they decided they needed a training dummy that could fight back. Hi there.
I had a few friends who did Karate of different types, Shotokan and Kenpo specifically, another who practiced Tae Kwon Do, and another who loved Bruce Lee movies and was obsessed with his legendary master Ip Man, arguably the greatest Wing Chun grandmaster of all time.
What I learned from this experience was that when my friends would spar with me wearing a different belt or outfit than they had for the past little while, I was about to start getting hurt worse...again. But it gave me some valuable experience in how these martial arts approached fighting, body mechanics, leverage, pivot points, balance.
After awhile, I could defend myself reasonably against most of them (albeit I still ALWAYS quite painfully lost, it just took them longer over time), so I went about my daily life, thinking I had a decent bead on things. Then a friend who had always practiced Kenpo wanted to "practice" on me again after a long time of letting my wounds heal (love you Rod). I met him, and he wasn't wearing any particular clothes. In fact, he was shirtless and wearing sweatpants, but his hands were wrapped in a funny way. That was the day I learned about Muy Thai.
What was so shocking about this particular session was that there didn't seem to be any rhyme or reason to his movements. He was constantly stepping from one foot to the other, his timing was weird and, other than his legs, nothing really moved. That is, until he would fire his jab at me, then come in with knees and elbows, feet and hands. When I'd tie him up, he'd move his arms inward of mine, isolate my head, and keep battering me. If I threw him off, he'd kick my shins, knees, or quads, then come flying back in.
When it was all done, I asked him "what belt are you?!? That's the worst beating I've ever taken in my life!"
His response has stuck with me and become kind of a mantra in my life, as well as unequivocally convinced me to join him at the gym he went to: "Where I learn there are no belts or special clothes or anything. In Muy Thai, we don't use markers of rank. Our teacher pushes us to learn what he thinks we're capable of learning, then has us spar with people he thinks we can take, or learn something from without getting killed."
Software development is very very similar. A degree will give you phenomenal training and deep understanding of things like algorithm design, software design, system architecture, programming language design, compiler design, data types and structures, and many other such things. But what it will also give you is a hard and fast bias toward the rules that you learned in school, which are based on the landscape of the day. To go back to martial arts, Aikido is a Japanese martial art that is derived from fighting styles that were extremely valuable in times where being attacked by somebody skilled with a sword was a real concern. Unfortunately, the practice of the art itself still relies heavily on isolating the wrist and throwing your opponent, as if they wielded a sword, which most probably is no longer relevant.
The great thing about learning the art of software development and engineering with a "street fighter's" perspective is that you are willing to, and capable of, adapting to any changes in the tech landscape of the day. Will you take the beating of your life learning this approach? Absolutely. The path will be fraught with much more pain and frustration than if you had learned at an institution. Impostor syndrome will be very difficult to deal with and you will constantly question yourself because there isn't something signed by a Dean hanging on your wall. But I guarantee you this, while all of your colleagues with credentials coming out their ears mumble about how an issue "doesn't make any sense. This just isn't possible for it to be doing this...", you will be the first one to take the project by the ears and think "possible or not, its doing it and we're going to dig into the code architecture rather than our reference books to find out why. Then we're going to fix it." And you will also be the toughest developer in the room, capable of taking the beating of tracing and fixing an "impossible" issue far better than your contemporaries.
But remember this, always remember this, those with a formal education can still kick the royal crap out of you in highly technical environments where the established rules are the end-all. Always be willing to learn from them and expand your repertoire of tips, tricks, and understandings because while that $80k education is overpriced, it is millions of miles away from useless. If you are the thai fighter of programming, realize that your strength comes in dealing with the unconventional with ruthless efficiency and merciless pursuit of making the product do what is required of it. However, you must submit to the fact that your strength and toughness are not always necessary or appropriate. Yes, it is more impressive to smash through a brick wall with your forehead, but it is ALWAYS better for everyone involved to just walk through the door. Be humble enough to acknowledge that CS degrees give your colleagues the ability to see doors you are unaware exist. But also be confident that your training has given you a perspective that is not bound by set rules and parameters, but rather a relentless pursuit of "finding a better way". So train on warriors, whether you are after a "belt" or a "title fight" in the next weight class, you got this and the world sincerely needs you.