My Computer Science Undergraduate Degree: A Comprehensive Breakdown

I recently completed studying for a Bachelor of Mathematics and a Bachelor of Computer Science. Here I will go through a full breakdown of my computer science degree. This is part two of a two part series, where in the first part I went through my mathematics degree. In this post I will go through and reflect on all computer science courses I have taken including what I learned, what I liked, what I didn’t like and the textbook I used if applicable. All textbooks I have read is available on my goodreads.

Semester 1 2021

The computer science courses in my first semester sit at the two extremes of being courses with the most time spent studying and the least time spent studying.

Introduction to Software Engineering (CSSE1001): This ended up being an incredibly useful course to me. In previous years I had self-taught myself to program in python by completing projects with no theoretical knowledge. I also had programming classes in my final years of high school but the content was tailored to the specific type of problem being solved. This was the first time I saw and appreciated theoretical concepts and why things are done the way they are. Having prior python experience was very useful when it came to the projects, for they were difficult and time consuming in my experience. They were fairly large projects for a beginner and the deadlines made it seem like there was barely enough time to formulate and implement a working solution and then fix bugs which is reflected in the hours spent completing assignments. This course pushed my understanding and comprehension of programming principles and the ideas of best practice and efficiency. I found the problems to be fun in particular in the projects. I largely used online sources for information but John Zelle’s Python Programming: An Introduction to Computer Science was very good and I wished I used that as a primary source more often, if not just to get comfortable with extracting information from textbooks.

Introduction to Information Systems (INFS1200): This was one of those courses where the content is useful and good knowledge to have but I did not find it fun or engaging. The section on SQL queries was good and I had prior experience so it was good to leverage that to learn more about the language and use cases in applications. But the other sections on data flow diagrams and entity relationship diagrams, databse design principles and security were simply not interesting. This attitude is reflected in the textbook ‘Fundamentals Of Database System, 7th Edition’ which I’m sure introduces and presents the information well but isn’t insightful beyond that. This meant I struggled to pay as much attention as I should have and simply lost interest.

Semester 1 2022

For semester 2 in 2021 I took only mathematics, statistics and physics courses so my next computer science course was the first semester in the next year.

Programming in the Large (CSSE2002): This was my first foray into a programming language other than Python. It was nice to be forced to think purely in terms of object oriented programming as well as to think about compilers slightly more. This meant I was able to reinforce previously introduced concepts as well as learn new ideas such as unit-testing while picking up a new language which is always useful. However the content itself was poor. The idea, in my opinion, should be working on large code bases and introducing systems like version control. Instead, it feels like small projects with a huge emphasis on GUI programming which made no sense to me. It didn’t feel like the point of the content should be just for programming GUI in outdated swing library. This quickly impacted my enjoyment of the course. The textbook is the same story; ‘Modern Software Development Using Java’ is a slightly outdated source that takes too long to get to the point.

Introduction to Computer Systems (CSSE2010): I found this to be a difficult course with a lot of content and it was very easy to fall behind, particularly in applying the theory. Despite this I found it enjoyable especially when the content started to click when doing exercises and major projects. Programming a microcontroller was a lot of fun even after spending weeks getting lost in the C and assembly languages feeling like I was getting nowhere. Morris Mano’s textbooks ‘Digital Design’ and ‘Digital Logic and Computer Design’ were good references to look to as well.

Semester 1 2023

Once again, semester 2 2022 was dedicated purely to mathematics courses so the first semester 2023 was my next computer science specific course.

Theory of Computing (COMP2048): I thoroughly enjoyed the content of this course which makes sense since it appeals to my mathematics background. The course covers the topics of Turing machines, Lambda calculus, cellular automata, quantum computation and chaotic systems. Each topic, while explored in a broad sense, was deep enough to appreciate the theory and applications, Sisper’s ‘Introduction to the Theory of Computation’ was also a good source of information.

Semester 2 2023

The computer science courses started getting more specialist from this semester onwards, now exploring topics in a great amount of detail.

