School's out!

It was only a few days ago, that I walked out of my last exam, not actually realizing at the time that another year of school had went by. It was a weird feeling, because the two semesters of my second year had been the absolutely most demanding in terms of studying and projects, and now, it’s all done.

As with my first year, I’m going to share the experiences I’ve had in my 3rd and 4th semesters, regarding what I liked and disliked, which courses I have attended and why, my favorites etc. If this sounds interesting to you, do continue down below.

3rd semester

Ah, the 3rd semester. I remember I was both very excited for and afraid of this semester. I was excited, because I was having a course in Android application development as well as Operating Systems, but afraid of the Statistics course (which I later grew to love, who would have guessed?). Here’s a list of the courses I took on my 3rd semester.

  • Introduction to Statistics
  • Compiler Construction
  • Object-Oriented Analysis and Design
  • User experience and mobile application development
  • Operating Systems

I’m not sure whether I have made this clear before or not, but my university uses 2 semesters for a whole school year, where a semester consists of 4, 5 ECTS courses and a single 10 ECTS course. The first period of school is 13 weeks long where all courses are taught during the week. The second period is 3 weeks long, where a single course is taught, primarily consisting of group work. This is where the last 5 ECTS of the 10 ECTS point course go.

I won’t be talking too much about the Compiler and OOAD courses, since they weren’t that great in my opinion. The Compiler course was taught in Java using ANTLR, which itself was fine, but I would have loved to see some assembly and generally a more low level approach for teaching compilers and interpreters, but maybe that’s just me. I would lie if I told you that the OOAD course was anything but a joke, because that’s pretty much what it was, in my humble honesty. The only content of the course was agile development methods and diagramming, a little bit of project management thrown in there, and that’s about it. Now, this would have been totally fine if I hadn’t already attended 2 courses following the same ideas in my first semester. In my opinion, it’s very difficult to teach agile development methods and practices in university, because you never know how your future employer will use them. It is however, a good idea to get a fundamental understanding of their manifesto.

User experience and mobile application development

I really enjoyed the user experience and mobile application development course, not necessarily the user experience part (let’s face it, I’m not really a designer by heart) but more so the practical application development. This was my first time creating any type of mobile applications, so I’m really happy to feel comfortable in the environment now, at least for Android, that is.

Course assignments consisted of an application where the user could play hangman and a final exam project in cooperation with a client, created in groups of 4. I decided to write the hangman application in Kotlin since I was getting fairly bored with Java, and I must say I feel like that made it a tad bit more interesting. (If you haven’t tried Kotlin yet, do it. Seriously.)

We had basic lectures on how to get started with Android development as well as a bunch of lectures concerning UX engineering and design. I have to say that I feel like I was learning the most when I was researching things myself, looking through the Android documentation and the various API’s such as Kotlin etc. The course has given me enough confidence that I feel like, if I really do put the time into creating an application, I could do it fairly well, which is a really nice feeling to have.

If interested, you can see the hangman project on my GitHub and down below I’ll talk a little bit about the iterative development of the user interface of our final exam application. This application was a bit more complex than the hangman one, since the essence of this application was to communicate with special effects weapons (real looking weapons shooting flames, not actual bullets) made out of Arduino boards. At first, it was unsure whether the communication was gonna be based on Bluetooth or WiFi, but later it was decided that WiFi was going to be the final choice.

As seen on the picture below, the user interface of the application started out pretty rough looking, but as time went on, it got more unified and cleaner looking. That was definitely one of our goals, to have a overall design of the application that would look good and feel good when using the application. I’d say we accomplished that pretty well.

Android Prototypes

Operating Systems

I believe this particular OS course was very theoretical, since there was pretty much zero practical exercises, it was all exercises from the course book. Usually, I tend to like the practical side of things more, but I really enjoyed the way this course was laid out. I feel like I learned a lot regarding operating systems in general, things like processes, IPC, threads, locks, mutexes, semaphores, file systems, caches etc. I suppose there’s not too much to say about this course, other than I really enjoyed how it was executed.

The exam was multiple choice questions, 5 possible answers with only 1 correct answer. I’m not gonna lie and say it wasn’t a little tricky, because it was, but I quite enjoyed the exam as well. I’m also really happy that I had this course in advance to the Parallel Systems course in my 4th semester, since I feel like it gave me strong fundamentals before going even deeper into caching, threads and the likes. I’m not gonna say much else about this course, other than if your school offers a operating systems course, you should definitely go ahead and take it.

4th semester

The 4th semester was no joke. It was a lot more demanding than the 3rd and I’m sure I would not have been able to get through it if I hadn’t micromanaged my time like I did.

