Software Industry vs Software Education
I’ve decided to put pen-to-paper (keyboard-to-markdown?) on a rant I’ve given to friends and colleagues numerous times since my University career ended. I want to talk about what I like to jokingly refer to as “the ticket to the industry”: the Bachelor’s Degree.
If you pull up a software dev job posting and check the requirements, there is a ~99.999% chance that one of those requirements is a “Bachelor’s Degree in Computer Science or a related field”. If you’re lucky, it will add “or equivalent experience”.
My Bachelor’s Degree
During my undergrad, I hated pretty much everything about school. I knew I loved Computer Science, and I was utterly committed to completing my degree, but I barely made. The system really felt like it was a carefully designed torture chamber made just for me to pay thousands of dollars to suffer in.
I loved so many of the concepts and subjects I was learning in Computer Science and Math. However, particularly for Math, the shift in priorities coming to University were a shell shock. The goal of these classes didn’t feel like learning anymore; they felt like a game to achieve the best mark. It was a game I sucked at. I don’t think there’s any words to effectively describe how bad I was at exams. I never properly learned how to cope with my intense distractibility and struggle to focus throughout school, and my memory for concepts I didn’t deeply understand was incredibly fragile. My success in any courses, even Computer Science ones, hinged almost entirely on what percentage of the mark was derived from exams. Even worse were the courses that required you to pass the final exam to pass the course (this is the worst of the “torture chamber designed for me”). I failed 2 classes, both through final exams alone: Object-Oriented Programming (which I had done extensively even then, but croaked writing Java on paper), and Probability (which terminated my then-burgeoning interest in Data Science).
I wouldn’t think so much about the good old torture chamber now, considering I’m years removed from receiving my degree, but I am constantly upset on reminder of what university could have been for me. My passion has shifted from just Software Development to deep Computer Science. My fiancĂ©e loves to poke fun at me for reading basically only CS textbooks, and my spare time is often spent learning about increasingly deep computer science. While I was in school, all I could feel was the stress-rage-hybrid of looming exams, and the intense desire to be free and get what I really wanted; a job as a software developer. I’m so grateful to have achieved that goal, but I still can’t help but think about how different my life would have been if I hadn’t had to go through something I was so bad at to get there.
Believe it or not, this article is not just for me to complain how much I hated university and exams (although it was cathartic to write, and I’m leaving it in). Despite how much I hated it, I really can’t blame University for being… University. The validity of the post-secondary system isn’t really the dialogue I’m going for (at least today). The real point here is that University was simply not for me.
University wasn’t for me, but what choice did I have?
I was lead to believe that University was the only way to get into the software industry. When it came time to decide my future, there didn’t seem to be an alternative. Even going for college seemed like a death knell for your chances to break into the industry, and I couldn’t even fathom trying to get in as a self taught developer. These were obviously not true then, and are even less true now as the narrative around alternate paths to the industry has improved significantly. At the time however, I hadn’t connected to any tech communities even online, and was far too sheepish to reach out for mentorship. My pipeline to the industry was driven largely by how my high school directed me and my vapid attempts to make video games on my own time. I could only consume the information and assumptions that were easiest available to me. It sure didn’t seem like bad information at the time either; every job posting I checked required a Bachelor’s Degree. EVERY one. It sure seemed like my only course of action.
Disdain for Bachelor’s Degrees
I have been waxing lyrical about my own woe-is-me relationship with University, but I’m not alone. The glorified engagement farm widely known as tech twitter has been firing away the catchy tweets about how they got into the industry without a degree, or vaguely asking whether the twitter verse thinks a degree is required to get a job as a developer. (I guess I shouldn’t be so cynical about it, they are generating infinitely more clicks than this blog with no SEO will).
I’ve spoken to many of my peers and colleagues in the community, and an anecdotally common sentiment is that they feel university did not prepare them adequately for the “real world” of software development. Common misgivings were the outdated technology used in courses, the heavy requirements for seemingly unrelated maths, and lacking guidance on realistic software industry skills (source control, software architecture, web development tooling).
It seems like so many people are on the same page about this in their own way: what is taught for a Bachelor’s Degree seems to be heavily at odds with the standard industry requirement for it.
Do universities need to “get with the times”?
You could get upset at post-secondary programs in general. Perhaps these programs need to teach more applicable, employable skills. Maybe they should be directing student learning toward more practical topics to increase their confidence to enter the industry. If these classes aren’t teaching students what they feel will be useful for their jobs, then what’s the point?
The counter to this is often to espouse the value of foundational knowledge. The things you learn in University may not be things most folks will do day to day in their careers, but these fundamental concepts are an effective way to become a well-rounded developer.
So which of my strawmen is right?
SIKE, they both are. Sort of.
The modern software industry
Software is a pretty young industry overall, however the prevailing goal of most software jobs has remained relatively constant: to create products that people use. While that goal hasn’t changed much, the tools available to accomplish that goal have changed drastically. The advancement of developer-focused tools and frameworks has lead to a major shift in the kind of skills necessary to get started developing software. The tools at a developer’s disposal have become so sophisticated that they abstract numerous fundamental building blocks that previously required deep knowledge to use. Web application frameworks blur the line between servers and clients; Kubernetes has made distributed systems a game of learning the available tools; UI design suites have broken the barrier between vision and implementation. (Disclaimer: I know all of these are severe oversimplifications). The general theme of modern tools is to abstract difficult foundational concepts to flatten the barrier to entry; your success in these tools would no longer hang on how well you understand the complex technical concepts it abstracts, and instead on how well you can learn the tool (which is usually a far faster process). I’d argue there’s very few tools that have fully achieved that goal, but I can feel the paradigm shift. Overtime, a new vacuum of the industry has formed entirely for talent with existing expertise in these specific modern tools.
Herein lies the crux of the problem; CS programs at post-secondary institutions produce well-rounded software developers who can leverage their foundational knowledge to numerous paths in software development, but their education may not have prepared them for the overwhelming number of jobs that require specific skills in industry tools. So many students simply wanted to start working in the industry, but the industry pushed them toward a seemingly false start.
Software Development as a Trade
I think there’s still a place for University. For these modern tools to exist as monolith abstractions of complicated foundations, there needs to be niche experts to build them. There are still a number of software jobs that would benefit greatly from folks with deeper academic knowledge. Still, a large number of jobs don’t seem to be after academics, rather after software developers as practitioners of a trade. I think framing software development as a trade vs. an academic pursuit serves the needs of the modern industry pretty well. Software development as a trade is more like using the development of software as a means to an end to accomplish business goals. Practitioners of software development as a trade would be trained specifically in the relevant tooling, and their expertise would be catered to the needs of the industry. Software developers as academics, computer scientists if you will, would be the folks doing intense research and studying. They would be the experts building the bedrock of computing, and the tradespeople would be the experts bringing it to wider society.
What would this sort of separation gain us? For starters, there are more paths for future developers to enter the industry. Rather than University seeming like the only path forward, perhaps there could be a shorter trade program, or something like a bootcamp that trains people explicitly to become practitioners; they would start with the basics as any software education should, but provide a more direct path to preparing specifically for jobs in the industry. Such a large number of developers endeavour only to build great things and use software development as their tool to do that; more focused trades programs would get them to that goal faster. It would also increase the rate of new talent joining the industry, and that new talent would arguably be more primed to onboard to the average company building products with popular tools. This would still leave a place for universities not only to continue teaching the important required topics of a Computer Science degree, but even relieves pressure on them to conform to the needs of the industry. Developers with aspirations to learn specifically Computer Science can go into post-secondary, and those interested mainly in Software Development can pursue it as a trade.
I think we may sort of be heading in this direction already; I have never been to one, but bootcamps do seem to be similar in spirit to what I’m trying to describe. I think one of the limiting factors for alternate paths to the industry is the persistent dogma around Bachelor’s Degrees, and the usage of the degree as an arbitrary barrier for new folks to enter the industry. I think the biggest realistic step forward for the industry would be to not only acknowledge the validity of alternate paths, but also understand where they may be advantageous instead of simply settling for them.
If I’m being honest with myself, much of this is pie-in-the-sky optimism; any immediate shifts like this would require disjointed demographics and organizations with different values to somehow shift their priorities in sync. We do appear to be taking baby steps though; there is a rise in vocal self-taught programmer pride, and an increasing number of developers are finding their way into the field through bootcamps and online courses.
To be Fair and Balanced though, this idea would be unlikely to become a utopia. It would help a lot more people enter our industry in ways that suit their goals and learning style, and would allow companies to hire in a way that more directly suits their requirements. However, in our present environment of late-stage capitalism -
I SNUCK AN ANTI-CAPITALIST PREMISE INTO MY BLOG POST
GOTCHA! YOU SHOULD SEE YOUR FACE RIGHT NOW!
In our present environment of late-stage capitalism, we apparently cannot get enough of social and class hierarchies. A field like software development attracts a lot of pearl clutching and vapid gatekeeping. A very loud minority of people are desperate to fight over the definition of a “real developer”, feeling personally offended and protective of the title because some developers never needed to untangle hundred line C++ template error messages. This sort of desperation to attain and maintain pseudo-intellectual superiority over each other would absolutely be exacerbated by a publicly accepted difference between “software tradespeople” and “computer scientists”. In the worst case (and probably most likely) scenario, companies will absolutely eat that up. Whatever their public messaging might be, they would likely use this difference to create new pay hierarchies, and find a metric-assload of creative ways to keep tradespeople underlevelled and underpaid. I think there’s a very real chance it could devolve into a sort of class system among software developers, where university degrees arbitrarily earn smarmy confidence, and higher wages for similar work; arguably, this is even today’s status quo because some people suck.
Conclusion
I don’t know that there is a perfect solution to the problematic relationship between our industry and Bachelor’s Degrees. I’m certainly not one to suggest sticking to something just because it’s the way we’ve always done it, so I can’t help but ideate some perfect balance we may never truly achieve.
If you’ve clicked on this post there is a high chance we know each other and you’ve already heard me say all this, but if not: first of all, hi! Thanks for reading! If you are a new software developer, I hope you don’t feel as trapped as I did when I started, and that you are aware of the paths open to you. If you’re already in University, I hope this doesn’t somehow sour your perspective; I may have hated school, but I still consider it an incredibly valuable part of my life, and I hope it is the same for you. If you’re someone who does hiring in any capacity, I hope this post inspires you, in however minor a way, to critically consider what you look for and how you can adjust to keep yourself open to the talent that’s waiting to find you.
Whoever you are, I hope you took something away whether you agree or disagree. As always, I’m happy to discuss either way, because I don’t claim to be in any way an expert and I would love to hear your thoughts.