Interview with a Smalltalk Evangelist

[This is an imaginary interview conducted by an imaginary IT magazine called Technophobe. It was done in January of 2020.]

Richard Kenneth Eng is a Smalltalk evangelist who’s been blogging about Smalltalk for five years. He is something of a celebrity at Quora and Hacker News. He organized a high school competition recently called The James Robertson Memorial Programming Competition, or JRMPC for short, to wide acclaim.

Technophobe: Thank you for agreeing to this interview, Mr. Eng.

Richard Eng: Glad to be here.

Technophobe: What are you trying to accomplish as an evangelist?

Richard Eng: I’m trying to market the Smalltalk programming language to the public. The goals are to grow the user base, as well as the supporting ecosystem, and to make Smalltalk popular again, the way it was back in the 1980s and 1990s.

Technophobe: Why did you feel that Smalltalk needs to be “marketed?”

Richard Eng: For years, Smalltalkers tried publishing technical articles, giving technical seminars, offering technical workshops, producing GitHub repositories, making demonstration videos, and so on. They believed that this would lead to wider Smalltalk adoption.

So I asked, “How’s that working for you?” After all this time, adoption was still anemic and Smalltalk was still mired in relative obscurity. Smalltalk jobs were still rare as hen’s teeth. Smalltalk was nowhere to be found at TIOBE, PYPL, RedMonk, IEEE Spectrum, and StackOverflow Developer Survey.

I decided that there had to be a better way. I decided that somebody had to accept the mantle of Smalltalk evangelism. This would be an enormous undertaking, which would entail a full-time effort of advocacy and blogging on social media. It would entail proper marketing, not just technical presentation.

So I focused on winning people’s attention and persuading them at the emotional level, not just the logical level. I took my cue from master marketers like Steve Jobs and Elon Musk.

Technophobe: Do you recommend other programming languages do the same like Crystal, Elixir, F#, Haskell, Haxe, Idris, Julia, Nim, etc.?

Richard Eng: Yes, I do. The hard part will be finding a volunteer who has the time, energy, and creativity to do all the hard work. This is a marathon, not a sprint.

Smalltalk evangelism took out a full five years of my life.

Technophobe: What inspired you to take on this task?

Richard Eng: James Robertson, one of the best Smalltalk evangelists who ever lived. Also, this article by Blake Watson: Today’s Smalltalk: A Second Look At The First OO Language.

I had the wherewithal to realize that I could do this job. I simply had to make the decision to proceed. This was in late 2014.

Technophobe: Why couldn’t someone else do this job?

Richard Eng: Someone else could. The problem is that no one stepped up. The truth is, most people do not have the inclination to become a full-time evangelist. They have other responsibilities like earning a living, taking care of their family, and engaging in recreation for their own well-being. Doing this job on a part-time basis would take many, many years — much too long to be effective.

Nevertheless, I hope I can set an example for others to follow.

Technophobe: Why does Smalltalk deserve such a great undertaking?

Richard Eng: Smalltalk is one of the greatest programming languages ever created. Its unique, synergistic combination of small, simple language and live coding environment, as well as a total system of live objects, makes Smalltalk one of the most productive programming languages in the world. It is not uncommon to hear stories of five times productivity improvement.

Imagine the cost savings in cutting your development time in half. Imagine much shorter “time to market.” Imagine not having to hire more developers to meet your demanding schedules.

At a time when there is a programmer crunch and a vast backlog of software that needs to be written, it would be a terrible shame for the world to overlook this hidden treasure.

Technophobe: What has been the result of your advocacy?

