In terms of pure programming, I recommend playing with different depths of the stack and different disciplines like graphics, web front end, web back end, C++, etc. The most important general skill there imo is troubleshooting and debugging. Beyond that, you want lots of exposure to different problems within whichever toolkit you like, and it's nice to have a set of patterns you can employ to tackle them.
In terms of career, it seems like getting boring things done quickly is the most important programming skill to develop, the rest are communication and showing up on time.
For both, learning to estimate your time and measure/test your skills are things I'm learning to be important. It's easy to think you know x, but just go try and do it well, then decide.
Learn how businesses work (known as domain knowledge). Ask questions, listen to non-programmers. Domain expertise plus technical skills make you more valuable to employers and clients.