I Have Heard It All
Throughout the few years that I have been part of the programming echo system, I have heard a great deal of discussion about computer science degrees. And although I don't see myself as a veteran who has seen it all, I do have to say that I might have heard it all.
Sometimes, these discussions go on for hours on end, with both sides making strong and weak arguments with the occasional death threats here and there. But that's the internet. You know how it is. I am by no means a professional. Neither am I a "good" programmer to any extent. However, I think I have a lot to say about this topic since I was directly affected by the lack of a computer science degree and, most importantly, a lack of mentorship. So, I will go in-depth on the pros and cons of both arguments. I will not advocate for one over the other. It is not my intention--neither should it be yours, in all honesty. I'm only here to give my two cents on the matter.
The Separation Between Degree And Education
Whenever the topic of computer science degrees comes into fruition, whether it is good or useless, the argument always seems to stick to one point: The degree itself. While having a congratulatory paper forever cementing your efforts at staying awake for 4 years is a great cosmetic possession, it is a great misconception and a cunning lie. A lie that the student believes and takes to their heart that it is true. Well, what is this lie? The lie is that all will be good after this degree. The student believes that they will go out in the world prepared for any software problem they might encounter. Companies will be all over them, trying desperately to gain their attention because they have a piece of paper with their name on it. Some take it as a prideful endeavor. Something that makes them stand out among others. That argument, I do not and will never understand.
You do not go to school for a piece of paper; you go to school to learn. While that does sound nice, it might not entirely be true. In some countries (like mine), that piece of paper is the only way to get a job as a software engineer. It is not a question of whether you should go to school or not, but rather, it is when you should go to school. While that might not be the case in your country, it is true elsewhere. However, despite that, that piece of paper is of no use to you. To you, as a programmer. Will it get you a job? Perhaps it will improve your chances, yes. But it is not a guarantee. It is only a promise. A promise that you held near and dear to your heart, hoping it is true. In the current job market, this kind of plus is very much welcomed. But do you really want to spend 4 years of your life and flush thousands of dollars down the drain for a maybe?
You see, while a degree might help initially in your efforts to secure a job, it, by no means, will make you a better programmer. It will not give you magical programming powers that will turn you into John Carmack and give you a million-dollar idea. Once again, it is only a promise. There is nothing magical about a promise. What will make you a better programmer, however, is consistency. It is the key to achieving anything. It is the key to improving any skill. It sounds cliche, but if you do something long enough and hard enough, it will pay off... that did sound like a sexual joke, but I will not dig deeper into that.
A degree will not give you consistency. A degree will not give you the will to learn and keep improving. A degree will certainly not give you all the solutions to your programming problems. And this is where I need to establish a separation between a degree and education. A degree is useless, yes, but the education is not. Education is the teachers, the students, the friends, the community, the environment, and anything in between. It is an experience that might very well be worth the effort and the money. Education is what matters, not the piece of paper you will attain at the end of your struggles. The books, the papers, the lectures, the assignments. All of these are valuable tools to a programmer at the onset of their journey. While, yes, the internet is riddled with thousands of learning materials about programming and whatever else, it still will not be of use to you if you find it hard to focus and study. For some people--like myself--it might seem daunting and scary. A mountain so big, you can't even see the very top.
In a way, completing a computer science degree is fueled by peer pressure. Perhaps you are financially strained, and spending money on a degree is a risk, so you are pressured--in a way--to finish it. Perhaps you have very hard-to-please parents, and you wish to make them proud. Perhaps you have friends who also go to the same school, and you don't want to be left out and fail. There are many reasons to feel pressured about this. However, it is in this pressure that a programmer in you is born. With the excess of learning material out there, it is sometimes very hard to find a path and stick to it. You would constantly ask yourself questions. Am I going down the right path? Am I doing the correct thing? Is this really how you would do it? What should I do next? Where should I go after this? Questions that, for a long time, might not have answers. With education, though, these questions might not exist at all. With education, it is like walking down an already-existing carved path neatly laid out for you. Without it, it is like carving your own path that might or might not lead to a dead end. Besides, you are not pressured to finish--or even start--your own path. That might sound like a relief, but for some people, starting out might be the hardest thing to do. While with education, you don't need to think about how to start. You just start.
But carving out your own path sounds enticing, does it not? Adventurous. It feels like you are giving a middle finger to a system that has existed for hundreds of years and more... or it might not sound so exciting to you.
To Each Their Own
School, by nature, is a collective system made to ensure an effective, easy, and cheap method to teach the masses. In the days of old, Socrates, Plato, and other great thinkers used to gather a big circle of young and old disciples eager to hear and learn from great philosophers. It is a public endeavor meant to teach everyone equally. And while that might have worked in the past, we as a society have shifted towards a more individualistic nature. One that adheres to a saying, "To each their own." For example, Sally might like to learn on campus together with her friends and fellow colleagues. She thrives in this environment. She seems to be more focused and enthralled by the material when she is present in that setting. On the other hand, Micheal hates the idea of learning with others. He likes to learn at his own pace in his room, with the lights dimmed and a song by Pantera playing in the background. Even though these two might have vastly different methods of studying, they are both, at the end of the day, achieving the same goals. They are both going down the same road but on different lanes. There is no right or wrong.
Now let us say we decided that Micheal is wrong. His method is clearly terrible, and we should not let him study that way. Instead of leaving him be, we decide to force Mike to study like Sally. The "correct" way of studying. What will happen to Mike? Will he fall in love with Sally and go on to have a loving relationship that will last decades? No. Stop watching rom-coms. Rather, Mike will fail. He will not focus. He might even start to hate everything about the topic he studied. A topic he might have previously enjoyed and adored.
Now, let us switch the roles. What if we forced Sally to study the same way Mike did? The result will be catastrophic. She will fail. She will hate everything about the topic. Just like Mike did. Maybe they can be lovers after all.
There is no denying that schools have benefited our society in many ways throughout the centuries. Yet, we still cannot ignore the fact that it did and will fail many students who adhered to a more "unorthodox" method of studying, much like Mike. Schools force a certain style and path upon students, and they would just have to accept it. That might be fine for you if the style being forced is more akin to you. The same cannot be said for those who do not like that style. Even though a student might be very smart and passionate about computer science, they might very well find it difficult to pass through university. It is not necessarily because they are stupid or they do not have discipline, but rather, it is because they are students who like to learn at their own leisurely pace. They thrive when they are alone and confined to a "studying" space.
However, it is illogical to think that schools should be modeled after these self-isolating students. Not only because they are the exception but also because you would be leaving out the students who do not conform to such a studying style; you would be making the same mistake except in the other direction. Besides, it is way cheaper to have schools that teach in a general style rather than a specific one. Once again, I am not trying to take sides here. To each their own. And even though I see myself more of a Mike, I do not condone or look down upon the Sallys out there.
It is not the way we study that matters, but it is the knowledge we attain that matters. If being a better programmer means you need to be more like Sally, Mike, or Gunther for all I care, then go ahead. So long as you focus on becoming a better programmer and not a person with a degree, then go ahead.
I'm More Of A Mike
The path I took was not out of rebellion. Instead, it was out of necessity. I did not have the money nor the support to go to a computer science school. I hail from a family of teachers and lawyers. We are scared of computers and anything that makes a beep sound. And while my parents were supportive, they did not have the capital to support such an endeavor. So, I decided to try out for a short course that will teach me the basics of programming. Financially, it was a more viable option. The course was only 2 months long. It was only an introduction to programming. The teacher very briefly went over the components of a computer and then immediately moved to teach us basic C++ syntax as well as broader programming topics like variables, loops, conditional statements, and so on. When it was all said and done, it was a good course. I liked the teacher since he was very supportive of all of us. However, even though I enjoyed my time there, I cheated a bit since I knew a lot about programming even before attending the course.
You see, I learned over time that I cannot feasibly focus on a topic unless I do it my own way. If you wanted to teach me something, then you would have to tell me the same thing over and over again until it sticks. And if it is a topic I do not care about, then good luck because nothing is going to stick. Since I know of that, I thought I could dabble a bit on the basics of programming before the course starts. I enrolled in the course in June, and it was supposed to start in July. Meaning I had a whole month to feed myself as much programming information as I could so as not to look like an idiot when I attended. However, to my fortune or misfortune, the course kept getting delayed. In fact, it got delayed for 6 months. The course started in December rather than July. And, frankly, I forgot I was even enrolled in a course. But, throughout that time, I kept studying. Videos, books, and a multitude of useless Java projects. And when the course did finally start, I was equipped with knowledge that many of my peers did not have. I thought the course would be a bore. I already knew everything. What else could I possibly learn from an introduction to programming course? Well, I never said I was smart.
I misspoke earlier when I told you I liked the teacher of this course. I, in fact, love him. He instilled in me the confidence that I still carry with me to this day. He knew that I clearly had an idea of how to write code. And, to be honest with you, I was showing off more than I should have. So, instead of just ignoring me and focusing on the other students, he decided to give me special assignments that were harder. I would go back home, solve the problems he gave to the students, and then focus on the special assignments he tasked me to finish. In retrospect, those problems did not seem hard at all, but, at the time, they were almost impossible. Surprisingly, though, I solved them. Every single one of them. I would submit all the assignments to the teacher, he looked over them, praised me, and then gave me something even harder. I never felt more alive.
Previously, on my initial 6 months journey, I was dismissive of any hard problem. If I encountered even the most simple of problems, I would turn away and leave. That might be more of a personality issue rather than a programming issue, but nonetheless, that was the case. Any problem I came across would be solved using StackOverflow or whatever came up on my Google search. There was no AI at the time, but I would imagine that would have been used as well. However, with the pressure to perform and the enticing feeling of a challenge, that old way was all but gone. I would sit down with a pen and paper and scribble through the problem as I tried to implement it on my laptop. I felt like I unlocked a new way of thinking I did not know about previously. And it is all thanks to that teacher.
I find myself thinking of the alternate reality where the course never started. I never met that teacher, and I never got that confidence or discovered that new way of thinking. Would I have been the same programmer as I am today? Would I have kept programming at all? I was never pressured by anything to start programming. It was my own volition, curiosity, and interest that got me started in the first place. Perhaps my interest would have dried up, and I would have just given up on it. I truly do not know.
So, am I more of a Mike or a Sally? Frankly, I still think that I'm more of a Mike. I might very well be Mike. Yet, I cannot just decline Sally's way of studying. It was clearly beneficial for me to be constantly challenged by that teacher. To be constantly pushed me towards a problem I could have just ignored otherwise. But, at the same time, that teacher was able to do such a thing because the course only had six students. He could focus on each one of us individually without actively hurting any of the students' performances. But I would assume that the same method would not have worked if it were in a class packed with tens of students.
As I'm sure you noticed, I am very stubborn. It is either my way or no way. I prefer it most when I carve my own path. Not only is it more enjoyable for me, but it is also more beneficial. I hate the idea of ever following a certain curriculum and delivering on deadlines. I find that I work best when I'm on my own. Yet, I must admit, there are many paths up this mountain top and I don't mind trying each just to see how it feels.
The Solution Is Not Here
I am not a scholar. Neither am I a politician. I do not understand nor do I care about the intricacies of the ministry of education. My point here was not to find a solution. It never was. I just wanted to give you a fresh new perspective on a matter that I have seen discussed plenty of times. So if you came here hoping to find a solution, then, I'm sorry, the solution is not here. Despite that, I do have a suggestion.
Even though software engineering is a vast topic with a web of complexities, the university should not be the place where you learn everything about programming. It should only provide a starter kit. It shouldn't spend a whole year on data structures. Data structures and algorithms are very important tools in programming, yes, but even the most complex of algorithms can be taught in a few days. It takes a couple of months, perhaps, to get an idea of what they are and what are the most useful, but that is about it. Why spend more time learning about more data structures and algorithms when I can apply what I have learned already to projects I care about? Projects that I am passionate about. It is, I believe, a ridiculous matter to spend 4 years on a computer science degree. Perhaps it might take you 4 years to learn everything. But remember, the university only serves the purpose of getting the engine started. It is not a tome that contains every piece of knowledge you will ever need to know. It is safe to say most of the things you will learn about in university will eventually fade away unless you put that knowledge to the test. The preservation of that knowledge and the improvement of your programming skills should be something you need to work on. And therefore, I believe 4 years is just way too much. It takes decades to become a good programmer, I agree, but it does not take 4 years to learn the basics.
But should you go to university? Should you get a computer science degree? Well, I don't know. All I can tell you is that I learned how to program on my own and make a decent living as a freelancer. If you do have the stable foundation to attend a computer science university, then do it. At least try your hand at it. Yet, if you lack that, then fear not, for there are many other paths to take. The path might be harder and less fine-grained, but it is available. Life will not end for you as a software engineer if you do not have a computer science degree, nor does that degree grant you magical powers. Still, like all things in life, it is not always black and white.
Top comments (0)