A Quick Background
Between the years of 2007 and 2011, I attended a small liberal arts college. In 2011, I obtained a Bachelor of Arts in Computer Science, accompanied by a minor in Mathematics. These were not specialties of the school I attended. In fact, my graduating class had less than 10 members that were part of my Computer Science cohort. So why would I go to such a school to study Computer Science? Well, the fact of the matter is that I didn’t go there with the intention of studying Computer Science. While computers were always an interest of mine growing up, I went to school with the intention to pursue a career in a softer field. However, when the market crashed in 2008, I made a prudent decision to pursue a career in Software Development in order to secure future employment.
Why is any of this relevant? Well, the fact is that I attended a school where we were not only free, but encouraged to pursue multiple different areas of study. After reluctantly taking one mandated philosophy course, I grew to love the subject and quickly filled up my remaining curriculum with as many philosophy courses as I could fit. This has given me a unique educational basis, and, after over 10 years in the software development field, a unique perspective on educational preparation for software development. During my first decade in software development, I was able to quickly take on a leadership role and garner an understanding of the entire process that I rarely see in my peers. Looking back, I believe that it was not my computer science education that has propelled my career forward, but rather my philosophy courses.
What is a Philosophy Class Anyways?
I think that this is important to get out of the way first, because I was shocked by what philosophy courses actually entailed during my studies. I went into my first mandated philosophy course with a stereotypical and biased view of the study; I was expecting a dusty-haired professor, dressed raggedly, smoking from a corn cob pipe and asking, “Why?” What I got, instead, could not have been more different.
Philosophy, at its core, is the structuring of thought. While applied philosophy does try to answer very complex and seemingly subjective topics, such as existence, aesthetics, thought, and morality, philosophy is the tool in which we build up answers to speak to those topics, not the topics themselves. Similar to doing proofs in high school geometry, this involves starting with basic, incontrovertible logic building blocks, and structuring them to reach a logical conclusion. For example:
Logical Building Block: All elephants are mammals
Logical Building Block: No mammals have scales
Conclusion: No elephants have scales
While I think it’s safe to say that nobody in the field is doing their master’s thesis on the scalehood of elephants, it does illustrate what the mechanics of philosophy are. We applied two true statements in order to reach a third true statement. In the future, someone could make another argument that builds on this one. Someone could write an argument that used “No elephants have scales” as a logical building block for something else they’re trying to prove, and as long as my argument stood, their argument would be able to stand on top of it. That’s what philosophy is trying to do. Nothing is taken for granted, and we must start with the smallest of incontrovertible building blocks in order to build up answers to sometimes very complex questions.
When applied to more complex subjects, these thought exercises usually entail challenging biases, ensuring assumptions are valid, and poking holes in the soundness of argument structure. Oftentimes, we might find that we have a belief that has no logical basis or that is hard to justify. We’re encouraged to not only challenge our own beliefs, but to study those of our predecessors in order to build a basis of justifiable beliefs. Over time, studying your own belief systems as well as those of studied historical philosophers encourages the brain to rewire itself in this logical manner.
What does any of this have to do with software development? I surmise that software development, especially in the field of consulting where I specialize, is an exercise in taking novel, abstract problems and breaking them down to their basic logic building blocks. Philosophy trains the brain to think in the way that a software engineer needs to think, learning to focus on the technical nuance and soundness of each building block, while still keeping the big picture in mind.
So is a degree in Computer Science useless? In short, no. But I believe that there are severe limitations to the field of study.
The Newsroom Parable - And why Computer Science Degrees alone don’t prepare you for a career in software development
I want you to imagine, for a second, a newspaper newsroom. In this newsroom, there are reporters and there are editors. Reporters are responsible for writing individual stories or columns. Editors are responsible for proofing, reviewing, and suggesting changes to multiple reporters for their respective sections, as well as creating a cohesive voice for the section that they are in charge of.
This is not dissimilar to the way most tech companies are structured. Reporters would be similar to junior-to-mid-level developers. Their responsibility is typically writing code to accomplish a small or medium-sized goal. Editors would be more akin to team-leads; they have a slightly bigger picture in mind. They were likely, at one time, a successful reporter themselves. They give direction and feedback to the reporters in order to accomplish their team’s bigger goal.
So why are newspapers consistently producing a complete product on a monthly, weekly, or even daily basis, while tech companies are constantly missing deadlines and going over budget on projects? After all, most people in both fields likely have degrees in their respective areas, whether that area is Journalism, English, or Computer Science.
Well, now imagine that the newsroom hires a new graduate. The new graduate had extremely high marks in college and was on the Dean’s list every semester. The editor is extremely excited to get them on board and to have them start contributing. After their first week, it quickly becomes apparent that they can’t really string together a coherent paragraph. They can write a sentence or two, but they can’t really string together anything longer than that without their grammar and sentence flow falling apart. The Editor becomes anxious and frustrated, because they have to learn how to garner some productivity out of this new hire. Upon asking, the new hire simply says “I understand the alphabet and basic sentence structure. I don’t have much experience in writing complex sentences or combining multiple sentences. I can explain the history of the typewriter and printing press, and I can explain how the english alphabet originated from the Greek alphabet, but I can’t really write a column for you.”
Put simply, I feel that this is the level of preparation that recent Computer Science grads have. They are expected to come in and contribute at an acceptable level immediately; after all, they are consistently one of the highest-paid degrees and companies want a return on their money. But typically, studies are largely theoretical and historical. Things like memory allocation, computing history, and dead programming languages are largely useless in a professional setting. Further, curriculums lag behind leading technologies, producing a graduate body of potential hires that has expertise in obsolete technologies. Most importantly, however, is the fact that the dots are never quite connected. An individual might take a database class and understand databases, a networking class and understand networking, a Java class and understand Java, but it’s rare that any exposure is given to putting all the pieces together. They are never tasked with writing a Java program that networks with a database, and connecting those dots is exclusively what professional development is about.
Okay, but how does philosophy help?
So, is philosophy the magic bullet that solves the above problems? Well, no. I think the problems with the way a computer science degree prepares you for the real world only have one solution: extracurricular research, self-training, and an inquiring mind. Taking myself for an example, I estimate that more than 95% of the knowledge I use on a regular basis was learned on the job rather than taught in school. However, I firmly believe that it was my philosophy studies that enabled me to keep learning and breaking down problems at a rapid and continuous rate. So many of my peers treat certain technologies as “Magic Black Boxes”, afraid to peek in and understand their inner-workings. But applying the tools of philosophical thought, it becomes a practiced exercise to break down a concept to its roots and understand how the building blocks of technologies work in order to build a foundational understanding over time.
In addition, philosophy courses have allowed me to interact with clients and project managers in order to quickly understand what they’re trying to accomplish and break it down into technical specifications as I speak with them. After all, clients and business stakeholders deal only in abstract concepts and ideas, whereas computers deal only in concrete logic. Philosophy, as a practice, is the breaking down of abstract concepts and ideas into concrete logic. Being able to do this immediately and repeatedly has proven to lead to success in giving clients the solutions they desire.
While I definitely could not have started my career without the seed that was planted by my Computer Science degree, I believe that Philosophy has been the continuing sustenance that has allowed that seed to grow and thrive in new technologies and new customer fields.
Software engineer
Brad Richards
brad.m.richards89@gmail.com
+1 (847) 770-0318