Rust and Smalltalk are perfectly complementary!

Rust has been selected as the Most Loved programming language at StackOverflow Developer Survey for five consecutive years! No other language commands so much respect.

Rank20162017201820192020
1RustRustRustRustRust
2SwiftSmalltalkKotlinPython/TSTypeScript
3F#TypeScriptPythonKotlinPython
4ScalaSwiftTypeScriptWebAssemblyKotlin
5GoGoGoSwiftGo
6ClojurePythonSwiftClojureJulia
7ReactElixirJavaScriptElixirDart
8HaskellC#C#GoC#
9PythonScalaF#/ClojureC#Swift
10C#Clojure/JSBash/ShellJavaScriptJavaScript
StackOverflow Developer Survey’s Most Loved

And for good reasons. Rust is greatly lauded for:

  • memory safety guaranteed by the compiler (type system) and making garbage collection unnecessary
  • close-to-the-metal native code performance
  • efficient multi-core concurrency
  • zero-cost abstractions

These strengths are Smalltalk’s weaknesses, but Smalltalk’s strengths are also Rust’s weaknesses:

  • supremely simple object-oriented programming model (suitable for children and beginners)
  • supremely scalable object-oriented programming model (Alan Kay called Smalltalk a “software internet”)
  • flexibility of dynamic typing and late binding
  • super productivity and flexibility due to live coding (up to 5X more productive!)
  • portability of language virtual machine (byte code like in JVM and CLR)
  • convenience of image-based computing (persistable containerized environment)

(While multi-core concurrency is possible in Smalltalk, as demonstrated by the RoarVM, unfortunately this is an experimental project that has lain fallow for a decade.)

Both programming languages are very useful in their respective domains, but neither can be used universally for all applications. The nice thing, however, is that these languages are perfectly complementary. Between them, there isn’t anything you can’t do.

If you need critical, real-time performance, Rust is your ticket, although programming is considerably more complicated. For just about everything else, Smalltalk is tickety-boo: web, desktop, mobile, data science, machine learning, Internet of Things, robotics, virtual reality, enterprise business computing, and so on. And it’s much easier, too.

It’s worth noting that in 2017, StackOverflow’s survey voted Smalltalk as the second Most Loved language after Rust. Why it disappeared from all subsequent surveys is anybody’s guess.

Anatomy of a Programming Competition

Introduction

This is a case study of The James Robertson Memorial Programming Competition, which was created to promote the Smalltalk programming language. This is a case study by example, showing what was done and how it was done.

Promotion and Marketing

Advertising the competition at CBC.ca proved ineffective and costly. The click-through rate was infinitestimally small. Otherwise, we relied heavily on YouTube and social media.

YouTube Videos

Several promo videos were created:

using Powtoon
using Animaker
using Animaker

Blogs and Social Media

The main social media sites used included Twitter, Facebook, LinkedIn, Medium, Hacker News, Instagram, and Quora.

Competition Websites

Two websites were created, one for advertising the competition and the other for operating the competition (team registrations and team submissions). The advertising website has been archived. This website was based on WordPress.com. The domain name, jrmpc.ca, was purchased from Google Domains.

The advertising website is also archived live at jrmpc.wordpress.com.

The operational website has also been archived. In the home page, Internet Archive has a problem with the embedded YouTube link, but the unplayable video is the same as the first one shown above in the YouTube Videos section (Mission: Impossible-themed).

The operational website was hosted at OVH (VPS SSD 1 running Ubuntu 16.04 LTS). The web application was written in Pharo in conjunction with the Teapot framework. The domain name, teams.jrmpc.ca, was configured at Google Domains, and the PositiveSSL certificate was purchased from Namecheap.

Contacting Schools

High schools across Canada were contacted by email, as well as snail mail. Attempts to contact various school boards were unproductive.

T-shirts and Swag

Our budget only allowed for T-shirts (from Big Mouth Promotions). Here is the design (for the front of the shirt):

using GIMP and Inkscape
examples from a team

The T-shirts were sent to all the participating teams; they were a big hit with everyone. About 100 shirts were made available for a public giveaway at the awards ceremony at Ryerson.

