There is a commonly shared view in the programming community that algorithm puzzles are something you do to prep for an interview and than you never use in the actual job. This certainly rings true as in 15 years of programming, i feel I can count on fingers the number of times I needed to stop and think about data structure / algorithm, rather than usual workload of thinking about what’s even the problem being solved; how to structure code; what’s the interface at the module/service/package boundary; how to make code testable/maintainable/flexible etc… Iterating though a list or a dict is all ds/algo you’ll need 99% of the time.
FF to now when I’m on a burnout induced sabbatical, and after a while I got itchy to write some code again. Problem was that all the ideas for projects I’d like to do are, well… projects. I still don’t feel like digging through manuals for libraries and frameworks and writing boilerplate and doing all the things that need to be done to push things through. Anyhow, I was sitting in a coffee shop with my illustrator friend, who, at some point, just pulled out a notebook, spent 20-ish minutes drawing something that caught his eye and was like: “that’s it for today”. That’s it… 20 minutes, it’s done, tomorrow something else, new blank page… So I got into puzzles. Now, the first thing I do in the morning is solving a daily puzzle on leet code. If I feel like it, I might also do problems from an old competition. And I’m having a blast!
Which brings us to the question from the title: is there a direction I can push this forward? I mean, I don’t mind this just being fun, but I was curious, is there something out there in the “Real World” that I’m missing that is closer to this kind of problem solving from what i was doing so far?
One reason we don’t get much practice in this area is that the vast majority of common tasks can be accomplished with data structures and algorithms that are already implemented in libraries.
Have you considered learning a new programming language, and then helping to develop/expand its standard library, or to optimize what’s there already?
This is not an answer to your question, but if you’re not already familiar with it, check out Advent of Code! It’s a really fun series of programming puzzles each December.
What I’ve been trying lately is hacking. I’m on www.hackthebox.com, they offer over 200 machines for you to hack. Each machine offers a service, usually a website, but last week I had a grpc machine, which has some kind of vulnerability you need to find and exploit.
A free account doesn’t give acces to all machines, only ± 20 active machines. A payed account also gives you acces to all retired machines.
You do need a “starterpack” to begin with this hobby, a vm with Kali Linux is the main component, the ability to connect to a vpn is another, because the htb machines all run on vpn’s.
As a programmer, you have the basic knowledge about enumeration and webservices and such, to solve easy boxes (which can still take days to hack). You’ll only need to learn about tools like nmap and burpsuite, but you’ll surely find some tutorials online.
The goal is to get user acces and eventually root acces (they’ve placed a user flag in the user home directory and a root flag in the root directory which you can submit on the htb website and gain points)
It’s really fun and challenging and even educational to search for weakness on various webservices, like apache or wordpress. It can be frustrating at times, but as a programmer you know that those challenges can be the most rewarding.
There’s a bioinformatics website that has a course of problems to solve that slowly teaches you fundamental bioinformatics.
I’ve only done about 17 of the problems. They often end up being the following format:
- take in a text file
- process the data
- output the answer
Processing the data can be calculating probabilities, matrix manipulation, string manipulation, etc. It’s free to try, and you can use whatever language you’re familiar with. I think Python would have libraries that would help, but it’s up to you.
Tutor people trying to get better at solving coding puzzles?
I have to suggest to try benchmark-games like this: