Smalltalk is a dynamically typed message passing language. It is unique due to syntax and object oriented features. It is generally interpreted but is often compiled to a bytecode first.
Here is an example of the 100 doors problem:
doors := [ :count | "Initialize the array of doors to 0 (closed)" a := Array new: count withAll: false. "Process the doors" a withIndexDo: [ :each :index | index to: (a size) by: index do: [:this | a at: this put: (a at: this) not ] ]. "Print out the results" 1 to: count do: [ :n | Transcript show: 'Door #', n, ' is '; show: ((doors at: door) ifTrue: [#open] ifFalse: [#closed]); show: '.'; cr] ]. doors value: 100.
Smalltalk is a powerful environment for exploring many different elements of computer programming, including rich media such as audio and user interfaces. Smalltalk code is generally concise and easily readable due to its message based syntax.
Smalltalk provides an integrated code browser and debugger which are incredibly powerful and easy to use. This makes Smalltalk a highly productive environment where code can be modified and fixed in the running application.