Recs.
Updated
SpecsUpdate
Pros
Pro Superb Integrated Development Environment (IDE)
All tools (Inspector, Browser, Debugger etc.) are written in Smalltalk and are live objects in the environment. All sources are present, so that the tools can easily be studied, changed and experimented with.
The same goes for the other components like the compiler, OS-Integration etc.
Pro Elegant syntax fits on a postcard
The syntax was designed to be easy enough for children to learn. Beginners can learn the language rules very quickly and then focus on programming without fighting the syntax at the same time. Things that have to be baked into the grammar in other languages are simple message sends with block arguments in Smalltalk. Expressions have only three precedence levels to worry about.
Pro Inspector makes objects transparent
Programmers must make detailed mental models of the system they are developing. Bugs usually happen when the mental model does not match the actual system. This is one of the greatest difficulties beginners have because most systems are so opaque. It takes a lot of effort to see what's really going on. But in Smalltalk this is much easier, thanks to the powerful tools included in the environment, like the object inspector.
Pro Agile "interactive" test-driven development
Smalltalk had the original (and still the best) unit test system that inspired it in many other languages (like Java's JUnit). Working with interactive live objects in Smalltalk style TDD makes it easy to teach and learn TDD.
Pro As a first language, almost forces you to learn OO design.
Hybrid languages (e.g., Java, C#, C++) make it easy to slip into procedural thinking. Smalltalk's pure OO approach makes it hard not to think in object-oriented terms. In addition, since the entire IDE and runtime components are there in the image for you to browse, you have plenty of examples of good OO design to learn from.
Pro Provides a functional way to interact with objects
Many languages today use object orientation, while the most of them stock on the half way in that perspective.
Smalltalk sees literally everything as an object and this includes things like the classes and primitive data types. There is are zero control structures such as selection and iteration, since all is done by sending messages to objects.
It use a lot of concepts from Lisp in order to provide a nice experience for this pure kind of object orientation.
It provides immutable data structures, closures, anonymous functions and higher order functions, while all those functions are objects. This is what makes Smalltalk so simple, elegant, and easy.
All this counts for Pharo, while other implementations as Amber are probably feature complete to it.
Pro It invented a lot of stuff
Smalltalk is the inventor of Just-in-Time compilation and the MVC concept, refactoring through their so-called refactoring browser and it was also one of the first adopters of a language virtual machine, closures, live programming, test driven development, an IDE and the development of GUI`s.
Pro Save and restore virtual machine image
A Smalltalk environment can save the state of a running program and later restore and resume execution. This includes the internal state of live objects, multiple thread stacks, and debugging sessions, making it easier for beginners to take the exact problem to an expert for assistance.
Pro Rich libraries including many powerful data types, collections, frameworks, development tools etc.
Pro Allows programming at various levels of abstraction, including with pure domain concepts
Pro Powerful integrated debugger
You can edit code and swap it in while the your program is still running after an exception has already been signaled, or restart from anywhere in the call stack. You can inspect and modify the state of any object. Some Smalltalkers write unit tests and then program exclusively in the debugger.
Pro The true Smalltalk- 80 Dynabook experience on Cuis.
Cuis Smalltalk shares and follows the original values of Smalltalk-80. Especially on the value of being able to study, understand and modify any part of the system, and see immediate results. See https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
Pro As a first language, almost forces you to learn OO design
Hybrid languages (e.g., Java, C#, C++) make it easy to slip into procedural thinking. Smalltalk's pure OO approach makes it hard not to think in object-oriented terms. In addition, since the entire IDE and runtime components are there in the image for you to browse, you have plenty of examples of good OO design to learn from.
Pro Tooling emerges, cheaply, as a consequence of its design rather than being bolted on
Cons
Con Isolation
Smalltalk has its own world inside the image. You cannot use your current text editor with it. At least not in a straight forward way.
Con Not common
Smalltalk missed an opportunity to become mainstream when its implementations cost $5000 per seat versus $0 open source. New open source implementations (Pharo, Squeak) have minor corporate backers but not yet an IT behemoth. Direct jobs are scarce (but indirectly Smalltalk experience is very well regarded). Online communities are relatively small.
Con Only one paradigm allowed
Smalltalk is a purely object-oriented language, which means that other paradigms can't be used, like functional programming. Although Smalltalk allows easy creation of closures, functional programming can't be fully exploited, because methods are always handcuffed to objects, also, there's no proper tail-call optimization, so either Smalltalk systems allow for unlimited recursion at the expense of speed or memory, or they implement stack frames and thus work fast at the expense of recursion.
Con Language design and implementation makes it difficult to utilize multi-core systems
Con Limited libraries to connect with external services
Although it has libraries to connect with major services (eg. databases like PostgreSQL, MongoDB, Riak, etc.), it takes some time for those libraries to be available. It's not cutting edge like node.js or Python where libraries are usually written first there and then ported to other languages.
Con Limited object system
The object system, which by the way is the essence of Smalltalk (Smalltalk is purely object oriented), is very limited, conforming to the old and weak paradigm of tying methods to classes. Modern OOP systems such as the ones provided by Julia and Common Lisp, separate methods from objects allowing for multiple-dispatch and powerful "method combinations", which together greatly enhance the possibilities of OOP and allow for easy translation of your problem domain to actual code.
For example, in those two languages the "Circle-Ellipse problem" is easily solved in a few lines and without any hack (such as changing the hierarchy at runtime.)
Con A little slow
Smalltalk's VM and lack of attention makes it slower than other languages although most of the time this is unnoticeable.
Recommendations
Comments
Flagged Pros + Cons
Con A little slow
Smalltalk's VM and lack of attention makes it slower than other languages.
Con A little slow
Smalltalk's VM and lack of attention makes it slower than other languages.
Con A little slow
Smalltalk's VM and lack of attention makes it slower than other languages.