Well, here we are finally at the end of exams, and oh man, it sure has been a crazy semester. I feel like my heart has been racing non-stop since March, and now it actually feels really weird to no longer have any deadlines for a few weeks. I kid you not, every single day has just been doing uni-related stuff – I almost forgot what shows I used to watch! This semester has definitely had its ups and downs, but to be honest I enjoyed every minute – the downs were just part of the adventure. In this post I will discuss four things:
- Am I happy with my choice at this point in Part II?
- A bit about each course
- My thoughts on keeping a healthy mind
- Reflecting on this semester
Have I Chosen the Right Specialisation?
So I think now is the time I ask myself if I actually did choose the right specialisation. Did I mess up? Am I doing something that’s not for me? Am I not smart enough? Should I be doing something different? I often ask myself these questions, but thankfully the answer is, I honestly cannot see myself doing anything different. I am now surer than ever that this is for me. This is where I belong, even if I’m still not as experienced as some of the Java experts in our cohort. Because I have realised now that, actually, it’s not about knowing everything. You know sometimes, even if I’m just refactoring a program a little bit, improving the design, removing duplicate code or increasing the running time or something – or even if it’s the smallest change – when I see my masterpiece come to life, when I watch the design patterns work their magic, when the code pasts the JUnit tests and runs with no NullPointerException… oh man, how do I even describe this feeling? It’s the feeling of knowing that you are doing something you love, and it feels too good to be true. Yeah I know this is sounding really cheesy but I honestly don’t remember a time I was this happy.
I’m not saying that everything’s perfect – but I don’t expect anything to be. Of course there will be things you won’t like, regardless of what specialisation you choose. As long as you like the general idea of where your specialisation is heading, I guess you’ve just got to embrace the imperfections. So here’s a bit about each course I took this semester, and what my thoughts were on them.
- SOFTENG 251 – Object Oriented Software Construction – this was by far my favourite course this semester. The first half is pretty much object oriented design (specifically in Java) and basically the dos and don’ts of OOP. The second half is design patterns and GUI. I absolutely loved the design patterns, I think that was the moment I realised “yooooo software is for me.” They are just so elegant and beautiful, it feels practical and something you would actually use a lot. The GUI stuff is pretty cool too. We learned about Swing and making GUI components. I loved this! It was extremely rewarding to watch my hard work come to life at the end of each assignment.
- SOFTENG 250 – Introduction to Data Structures and Algorithms – I had a lot of mixed feelings about this course. This is a really important paper because algorithms and data structures are basically what software engineers rely on every day for their applications to run efficiently. At the start of the semester (and for most of it), this course was my hardest course. I just couldn’t grasp the concepts very fast. The notation is quite formal, and sometimes I just couldn’t understand the content. I struggled to visualise algorithms or proofs in my head. I spent a lot of time watching tutorials online or reading other sources. It made me feel even worse that many of my friends seemed to be able to grasp the algorithms almost straight away but I had to spend a ridiculous amount of time just trying to understand the smallest things, which to me were complicated, but to many of my friends, were quite simple. At one point I started asking myself “am I just stupid?” and “do I even deserve to do software if I struggle to learn the content as fast as my friends?” along with many other not-so-optimistic thoughts. But I kept trying and trying, and slowly but surely, I became more confident with the course, and believe it or not, by the end of the semester, I eventually ended up admitting that yeah, it was actually a nice course. It sure had its moments which frustrated me, but it was a nice course. Just remember – this was after a LOT of studying and watching tutorials and drawing stuff on a whiteboard. But when you finally understand something in SOFTENG 250, oh man, it just feels amazing. You feel like a boss!
- COMPSYS 201 – Fundamentals of Computer Engineering – so this is a course which you will take with all of ECE (i.e. Software, Computer Systems, and Electrical & Electronic Engineering). I did quite like this course, not as much as SOFTENG courses but I definitely appreciated it. This is a bit more hardware focused – the first half is learning about simple components such as registers, timers, counters, adders (basically the flip-flop stuff from ELECTENG 101 but on another level). The second half is pretty much microcontrollers and embedded systems. For the first half we learned VHDL (which is a hardware description language) and for the second half we used C to program microcontrollers. Both halves of the course were quite interesting, as were the labs. I did not like VHDL at first, because it’s not like your usual sequential programming… everything kind of happens concurrently. But I slowly began to appreciate it after I spent some decent time playing around with it over the mid-semester break.
- ENGSCI 213 – Mathematical Modelling 2SE – this is basically MM2 but with a touch of software. All the other specialisations take ENGSCI 211 (MM2) but we take MM2SE. The only thing that is the same between MM2 and MM2SE is that we all do the Data Analysis module together (which I did not enjoy). Everything else is different – we don’t really do any calculus. Instead we do linear algebra (matrices, matrices, matrices), as well as probability and Markov processes (more matrices). To keep it real with you – I wasn’t much of a fan of this course. The course was reasonable, there was nothing really bad about it – I just didn’t enjoy it as much as the other courses.
Managing Stress
You know sometimes I am guilty of saying this to myself – “what is the point of trying to be good at software. There are people who always seem to know 10x as much as I do anyway.” Guess what, I hear other people saying this too. Now I realise, that thinking this way is ridiculous. I do not define myself by how much I know, or how knowledgeable I am at one aspect of one language. I define myself by who I am, not what I cannot do. I’m saying it again – it’s not about knowing everything. Okay so what do I mean by this?
One thing I have learned after getting to know this awesome whanau is that people come from different walks of life. People have different approaches to common software problems, and it’s part of what makes them who they are. Everyone who is in software deserves to be here – and every software engineer is unique. I love getting to know people who grew up differently, who think differently – people are interesting, you just need be open!
Okay so yes, that sounds like one of those weird inspirational quote mug things you buy from those gift shops. But I’m keeping it real. I believe very strongly that no software engineer is ever going to be obsolete just because “there is always someone smarter” – because guess what, you might think of something that someone else didn’t think of – maybe you came up with an idea which was important to you, or maybe you’re more passionate about one area than someone else, or I don’t know! It could be anything!
The truth is, no one can know everything. In this profession it’s especially true since things are changing all the time. So the best thing to do is to go and explore a language or area that interests you and spend time on stuff that is important to you. Remember, there are many engineers, but there is only one you! Comparing your skills to other people’s, or beating yourself up for not understanding a lecture slide, is only going to make you feel worse.
I still remember how anxious 250 used to make me feel. For a while I doubted my capabilities. Then I reminded myself. Just because I didn’t understand the running time analysis of an algorithm the first time, it did not mean that I am not good enough to be a software engineer. It just meant that on that night, there was another tutorial I had to watch.
If you will choose software, you may have these moments. You will question everything, you will ask yourself “why, why did I choose this!?” But just remember that you aren’t dumb. You’re just new to this.
I think it’s really important to keep a healthy mind. As Edwar said in one my vlogs, sometimes you get given something and you sit down and you’re like “how do I even do this?”. It’s okay to have these moments, and with enough trying, you will get through them. It just requires motivation. This is why the family vibes in software are really important!
Sleep is important too. Of course sometimes, you just can’t avoid it – you’re up late and you want to get that assignment done. But you will be able to think a lot clearer, and you will be a lot less stressed, if you go about your assignment on a good sleep.
Looking Back on this Semester
One thing is for sure – Part II Software is no longer a group of of students who barely know each other. We are like one big family, and we cheer each other on in tough times.
I definitely have made some very special friendships that will last a long time. It is quite surprising that before March, I barely even knew any of the people who I am close friends with today.
Unfortunately, I didn’t have a lot of time to vlog, but I tried my best. Have a watch of the videos to get a general idea of how people found this semester. This brings me to the end of this post, and, the end of Semester One.
Kia kaha,
~ Zain ~