This semester consisted of 4 obligatory courses and a single elective, which in my case was Artificial Intelligence in Computer Games. Here I’ll be talking a little bit more general about each of the courses, starting out with Linear Algebra.

  • Linear Algebra
  • Parallel Systems
  • Distributed Systems
  • CDIO Project
  • Artificial Intelligence in Computer Games

Linear Algebra

If you’ve read the about page, you’ll know that I enjoy mathematics, so having a course in pure Linear Algebra was pretty exciting. It was however, a little bit more demanding than my first math course (Calculus and Algebra I), but that’s obviously to be expected. It started out fairly basic with stuff like Gaussian elimination, Gauss-Jordan elimination to end out with analysis of periodic functions and Fourier series and analysis. The course consisted of 2 bigger math projets and a homework assignment every week, so nothing special here. I quite enjoyed the course.

Parallel Systems

Parallel Systems was the course that brought fear into every students mind this semester. The grade average for this course was just below the absolute minimum passing requirements, and it was known fairly well because of that. I must admit that I was quite terrified, because not passing a course was not really in my future plans.

Luckily, the professor had revised the course due to the previous years experience. There was now 2 assignments during the course, which seems to have helped, since the grade average increased a lot. I learned a lot from this course, covering POSIX threads, SIMD instructions, OpenCL kernels, OpenMP, MPI and a lot more. It was really nice to finally have some decent low level projects and experiments, which I feel like this course really had.

Distributed Systems

During this very semester, Distributed Systems was also a course that I had to take. To be honest, the contents of the course did not feel that unfamiliar to me, since it was mostly web programming with some server side stuff, together with a lot of network communication. It covered topics like RESTful webservices, RPC (RMI), SOAP, mustache.js and more. It was however very nice to be able to sort of link various clients together with a single backend, for it to actually feel like a real and useful system.

The course consisted of two assignments, one during the actual course and then one for the final exam. My group decided to further build on the hangman application from the previous Android course, and we therefore decided to make a bunch of hangman clients where users could play against each other etc. In general a very fun course to have taken.

CDIO Project

The CDIO Project was probably one of the most fun, yet frustrating courses I’ve taken during my time in university so far. Fun, because it involved development of a autonomous flight algorithm for a drone, frustrating because it’s really difficult working with and developing for drones. CDIO stands for conceive, design, implement, operate and is similiar to the phases of the Unified Process development process.

The problem was to develop an algorithm, that intelligently could fly the drone through a series of 6 rings, each of those having their own specific QR code with values from 0 to 5. To me, it was really fun and interesting to actually develop for a piece of hardware and see what you’ve just created work immediately and I feel like I learned a lot doing it. The frustrating part was that whenever the algorithm was run on the drone, it would never react the same way as it did the previous run.

We quickly found out that the reason for this is due to the drone just not being precise enough. The information that the sensors give are not quite precise or stable enough for the algorithm to always be precise. Unfortunately, we never really figured out a good way to solve this problem, so the algorithm was never very precise, which could be seen at our presentation. Despite the complications regarding the sensory data, I still think it was a great course and learning experience.

Artificial Intelligence in Computer Games

Lastly, the artificial intelligence course. This course was an elective course and I took it because of the fact that it was very hands-on and algorithm based. I felt like I needed some practice writing algorithms, not just practicing the theoretical side of things. Also, I’ve always been interested in AI, so there’s that.

I grew to not really like the course after the first few weeks, because it was just too slow and the professor was putting way too much work into very simple things, but on the other hand it was nice to get some fundamentals refreshed. During the course, we explored algorithms such as DFS, BFS, A* search, minimax, alpha-beta pruning and more. The final course assignment was a perfect-information strategy game of our own choice, and I chose Chess.

I quickly got to understand that making a Chess game and AI from scratch was no easy task and I never really completed it fully. Things such as check and check-mate were missing from the final implementation of the game. This was obviously unfortunate, but the exam went great nonetheless.

What’s next?

After the break is over, I’m starting my 5th semester which is 1 obligatory course called Innovation Pilot and 4 electives, which is really exciting. This is how my 5th semester is looking right now.

  • ▪ Innovation Pilot
  • ▪ Introduction to machine learning and data mining
  • ▪ Big Data
  • ▪ Network Security
  • ▪ Functional Programming

That’s it folks!

I’m happy to have finished my second year of university and having learned a lot doing it. I hope whoever reads this might get inspired in one way or another. I have definitely learned that I should not be afraid of breaking boundaries with the classes and courses that I take.

Thank you for reading.