When comparing Smalltalk vs J, the Slant community recommends Smalltalk for most people. In the question“What are the best (productivity-enhancing, well-designed, and concise, rather than just popular or time-tested) programming languages?”Smalltalk is ranked 2nd while J is ranked 49th. The most important reason people chose Smalltalk is:

You can modify the system as it's running. You're "swimming with the fish", instead of probing a black box by remote control.

Pros

Pro

Environment of live objects

You can modify the system as it's running. You're "swimming with the fish", instead of probing a black box by remote control.

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

Easy to learn and experiment

Pro

Internal source code and documentation

You can explore how everything works easily.

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

Pure and easy object orientation

Smalltalk is one of few languages that are purely object oriented. This provides a solid and easy to understand base on which to learn object oriented programming, the most popular approach to programming.

Pro

Incremental compilation

Smalltalk provides an extremely fast code-compile-run-debug cycle. You don't have to stop and reset the world to tweak your program, since you can compile one method at a time while the environment is still running. This is great for beginners to experiment and prototype ideas.

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

Open source

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

Powerful integrated debugger

You can edit code and swap it in while the 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

Inspired many other languages' object systems

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

Graphical user interface

Beginners are usually stuck making command-line applications in other languages, because GUIs are too hard. Smalltalk GUIs are easy enough to start with.

Pro

First-class functions with lexical closures

Also known as "blocks". These objects contain reusable snippets of code and as first-class objects they can be passed as arguments to other methods or blocks and also returned from them. "lexical closures" mean they retain access to the variables in the lexical environment they were written in, that is, in the surrounding code.

Pro

Language uniformity

This leads to a very simple programming model (pure OO) that is still very powerful. A lot of stuff that is hard to implement in other languages is easier in Smalltalk.

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

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

25 year old language, with core unchanged in last 10 years

Still actively developed, but most recent changes have been in libraries and IDE and platform support.Language is considered "perfected"... though not quite.

Pro

J also supports multiline functional definitions similar to BASIC/Pascal. Including error handling.

Pro

Compiled language speed from interpreted language.

Each built in operator is a C/asm function, and special code further optimizes some operator combinations. Result is optimized C speed from quick parsing. Array orientation parses and compiles a function once, and applies it to all array items.

Pro

Language reference has simple one page index

Pro

No operator precedence rules

(... within each of the 3 operator classes) makes reading code easier. Very simple parsing rules.

Pro

Every function is an operator

3 classes of operators (verbs, adverbs, and conjunctions) with verbs the most basic function that take either 1 or 2 (infix) parameters. Operators allow function composition with a minimum of parentheses.

Cons

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

Virtual machine in its own isolated world

Smalltalk wants to be the whole OS. While this has tremendous advantages internally, interacting with the world outside the VM is not as easy as pure Smalltalk and must be done via a Foreign Function Interface.

Con

Not useful for mobile development

While Smalltalk is very powerful and easy to learn, it doesn't have a well supported mobile distribution, but you'll be spoiled for working in mainstream languages like Java, Swift or Kotlin where jobs are more readily available.

Con

OO is becoming obsolete

Smalltalk did it best, but the whole paradigm is a poor fit for the expected future multicore processors. Isolated mutable variables with no compile checks is a recipe for race conditions in multithreaded code. Beginners would be better off learning a functional language.

Con

Non-standard arithmetic ordering

Since every operation is considered a message sent sent is a specific order, all arithmetic operators have the same precedence. E.g. 2 + 3 x 4 translates to 2 + 3, and the result is multiplied by 4, giving an answer of 24 (instead of the correct answer - 14). Once you are learn this, it can easily handled using brackets, e.g. 2 + (3 x 4), but still a momentary suprise for beginners.