If budget allows, I think Smalltalk-styled coffee mugs would be a very nice giveaway.

Competition Software

The open source software for the JRMPC Organiser is now available, thanks to the great effort by Ben Coman who developed it.

JRMPC Organiser screenshot

Awards Ceremony

Trophies

The trophies for First, Second, and Third Prizes all came from Innovative Imprints in Pickering, Ontario.

Venue

The awards ceremony was scheduled for Saturday, April 18, 2020 on the campus of Ryerson University. However, due to COVID-19, a virtual ceremony was conducted instead. Here was the result:

Lessons Learned

Since this is the first edition of JRMPC, there were bound to be some teething pains. We learned several important lessons:

  • First, the website should’ve been clearer about team composition, esp. the fact that a team must comprise four students. No exceptions.
  • Second, the website should’ve been bilingual so that Quebec would participate.
  • Third, better instructional materials should’ve been provided to the teams. Our existing tutorials and such were found wanting. Some teams complained that Pharo was too difficult to learn.
  • Fourth, the competition software should’ve been fully prepared, tested and debugged by the start of competition. During the course of the competition, bugs were found and the competition maps revealed weaknesses.
  • Fifth, a larger team of volunteers should’ve been assembled. This competition entailed a great deal more work than I imagined.
  • Sixth, we were fortunate that we only had 30 registered teams. In hindsight, we weren’t really set up to handle more. In order to scale the competition properly, we’d need more money, more volunteers, and we’d need to limit the competition to 100 registered teams. Also, only the first 30 teams would receive T-shirts.

Despite it all, we are pleased at the outcome.

Conclusion

The competition was a smashing success. Thirty teams registered from across Canada. Videos were created for each of the five rounds. I’ll just show the first and last of them here to avoid repetitiveness:

Hopefully, the information here can help you with your own programming competition.

Smalltalk’s Successor

Alan Kay, one of the co-creators of Smalltalk, has said that he’d like to see Smalltalk evolve beyond what it is today. He believes that Smalltalk is stagnating and failing to advance the software industry. While I agree with him in principle, I also take a more pragmatic position. I believe that we cannot wait for this mythical new programming language and that we must use whatever we have available today because the software industry is in crisis. The demand for more and better software created in a timely manner is continually increasing and it’s causing considerable stress for programmers and users alike.

At the moment, there is only one programming language that has any hope of meeting this demand. I do not posit this lightly nor frivolously. Here are the key reasons why Smalltalk is perfectly suited to this mission…

Smalltalk has a great and storied history.

A programming language ideally should command respect, and there’s no better way to do this than by demonstrating a wonderful record of achievements. History matters.

Smalltalk pioneered the language virtual machine and JIT compilation. It created the world’s first modern IDE. It introduced the MVC architectural pattern. It pioneered TDD (test-driven development) and XP (extreme programming). It made live coding easily accessible. It pioneered the development of object-oriented databases. It created the world’s first refactoring browser. It was instrumental in developing GUI and WYSIWYG.

begin at 19:28

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

It popularized object-oriented programming starting with the now-iconic cover of BYTE magazine.

August 1981

Smalltalk has a proven track record.

Smalltalk has been used in the enterprise for more than three decades. In the 1990s, it achieved the second highest object-oriented market share in the world after C++. IBM even chose Smalltalk as the centrepiece of their VisualAge enterprise initiative.

Today, there are three major Smalltalk vendors with thousands of enterprise users around the globe: Cincom, Instantiations, and GemTalk Systems. Many of these enterprise users are big names in the financial industry, manufacturing sector, shipping, utilities, etc., for example, JP Morgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Siemens, and COSCO.

Smalltalk is incredibly simple and easy to use.

It’s even simpler and easier than Python! The syntax is as simple as you can imagine. It fits on a post card!

Smalltalk is extremely flexible and versatile.

Smalltalk has developed an extensive ecosystem. In the web space, you have the Seaside and Teapot web frameworks, and Amber and PharoJS for front-end development. In data science and machine learning, you have the PolyMath library, Roassal data visualization, and language bindings for TensorFlow and Keras. For Internet of Things, you have the PharoThings platform. For robotics, you have the PhaROS platform. Smalltalk is great for virtual reality!

