Welcome to the Future of Smart Web Development


Today is the official launch of a campaign to promote the use of Smalltalk (and Amber) in the modern age of software development, especially as it relates to the Web. In our highly connected world, web technologies are absolutely central to the economic growth and social evolution of our society.

Why Smalltalk?

Smalltalk is a pioneer in programming language development. Constructed in the 1970s by those clever folks at Xerox PARC in California, Smalltalk was the first major OOP language, and still widely regarded as the best. Over the past four decades, it has been highly influential in the design of other important languages, such as Objective-C, Ruby, Groovy, Scala, and Dart. Today, Smalltalk is still used to write industrial and financial applications (rather like a secret weapon that confers a competitive advantage). It is alive and well, particularly in the Pharo incarnation, and it is emerging as a contender in client-side web development with the creation of Amber.

The beauty of Smalltalk lies in its simplicity and elegance, as well as its novel concept of a “live” development environment, where every object is active and you can examine it and change it at will. Ironically, this “novel” concept was created more than four decades ago! As a result, Smalltalk is eminently readable, almost like English, but it still manages to be succinct.

Smalltalk is prized for its development power and extraordinary productivity. The word “productive” is vastly overused and bandied about by nearly every new programming language that arrives on the scene today. However, Smalltalk has a long history to show definitively that a simple and expressive language, combined with an innovative approach to the IDE, can pay enormous dividends in academia and in the commercial enterprise.

Now with Amber, which compiles efficiently to JavaScript, we have brought the benefits of Smalltalk to the world of browser-based application development, the “final frontier,” as it were. Welcome to the future of Smart Web Development!


Why is Smalltalk still relevant today? It may be viewed as a “modern” language in as much as it is closely tied to a novel approach to IDEs: the Smalltalk environment is a world of “live” objects that you can examine and change at will. The Smalltalk environment is not file-based; it is a system of live objects that can be stored, system state and all, into one location. Compare this to the traditional method of organizing source code using files and folders which is positively antediluvian!

“Source code in files. How quaint.”
Kent Beck

Moreover, Smalltalk adheres to modern language design principles that have become very popular. It’s a simple language with a highly readable syntax. Its language features are orthogonal with no unpleasant interactions. Not only is it designed to be easy to learn, it is also designed to be very practical and expressive in daily use.

Smalltalk can stand shoulder to shoulder with the likes of Dart, Swift, F#, and Scala, all recent entrants in the highly competitive field of programming languages.

Which Smalltalk should I use? Smalltalk is available in many different flavours and unfortunately this can be confusing to newcomers. In order to make things simple, I always recommend open source Pharo or Amber (which uses Pharo as the reference implementation). If you’re inclined toward a commercial Smalltalk, you have principally three choices: Cincom Smalltalk, VA Smalltalk, or GemStone/S.

Squeak is Pharo’s predecessor and still fairly popular. Redline Smalltalk is for those who want to run Smalltalk on the JVM. Essence# is for those who want to run Smalltalk on .NET. Dolphin Smalltalk is specifically for Windows. And there are still others. But, really, just keep it simple: stick with Pharo or Amber.

What resources are available for Smalltalk newcomers? To begin with, here is a most informative series of podcasts: http://smalltalkreflections.blogspot.ca/.

Here is an excellent Smalltalk tutorial video to get you started:

I actually went through the online interactive tutorial discussed in the video above. You get a better feel for the language by doing rather than watching.

This introduction to the Pharo programming environment (despite the title, it doesn’t really talk about the language itself) is very well done:

So is this introduction by Noel Rappin:

If you’re inclined to read, I recommend the book “Pharo by Example” (also available as a free PDF), which comes with a downloadable version of Pharo tailored for the book.

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: https://teams.jrmpc.ca/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: https://teams.jrmpc.ca/leaderboard.

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 jrmpc.ca/blog 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!

The Top Five at Slant

Slant.co 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