This is, of course, a highly subjective question. One person’s flaw is another person’s virtue.
Subjectively, all programming languages have pros and cons. Some people regard dynamic typing as a flaw. Garbage collection is regarded as a flaw under certain circumstances. Many people rail against object-oriented programming.
You will never find consensus.
Since this question is really asking for opinions, I shall offer mine…
Smalltalk is very close to being flawless. It has many great virtues:
- Smalltalk is supremely small, simple, and easy to learn. The complete syntax fits on a post card!
- Smalltalk is the absolute purest of pure OO languages. Even its logical control structures are OO! There is no easier way to learn object-oriented programming.
- Smalltalk’s OO character is sublime. See Richard Kenneth Eng’s answer to Why is OOP (Object-Oriented Programming) the standard paradigm for most software? Is there a better way to write scalable software?
- Smalltalk has wonderful support for metaprogramming. See Lisp, Smalltalk, and the Power of Symmetry.
- Smalltalk supports functional programming, even though it’s regarded as a pure OO language. In fact, Smalltalk’s class library contains many recognisable functional constructs.
- Smalltalk has a built-in, live coding IDE that practically eliminates the traditional edit-compile-test-debug cycle that has hampered developers for over half a century. Consequently, it’s the most productive programming language in the world, according to a study conducted by Namcook Analytics.
- Smalltalk is a new programming model that combines language, IDE, and total system of live objects (known as the image) working together in perfect harmony. This unique synergy is rarely found anywhere else. (Forth and Common Lisp are most user-unfriendly.)
- Being dynamically typed, Smalltalk is extremely flexible and quick to code in. And, yet, it doesn’t hurt Smalltalk’s ability to write large-scale, maintainable software. For example, Smalltalk excels at code refactoring. In fact, Smalltalk came up with the world’s first refactoring browser.
Some people will point to the above as flaws. Smalltalk’s image is often criticised for being insular, but remember: Smalltalk represents a new programming model. If you can’t let go of the traditional programming model, of course, you will be unhappy.
Fortunately, modern Smalltalk (i.e., Pharo) coexists well with GitHub and other traditional tools.
Smalltalk’s dynamic typing is often criticised for lack of safety (i.e., allowing for too many bugs). However, Robert Smallshire has demonstrated that static typing only helps to eliminate 2% of all software bugs. For such a small gain, you’re going to give up on flexibility and productivity???
In fact, some flavours of Smalltalk are blazingly fast! And with today’s hardware, performance is rarely a constraint for most applications.
To be sure, Smalltalk is unsuitable for HPC number crunching, real-time control software like avionics, PC video games like Halo, and writing device drivers. But with very few exceptions, no language can do it all. (C++ can, but it’s dreadful in many other respects.)
Smalltalk is not flawless, but no language could come closer.