Smalltalk is the most productive programming language in the world.

A study by Namcook Analytics showed that Smalltalk was, on average, twice as productive as JavaScript, C++, Go, Java, PHP, Python, and C#. Experienced Smalltalkers regularly develop software up to 5X faster than in conventional languages.

Smalltalk’s remarkable live coding capability plays a critical role here. Only two other significant languages support live coding: Forth and Lisp. But Smalltalk makes its very easily accessible.

Smalltalk is infinitely scalable.

Thanks to its pure object-oriented model which views the Smalltalk environment as a sort of “software internet,” applications can grow in a manner resembling the Internet. It has also been likened to biological systems of cells.

begin at 2:16

Any new programming language, no matter how superior to Smalltalk, would lack history, a track record, an ecosystem, a user base, and mindshare. Marketing the language would face an uphill battle and growing the language’s mindshare would take a considerable amount of time.

Meanwhile, we wait and we wait and we continue fighting a backlog of software that demands to be written.

Smalltalk Alternatives

There are newer languages that compete with Smalltalk, such as Dart, Go, Julia, Kotlin, Rust, Scala, Swift, TypeScript. Some are very large and complex (Kotlin, Rust, Scala, Swift, TypeScript). Some are used in narrow domains (Julia, Rust, Swift, TypeScript). None are as simple and easy as Smalltalk. None are as productive and scalable. None support live coding. None are as elegant.

So, really, the best choice we have today is Smalltalk. It comes in various flavours to meet various needs:

  • Instantiations’ VA Smalltalk for enterprise markets
  • Cincom’s VisualWorks for enterprise markets
  • GemTalk Systems’ GemStone/S for high-volume, high-availability transaction processing
  • Pharo for open source requirements
  • Squeak for the education market

Is there really a need for a successor?

Ryerson University Joins Pharo Consortium As Academic Partner

I am pleased to announce that Ryerson University joins the Pharo Consortium as an Academic Partner. The Consortium will strengthen Pharo’s applicability for mission-critical software development.

Ryerson does leading research in Pharo development under the auspices of Prof. Dave Mason, Chair of Computer Science. Here is one of the areas of research: PharoJS.

Ryerson just came off a major Pharo programming competition conducted in Canada. The outstanding results can be see here: JRMPC 2020 Awards Ceremony.

Pharo is a modern, open source derivative of Smalltalk that was created in 2008. It is highly innovative and forward-looking. Pharo is totally web-ready for both front-end and back-end development. Pharo is also well-suited for data science and machine learning, as well as Internet of Things applications. Pharo is used in other areas, too, such as robotics, virtual reality, enterprise business applications, and so on. The language is endlessly versatile.

Pharo is ideal for teaching object-oriented programming to beginners and college freshmen. It’s absolutely wonderful for hobbyists, too.

JRMPC 2020 Awards Ceremony

JRMPC, or The James Robertson Memorial Programming Competition, is a national contest open to Canadian high school students. It was completed on March 6, 2020 and the awards ceremony was scheduled for April 18.

Here is the awards ceremony video for JRMPC 2020:

I hope you enjoyed it. This video represents the culmination of eighteen months of hard work on the competition. It also nicely caps off a five-year advocacy campaign for the Smalltalk programming language.

Here are close-ups of the trophy awards…

First Prize:

Second Prize:

Third Prize:

Presentation Box:

For more details about the competition, read “JRMPC 2020 Award Winners.”

A note about the JRMPC operational website, teams.jrmpc.ca. It was created using the Teapot web framework and Pharo, a modern derivative of Smalltalk released in 2008. Teapot is a lightweight framework for those situations where the full industrial strength of Seaside is not required. Teapot and Seaside, as well as PharoJS (which transpiles to JavaScript), make Pharo totally web-ready for the twenty-first century.

