Years ago I watched MIT's course 6.033. It is a great way to understand the first principles at hand in distributed / non-trivial programs:
http://ocw.mit.edu/courses/electrical-engineering-and-comput... (also on iTunesU).
If you're just getting started with this stuff, having a solid understanding of these principles is critical. I can't recommend these videos enough.