Algorithms and Data Structures (COMP3506): This was one of my favourite courses although I did not know what to expect going in. By the end, it really pushed me to deeply comprehend efficient algorithms and the strengths and weaknesses of a large variety of data structures. The assignment tasks in particular were challenging. One of the common criticism I heard about the course was that it was done in Python over something lower and more appropriate. I can see the benefit of a different language, and the course moved to Java in subsequent years, but it was never a hurdle to me at the time. Thomas Cormen’s ‘Introduction to Algorithms’ was a fantastic source of information. I liked the more mathematical theory and language agnostic approach to the ideas introduced. ‘Data Structures and Algorithms in Python’ by Michael Goodrich was also good for applied examples and implementation in python.

Artificial Intelligence (COMP3702): This course was an introduction to agent based artificial intelligence and reinforcement learning. Overall I did not enjoy the course that much and it’s hard to grasp why. The first half covering topics like logical agents, Bellman’s equations, policy & value iteration among others was not well motivated enough for my liking especially in the theory and introducing the topics, although playing around with applied examples was interesting. The second half on reinforcement learning was very useful and something I keep coming back to semi-frequently. But I didn’t have the experience to be able to understand exactly what was going on especially in deep reinforcement learning so the models I was playing with and the reward functions I was implementing felt suboptimal and simply pieced together to me. The problems I was having were also present in the literature in Russell and Norvig’s ‘Artificial Intelligence: A Modern Approach’ as well which added to my frustration. Although I found ‘Artificial Intelligence: Foundations of Computational Agents’ by Poole and Mackworth to be very good and I used this as my primary reference.

Semester 1 2024

Machine Learning (COMP4702): This was probably the course I was most excited to take when I first started planning in my first year. I found this to be a solid introduction to machine learning algorithms on data. A wide number of techniques and models was introduced which was good but also meant very little depth was explored. This was especially apparent in neural networks and generative models. My favourite part of the course was applying these models and techniques to a real dataset. I used ‘Machine Learning: A First Course for Engineers and Scientists’ by Lindholm as the reference. I liked the flow and order of models and techniques and also the fact that it is a modern book. It introduces the mathematical theory and then shows applications in examples. Some of these examples are weird so I would have preferred examples on different datasets.

Semester 2 2024

This was a very machine learning heavy semester and was the last of the computer science courses for me to take.

Pattern Recognition and Analysis (COMP3710): This was a course essentially dedicated to geometric deep learning which was incredibly valuable for my experience. It was refreshing to be learning content that was published in the 2010s and even early 2020s like transformers and specific deep models; a stark difference to my mathematics courses I was used to taking. It really felt like proper science was being done especially in the final project which is available on my Github. I primarily used PyTorch as the framework but occasionally used JAX and TensorFlow since familiarity with different tools is important. I used Bishop’s ‘Deep Learning : Foundations and Concepts’ which was basically brand new at this time and it was a fantastic read.

Design Computing Studio 3 - Build (DECO3801): This was a very different course to what I was used to as it was purely a team-based project lasting the entire semester. It was a good experience to apply the AI and machine learning skills I had developed to build a real application which is also available on my GitHub. Although I learned that raw scientific data is much more my area of expertise and interests rather than product creation. The nature of the projects also meant that we were relying on underlying technologies through APIs rather than directly utilising deep learning techniques.

Statistical Learning (STAT3006): Although a statistics course, the content is too important to ignore so I will talk about it in this section as well. I very much enjoyed this course and found it one of the most useful machine learning courses for learning about the underlying theory of the algorithms and models although I doubt I would find success without other machine learning courses as background. Hastie’s ‘The Elements of Statistical Learning’ was a fantastic resource that I can keep coming back to, although the order of introducing the models, in both the course and textbook, is slightly odd to me. The highlight of the course was delving into high-dimensional statistical analysis. The course was taught using R programming language which I found to be good for doing statistical analysis and having another tool I was comfortable with. I used ‘Practical Machine Learning in R’ as the reference.