In my workplace we get downtime when:
- Network/servers are problematic
- Nothing immediate to do (e.g. waiting for meetings to set requirements)
- Waiting for someone to finish off something you need to do your job (even though that's not exactly the best idea)
When downtime is shared, which for me is about 5% of the time, I usually go talk to people, get my head off things, hear some jokes.
When I find myself with nothing important to do, I have a directory with tons of books, which I read when I'm allowed, or in between long compile (or something equivalent) sessions, etc.
But even though I do this, I have to acknowledge something (which does make me a sinner myself):
It's our job as programmers to develop our careers at home so that our boss wouldn't fire us or something like that. It's not the boss' job to let you improve yourself with his money (time he's paying you for).
But anyway, as an alternative, sometimes instead of reading I do some other stuff,such as come up with some useful scripts or ideas, write documents and presentations about methodology improvements, etc.
That also counts as self improvement because it makes you think, and makes you useful to other developers, who might even remember you for that some day, when it counts.
But the important thing is that it's worth the money you're paid better than reading books...