Having recently graduated from college, I wish to organize my thoughts surrounding my experience and what one might expect to get out of pursuing a higher level of education. Hopefully if you are thinking about going to college for computer science, or have a degree you are currently pursuing, you can get something out of these reflections. After completion of my degree there are some observations I had which I felt the need to share, even if its just to get it out of my system.
Self Teaching
Looking online today, one can find a plethora of resources to teach themselves how to program. From freely available books to communities for beginners, there is no shortage of knowledge floating around. However the fact that most of this information is scattered, incomplete, or otherwise out of date can make even knowing where to start difficult. When you pursue your degree there are specific criteria and curriculum developed by a department of educational experts to give you a good baseline understanding for most if not all concepts in the field. While not all topics will be covered, and some older tools and standards may be used, you will effectively know how to learn anything you need to by the time you get your degree. Of course, if you are a motivated individual you can just do it all yourself, but having the structure of an educational institution allows you to focus solely on learning and not have to worry as much about trying to figure out what is important to learn now or what may only be useful later.
Now there is something specific to college that you can’t simulate as easily with self teaching. I think it is somewhat overlooked how good for learning it can be to have a class of peers that you see every day working on learning the same stuff as you. Being able to collaborate, ask each other questions, and build connections are all conducive to good learning. Communication is a skill, and being able to explain concepts to others can greatly help in your own understanding of a concept. While you can certainly make a facsimile of this through online learning communities and courses, you won’t get the exact same outcomes as face to face learning with things like group projects. Personally, I also found learning in a classroom environment more engaging, as having a dedicated place to learn helped limit distractions, though that will of course vary from person to person.
Now while I may certainly feel like there is a lot of shortcomings in pure self-learning, it is also true that even at college you will have to do quite a lot of it. In fact, one of the main things that you learn while at university is how to learn for yourself. Unfortunately time does not stop when you graduate, and new concepts and technologies will inevitably be invented that you will then have to learn how to understand and harness. Being able to transfer the knowledge that you have gained through your courses to then learn new concepts on your own is one of the key takeaways you can get out of college, and you will use the base concepts that you have learned as the backbone of pretty much everything you do going forward, even if it may feel a bit sluggish to learn them at the time. After completing my degree, learning new programming languages is generally just as simple as looking up syntax or memory management differences, whereas before I would have had to learn tons of concepts from the ground up to understand why a language was different from another and how to properly utilize it.
Computer Science vs. Software Engineering
A complaint I often heard as a computer science student was that we weren’t doing enough coding. People wanted Big Projects that would help better understand how to code and write large applications. In reality, quite a few of our classes were focused on computational theory and algorithms, with only one or two classes having the sorts of larger scale projects that were being sought after. I personally don’t see this as a failing of my school’s program, but rather expectations of the students being misaligned with the goals of the classes being taken.
In my mind, I like to think of the software engineer as somebody who is applying their knowledge in the field of computer science to create software, much in the same way that an architect would design a bridge based on their knowledge of physics. While you may not use everything you learned, if you don’t have the requisite knowledge you will not be able to make a program that is “quality” (stable, performant, useful). In retrospect, the times in my degree where we did have large applications to work on, they could be interpreted as a benchmark for how much of the theory you are really understanding. The degree is for computer science, therefore the focus is on the theory and background, not so much the implementation.
Do I think that students would benefit with a bit more application of these theories in their coursework? Yes. Without learning proper ways to apply theories, they stay just as that. Some of the greatest learning moments I had in my education came from having to challenge myself to apply all the concepts that I had learned in a course into one big project. For example, in my Object Oriented Design course, we were required to build a whole digital copy of a board game (Deadwood). In order to do this, we were taught all the steps of designing an OOP application, as well as some general OOP design patterns. After we learned the concepts, we would directly apply them to what we were working on. This solidified the knowledge by allowing students to directly see the why behind everything. And by the end of the class, students had an idea of how to design, model, and implement complex systems.
Though as useful as these sort of implementation-based projects are, they can only be done after a certain amount of learning. After all, it would be hard to describe how a tree rotation works without knowledge of linked lists, and references wouldn’t make sense without knowing things like memory structure and pointers. By deciding to become a computer scientist, you are embarking to better understand the theory behind the implementation, with the implementation being done when applicable to solidify your understanding of the theory. Giving yourself projects to work on outside of class can be thought of as studying the materials you are learning in a way.
A degree isn’t just about what you learned
In the end, it took a lot of time, effort, and money in order to get my degree. Through difficult projects and puzzling topics, I have learned how to persevere and figure things out. And to me, that is a large part of what a degree gives you. Unlike K-12, you can drop out any time you like, and nobody is going to call your mom if you skip class. By sticking to it and continuing to learn, you demonstrate your dedication and responsibility. To me, that speaks more to your character than any project really could.
Though at the same time, it is only the beginning. While your degree may certainly have an effect on your next couple jobs, it does not guarantee that your career path will stay going in the same direction. In this manner, it could be argued that the only thing you learn from your degree that will always be relevant is the dedication it took to get it. There is no shame in dropping out or taking a break from school if you feel like it isn’t working for you and your goals, but no matter what you do in life you are going to have to put in effort at some point. All we can really hope to do as humans is harness that effort in the most healthy ways we can.
Work hard, think hard, and best of luck.