The Tale of Sir Lancelot

Why choose Smalltalk over Python for startups

Python is a relatively nice, simple programming language. I don’t have any quarrel with it. In fact, I love it in combination with web2py for web development. Web2py is a full-stack framework that comes with everything you need right out of the box. Batteries are included! There’s no need to futz around with configuration and setup like you do in Django.

Web2py makes it so quick and easy to write web apps that I use it for ALL my websites. And deploying web2py apps on servers is a breeze.

However, for general-purpose programming, I prefer Smalltalk. (For enterprise-level web development, I’d use Smalltalk in conjunction with the Seaside framework.) Smalltalk is simply such a wonderful language, as I discuss in my seminal article, “How learning Smalltalk can make you a better developer.”

So why is Smalltalk better for startups?

Python has a reputation for being really easy and productive for startups. But when it comes to productivity and “velocity of development,” it’s really hard to beat Smalltalk. Anecdotally and scientifically, Smalltalk is provably the most productive general-purpose programming language in the world. About 2.5X more productive than Python. About 2X more than Ruby. More than 3X as productive as JavaScript!

If you want the shortest “time to market,” Smalltalk may well be your best choice.

Smalltalk is much easier to use than Python

Python is an easy language to learn. That’s why it’s so popular. But guess what? Smalltalk is even easier! In fact, Smalltalk is one of the simplest programming languages in the world. It virtually has no syntax. Everything is done by message passing, including control structures like if statements and loops. Smalltalk’s syntax can be nicely summarized on the back of a postcard! Try that with Python.

Some people may find Smalltalk’s message-passing syntax a bit unsettling, but some people also find Python’s indentation-sensitive syntax just as unsettling, if not more so. At least, Smalltalk syntax will never get you into trouble (the way a misaligned piece of Python code might).

Moreover, while Python is easy to learn, it also carries with it a great deal of baggage from years and years of real-world usage (for example, see this StackOverflow question). By comparison, Smalltalk has very few “warts” or usability issues. After more than four decades, Smalltalk has managed to remain as clean and pure as the driven snow! Even while the language has undergone significant improvement (the Pharo project has been actively developing the language since 2008).

“Live coding” is the secret sauce

One of the key reasons for Smalltalk’s phenomenal productivity is its “live coding and debugging” IDE. This environment allows you to inspect data and make code changes during execution and observe the results immediately. You can even code your entire program in the debugger, the ultimate in incremental development!

Image-based persistence is also a huge boon to developers. In the course of your development work, you can save the entire execution state of your program and later resume exactly from where you left off!

This powerful environment is unmatched by anything that IDEs such as Visual Studio and Eclipse have to offer. Other IDEs have made awkward attempts to implement this feature, but they just don’t work as smoothly and elegantly as in Smalltalk.

Where Python shines…

is in its tremendous ecosystem of libraries and tools. Smalltalk’s ecosystem can’t compare to it…yet. This advantage can be very significant to a startup if it can heavily leverage Python’s libraries. In practice, there isn’t a great deal that Smalltalk can’t do because of its smaller selection of third-party repositories, for example:

Smalltalk is very, very versatile!

Startups should not rely on Python as the only competitive weapon in their arsenal. Smalltalk offers unique advantages, too, such as shorter time to market, greater productivity, enhanced development process through live coding and debugging, and much lower cognitive friction.