Has anyone actually used strongly typed languages in a strongly-typed way?
One of the big points of strongly-typed languages in the 1980's was that they would prevent you from doing stupid things - you couldn't add an ounce to a decibel, as an example.
What does that really suggest?
You have a variable WaterWeight, or better still an object GlassOfWater with a property Weight, and you have an object Siren with property Loudness. It would make no sense to add GlassOfWater.Weight to Siren.Loudness.
So strongly-typed languages will prevent that... won't they?
Wait a minute... I've never seen anyone program numbers this way! When you've seen people program like this, isn't it something like the following?
class GlassOfWater {
Integer Weight;
...}
class Siren {
Integer Loudness;
...}
Or worse, a lot of programmers use int all over the place. Why? Well, in Java it was for a long time easier to just use int. But Integer is now more usable. Still, no typing system will help you with detecting problems if you won't use it - if you add ounces to decibels, which the preceding sample will allow quite happily.
But let's think further about this. Some years ago (late 1990's?) there was a space probe that failed because some parts of its software were calculating distances in miles and others in kilometers. That is, it failed not because it added apples and oranges, but because it added apples to apples in incompatible units.
I love strongly typed programming. My time programming in Ada was my most bug-free span and some of my most interesting programming, and strong typing was my Terminix.
At the same time do I drink the brew I'm pouring out for everyone else? Er, I hope so!
The point is this: one's awareness of the need for typing, and one's use of class-oriented typing like what Java has, doesn't mean one is programming in a type-safe fashion.
Keep alert. And while numbers can really trip you up, be careful with character data too. Encoding symbolic values with single characters or strings is always dicey. And oh, the junk that gets passed around the systems, the special cases like 'X' or '-' that keep sliming their way from subsystem to subsystem accumulating more and more special-case coding... yuck.