Semester in Review: Stage 2 Autumn
A while back, I came across a couple of other blogs by college students reviewing the courses they took over the previous semester. I decided to do the same because it feels like a good way to lend a sense of closure to the semester, especially since exam season was a mad rush without time for much else than revision.
Note: Technically, it’s a trimester here at UCD and not a semester because there’s also a summer trimester that undergrads don’t do. However, I’m going to continue calling it a semester because 1. it feels more natural and 2. Googling “trimester in review” only brings up pregnancy blogs.
Anyway, without further ado, these are the modules I took in the Autumn semester of Stage 2 (in no particular order, of course). Oh, and if you don’t know, I study Computer Science at University College Dublin.
ahem
Core Modules
These are all Computer Science modules that everyone on the course is required to take.
COMP20350 Object-Oriented Programming
This module was previously called Programming in Java and that is exactly what it still is. I’ll be honest: I was somewhat prejudiced against the language, given how a lot of online developer communities/forums give it a hard time for being “old” and “clunky”. After working with it for a couple of weeks, however, I started to actually enjoy it quite a bit.
Java has a decent number of things going for it, but these were the two that stood out to me. First off, the Java API is awesome! There are so many pre-built classes and methods for all sorts of different functionalities, and it makes for a very seamless development experience. Next, IntelliJ IDEA is a brilliant IDE, and that’s coming from a staunch Neovim user. Yes, I know it’s not technically part of Java, but JetBrains have put a lot of work into making the environment feel both professional and intuitive at the same time.
Coming to the structure of the module itself, I appreciated how the assessment was split between many different components: programming tests, individual & group assignments, labs, a multiple-choice final exam, and optional extra credit. It took the stress off of each individual component and tested a wider variety of skills than one big final exam.
COMP20320 Computer Networking
Every semester has one module that will haunt your dreams for years to come. Computer Networking was that module this time around.
To be fair, networking is a super interesting area of computer science. Being a sysadmin, I was exposed pretty early on to the technologies that whirr and hum behind the scenes to make our computer work together. I really enjoyed formalising that knowledge in this class and building it up from the ground, i.e. from physical bit transfer to higher-layer protocols. Even though we barely scratched the surface in terms of how vast the field it (which is true for most undergrad courses), I learned a ton.
Most of the difficulty was a direct result of the assessments. The entire module was assessed entirely based off of a series of multiple-choice tests conducted on Moodle (a Virtual Learning Environment). Looking back through the questions, it wasn’t that any of them were ridiculously hard, but the short time limits of the earlier tests definitely made them seem worse than they were in the moment. Things eased up a bit in the last 2 tests, but I was still shaking when I walked out of the final (thankfully, it ended up going pretty well).
COMP20070 Databases and Information Systems I
On the whole, 20070 was one of the easier modules of the semester. We only covered the basics of SQL (right up until aggregate and set queries); having learned all of the syllabus while doing CS50, I didn’t find it particularly challenging at all. The most valuable part of the class for me was all of the theory underlying databases and good database design. I found relational algebra extremely fascinating and ER diagrams decidedly less so, although I do have to admit they were incredibly helpful for planning out the structure of a database before implementing it.
We were graded on two quizzes and one take-home assignment. Again, I didn’t find any of it particularly hard, but there were a lot of little gotchas and trick questions in the quizzes that you had to be really careful to watch out for.
COMP20020 Digital Systems
Digital Systems was easily my favourite module of the semester. It felt like a continuation of Computer Architecture from last year, except decidely more hands-on. Starting from simple transistor circuits, we worked our way up through the chain of abstraction to a fantasy CPU implemented in Logisim. We didn’t have time to make the CPU ourselves, unfortunately, but I hope to give it a try over the upcoming break. It’s by far one of the coolest things I’ve seen since starting my degree!
My most memorable moment from this class happened while I was working on the third of four assignments, which was to build a Finite State Machine circuit that produces all of the control and input signals necessary for a fantasy ALU to perform an addition calculation with four steps. Until then, I’d understood all the things we covered on their own, but when I watched the FSM and ALU tick through the computation in lockstep, it finally “clicked” inside my head how CPUs (at a super basic level) are able to do what they do. It still boggles my mind, but now it doesn’t seem like magic anymore.
COMP20110 Discrete Mathematics for Computer Science
Just like Algorithmic Problem Solving from Stage 1 (also taught by the same professor), Discrete Mathematics was a crowd favourite. It was an unconventional class to say the least, being focused mainly around logical proofs and a little bit of lattice theory. As a result, it involved a lot of practice solving proofs rather than traditional “studying”.
Going up one level of abstraction in mathematics always feels dizzyingly cool, and lattice theory was no exception. It was insanely cool to see how the exact same theorems applied to both boolean/predicate logic and also the natural numbers: only the operators were slightly different.
We also touched on a little bit of what we do in the sequel to this module, Program Construction I, which is formally prove the correctness of the algorithms that we design. As our professor put it, this series of modules is about “computing” science. To be honest, I really like this sort of theoretical computer science, and I’m kind of sad I won’t get to see too much more of it (unless I pursue a research career, which isn’t currently on the table for me).
Elective
As an elective, I took CRWT20010 Introduction to Creative Writing. It’s what I wanted to take last Spring, but the module had filled up by the time my registration started. As a side note, I still don’t fully understand how the whole module registration system works, but it doesn’t seem wholly fair.
Until starting this module, I hadn’t written anything substantial since high school ended, so I was coming in off of a pretty significant dry spell. Happily, the module was structured in such a way that we only usually had to write 200-300 words per week. This made the whole process much more approachable, and I ended up with two pieces I’m pretty proud of. I’m considering setting up a fiction section of my website, so they might be up there soon!
However, apart from reading, taking this module also taught me things about reading, which I didn’t initially expect at all. I got a ton of great feedback at the weekly writing group meetups (that was the only contact time this module had, no lectures or the like) and mulling it over made me realise how well my classmates and lecturer engaged with my writing while critically analysing it. Being more critical of the literature I consume has been a longtime goal, and I definitely feel like I’ve made progress towards it. I do feel like I could’ve participated more actively in the discussions sometimes, but I’m pretty happy with this module on the whole.
Thoughts for the Next Semester
I realise this post is already very long, so I’m going to try my best to make very brief bullet points about the things I hope to change in/apply to the upcoming semester.
-
Take better notes and take them on paper: I’ll be honest, the only module I took any notes for at all was Discrete Mathematics but it was definitely super valuable. I have a number of very hands-on modules coming up though (DSA and Linear Algebra), and I think paper notes is the way to go for those as well.
-
Making more time to be social: Commuting doesn’t make this easy, but I’ve got to start making an effort at some point.
-
Avoid unnecessary responsibilities: This doesn’t sound great, but hear me out. I took on a lot of extra-curricular stuff this semester purely out of enthusiasm, and it didn’t feel great. I felt like doing the busywork (going to meetings, etc.) for each of these commitments left me without much time to do the actual serious work for them and it ended up being really stressful. I can’t really cut back on anything this semester, so I’m going to have to pull through somehow, but it’s definitely something I should keep in mind for Stage 3. I need to prioritise the things that I care about most and give them my best. Otherwise, it really isn’t fair to anyone involved.
That’s about it for this post. I plan on getting some well-deserved rest over the break, so bye for now!