PocketSmalltalk for PalmComputing platform.
GemStone Smalltalk Non-Commercial version available gratis for Linux...
An extended Smalltalk running on .NET, Mac OS-X, Linux; see also www.smallscript.org
The creative people that work with Smalltalk have initiated some innovative development techniques.
This is a software development methodology oriented towards the use of lightweight teams, unit testing, programming in pairs, communal ownership of code, and customer input to motivate code improvement; most commonly used with Smalltalk.
Extreme Programming Explained: Embrace Change
This is the book (from Addison Wesley) on Extreme Programming.
From the folks at Xerox Parc that brought you Smalltalk , and, more particularly, CLOS.
The idea is to reify operations in the language like message sends, method calls, assignments, and fetches, and once these are reified attach additional behaviours to them. E.g. one can catch assignments and track when and how a graph of objects is changing, and hence arrange to write the graph to a persistent store, or build up the before and after states of a graph when preparing to commit a transaction. Since things are done at the meta-level the original program doesn't need to change, instead it is reinterpreted by the meta-level.
This is in effect a Meta Object Protocol application, and it should come as little surprise that Kiczales was involved with both.
Seminal paper on AOP - Kiczales, ECOOP97
We have found many programming problems for which neither procedural nor object-oriented programming techniques are sufficient to clearly capture some of the important design decisions the program must implement. This forces the implementation of those design decisions to be scattered through-out the code, resulting in "tangled" code that is excessively difficult to develop and maintain. We present an analysis of why certain design decisions have been so difficult to clearly capture in actual code. We call the properties these decisions address "aspects," and show that the reason they have been hard to capture is that they cross-cut the system's basic functionality. We present the basis for a new programming technique, called aspect-oriented programming, that makes it possible to clearly express programs involving such aspects, including appropriate isolation, composition and re-use of the aspect code. The discussion is rooted in systems we have built using aspect-oriented programming.
This comes from a Smalltalk perspective, presenting the thesis that dynamic typing (e.g. - attaching types, at runtime, to variables, as opposed to attaching them statically at compile time) significantly diminishes the amount of code that needs to be written.
An advocacy site listing many Smalltalk implementations, projects, and major sites that use the language.
Information About Smalltalk Programming for Smalltalk Programmers
Self is an object oriented language based on the concepts of:
Prototypes
Prototypes combine inheritance and instantiation to provide a framework that is simpler and more flexible than most object-oriented languages.
Slots
Slots unite variables and procedures into a single construct. This permits the inheritance hierarchy to take over the function of lexical scoping in conventional languages.
A data slot is the equivalent to a variable; messages are sent to an object to request/update its value.
A method slot is the equivalent to a function/procedure.
To do a "function call," you would send messages to an object to fill in its arguments, and then send a message that asks it to invoke its methods on those arguments.
Behaviour
Finally, because Self does not distinguish state from behavior, it narrows the gaps between ordinary objects, procedures, and closures.
It is probably most reminiscent of Smalltalk, in that it lacks a special syntax for flow control (e.g. - If/Then/Else). Unlike Smalltalk, it eschews classes in favor of prototypes;