I really need to read Bruce Eckel more often. Being a Java guy, he may not be the most popular person here, but he has very good things to say. Some of those things are very Java-specific. Most here don't care about the erasure problem in Java's Tiger release. However, many of his articles discuss programming in general and are quite applicable to us. In fact, he's becoming a bit of a convert to dynamically typed languages (er, Python, to be fair.) He has a great article about "latent typing" (a.k.a., dynamic typing) which is definitely worth a go.
One interesting point in the article is reinforcing that a Class is merely a new type. However, because of polymorphism, we have something a bit closer to dynamic typing. When OO programming first came on the scene, there were arguments that it would make things worse because the programmers wouldn't know if their object.shoot() method would go "bang" or "click." Few people today argue this about 00 programming, though this argument should sound somewhat familiar to dynamic typing enthusiasts.
The key difference, in Eckel's view, is whether we desire "directing" (telling programmers what to do and protecting them from their mistakes) or "enabling" (giving programmers the tools to get their job done faster) technologies. Both are valuable; each has flaws.
So in summary, LatentTypes sound great, but they leave such much information unstated (and in fact unchecked) that (a) the programmer is required to spend a lot of extra effort when writing code, and (b) they also leave programs wide open failing as soon as someone changes a seemly trivial implementation detail.
For the legions of good Perl programmers out there, this will come as a bit of a surprise. Of course, this person also wrote a criticism of OO programming where he claims "OO is based on some ideas that are catchy on a small scale or in toy examples, but they don't scale to the real world well, requiring many layers of indirection to work around their limits." I wonder if he and Shlomi Fish are friends?