Richard Eng: Well, so far, the needle hasn’t been moved at TIOBE. Smalltalk remains stuck outside of the Top 50. But I am encouraged by the fact that my Smalltalk blog has been read by more than 100,000 people worldwide. There is probably a bit of a lag time before the public is mobilized to try out Smalltalk. I’m hoping to see Smalltalk re-enter TIOBE’s Top 50 (it was #37 in 2013) in the next couple of years, just in time for Smalltalk’s 50th anniversary.

Technophobe: Thank you for your time.

Richard Eng: You’re most welcome. Thank you for having me.


How is Smalltalk’s revival like the e-car’s revival?

It’s not a riddle. I’ll give you the answer.

There are several interesting parallels between the evolution of the electric car and the evolution of Smalltalk. Let’s look at e-cars first.

E-cars were pioneered in the 1830s. By 1900, they had reached their peak of popularity with a third of all cars manufactured in the United States being electric.

By 1920, the maturity and popularity of the internal combustion engine had made e-cars no longer viable. So e-cars faded away.

By the 1960s, however, rising gas prices and concerns over pollution caused people to re-examine the electric car. But it would be another three decades before the Toyota Prius made electric viable again, if only in the form of hybrids.

The big breakthrough for true e-cars came in 2006 with Elon Musk’s Tesla Roadster. Everybody wanted one.

And today, Tesla remains the e-car that everybody wants.

Now, let’s look at Smalltalk. Smalltalk was pioneered in the 1970s. (The first official language release was Smalltalk-80 in 1980.)

Smalltalk had reached its peak of popularity in the early 1990s when it became the second most popular object-oriented language in the world (C++ was #1). Even IBM chose it as the centrepiece of their VisualAge enterprise initiative.

By 1995, that began to change. Sun Microsystems’ Java language burst onto the scene and sucked all the oxygen out of the room. Smalltalk was among the casualties.

By 2007, however, a modern variant of Smalltalk known as Pharo was birthed. It arrived at the right time because the world was suffering from low programmer productivity and a backlog of software applications begging to be written. The world was also suffering from a plethora of overly complex programming languages like C++, Java, C#, D, Groovy, and Scala. This group would be later joined by JavaScript, Kotlin, Rust, Swift, and TypeScript.

People are clamouring for fresh air. They want simpler languages. That’s one reason for the resurgence of Python (though calling Python a “simple” language is rather dubious).

It’s also why Golang took off, and why Dart, Elixir, Lua, and Nim are beloved.

Today, Pharo is a very exciting language. It has been innovating by leaps and bounds over the past decade. One of the most notable developments is the Glamorous Toolkit.

But Smalltalk is a family of languages, so we should also give a shout out to other great Smalltalk flavours such as GemStone/S from GemTalk Systems, VA Smalltalk from Instantiations, and VisualWorks from Cincom. Not to be overlooked are Amber (transpiles to JS), Cuis Smalltalk, Dolphin Smalltalk (optimized for Windows), GNU Smalltalk (for command line lovers), Hoot Smalltalk (JVM support), and Squeak.

Pharo is also extremely versatile which is well-explained in this article, “Smalltalk: It’s Not Your Grandparent’s Programming Language.”

Let me close by pointing out another interesting parallel. In the early years of the e-car, there were technical obstacles that limited its popularity. E-cars had a very limited range. They couldn’t compete with low-cost gas. They had limited horsepower.

In the early years of Smalltalk, it required expensive hardware to run on (processor and memory). It needed high-resolution graphical displays. It couldn’t compete with C/C++ and FORTRAN and BASIC and Pascal.

Today, both are experiencing a revival. E-cars are more economical than ever. Smalltalk can run on devices as small as the Raspberry Pi, and run well!

The epitome of the e-car is Tesla. It is the most aspirational electric car in the world.

The epitome of programming languages for productivity and ease of use is Pharo/Smalltalk. It, too, is aspirational. Is there a programmer alive who doesn’t want to write their applications quickly and easily, like in half the time? I don’t know about you, but I don’t want to work harder than I have to.

(Previously published at Gitconnected.)


Why Smalltalk is so easy to evangelize

Of all the programming languages in the world, Smalltalk is, by far, the easiest one to evangelize. Why is that?

First, Smalltalk has a wonderful historical legacy. It has contributed an enormous amount to the software industry, to computer science, and to programming language design. It pioneered the language virtual machine and JIT compilation. It created the world’s first modern IDE. It made live coding easily accessible. It introduced the MVC architectural pattern. It was largely responsible for TDD (test-driven development). It pioneered the development of object databases. It gave us the first refactoring browser. It was instrumental in developing GUI and WYSIWYG.

It influenced the design of Objective-C, Ruby, PHP, Perl, Python, Groovy, Scala, Dart, and other languages.

It popularized object-oriented programming (whereas Simula 67 academically introduced the concept of classes and objects). Remember the famous August 1981 cover of BYTE magazine?

Second, Alan Kay and his group at Xerox PARC are legendary. Alan Kay’s vision was extraordinary. His object-oriented philosophy was brilliant. It was far superior to the philosophy espoused by people like Bjarne Stroustrup.

Alan Kay on the early days of Smalltalk (jump to 2:17)

Third, Smalltalk has a wonderful track record. It actually achieved a significant measure of popularity in the 1980s and 1990s. It was adopted by IBM for their VisualAge enterprise initiative. It was used by many prominent customers, including the U.S. joint military, JP Morgan, Orient Overseas Container Lines, Desjardins, UBS, Texas Instruments, Telecom Argentina, BMW, and Siemens AG.

It has a very significant commercial vendor presence which enterprise companies appreciate. Look at Cincom (VisualWorks), Instantiations (VA Smalltalk), and GemTalk Systems (GemStone/S). It has significant corporate sponsorship from the Pharo Consortium.

Fourth, Smalltalk has statistical evidence (in the Namcook Analytics study by Capers Jones) to support the claim of enormous programmer productivity. This is consistent with much anecdotal evidence for the same claim.

Fifth, Smalltalk has a rich family of languages like Pharo, Squeak, Cuis Smalltalk, Dolphin Smalltalk (optimized for Windows), GNU Smalltalk (for command line lovers), Amber (transpiles to JS), Hoot Smalltalk (JVM support), VisualWorks, VA Smalltalk, and GemStone/S (high-performance object databases) that can satisfy a myriad of needs.

Moreover, Pharo is the fastest evolving and innovating Smalltalk in history! It has remade itself in just under a decade.

Sixth, Smalltalk makes object-oriented programming very easy, much easier than in C++, Java, C#, and others. Smalltalk is supremely simple and easy to learn. Its complete syntax fits on a post card. You can learn all of Smalltalk’s syntax within 15 minutes!

Seventh, Smalltalk is remarkably versatile. You can do back-end web with Seaside and Teapot frameworks. You can do front-end web with Amber and PharoJS transpiled languages. You can do mobile with Cordova/PhoneGap. You can do data science with PolyMath library, Roassal data visualization, and Moose data analytics platform. You can do machine learning with TensorFlow. You can do IoT with PharoThings. You can do robotics with PhaROS. You can do virtual reality. You can even script the Unreal game engine!

Roassal demonstration
virtual reality demonstration
Unreal game engine demonstration

In other words, Smalltalk provides a huge stockpile of ammunition. You can fire salvo after salvo after salvo.

What other language can be as easily evangelized? Clojure? Crystal? Dart? Elixir? Golang? Haskell? Julia? Kotlin? Nim? Racket? Rust? TypeScript? Nope. Not even close.

(Previously published at ITNEXT.)


How can we celebrate the 50th anniversary of Smalltalk?

The 50th anniversary of Smalltalk is coming up in 2022. What can we do to celebrate this momentous occasion?

Smalltalk is still one of the greatest programming languages ever invented. It keeps company with other great languages like LISP and Scheme and Forth.

Smalltalk has had a profound influence on the software industry and computer science and programming language design. Objective-C, Ruby, PHP, Perl, Python, Dart, Groovy, Scala, and others owe their OOP implementations to Smalltalk.

Smalltalk helped invent the modern GUI and WYSIWYG interface. Apple and Microsoft thank you.

Smalltalk invented the modern IDE by integrating a text editor, class browser, object inspector, and debugger. Visual Studio and IntelliJ IDEA thank you.

Smalltalk advanced live coding by adding a GUI front end, thus making it very easy and convenient to use. Live coding makes you supremely productive.

Smalltalk practically invented TDD (test-driven development), as well as XP (extreme programming).

Smalltalk invented the MVC pattern (Model-View-Controller).

Smalltalk helped pioneer the language virtual machine. Java and C# thank you.

Smalltalk helped pioneer JIT compilation.

Smalltalk gave us the world’s first refactoring browser. This tool helps make Smalltalk a very maintainable language.

Smalltalk remains the finest OOP language in the world. It is just about as versatile as any other language you can think of, including Python and Java.

Smalltalk can be used for back-end web with Seaside and Teapot, front-end web with Amber and PharoJS, mobile with Cordova/PhoneGap, data science with PolyMath, Roassal, and Moose, machine learning with TensorFlow, IoT with PharoThings, robotics with PhaROS, virtual reality, games, enterprise business computing, and so on. It has even been used to create an operating system (SqueakNOS)!

Smalltalk belongs in any programming language hall of fame. Let’s celebrate its anniversary with gusto.

Add your suggestions in the comments. The winning suggestion will receive a Smalltalk T-shirt:

This shirt is part of a giveaway at The James Robertson Memorial Programming Competition held in Canada in 2020.

The winner will be reported in a subsequent blog post, so make sure you follow this blog. When you see your name, send me an email with your name and shipping address.


Is Smalltalk a weird cause to fight for?

This question occupied my mind last night as I slept.

I came to the conclusion that it’s not weird at all. Why is it any more weird than, say, the following causes:

  • environmental causes, like climate change, Amazon rainforest, pollution, etc.
  • endangered species, like tigers, whales, sharks, eagles, etc.
  • welfare of chimpanzees (Jane Goodall)
  • domestic abuse
  • animal abuse
  • human rights abuse
  • medical diseases, like cancer, MS, ALS, Alzheimer’s, etc.
  • arts & culture
  • disability causes
  • elderly care
  • religious causes
  • political causes, like corruption, unethical foreign policies, Edward Snowden, etc.
  • cyberbullying
  • sports causes

And many more I haven’t thought of.

Ultimately, one fights for a cause they have a personal connection with. I have no connection with any of the listed causes, except perhaps for cancer and tigers.

Some people might think that a humanitarian cause (like human rights, domestic abuse, diseases) is more “worthy” than a programming language.

Some people might think that the survival of the planet is more worthy than Smalltalk.

But this depends on one’s belief system, personality, and personal experiences. They’re different for everybody.

I think Smalltalk is a most important cause. How can I possibly justify this outrageous claim?

Well, consider this: We live in a highly technological world where information underpins nearly every aspect of our lives. Without software technology, our modern world would collapse. We would be thrown into utter chaos.

And what is at the very heart of software technology? Programming languages. People must use programming languages to create all of this wonderful (and not-so-wonderful) software.

Now, what if we were all using shit programming languages? How would that impact our world?

Well, we’d have flakey, unreliable websites. We’d have unsecure, hackable systems. We’d have a huge backlog of software that needs to be written, and not enough time nor resources to write them.

We’d have generations of shit programmers who’ve graced us with their crapware. They’ve been “trained” to program in JavaScript and Python. They have no idea how to ensure the highest quality of software.

Surely, you say, using languages like Smalltalk and Rust won’t solve all of our software woes. And you’d be right. But it would be a wonderful huge step in the right direction.

This is why I’ve devoted my life to this cause. Is that weird?

How does Python make thinking in code easier?

[This question was asked at Quora and Louis Cyphre wrote a great answer. Published with permission.]

The conventional answer is that Python has a clean, concise, readable syntax that gets out of your way and lets you focus on the problem at hand. However, Python is hardly unique in this respect.

Ruby also has a clean, concise, readable syntax. Elixir also has a clean, concise, readable syntax. Smalltalk also has a clean, concise, readable syntax.

However, Pythonistas will also tell you that Python’s syntax reads like English and this is hugely beneficial. Well, if English isn’t your first nor most familiar language, I don’t know how much of a benefit that is.

But I’d like to push back on the notion that Python is English-like. Let’s compare Python with Smalltalk…

Here’s some Smalltalk code:

| car |
car := Dictionary new. "create an empty dictionary"
car at: #brand put: 'Ford'.
car at: #model put: 'Mustang'.
car at: #year put: 1995.
car keys. "evaluates to #(#brand #model #year)"
car associations. "evaluates to {#brand->'Ford'. #model->'Mustang'. #year->1995}"
car removeKey: #model.
car associations. "evaluates to {#brand->'Ford'. #year->1995}"
car removeAll.
car associations. "evaluates to #() which means empty"

The hash (#) signifies a symbol. Python doesn’t have symbols, so strings must be used.

| car | declares the variable car. In Python, you don’t declare variables. Consequently, a mere typo can create a new variable and potentially cause a subtle bug.

Now, let’s look at the Python equivalent:

car = dict() #create an empty dictionary
car['brand'] = 'Ford'
car['model'] = 'Mustang'
car['year'] = 1995
car.keys() #evaluates to ['brand', 'model', 'year']
car.items() #evaluates to [('brand','Ford'), ('model','Mustang'), ('year',1995)]
del car['model']
car.items() #evaluates to [('brand','Ford'), ('year',1995)]
car.items() #evaluates to []

Which is more English-like,

car at: #brand put: 'Ford'


car['brand'] = 'Ford'

Which is more English-like,

car removeKey: #model


del car['model']

Last time I checked, del isn’t a word in English and car[‘model’] is hardly English.

Which is more English-like,

car removeAll



English doesn’t employ dot notation, and I’ve never seen empty parentheses in English.


car associations

is much more English-like than



car keys

is much more English-like than


Even Smalltalk’s use of double-quotes for comments is more English-like than Python’s use of hash (or Python’s use of triple-quotes).

So I submit that Smalltalk is much more English-like than Python.


Green Light for JRMPC!

JRMPC registration has closed. I am pleased to announce that we have the final list of teams for The James Robertson Memorial Programming Competition. Thirty teams will compete for $13,000 in prize money. This is the richest purse for a school competition in Canadian history!

Eighteen schools from thirteen cities and three provinces all across Canada will compete:

St. Michaels University School (Victoria)
St. John’s School (Vancouver)
John G. Diefenbaker High School (Calgary)
Robert Thirsk High School (Calgary)
Webber Academy (Calgary)
Strathcona High School (Edmonton)
Waterloo Collegiate Institute (Waterloo)
Centennial Collegiate Vocational Institute (Guelph)
Westmount Secondary School (Hamilton)
Marc Garneau Collegiate Institute (Toronto)
Woodbridge College (Vaughan)
Langstaff Secondary School (Richmond Hill)
Henry Street High School (Whitby)
Bayridge Secondary School (Kingston)
A.Y. Jackson Secondary School (Ottawa)
Longfields-Davidson Heights Secondary School (Ottawa)
Nepean High School (Ottawa)
St. Patrick’s High School (Ottawa)

Here is the list of participating teams: Let’s give it up for these 120 brave digital warriors!

Starting on January 31, 2020, you will be able to follow the progress of the competition and the ranking of the teams at our leader board:

On January 10, 2020, we will make available on this blog all the material necessary for Round 1 of the competition, including the specification of the challenge. This will give the teams additional time to prepare.

In fact, we will publish all the material for every round at the start of each round. In this way, everyone can follow along and “compete,” even if they’re not directly participating in the competition. It’s all in good fun!

Speaking of fun, here are some fun videos of the Smalltalk programming language:

Let the games begin!


The Official Start of Registration Begins Today!

Team Captains must register their teams for the competition. Registration is a three-step process:

  1. You must provide your name, email address, and password. The email address is your unique identification and username.
  2. You will receive an email containing a verification link; check your spam folder in case it lands there. You must click on the link to confirm your identity. Then you will receive a confirmation email containing your team’s secure code — keep it in a safe location!
  3. You must fill in the profile to complete your registration. Provide the team name, the names of your other team members, teacher’s email, etc.

Note that the password fields in the profile are optional; they are only used for changing your password.

After you’ve completed your registration, you should read the Tips page for useful and important information. In particular, note this tip:

Three weeks prior to the official start of the competition, we will make the materials for Round 1 available to you. This should give you more time to get familiar with Round 1. Check the at that time.

Register early to receive T-shirts. Only the first 100 registered teams will receive T-shirts.

Good luck to all participants. Game on!


Exciting new high school competition with rich scholarship prizes!



The Top Five at Slant is a product recommendation community with the goal of finding the best product or app for you. It’s interesting to see how Slant ranks the Smalltalk programming language.

I looked at two questions. The first was: What are the best (productivity-enhancing, well-designed, and concise, rather than just popular or time-tested) programming languages?

The Top Five are:

  1. Elixir with 35 upvotes and 15 downvotes
  2. Smalltalk with 75 upvotes and 17 downvotes
  3. Python with 92 upvotes and 47 downvotes
  4. Scheme with 21 upvotes and 11 downvotes
  5. Nim with 31 upvotes and 15 downvotes

I don’t know how Slant’s ranking algorithm works but I do find it peculiar that Elixir ranks higher than Smalltalk. Smalltalk has more than twice as many upvotes and only slightly more downvotes than Elixir.

Interestingly, Python has the most upvotes but also a very large number of downvotes.

However, I’m glad to see that Smalltalk is at least in second place. And deservedly so.

The second question I looked at was: What is the best programming language to learn first?

The Top Five are:

  1. Python with 461 upvotes and 69 downvotes
  2. Smalltalk with 62 upvotes and 22 downvotes
  3. Racket with 18 upvotes and 7 downvotes
  4. Elixir with 24 upvotes and 11 downvotes
  5. C with 183 upvotes and 87 downvotes

This time, it makes sense that Smalltalk is in second place. Python has a whopping 461 upvotes.

So in both questions, Smalltalk acquits itself very well. I’ll take that.

I also looked at other programming language-related questions but most of them had too small a population of voters to be taken seriously (fewer than 300 participants). However, here are a few…

What are the best server side programming languages?

From 868 voters, the Top Five are:

  1. Elixir with 66 upvotes and 15 downvotes
  2. Python with 66 upvotes and 22 downvotes
  3. Clojure with 24 upvotes and 5 downvotes
  4. Golang with 64 upvotes and 20 downvotes
  5. Haskell with 28 upvotes and 6 downvotes

What are the best languages for learning functional programming?

From 503 voters, the Top Five are:

  1. Haskell with 84 upvotes and 14 downvotes
  2. Elm with 41 upvotes and 6 downvotes
  3. Clojure with 57 upvotes and 12 downvotes
  4. Elixir with 27 upvotes and 3 downvotes
  5. Scheme with 16 upvotes and 2 downvotes

What is the best programming language to learn for backend developers?

From 362 voters, the Top Five are:

  1. Python with 53 upvotes and 17 downvotes
  2. Elixir with 33 upvotes and 6 downvotes
  3. Golang with 34 upvotes and 6 downvotes
  4. Rust with 17 upvotes and 1 downvote
  5. TypeScript with 4 upvotes

While this question has too small a population, it’s interesting nonetheless: What are the best systems programming languages?

From 214 voters, the Top Five are:

  1. Rust with 36 upvotes and 24 downvotes
  2. Nim with 25 upvotes and 8 downvotes
  3. C with 19 upvotes and 5 downvotes
  4. C++ with 26 upvotes and 10 downvotes
  5. D with 12 upvotes and 11 downvotes