I would like to thank the following people profusely for their contributions to JRMPC and this video:

  • Vance Kershner, CEO of LabWare, who fully funded this competition.
  • Leandro Caniglia, President of FAST (Fundación Argentina de Smalltalk), who invited me to speak at the Smalltalks 2018 conference in Salta, Argentina. Without him, JRMPC would never have been funded.
  • Ben Coman for developing the JRMPC Organiser software. In particular, I appreciate the spectacular competition map that Ben created for the final round of the competition. You can see it in the feature image above for this post.
  • Bob Nemec, Organizer of TSUG (Toronto Smalltalk User Group), for being my Master of Ceremonies.
  • Robert Eng for providing the beautiful graphic animations produced with Blender.
  • My wife, Ann Liu, for helping with the photography.
  • FXHOME for the HitFilm Express video editor that made my job much easier than I could’ve imagined.
  • Norman Branitsky for introducing me to Smalltalk over a dozen years ago. Without him, I would never have begun my Smalltalk journey.
  • Ron Teitelbaum, CEO of 3D ICC, for allowing me to use their website graphics.
  • Alan Kay, Kent Beck, and Norm Green, Senior VP of GemTalk Systems, for supporting the competition.

Smalltalk is a true marvel of the software engineering world. It is renowned for its simplicity, scalability, productivity, and versatility. Smalltalk has been used for practically everything, from teaching programming to young people all the way up to massively complex software systems that are highly scalable and maintainable. For this reason, Smalltalk is a favourite in the enterprise market.

It is my wish that the JRMPC competition will inspire you to try Smalltalk programming. Discover the wonders of one of the greatest programming languages in history.

What is your "spirit programming language"?

The definition of a “spirit animal”:

In certain spiritual traditions or cultures, spirit animal refers to a spirit which helps guide or protect a person on a journey and whose characteristics that person shares or embodies. It is also metaphor, often humorous, for someone or something a person relates to or admires.

dictionary.com

Someone at Quora asked: How do you decide what is your “spirit programming language”?

I found this question intriguing. It speaks to the special nature of programming languages and how one may have a particular affinity to a specific language. I think many developers do have a spirit programming language, even if they don’t realize it.

Here was my answer…

There are several things you may consider:

  1. which language offers the most job opportunities — this is decidedly a very pragmatic consideration because we all have to eat
  2. which language appeals to you aesthetically and philosophically — this is, of course, very much a matter of individual taste
  3. which language is primarily used in your preferred application domain — assuming, of course, that you have a preferred application domain
  4. which language you find very easy to use and makes you most productive — this can only come from your personal experience
  5. which language is most versatile — it can do nearly everything with equal aplomb

So, based on these considerations, you might choose one of the following as your “spirit programming language”:

  1. Python or Java — at Indeed, they have the most job postings
  2. if you’re inclined toward functional programming, look at Elixir; if you’re inclined toward object-oriented programming, look at Pharo
  3. if your preferred domain is front-end web, JavaScript is really your only choice; if you prefer data science, Python is your best choice
  4. without doubt, Smalltalk (or Pharo) is the most productive language, by far, because it’s so ridiculously easy to use
  5. there are several enormously versatile languages to choose from: C++, Java, Python, Smalltalk (or Pharo)

Smalltalk (Pharo) became my “spirit programming language” because:

  • it’s really, really easy to learn and easy to use, much more so than, say, Python
  • it’s the most productive programming language in the world
  • its object-oriented purity, clarity, and consistency are beautiful to behold
  • its live coding capability is wonderful
  • its metaprogramming capability is wonderful
  • it’s amazingly versatile…

Use Pharo for back-end web with Seaside and Teapot frameworks.

Use Pharo for front-end web with Amber and PharoJS.

Use Pharo for data science with PolyMath, Roassal, and Moose.

Use Pharo for machine learning with TensorFlow and Keras.

Use Pharo for Internet of Things with PharoThings.

Use Pharo for robotics with PhaROS.

Use Pharo for virtual reality:

Use Pharo for scripting the Unreal game engine:

Here’s a fantastic Roassal demonstration:

Here’s a great demonstration of Pharo’s live coding:

Here’s a nice game for mobile that was written in VisualWorks Smalltalk: HexSolve.

Create your website at WordPress.com
Get started