Elan is a new programming language integrated into a unique development environment, both running as a single page app within a browser (Chrome is recommended). The language, environment, and associated teaching resources, are all free and open-source. It may be run from the public site (recommended – so you are always using the latest version), or installed on your school/college web server.

Elan is specifically designed for teaching programming in secondary schools and colleges, or first year of university. It places emphasis not just on learning how to program, but learning how to program well.

Elan supports the three most widely recognised programming paradigms:

- procedural programming
- object-oriented programming
- functional programming

# Features

- A 'frame-based' code editor, that has the look of a text-based language and editor, but feels somewhat like a block-based language. As well as aiding productivity and reducing the need for typing skills, it eliminates the majority of syntax errors.
- A built-in library, the use of which does not require any import statement.
- A display screen alongside the code editor, with the ability to output simple block graphics, turtle graphics, vector graphics, and formatted, styled Html.
- A built-in debugger.
- Ready-made demonstration programs (see the Demo button)
- Ability to display reference documentation or tutorial worksheets alongside the code editor.
- Absolutely no AI – so teachers and exam boards can be confident that pupils are not getting inappropriate help.

# Team

Elan was conceived by Richard Pawson in May 2023. The original design & development team consisted of Richard, Stefano Cascarini (lead technical developer), and John Stout. From the outset we have sought regular input and feedback from recognised experts in computer science education including: Michael Kölling and Simon Peyton Jones. We are also reliant on volunteers to test the prototypes, write example programs, and assist with documentation and resources. In particular, we would like to thank: Nela Brockington, Charles Wicksteed, and Bernard Boase for regular help of this kind. If you are willing to assist in any way please get in touch...

# Contact us

The Elan language source code is managed on GitHub here.

If you have questions not answered in the documentation, can offer feedback, or would like to help, please post a new thread on our Discussion forum here.

# FAQs

### Is Elan a compiled language?

Yes. Elan source is compiled to JavaScript and runs very fast. As with most modern languages the compilation process is invisible to the user.

### Can an Elan program be run without the Elan IDE?

Yes. When you've written and tested your Elan program, you can simply use File > Save as standalone to save the program (compiled to JavaScript) embedded within a standalone .html page. You can email this .html file to anyone else. They can open it in their browser and the program will run automatically. All they see is a larger version of the Display pane. They don't need to know anything about Elan to use the program.

### Can I install Elan on my school server?

Yes. If you go to Help > Version history you can download a .zip file for the current or previous releases of Elan. These can unzipped into any web server for private access. However, unless you have a reason to do this we recommend that you use the online version, as this will ensure that you are always using the latest release.

### Why learn (or teach) a programming language that isn't used in industry?

Elan is designed specifically for teaching and learning programming, at high-school (KS3—KS5) and in first year university/college. It is not designed for professional developers, nor will we let it evolve into a professional language, which has been the fate of many educational languages - usually to the detriment of their educational merits.

There are very good arguments as to why the requirements for a good educational language are different to those for a good professional language. See, for example, Principles of Educational Programming Language Design by Michael Kölling, Informatics in Education Volume 23, Issue 4 (2024). In addition to those arguments, we suggest:

- Learning to program in a language used in industry isn't as useful as many people imagine. There are many languages used in industry: so what are the chances that the one you have learned happens to be the one used in the organisation you want to join?
- More important than 'Is [the language I am going to learn] used in industry?' is the question, 'Will this language make it easy for me to switch to another language in future?' and, even more important, 'Will this language help me to learn to program well?'.
- Elan is designed to lay a far better foundation than you are going to get from learning Python, VB, C#, Java, or any other language widely used in education today. Elan directly prevents you from learning bad habits that those languages can encourage. To pick just one of many examples: why start off writing 'global' variables only to have to learn, later on, not to use them at all? Elan doesn't allow you to define any global variables in the first place.
- If you pursue programming beyond your current educational level, then you can expect to learn 'functional programming' in a language such as Haskell. The hard part isn't learning the different syntax of Haskell: the hard part is learning how to build systems entirely from pure, side-effect free functions. But if you have learned Elan first, the transition is going to be much easier, because in Elan you could never have learned to create side-effects or system dependencies in functions. Elan prevents them. And while, for most professional programmers, it takes years to get into the habit of writing unit tests for all your functions, Elan encourages that from the very beginning of programming by making it an integral feature of the language and very simple to use.

### Is Elan compatible with GCSE / A-level exams?

Elan is fully compatible with OCR GCSE and A-level Computer Science - see this blog post on the OCR web site. Moreover, because Elan syntax is very close to the OCR 'pseudo code' specification – at least for all the coding constructs expected by OCR – answers given in Elan will be easily comprehensible to any OCR examiner. We hope that other boards will support Elan in future.

### Can we trust that Elan will remain free to use?

Yes. We are committed to this on principle and we have a governance board to ensure that continues. It is also worth pointing out that Elan is just a 'single page app' – once you have accessed the page, your code is edited, compiled, and run entirely within your browser, and Elan files are saved locally. This means that we have no complex server infrastructure to host, maintain, or fund. Moreover, since Elan, its documentation, and associated teaching resources, are all open source, there is nothing to stop you from serving up this same page and resources from your own server. We recommend that you use our online version (at https://elan-lang.org) if you can, simply because that way you will automatically be using the latest version.

### How stable is the Elan language?

We will continue to extend and improve Elan – with frequent new, non-breaking releases. A non-breaking release means that any programs you have written previously will still load and run correctly. Elan is committed to semantic versioning:

- Third-level releases(e.g. v1.0.X) are bug fixes, or changes to the IDE only – but with no change to the language or library.
- Second-level releases (e.g. v1.X.0) may extend the language or library, and as such are always 'backwards-compatible'. This means that you will be able to load and run existing programs without modification. However, any new programs you write using the new version, will not necessarily run on an older version of Elan that was installed on a private server.
- First-level releases (e.g. vX.0.0) will occur if we were to see a compelling reason to make a small breaking change to any existing part of the language grammar or the library – and this would always be publicly discussed in advance. Even then, the change would be managed in such a way that a clear compile message would be shown alongside any obsolete instruction or library method used in your code – with a link to clear and simple guidance on how to make your code compile and run again.