← Back to home

Programming language getting-started test

When trying out a programming language, it should be easy to find the features, try it out, install it, write a program, and do several common things. I made a test for programming languages - similar to The Joel Test - that measures ease of getting started.

This post has been archived.

It's very frustrating to try a new programming language. I made it to the landing page. I'm convinced that it's worth trying. And now I have to do a dozen things that can take hours just to get the language on my machine. It's worse if I actually want to run Hello World.

If you really believe your language is a good one; that it is better, faster, will let me do more, and write quality code, what do you have to loose by making it easy to get, install, and run your language on my machine?

A lot of sites have come a long way by making it easy to run the language in the browser. This is a great way to convince me that it's worth learning. But when I want to get the language on to my machine, and go from a single file to binary, there are thirty different ways to do it; many of them requiring hours of effort, and possibly spread across multiple websites.

You get the sense from a lot of these sites that they think their language is so powerful and so useful, that it stands on it's own, and users will be sufficiently motivated to give it a crack. But a lot of users correctly assume that if it's a huge pain to get started, development might not be much easier. If you didn't consider the human factors when designing the infrastructure around your language, why should I think that you considered them when designing the language itself?

People often say that after you've learned two programing languages, it's unlikely that you'll learn a third. There might be some truth to it. For many people, learning another language is only partly related to desire and mostly related to easy of use. If I have a Saturday morning blocked off for learning something, I don't want to spend it troubleshooting.

Basically, if you're a maintainer for a programming language, you can't really complain that other languages get a lot of attention. You live on an island that is hard to get to. You should make the boats easy to get in.

I've come up with a simple but effective way to measure language ease of getting started. I think there should be something like the Joel Test for programming languages. Let's call it The Programming Language Getting-Started Test.

It goes like this. From the home page:

  1. Can I see the goals and features of the language concisely?
  2. Can I try the language in less than 3-clicks?
  3. Can I download the programming language?
  4. Can I find a file-to-executable tutorial in less than 3-clicks?
  5. Can I find a web-server tutorial, http request tutorial, or read-a-file tutorial in less than 3-clicks?

If you fail any of these, your programming language can be perfect, and it will still not be useful.

1) Can I see the goals and features of the language concisely?

It's surprising how many programming languages give you a manifesto instead of an elevator pitch. Having a manifesto is great, but it's not the best way to communicate the goals; it's the deep reasoning behind them. I need to be able to see immediately what kind of language you want me to use, and why.

2) Can I try the language in less than 3-clicks?

It's fairly standard to have either a browser implementation of the programming language or to have some sort of runnable example. Before I decide to download your language, or even use it, I want to be able to edit the Hello World, and if I can't find a place where you've made that easy, I'm unlikely to continue to the download page.

3) Can I download the programming language?

If I need to follow a set of instructions just to find the stable distribution, it's unlikely that using the language, or reading the documentation is going to be more pleasant. If I've decided to use your language, I should be able to start right away, and because the more clicks/hours/hurdles between me and getting hello world running the less likely I am to continue to use it.

4) Can I find a file-to-executable tutorial in less than 3-clicks?

If I've made it through the first three steps, I want to know the deeper questions about how I can write code and solve problems in your language. It's amazing how many languages have home pages that show you endless features, and syntax examples, but don't feature a single tutorial to get your code to an executable. I want to use your language; but I need to know that I'm not going to download it, install it, get started only to find that there are six or eight requirements to compile it and run it.

5) Can I find a web-server tutorial, http request tutorial, or read-a-file tutorial in less than 3-clicks?

We've made it past the easy parts. I know what your language does, I can download it, and I can see a live example, and I can compile the code to a single executable and run it. Now I want to know if you've thought through the documentation and support. If I can't find a tutorial on how to do something as simple as these three things, it doesn't matter how powerful your language is because your documentation is unlikely to be as good, or as effective in communicating that power.

The Results

Here are a few that I've looked at.

Features Live-Try Download Executable Tutorials Go
Yes
Yes
Yes
Yes
Yes
Java
Yes
No
Yes
No
No
Python
Yes
Yes
Yes
Yes
Yes
Node
No
No
Yes
No
No
Rust
Yes
No
Yes
Yes
Yes
Haskell
Yes
Yes
Yes
No
No
F#
Yes
No
No
No
No
D
Yes
Yes
Yes
Yes
Yes
Julia
Yes
No
Yes
Yes
Yes
Perl 5
Yes
No
Yes
Yes
Yes
Clojure
Yes
No
Yes
Yes
No

The test isn't perfect; some languages have the benefit of popularity to get them past the hurdles of downloading and try-it-out features. The basic intention of this test is to clearly see how easy it is for a lightly interested programmer to use your language. You're creating something has a purpose. Make it as easy as possible for the user to use it, even if you are giving it away for free.

code
2019-09-07