Four years ago, I learnt Smalltalk as part of a degree course without problems. Including the concept that code blocks can be passed as data as opposed to the Java technique of writing a class that implements an interface. It's definitely, a clean language.
But I don't like it because of no compile-time type checking and no message access modifiers (private and protected). I'm aware that parameters that don't implemement the correct messages can be trapped using Design By Contract but I regard Design By Contract as impractical. Also, practical, working code needs messages that are not public. And classes that aren't public. For abstract classes based on the Template design pattern, hooks into the skeletal algorithmn should be exposed to the subclasses but not others. The famous 'Gang of Four' book suggests the use of protected.
So, I regard Java as the advanced language and Smalltalk as a teaching language. I only want specific classes of a package to be public and act as the facade. I want mistakes such as passing a string parameter instead of an integer to be trapped at compile-time, not at system testing. I want to share code that is common to similar messages in a message but not expose it to the public. So I use Delphi or Java.