I remember feeling the same thing - I could just "build a website" but I wanted to prove that I had actually learned something over the last three years.<p>So what did I do? I re-implemented Git in PHP (read-only). It was, to put it mildly, difficult, and stressful, but I actually managed to pull it off (mostly).<p>I didn't just choose at random, obviously. I wanted to add file version support to an open-source project, and after some basic research, settled on Git. The catch was that the open-source project ran in a pure-PHP environment (no modules beyond those commonly found on shared hosting). So I had to find a way of reading Git repositories in PHP without resorting to exec() etc. Hence, read-only Git in pure PHP. Throw in WebDAV or SSH and you can actually push / pull to those repositories with front-end clients like SparkleShare, which was a good candidate for future work.<p>I nearly went crazy, of course. I had little-to-no understanding of DVCS concepts, graphs, and so on (big O analysis is still difficult to be honest). However, by writing the project, I got much more direct experience of graph theory than I ever would studying a text book. This has turned out to be incredibly useful in my day-job as a developer.<p>The take-away I'm trying to get to is: pick something completely (or slightly) unrelated to computer science concepts like big data, AI, etc. and find something you're interested in. Then ask the question "How do I apply X to this?".<p>(These examples are purely off the top of my head, and may actually be ridiculous in practice. YMMV)<p>"How can I use big data techniques to analyse my web server's access logs?"
"How can I use AI/Machine Learning to detect shellshock attacks on my server?"
"How can I use computer vision techniques to render a map of the local area using drones?"
"How can I use big data, AI, machine learning, and computer vision techniques to analyse the proportion of cat pictures and videos posted to social media?"<p>What I want to re-iterate though is that I started with "I want to add file versioning support to this software" and ended up discussing graph theory, diffs, patches, open-source etiquette posts by ESR, big-endian and little-endian integers (Git uses both in it's file formats), binary fanout tables, the SHA-1 algorithm, content-addressable filesystems, and all sorts of other crazy stuff I hadn't even anticipated when I started.<p>My supervisor liked it - I wanted to sleep for a month straight.