-
In what ways is the data-driven syntax better than a custom string syntax? In what ways is it worse?
-
In what ways is it better than a "fluent design" (using functions and macros)? In what ways is it worse?
-
How easy is it to programmatically compose parts of a program into a working whole?
-
How easy is it to read vs. write vs. modify?
-
Is there an "escape valve" to allow users to do something in a custom way?
-
How well would the syntax "scale" with a larger problem?
-
After part of the syntax is learned, how easy is the rest to guess?
-
Is there any possible ambiguity between components of a program?
Below we've adapted several questions from Thomas Green's 'Cognitive Dimensions of Notations' a set of design principles for notations.
-
How easy is it to make changes?
-
Do small changes in one place require changes in many others?
-
Are there particular changes that are more difficult to make?
-
How verbose is the syntax?
-
What sort of things might take more space to describe?
-
Would it be longer or shorter to do with a general purpose language?
-
How much 'cognitive load' does this syntax require of the user?
-
How many degrees-of-freedom are there in the syntax? If you had to write a parser, how complex would it be?
-
How complex is the mental-model of the underlying "machine"?
-
To what extent does the syntax influence the likelihood of the user making a mistake?
-
What is the most likely mistake a user might make with the syntax?
-
How closely does the syntax correspond to the problem domain?
-
How much effort does it take to translate a problem to fit within the syntax?
-
When reading the syntax, is it easy to tell what role each part of the syntax plays in the solution as a whole?
-
Are there some parts of the syntax more difficult to intepret?
Hidden Dependencies
- If some parts of the syntax are related to others (ex. a change to one requires a change to the other), are those dependencies visible?
- How easy is it to get feedback on an incomplete program? (ie. Is it possible to try out a partially-completed version of a program, and compose it in stages?)
-
In practice, does the syntax impose a certain order in how it is used?
-
Does the syntax force you to think ahead and make certain decisions in advance?
- Are there places in the syntax where some things ought to be similar but the syntax makes them different?
- Does the syntax make it possible to encapsulate details through new abstractions?
- How easy is it to compare different programs in the syntax and spot differences?