Pursuing a Computer Science degree with ~10 years of development experience


Sustained, structured, motivated learning in adult life

I’ve always been more than a bit jealous of people that can join a hackathon and produce something meaningful, even impactful in 12-24-48 hours, sometimes with limited initial knowledge. I’ve seen it happen in the places I worked at and the industry is filled with many examples, yet it’s something I could never do.

With time I realised that what was bothering me was that I didn’t have a good framework for understanding how much time and effort it takes to acquire new knowledge. It was also difficult to find the right time for the learning process to take place. What would usually happen is that I’d start expanding upon a topic I was interested in (ex: graphics shaders) only to quickly realise there was a whole world of complexity hidden within (graphics pipelines, OpenGL, Unity) which would take me months to understand. At that point, the time I’d already spend seemed wasted as the reality set in, where would I find extra months of free time to gain the proficiency I needed?

Before my first job in the industry, learning was easy. I knew I had some talent for web development from school and wanted to work in the industry so I spent every day practicing HTML, CSS and JavaScript which lead to building a portfolio of work and to my first interviews. But once work started, learning became a chore. I was tied into whatever tech the current company was using and after 8 hours of work I could barely justify spending time keeping up with what was relevant in the industry.

Ten years down the line, even staying relevant was starting to seem impossible. Days spent stuck in meetings, weeks eaten up by Agile dogma (stand-up, planning, grooming, reviews, recaps) made my skills rusty. How could I stay up to date when whatever I learned would rarely be put to use? And how could the new information get a chance to sediment?

While this frustration was building up, I happened to stumble upon an add for Computer Science courses offered by the University of London. What stood out to me was the breadth of topics covered: Virtual Reality with Unity, Mobile Development with React Native, 3D Graphics and Animation, Advanced Web Development with Django. It was a mix of stuff I was interested in pursuing but never had the time and things I’d used but only at a beginner level. Having a guided experience through these topics meant there was less of a chance of starting without having the right foundation and a I hoped that having deadlines and grades would help stave off procrastination.

First steps

Signing up for the degree was a simple matter of filling out forms and submitting proof of identity, prior learning, etc. I liked the fact that they make you sit through an “Orientation Course” which, I suspect, many skim through even though it covers a lot of the gotchas that you’ll likely stumble upon. I’ll list them here in case it helps anyone:

  • There are required modules that you must take before moving up to the next level. Be very careful with this, you could get locked you of Level 5 because you didn’t take Discrete Mathematics for example.
  • Midterms must be submitted by the deadline, if you fail the midterm then you fail the course.
  • If you fail a module, you’ll have to wait one semester (6 months) before you can start it again.
  • The UK grading system is very different from what you’re used to. A 70% mark is considered good and it means you did everything as instructed, anything above that requires independent research. You’re not being punished, they’re encouraging you to do your own research, this is how things will work when you get hired.
  • You’ll have to write a report alongside any work you submit. This becomes a critical skill in the later modules (Level 6) as it can’t be just “I did this, then this … conclusion: it works well”. You must formulate a hypothesis, do a literature review and self-evaluate your work.
  • You must be diligent (or learn to be) because there’s even less hand-holding than with an in-person degree.

In April 2021, I started taking my first modules: “Introduction to Programming I” and “Algorithms and Data Structures I”. Back then, I was living in Prague, having relocated from Bucharest in order to join the Skype team. Studying took place for 1-2h after work and on the weekends. The courses were easy to follow as I was very familiar with what was being taught. At the same time it didn’t feel like I was wasting my time because there was always some deliverable you had to produce which provided a decent challenge, even for an experienced programmer.

ITP1 Game Demo
Assignment for ITP1: A simple 2D platformer game

How the degree took over my life

Taking 2 modules per semester meant that I would graduate in about 6 years, which by the second term was starting to seem to far away of a date. I really enjoyed the learning so I signed up to 4. This was a mistake and by December I was struggling to find time to fit them all in while also working 40h per week.

Time-wise I wasn’t constrained by the weekly lessons but by the assignments. Each semester you had to complete midterm and final courseworks, with each one taking up around 30h to do. These are announced roughly one month before the deadline which means you have to slot in 30h of extra work per week for 4 months a year, that’s in addition to the 10h you’d normally use up on the lessons.

By mid 2022 I was using up both my weekends and vacation days to for college which meant I never really had any downtime. Giving up or slowing down weren’t options because the learning was rewarding so I made a choice: I quit my job in order to pursue the degree.

In the end it took me 4.5 years to complete the degree. I moved back to Bucharest, supported myself through some freelance work, ate up all my personal savings and even lived with my parents for a while.

Was it worth it?

Looking back, I would say that the courses were good but not amazing. A lot of the tutors put heart into making the lessons fun and engaging and luckily for me, those courses aligned with my interests. Ones that stand out are:

  • Mobile Development that helped fill in some gaps in my React Native knowledge and I transitioned from class-based component to using hooks.
  • Advanced Web Development was a decent introduction to Django and REST APIs
  • Databases and Advanced Data Techniques managed to make learning about SPARQL fun, especially once you understand how it’s used in wikimedia
  • Graphics Programming, Introduction to Programming I & II, 3D Graphics and Animation, Virtual Reality and Object Oriented Programming were a great opportunity to code UI and graphics interaction

On the other hand there were a few stinkers as well. I wouldn’t say there were many but for every 4 modules, there’s a good chance that in the 5th one the teacher didn’t care about the subject. Not everyone is going to do well in delivering a lesson in front of the camera though they might be better suited for the classroom. The good news is that most of the problem courses have been since revised so I hope future students will have a better experience.

For me, the real value of the degree lies in the discipline it took to get to graduation, in learning how to push past the comfortable surface of a topic, and in proving to myself that I can still take on unfamiliar subjects and become proficient in them. The knowledge may fade away in time due to lack of use but the learning framework I developed feels like it will stick around.

Why pay for college when I can learn this stuff for free online?

College worked for me not because it replaced free resources, but because it forced continuity, depth, and commitment.

I often struggle to answer when asked this because I feel that whatever justification I come up with will never be enough to convince the inquirer. The short answer is that college provides a framework for learning whereas self-teaching requires a lot of discipline. Things like grades, deadlines, peers sharing experiences, teacher feedback, all help to keep you on track. Also, college doesn’t drip-feed you all the information, you will still have to “learn stuff for free online”.

In the UK grading style, a 70% mark means that you completed a task as you were taught. To go above that you HAVE to conduct your own independent research and top marks (90%+) are only awarded if you can demonstrate industry-level knowledge. You could also ask, “If I already have industry-level knowledge, why take the course?” but the truth is that you have 6 months with a module, the same timespan as most coding bootcamps, in which you could realistically accumulate a good level of knowledge.

This was my experience with many modules. For example, in Advanced Web Development, which is heavily focused on backend development with Django, I got an 84% mark despite having had only experience with frontend programming throughout my career. I pivoted this knowledge to build my final project as a Django application which I continue to develop even after graduation, having turned into TasteMender - a music recommendation service

I think acquiring any sort of knowledge is a difficult process where you’re always taking a gamble. Will the thing you’re learning still be relevant by the time you’re done? What about 1-2 years down the line? Your best bet is to focus on the high level concepts like programming patterns and architecture which are applicable across languages and to accept the fact that learning is transferable, once you learn one language, transitioning to another becomes a matter of learning the syntax.