Its a tough problem. You have to find something that you want to exist; like an app or a website or a game. For example, try making a GUI for managing SSH keys. You know, like the ones github makes you create in order to clone and push to a repo. Make a visual representation of those keys (stored in the .ssh folder), and tools to add/delete them.
Along the way you’ll find tons of missing things, tools that should exist but don’t. Those are the “real” projects that will really expand your capabilities as a developer.
For example, I was coding in python and wanted to make a function that caches the output because the code was inherently slow.
but to cache an output we need to know the inputs are the same
hashes are good for this but lists can’t be hashed with the built-in python hash function
we can make our own hash, but hashing a list that contains itself is hard
there is a solution for lists, but then hashing a set that contains itself is a serious problem (MUCH harder than hashing a list)
turns out hashing a set is the same problem as the graph-coloring problem (graph isomorphism)
suddenly I have a really deep understanding of recursive data structures all because I wanted to a function that caches its output.
Its a tough problem. You have to find something that you want to exist; like an app or a website or a game. For example, try making a GUI for managing SSH keys. You know, like the ones github makes you create in order to clone and push to a repo. Make a visual representation of those keys (stored in the .ssh folder), and tools to add/delete them.
Along the way you’ll find tons of missing things, tools that should exist but don’t. Those are the “real” projects that will really expand your capabilities as a developer.
For example, I was coding in python and wanted to make a function that caches the output because the code was inherently slow.