Lately I have been having fun doing programming problems online. They are a nice way to go over exercises and practice various techniques.
I think it is important to program for fun. Put away your normal work and go hack on something. There is no pressure or deadlines. Programming because you want to.
My coworker wanted some feedback on some problems he had been doing. The site he used was exercism.io. It has a number of problems in different languages for various levels of difficulty. All the problems include a short description and unit tests which your solution should pass. You can see and comment on solutions by other people. The one catch is you must have first solved the problem yourself. I have been getting into some of the problems lately at the cost of my regular blog posts :(.
For a while I was competing with some friends to see who could get further on Project Euler. The site is filled with various math problems which are best solved using programming. Sure you might be able to calculate a few by hand, but the real fun is writing code to find the solution. Some problems can be brute forced whereas others need a more intelligent solution.
I also enjoy reviewing various algorithms and techniques though the regular updates from Coding for Interviews. They review some fundamental data structure or algorithm and provide sample problems. Less raw programming fun and more solid practice.
There you have it. A few handy fun sites to find new challenges:
Coding for Interviews has a list of other practice sites and why they like them. I have not seen most of the sites before and think they could be fun! On their is list codewars which offers community curated problems and a ranking system. My brother in-law raves about them and really enjoys their problems.