Hello, Jish Karoshi wrote: # How do you design programs when you can't specify types? If all # I can specify in a method definition are the names of the arguments, # then how does anybody know how to use that method without knowing # about the implementation of the method? The same thing goes for # the return value. How do I know what I am supposed to send and # what I can expect to get back unless those types have been announced # in the method signature or I understand how the method I want to # call is implemented? You rely on named methods and named parameters instead of named types :-) Instead of relying on some named type, you rely on an object being able to respon to some methods or operators, which essentially IS the type of the object. Wheither you use explicitly declared types or not in a programming language, you still make assumptions about the Usage Type without knowing the Implementation Type. It takes some time to get used to though, but you'll soon realize that static typing in many cases isn't necessary. You often gain type-safety by imposing the "meta-level" structures (in your head...) on the code expressions in your code. Types can help you with that, but they aren't necessary. They become redundant, if you can impose the "meta-level" structures some other way, e.g. by clear naming of classes, objects, methods and parameters. Here you can read more about all the benefits of dynamic typing: http://www.c2.com/cgi/wiki?BenefitsOfDynamicTyping I hope that clued you in :-) Regards, Dennis Decker Jensen