The only way to get better at programming is to just do it. But how? Sure, you can go off and build a side project, but that's hard. Staying motivated enough to complete it is difficult, and something that I have trouble doing. You can go and pick up a programming book and work through their exercises, but that gets boring fast.
One of my favorite ways of doing extra programming is to do coding challenges. These are programs that usually have a fixed length, use gamification elements, and are based on puzzles. The combination of these attributes make them easy to get started, interesting enough to keep doing, and rewarding if you complete the challenge.
What sort of challenges are there? Perhaps the most obvious one is Project Euler, in which you are given a question, write some code, get an answer, and move on. However, that isn't exactly fun. On the other hand, sites like Coderbyte and HackerRank host competitions every so often. These competitions are time based and somewhat intimidating. I personally prefer a balance of fun and difficulty, and the ones below are some of my favorites.
Stripe offered the first version of this in February 2012, the second version in August 2012, and is running the third version from January 22-29, 2014. Yes, it is time based, but you have a week to complete it, which is very doable. This version focuses on a broad variety of topics, ranging from ruby, to git fundamentals, bitcoin, and text search algorithms. There are 5 levels total and I've finished 3 so far. I highly recommend this one.
This is a newly launched venture between Stripe and Matasano. It focuses on embedded systems security, and you will touch upon things like MIPS assembly, debugging, and memory editing. I've taken classes on computer architecture and embedded systems, but that is not required for this challenge. This and the following ones are all untimed.
This challenge is cool in that nothing is publicly visible. No leaderboards or anything. The puzzles themselves are sent via email and answers are hand checked. As the name implies, this deals with cryptography - everything from bit manipulation to, well, I don't even know because I haven't gotten to the end yet.
This was the first challenge I participated in, back when I was first learning python. Obviously this focuses on python, but if you are so inclined, you can do it in a completely different language. This is also one of those old school web puzzles. Some levels require you to poke around the source code of the page itself, while others require you to process images in python.
Another web puzzle, this one focuses on web, programming, crypto and security. It starts off very basic and gradually gets harder. This is a pretty lengthy challenge and the UI isn't the best, but this is great for beginners.