CS Masters, 1 year later

littlereddotdata
7 min readDec 25, 2022

--

Yes, I’m STILL at it!

It’s been more than a year since I last wrote about my experience taking a CS Masters while working a full time job.

Since then, I’ve made progress by completing more modules. There’s been a nice variety (which I touch on later): some subjects I’m already familiar with, some subjects I’ve touched on before but have been able to approach from a new angle, and some subjects I am completely new to. With each completed module, I’m inching closer towards the finish line. It’s a very slow process (most people finish in 2.5 years, and for me I will have taken three years). Patience is needed!

Now that term has ended, I’ve had some time for reflection. My perspectives have changed since last year, which means now seems like a good time to distill these thoughts and compare them to where I was previously

So I thought it would be good to note down these thoughts and share them, again for anyone, including my future self, who is interested in how a part-time masters unfolded over time.

Course load

We have to choose about 5 modules from a compulsory list, but are free to choose a remaining 5 modules from a range of master’s level courses. This is a reasonable amount of freedom. Looking back over my course list thus far, I can mostly group them into a few categories:

Familiar courses

These are courses where I have already interacted with the subject matter in some way. My job is in Machine Learning, so taking subjects centered around data mining, business analytics and machine learning meant that I was dealing with concepts that I knew about from teaching myself on-the-job.

This wasn’t to say that these courses were easy. One hard (but also gratifying) aspect to these courses was being able to approach concepts much more thoroughly than a practitioner normally would in daily work. For example, similarity search is easily implemented in Python’s scikit-learn library, and indeed many times a simple approximate nearest-neighbors index can be quite effective. However, reading about how similarity search has been conceptualised as a problem through academic history, and focusing on how each newer algorithm improves on its predecessor, lent a color to the ideas that I previously only knew how to implement.

Another advantage to taking courses on familiar subject matter was just more chance for practice. Assignments, projects, lectures and quizzes were great ways of revisiting and consolidating some basics through structured practice. When most of your learning has been quite ad-hoc, coming as it does from work requirements you can’t quite control, systematically going through a machine learning curriculum was a bit like replenishing and tidying up one’s fridge / closet.

Fun courses

These were courses that were somewhat adjacent to a traditional computer science curriculum, but were enriching precisely because of that. I did a course analysing the economics of digital platforms (think Carousell or Grab that provide a marketplace for buyers and sellers, or drivers and passengers, to transact with each other). We learnt about frameworks for how to think about the digital trends affecting us, how to view our relationship with technology, and also the incentives and disincentives that drive the different players in the services that we use in our everyday lives.

I also studied how to apply data mining to cancer biology. I have to say, this is the course I am the most proud of so far. I studied biology for my bachelor’s degree, and even interned at a cancer biology lab. Getting to combine two great interests — data and biology — and to see what this can have a real clinical impact, was quite an affirming experience. It was almost like coming full circle. It reassured me that, despite not coming into technology from a traditional route, there is room for making use of whatever background you come to the table with.

Challenging courses

These, quite honestly, were courses that made me feel like I was undergoing slow torture. Upon reflection, most of the toughness came not from the subject material itself, but because of two compounding factors. Firstly, I was completely new to the ideas presented (distributed systems and computer networking, for example, are things that I really don’t have any contextual knowledge of). Secondly, these courses were presented as graduate-level courses. In other words, this meant that we were assumed to have a solid foundation in basics such as concurrency management and operating systems, or how networks operate.

Under such circumstances, I had a few things I could try. I could take a few crash courses on foundational material (which helped), I could ask for help (and thankfully I got the support I needed), and I could make sure that I studied consistently and not let gaps in my knowledge dangerously accumulate over time. But these measures could only take me so far. I found the quizzes and assignments and exams tough despite pouring lots of hours into studying, and I never felt that I really “got” the material. I always crossed my fingers and prayed that I would at least scrape by with a passing grade.

For these courses, I have just chosen to focus on the upsides instead of the downsides. Despite feeling overwhelmed, I always managed to finish the module. I got a grounding in important computer science concepts that I didn’t have before, and I also got a good overview of how a mature academic field (computer networking has been around forever!) has matured and evolved over time.

Senioritis

5/6 semesters in, or 2.5 years out of a 3 year degree program, I’ve gotten more used to the rhythms of how each term unfolds. There are the first few weeks where the pace slowly gathers momentum, three quarters of the way in where lectures, assignments and quizzes start to pile up, and then the final stretch that never seems to end but eventually does.

However, I have to say that squeezing out brain juice to tackle lectures and assignments after a long day, or long week, never seems to get easier. It doesn’t help that, on the job front, I took on a more fast-paced job. As much as I love the new work environment, having to work while you are already running on empty is not fun.

In fact, I’m not sure if I could mentally take another full semester without struggling with some serious “senioritis” (senioritis is a colloquial terms for a mental state that attacks students at the end of their academic careers. Symptoms usually include severe lack of motivation and focus).

It’s just as well that I only have one module left to take. The end is coming just in time.

Changing Perspectives

Last year, I compared my experience taking a structured Masters in Computer Science with learning that same material on-the-job and in my own time. I had been going the latter for a while (taking online courses, spending time in the library on weekends with a textbook) before moving into a more structured program. At the end of that post, I concluded that a structured program was more thorough because of a number of reasons. For one, having exams holds you more accountable to the subject matter; it’s too easy to gloss over the finer points of how a natural language processing transformer works when you don’t have to prepare to answer an exam question about it. For material that takes a significant amount of time to digest (think material in a whole graduate-level textbook), being forced to carve out 10 hours a week to tackle the material, for 3–4 months, while fighting tiredness at the end of the day, is really hard to do without the external accountability of a degree course. I eventually concluded that going for a degree program was useful. It forced me upwards to a level that I wouldn’t otherwise have been able to achieve on my own steam.

Now, a year later, I’ve. developed my thinking around this a bit more. This shift has mostly come from my switching jobs. Now, instead of acting as an internal consultant, I talk to external clients. The company is a lot larger than the ones I’ve been in before. We also work in an innovative product space that pushes out new features quite regularly.

These new circumstances means a few things — with a larger volume of “field engineers”, learning and solving problems is a more social experience. If there is a new product feature or framework, everyone comes with their own questions. There are active, ongoing, discussions. Documentation is actively maintained. There is a crowdsourcing aspect to gaining knowledge that I find useful for opening up approaches that I would not have thought of myself.

Having more people in a similar situation also means that my own questions can get answered fairly quickly and well. This makes for a good support system and it’s been a big help personally when I’ve been stuck on something.

Also, being customer-facing means getting to listen to client’s challenges and to help them solve their problems. Each client operates in a different environment; each has different questions and concerns. The variety of situations forces me to apply what I know in different ways, which is also an effective learning mechanism.

In summary, I’m beginning to see how learning on the job can be effective. The methods used are necessarily different from those in the classroom (no one would want to prep for an exam!). What stands out for me the most is how sociality and collaboration can help tremendously. In the coming year, continuing to learn to make the most of this, and hopefully contributing something back, is definitely something I’m looking forward to.

--

--

littlereddotdata
littlereddotdata

Written by littlereddotdata

I work with data in the little red dot

No responses yet