Note: This post will be about my experience studying computer science in Vienna. This means that I will probably leave out problems/thoughts/worries out of the room that people in other geographies may have - partially because I am just not aware of those and partially because they didn't apply to my studies. I still hope that you will enjoy the read.
Go to school, continue studies at university and you will get a good job. It's a simple 3-step process society has come up with to live a "successful" life - at least that's how I've picked it up living and growing up in Austria.
Now that I've finished my bachelor studies, I want to take some time to reflect on the things I have enjoyed or disliked while studying computer science.
Studying at a university comes with a lot of advantages. In this section I want to show some of the main reasons why I would consider doing it again.
Bachelor studies have the nice property that they follow a certain curriculum. You start with programming classes in the first semester, progress to more advanced algorithms in the second semester and find yourself writing distributed system applications in the fourth. All while simultaneously gathering knowledge in other fields like Operating Systems, Networking, Human-Computer Interaction and more.
This cuts out all the time you would need to research online to either build a plan yourself or find one that suits your needs.
University is all about challenges. Exams, presentations, assignments, group projects - everything is a challenge in itself for which you must work hard to overcome those.
But I am forever grateful for these experiences - the night where I didn't know why my implementation of Dijkstra's Algorithm suggested going right instead of left, the hours I desperately tried to find how the solution to a math equation was "easily obtained" as suggested by the textbook or the worries I had when I saw the assignment title "Develop a ray-tracer" despite having no clue how it works (let alone how it should be implemented).
When looking at the field of programming, these experiences taught me a valuable lesson: Nobody knows everything in programming. Instead focus on the core concepts, familiarize yourself with the problem at hand, use the resources given to you (shout-out to Stack Overflow) and just try. More often than not, you will see that trying worked out and you've gained new skills and experiences along the way.
In doing that repeatedly, I have built the confidence to say that I can pick up any languages/frameworks/concepts as long as I just try and experiment.
Universities are usually a confined space in which you wander around from one lecture hall to another. This naturally forces you to meet new people along the way and, eventually, build new relationships with some of them.
And since everyone is studying the same thing (my university had a separate faculty for computer science), the chances are higher to have common interests with the people around you.
I have met quite a lot of boys and girls during my time at university. With some of them I disconnected along the way, with others I have build strong relationships that reach far beyond the confinements of university and the related topics.
Similar to the point above, you also interact with professors, tutors and other members of the university. And in some instances, promising opportunities arise from the conversations you have with them.
I have friends who have landed their first internships through recommendations of their professors. Others got a lead which they converted into stable part-time positions besides studies.
For example, I was fortunate enough to get a free ticket for the WeAreDeveloper congress from our faculty. There I have landed my first internship after collecting some courage to go to a booth and straight up ask for opportunities.
Unfortunately, not everything was a great experience. This section will unveil some which I consider to be the main pain points while studying at a university.
This statement is subjective. However, I am confident in saying that, for most students, computer science is not a piece of cake.
Each semester you get bombarded with gazillion facts, concepts, terms and other things related to your courses. When finals week arrives, your caffeine intake will probably increase by 400% in order to cram in the last details while you sit at your desk late in the night.
If you didn't want to fall behind, you had to work hard. For some the pace was just too quick so they eventually dropped out or put their studies on hold. But with enough ambition, it was possible to win the battle.
As I've mentioned earlier, in university studies you follow a certain curriculum. While this is one of the main advantages it can also be seen as one of the greatest disadvantages - simply because some course materials are not up to date.
One day I was watching a talk given by Sven Peters. In this talk, he briefly
mentions how the waterfall model was oftentimes not suitable as a software development process and that we evolved to other (agile) methodologies. Well, guess what? I learned about the waterfall model one week prior to watching the talk in my Software Engineering class. On the contrary, my exposure to Scrum, Kanban and other methodologies at university was in the form of
one slide in a ~70 slides presentation.
I don't want to put that much weight on this example alone. In numerous instances my classes have failed to even look around to see what the current status quo is - which brings me to my next point.
Most of the time I studied for an exam or worked on an assignment I didn't look at the material that was provided by the professors. Instead, I looked at what topic I need to learn and tried to find videos and resources online - because in most cases they were far superior.
So why would you need the resources the professors have created? For me, the answer is that you don't really need them. I merely used them as reference for which topic we were currently at. I believe everyone can find the resources they need as long as they know what they want to learn.
I never had the impression that I had access to resources that people outside of university wouldn't have access to. You could buy the recommended books (or try to find it in a library), substitute the presentation slides with online articles and watch videos instead of lectures.
It may be my subjective perspective. But I believe that university alone fails to prepare you for the real world in software engineering.
I was fortunate enough to find a job as a frontend developer shortly after finishing my second semester. This way, I was able to develop skills that I would have never picked up to this extend during my studies. Here's an example tweet, touching on my point:
Given that we spend more time reading code than writing new one, I think it‘s a missed opportunity to not teach refactoring at university. My experience is that everything revolved around finishing new projects, never to improve an existing code
Patrick Ahmetovic (@patriscus)
At university, I never had to work on a bigger project, I never (really) had to read code written by others, I never had to resolve merge conflicts and I never even had to create a pull-request when we worked on a project as a team. I could go on but I'm trying to keep myself short.
I would just keep in mind that despite all the things you learn, the real world may present itself to be vastly different.
While I had some unpleasant experiences I would consider my time at university as time well spent. However, I strongly believe that you do not need to get a degree in order to be a developer. At this day and age I would rather see university as an opportunity to meet like-minded people, build the discipline to work on tough topics and develop confidence along the way. You may choose to take those opportunities there, or you might choose to use meetups, platforms (like dev.to) and online classes (like freecodecamp.com) instead - in the end I am certain that you can succeed either way.