One of the things I've started doing more during these shelter-in-place times is Leetcode like programming problems.
I mostly started because I'm teaching a few classes this summer for CodePath's Interview Prep class, and I wanted to brush up.
But also, we're entering the 5th month of shelter-in-place and I'm honestly running out of things to keep myself from being bored. At first I started to learn and play chess. But I was so bad at it, I basically ended up rage quitting every game. That didn't seem healthy, so I decided to work on programming problems instead. It gives me the same satisfaction of feeling like I'm clever when I solve a problem, without all the anger I get from losing a chess match!
I've mostly been working through problems on three platforms:
Leetcode is nice because it literally has endless questions. They also have 'monthly challenges' where they give you a challenge problem every day. Leetcode has also been around for a long time, so for every question I can go to the 'Discussion' page and check out how other people solved a problem. The downside is that I feel overwhelmed about all the questions and it's hard to chose what question to tackle next. The platform itself also doesn't offer much outside of just giving you different questions.
educative.io is not free ($160 for one year access to all their courses), but has nicely structured courses with detailed explanations for every problem on their platform. I like it because it has different tracks you can take like 'Dynamic Programming Patterns' or 'Recursion'. The downside for me is that I felt like some of the explanations for how to solve a problem aren't very easy to understand. Sometimes I would read an explanation and be more confused.
algoexpert.io is also not free ($85 for one year access), but is my favorite out of the three platforms. There's "only" 100 questions on the platform, tagged by both difficulty and topic (array, binary tree, graph, etc), but I feel like the range of questions picked cover basically all the common patterns seen in these type of problems. The UI is really nice to use, and every problem has an amazing video explanation. The video explanations are probably the best part of the platform, because every explanation has been super easy to understand and absorb.
I've been starting and ending each day by trying to solve different problems. It's nice because I start the day feeling like I'm already productive, and I end the day with something that feels more satisfying than scrolling through my endless Instagram feed. TBD on how long I can keep this going before I get bored of this as well.
Another factor that got me into this routine was seeing this 18-year-old competitive programmer. This guy literally finishes solving a problem before I even have a chance to finish reading the actual problem. It's amazing and watching his videos is exhilarating in a way I didn't even know was possible. (Fun fact, after some internet stalking, I realized we had the same high school math teacher!)