Quality: Writable

(easy for someone familiar with the language to use in new ways)

In addition to being readable, an Intuitive Programming language must also be easy to write. A script author should be able to express their intent easily, with minimal effort spent on issues of syntax or wrestling with programming structures that are secondary to the task at hand.

While readability is easy to describe and to recognize, making a language that is easy to write is a more difficult task. To write a script in any language requires an understanding of programming concepts, and learning the syntax and paradigms of the particular language.

A language that is easy to read and understand will be easier to learn and to write, so readability is a good first step toward writability. To be easily writable a language must also be expressive, flexible, and forgiving. Using a syntax and terminology that is close to natural language is a huge help.

With an expressive, flexible language, you may learn how to express something in one situation:
if quantity is evenly divisible by two

and when a similar situation arises later, an imperfect memory of the approach used before may be good enough:
if the counter is a multiple of 10 then


Consistency also helps make a language more writable. If the same concepts and terms apply in many situations, a technique learned in one context can be applied in another:

put characters 2 to 4 of "GERANIUM" —> "ERA"
put word 2 of "We Shall Overcome" —> "Shall"

Given the preceding examples, you may not need any documentation to know how to access the third item of a list:
put item 3 of [2,4,6,8] —> 6

or how to access the second line of a file:
put line 2 of file "myFile.txt"


But there are also pitfalls with an English-like language. The closer a language is to natural speech, the greater the frustration for the user when things must be expressed in a precise way to be understood. To be easy to write, a language must allow for slight variations in natural expression and provide a rich vocabulary for the user.

sort scores in descending numeric order
sort scores numerically descending
sort in descending order the items of scores