structs can have an impact on learnability. Empirical studies by Stefik
and Seibert34 have found that common keywords like for or operators
such as != serve as hard-to-learn jargon, and are not as easily learnable
as familiar words such as repeat or
unequal. They found the syntax of
languages such as Java and Perl are
no more learnable than a synthetic
programming language with randomly selected punctuation used for
keywords. Even more important for
learnability are the abstractions chosen by language designers to allow
users to build simple programs with
compelling behavior. For example,
the designers of Alice worked with
users to develop intuitive abstractions for controlling 3D animations.
During their design process, the Alice team eliminated jargon such as
transformation matrices and substituted more intuitive concepts like
object-relative motions. These new
abstractions made it easier for users
to specify 3D animations.
7
Designing languages and libraries focused on learnability based on
empirical evidence is a major area for
future work.
Runtime understanding. The dynamic state of a program can be made more
understandable by making its state visible. For example, Code.org highlights
the individual block actively running
so the correspondence between code
and action can be seen. Snap! provides
widgets for every variable to show the
current state.
Even with highly visible state, understanding actions in the past or future can be difficult. Liveness20 is one
approach to addressing this problem.
A live system aims to make actions concrete by applying them immediately to
the current state. For example, in App
Inventor, Scratch, and Snap!, many edits to a running block program take effect immediately, without the need to
restart the program.
Another approach for making the
evolution of state understandable is to
allow the programmer to travel in time
by inspecting, advancing or rewinding
the timeline of a program. The concept
of omniscient debugging was first de-
scribed in the early 1970s as a capabil-
ity to trace backward in time through
execution history to identify the loca-
Directly manipulable blocks also
encourage bottom-up tinkering with
program pieces in ways not directly sup-
ported by raw text. Blocks programmers
experiment with blocks by connecting
them to build islands of code fragments
on the programming surface that are
isolated from the main program.
22, 38 In
blocks environments supporting live-
ness,
20 these fragments can be executed
by pointing and clicking, providing a key
benefit of interpreted text-based lan-
guages without a read-eval-print
loop console separate from the editor.
The program gradually grows as it is aug-
mented by dropping in these fragments
when they behave as desired.
Learnability Beyond Blocks. Blocks
aid in the construction of code, but
blocks alone are not enough to make a
programming language learnable. Users new to a language face additional
learning challenges:
˲ They must wrestle with practical
aspects like installing language tools,
saving/loading programs, and so on;
˲ They must learn the vocabulary of
the language and understand the concepts denoted by its words;
˲ They need to understand runtime
semantics such as flow of control and
changes in state over time; and,
˲ They eventually need to learn common patterns of use, moving beyond
isolated concepts.
Each of these learning hurdles can
be helped or hindered by the programming environment, and each of these
problems is an area of active research
and development.
Programming online. To simplify
installation, programming tools are
moving online. When a programming
environment is in a Web browser, a
new programmer is just a few clicks
away from creating a first program. A
cloud-based programming tool can
provide a complete and consistent
programming environment with fewer
potential problems.
Although blocks programming environments for beginners have long
been offered online, text-based programming environments are also becoming available online. With tools
such as Cloud 9, CodeAnywhere, and
CodeEnvy, programmers of all levels
can benefit from working online.
Words, concepts, and abstractions.
The names chosen for language con-
By organizing code
as visible chunks,
blocks help new
programmers
concentrate on
what the code
means rather than
the notation that is
used to write it.