I finished my studies at Masaryk University about half a year ago. In this very first blog post, I’ll do a bit of a summary of my whole experience. I’ll split it into two parts as there is quite a lot to write, this part covers my undergraduate study, the next part will cover my graduate study. The best way to start is from the beginning, so let’s jump back about six years ago. The year is 2010 and I am on the very first lecture.
My first lecture was about a subject called Induction and Recursion (at least that’s how my university decided to translate the name into English). I didn’t understand any of it. The lecture was about induction and as I had never heard of it before, it was really difficult for me to follow the lecturer. My second lecture was about functional programming and I was as lost as in the first one. The third and the last two-hour lesson was about mathematics and even though the lecturer’s style of presenting the subject matter was amusing, I had a hard time understanding many of his statements. I believe I also took an entrance test in English that day (although maybe it was the day after or the next week). Either way, my first day was rather tough and so I went to sleep that day thinking “I don’t belong here.”
Fortunately, the rest of the week was filled with a lot less difficult lectures and seminars and so my confidence slowly but surely increased. In the coming weeks, I also received results of my entrance test for the English class, which I easily passed. Throughout the whole semester, I was slowly coming to a realization that even the difficult subjects are not so difficult if you take enough time to prepare for them and do your homework (especially in mathematics). The reason why some of the lessons are hard to follow is only partially your fault, some of the lecturers are just not so good at explaining the matter, which is quite understandable.
My favorite subjects in the first semester were, quite ironically, Induction and Recursion and Introduction to Functional Programming. The first of the two taught me about topics I believe every computer scientist should have a basic knowledge of: set theory, formal proofs and introduction to logic. I find especially the first and obviously the last very useful to this day. In Introduction to Functional Programming, I learned about a paradigm I believe I would have a difficult time grasping on my own. I liked the subject so much I enrolled in all follow-up subjects at my university. Java was also interesting although I’d value the subject more if there was more interesting topics in it (in my opinion, it is a mistake to spend three or more lectures on basic control flow statements in a subject that isn’t supposed to be an introduction to programming) and the homework didn’t feel so “artificial” and useless. Lastly, I also quite enjoyed subject called Protection of Data and Information Privacy. I learned quite a lot about basic security and cryptography, which is knowledge any software engineer can appreciate. I passed my first semester without having to resit any of my tests, which obviously made me feel better about myself :)
In my second semester, I was already very well adapted to my university, meaning I skipped a lot of lectures and didn’t think much of not understanding some topic at first. Even so, I had quite a busy semester as I enrolled in quite a lot of extra subjects. The most useful course was Algorithms and Data Structures I. I learned about basic data structures (sets, maps, lists, queues, trees etc., the usual suspects), sorting algorithms, graph searching algorithms, minimum spanning trees, algorithms for searching shortest paths in graphs etc. Some of this is usually something you are already familiar with if you like computer science, but it’s still very useful to formally learn about it. I also took classes in follow-up Java (which was OK), mark-up languages, introduction to C (which I learned to dislike here :)) and more.
I allowed myself a breather in the third semester and only took six classes. The most interesting subject for me was Automata and Grammars as I learned a lot of new information that opens door to many other interesting computer science fields like complexity and recursion theory. One of the most useful things about studying at a university, in my opinion, is that you learn about fields that you had no idea existed. This allows you to solve some problems more efficiently, as the first piece of information you need to solve a problem is to recognize what field studies it. If I wasn’t aware of formal language theory and I tried to implement a simple parser, I might choose a completely wrong approach. In the third semester, I also took advance Java (and even though it is supposed to be studied by graduates, it’s not a difficult subject), which was very useful but had terrible management. I’ll also mention Electronic Document Preparation, which taught me about LaTeX and bibliography, which is useful if you need your publications, resumes and other documents to look professional.
The fourth semester was quite ordinary, I studied UML, design patterns and more theory behind OOP in Object-oriented Methods for Design of Information Systems. I also learned more about functional programming, relational databases and JBoss technologies where I picked my bachelor thesis – thesis management system for Red Hat. In this semester, I failed an exam for the very first time – an exam on Computer System. I am not very good at memorizing and there is a lot of memorizing involved when learning about ISO/OSI, TCP/IP, UDP, DNS and many many other protocols. Fortunately, I managed to pass, while barely, on the second go. At the end of the semester, I applied for an internship at Red Hat where I was accepted.
In the last two semesters, I mainly worked on my bachelor thesis, together with two other students. We decided to use Groovy and Grails, which I think wasn’t the best option when I reflect on it now (mainly because there is rather small community so you can’t expect many contribution down the road). Also, my university supervisor wasn’t very helpful so my advice is to always properly vet your supervisor before you do your thesis under them. One of the best subjects I studied in the last year was Principles of Programming Languages as I learned a lot about history of programming languages and their different types and paradigms. I finished my undergraduate study with my state exam and defense of my thesis and even though I was obviously nervous and was asked questions I studied the least, I passed.
Overall, I rate my study at the Faculty of Informatics of Masaryk University very positively. Besides establishing and extending my software engineering skills, I learned things I wouldn’t have learned on my own that are useful to me even today. In the second part, I’ll go through my study for Master’s degree.