Completing my BSc in Computer Science was the formal beginning of a journey that had already been underway informally for a couple of years. I'd been writing code since my school years — HTML, then JavaScript, then making things move on screens. The degree gave structure and depth to what had been enthusiastic but undirected exploration.
The subjects that shaped me most were not the ones I expected. I expected to love the programming courses — and I did. I didn't expect to find database systems, computer networks, and operating systems equally compelling. These are the subjects that explain why things work the way they do, rather than just how to make them work. That level of understanding changes how you write code.
The project work was where theory and practice collided most productively. My final year project — a web-based learning management system — was the first piece of software I built that I'd consider production-worthy. It had a real database schema, user authentication, role-based access control, file management, and a deployment on a VPS. Nothing special by professional standards, but a significant step up from the form-validation exercises and static sites that populated my portfolio before it.
The habits I built in the BSc that have survived into professional work: version control discipline (commit often, write clear messages), documentation as you go (not after), and code review as a learning tool not just a quality gate.
If I were advising a BSc student: take the unfashionable subjects seriously. The understanding you build in systems courses will serve you for your entire career in ways that knowing the latest framework will not.