Picking a new language or system administration was extremely easy to me but I had to admit I needed to workout my problem solving skills.
Whenever I had to wait for a bus or a train, I picked a problem -- heard about it, read about it, thought about it -- and tried to solve it.
I produced (and still producing) lots of dirty code, but definitely I found out that my hard coding-skills improved over time.