I work in a Smalltalk shop, where we extend and maintain an application that has been around over a decade. During the maintenance part of our job, it would be really nice to have type declarations on variables. For maintenance, the more dependable information we have, the better! The fewer things that can escape as runtime exceptions, the better! Not having static typing makes new development faster, but maintenance is harder. What would be ideal is an optional typing system like Strongtalk. As parts of the system mature, they would become statically typed. This gives us the best of both worlds.
I agree with this, being able to do both would be best. For my PhD I have been using various AI techniques to get information out of Computational Fluid Dynamic simulations. Initially I wrote a whole bunch of scripts in python to do various tasks, eg make data files, monitor the progress of a simulation and extracting and processing data. Then I wrote more scripts to tie these scripts together (automate the progress of a CFD) and then more scripts that tied all these together, automating many runs simultaneous CFD runs and teaching the results to neural nets.
In the end it was hell. I had data going everywhere in 3 and 4D arrays, was getting confused which data was input data and which was output data and forgetting the return type of functions. I rewrote it all in Java and though it took some time, was definitely worth it. Creating a nice framework where you can label everything and see it in front of you makes understanding what you have done much easier, especially with Java's generics and a good ide that can predict what you want to type.
I got a lot done at the start, and that is thanks to python. But to understand what is going on and thus be able to tweak stuff you haven't touched in months or years, self-documentation in the form of a good type system is invaluable.
Now if only there were a language that I could write a thesis in quickly...
"Confined to the type system" is funny language. Which type system? I have personally never felt confined to any type system except for C++'s and Java's. And even then, it's not so much the type system as it is the verbiage needed to define new types. I don't mean to go all Haskell-zealot on this comment's readers, but Haskell's would be an example of a type system where I have not felt confined. I am confined in the sense that I am confined to the three dimensions of this universe, but not any more than that. Wanting to violate its type system would be like wanting to walk in the direction of the fourth dimension. But then again, you can (and should not) violate its type system if you really want to do so.
Also, static typing can help with testing, since if you know your types, you have handy tools like QuickCheck that you can use.
> "Type verification provides very little confidence that an application works."
So what? It makes finding errors and fixing them faster and easier. And it makes making changes easier, unless you're changing the behavior of stateful objects.