Working in Smalltalk puts less emphasis on the actual language (which is, in fact, incredibly simple) and places more on what the compilation process creates; the objects. With Smalltalk, you work immersed in a "sea of living objects", and use Smalltalk-the-language to converse directly with them. When you program in Smalltalk you are creating objects, not files of program code. It is a genuine difference in focus.
Fundamentally, this approach enables two unique aspects:
First of all, it allows a seamless approach to development and debugging. In Smalltalk, there is no real separation between the debugging and programming stages, hence there is no compile-link-execute-debug cycle that is prevalent in more traditional languages. You can inspect the state of any live object at any time and you habitually make changes while the application is still running without the need to restart (and the pain of having to find your way back to where you were before). This is not simply edit-and-continue, it is much, much better.
Secondly, the living objects approach allows for a much more interactive style of Test Driven Development. Often one can code the tests (or system specifications, if you will) in a normal code browser and then run them to failure before any application code has even been written. As each test is hit and fails you code the application classes directly within the debugger. You keep coding like this until all the tests pass.
"Basically, with live objects, programming is more like construction in the real world. When we build a new office block at the end of the street, we don't have to shut down the entire city (or planet) to do it. The world keeps moving on and we simply minimize the disturbance of the construction site in the local area around it".
The end result is FAST development, which to us, is a key metric.