The Image is where Smalltalk diverges from more traditional software development tools. A Smalltalk program can be seen as a sea of interacting “live” objects and it is these that form the heart of an application, transcending the mere source code that was used to create them.



Previously, some commentators have derided the image, thinking of it as a snapshot of objects held on disk to be reanimated each time an application starts up. While this method of working is certainly useful at development time, to save and restore coding and debugging sessions for example, it rather misses the full potential behind the live objects the image contains. Try to think of them as being like a city, not just of people but of buildings, roads and the other necessary infrastructure that makes it all work together. Should we need to inspect a city building (say to find out its height) we interrogate it directly, we measure it, we ask it, rather than going back to the blueprints from which it was first created.



But what makes this different from debugging a program written in a “normal” language? In Smalltalk, all objects maintain the necessary information to be able to reflect on themselves but without the overhead normally associated with compiling a program for debug. This way an application can always be debugged even when released. How many times have you wondered why a C++ program should need to be specially compiled with debug information only to throw it all away when rebuilding it for deployment. After all, it would be rather optimistic to assume that you’ll never have issues to debug out there in the real world.



While writing code, the city metaphor continues to hold up. In the city, new buildings are constructed in situ without ever having to stop and restart the world going on around them. Sometimes scaffolding is erected and then later removed but the city continues 24/7 without any need to be rebooted. More and more of today’s software needs to behave like this. With Smalltalk, the source code may be held in repositories (like GitHub) and rebuilt completely from scratch as required but often an application can just be incrementally developed in the image while it continues to run indefinitely. If nothing else, think of the time that can be saved by developing software in this way.



