Full Text 01
Full Text 01
I wish to express my sincere thanks to my supervisor Dr. Jonas Lundberg for providing
guidance and support through the process of writing this thesis. His honest and valuable
feedback allowed me to increase the quality of my work. I would also like to thank the
second reader of this thesis, Tobias Andersson-Gidlund, for contributing with an outside
perspective and with input that could have otherwise been overlooked. Lastly, I am
grateful to my mother and sisters for their unconditional support.
Contents
1 Introduction 1
1.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Problem Formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Target Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7 Outline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Related Work 5
2.1 Influential Studies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Research Methodology 7
3.1 Literature Review Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Defining Search Criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Conducting Searches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4 Selecting and Filtering Studies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.5 Reliability and Validity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6 Ethical Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4 Literature Review 11
4.1 Language Choice in Introductory Programming . . . . . . . . . . . . . . . . . . . . . . 11
4.2 Intrinsic Complexity and Cognitive Load . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3 Difficulties in Introductory Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.3.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3.2 Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3.3 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4 Misconceptions and Non-Viable Mental Models . . . . . . . . . . . . . . . . . . . . . . 21
4.5 Language Design for Introductory Programming . . . . . . . . . . . . . . . . . . . . . 25
4.5.1 Pedagogical Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.5.2 Design Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5 Frendli – The New Programming Language 28
5.1 Goals and Syntactic Design Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1.1 Novice-Oriented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.1.2 Action-Based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.1.3 Low-Conflict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.1 Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.2 Comments and Blank Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.3 Indentation, Block, and Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.4 Identifiers and Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.5 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.6 Expressions and Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.7 Statements and Control Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.8 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2.9 Standard Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2.10 Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3 Sample Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4 Justifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.5 Grammar and Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6 Discussion 36
6.1 Alternative Programming Language Designs . . . . . . . . . . . . . . . . . . . . . . . . 36
6.2 Validity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7 Future Work 39
8 Conclusion 40
9 References 42
1.1 Background
The number of publications on introductory programming has been steadily increasing
for years [6]. A vast majority addresses teaching and student aspects such as learning,
perhaps signifying a growing importance and need to identify preferred approaches over
others. Numbers from various institutions reveal that dropout rates from 30% to 50%
are common for both introductory computer science (CS1) courses and computer
science degrees [7], [8], [10], [11]. A study investigating failure rates in CS1 globally
(Europe and North America most represented) found the average failure rate in 2017 to
be 28%–a decline from 33% in 2007 [9]. The decline yields a glimpse of optimism, yet
one could argue that it is still high. However, not all attrition can be attributed to
difficulties in learning or teaching. Interviews with students showed that lack of time
and motivation were the most common reasons for dropping out [11]. Important to note,
nevertheless, is that the perceived difficulty of the course, as well as factors not related
1
to programming, did affect both primary reasons. Students may also hold
misconceptions about computer science as a field [8], thus their reason for enrolling in a
course may be misconstrued to begin with. Hence, one should not assume that solely
eradicating all difficulties will affect dropout rates equally much. As presented
throughout this paper, there are numerous challenges for novice programmers, but they
can indeed be mitigated to certain extents and still positively impact students’ ability to
learn.
….Some difficulties and misconceptions held by novices pertain to fundamental
constructs and concepts such as variable declarations and assignments, loops,
conditionals, and scope; object-oriented concepts such as the role of a constructor, class,
and object; syntax such as the choice of keywords, semicolons, parentheses, and
operators; problem solving; and cognitive skills [1], [2], [3], [14], [15], [16], [19], [24],
[35], [36], [37], [38]. To address these issues various techniques have been employed.
Visualization and graphical tools have been used to help form mental models, as well as
challenging students’ pre-existing notions–a main aspect of cognitive conflict theory–in
order to address non-viable mental models [2], [6], [17], [29]. Games and
problem-based learning are additional approaches used [6], [39]. Seeing how text-based
programming languages themselves impact their users, they, too, are considered by
institutions and instructors. Yet, which techniques or languages to use in introductory
programming courses has been and still is a highly debated topic [6], [36], indicating a
general lack of consensus.
….Some studies point to a simpler syntax being easier to understand [2], [14], [40]. It
seems unlikely, nevertheless, that merely making it simpler, in terms of being minimal,
would always make it more understandable. At some point, few-letter abbreviations and
terse code ought to decrease readability to the untrained eye as is supported by a study
reporting a faster comprehension speed for fully spelled out words [41]. Sometimes a
simpler syntax also comes at the cost of semantic simplicity which may not always be
favorable for novices [25]. Rigorous empirical studies have also demonstrated how
several of the commonly used programming languages use syntax with remarkably
unintuitive word choices [14], [23]. Moreover, while some research indicates
favorability toward syntactic simplicity, others have found advantages of using more
complex languages like Java and C++ [3], [27]. Accordingly, syntactic factors other
than mere simplicity ought to influence code comprehension.
….Given the inconclusiveness of the literature and the numerous papers reporting no
meaningful differences in students’ learning outcome [6], the wide and heterogeneous
array of introductory languages used seems reasonable [13], [42]. Encouragingly, many
of the difficulties and misconceptions held by novices, be they perceived or actual, have
been identified in the literature, allowing them to be strategically and effectively
exploited in the creation of new languages. Even though the improvement in one or a
few programming aspects alone likely do not solve the notion of learning to program
being unnecessarily hard, uncovering how the process can be simplified in areas of
known difficulties such as syntax and semantics can contribute to coming ever closer.
Thus, there is undoubtedly room for exploring how to further facilitate learning for
novices, particularly through untraditional language design.
2
as also noted by others [14], [23], [30], [31], [32], [33]. Even though there are many
factors affecting the learning process of students, the programming language itself is an
integral and inevitable part of that process. To not address the impact that language
designs have on students in particular is problematic as it impedes possible
improvements in future or current languages as well as introductory courses.
….Thus, the questions asked in this research revolved around how to improve syntactic
and semantic aspects of programming language design, specifically when the novice
programmer is the primary user of the language. The research questions (RQs) were:
RQ1: Which programming languages are most commonly used in introductory
programming courses at universities and what are the reasons for their
adoption?
RQ2: What are the most common difficulties and misconceptions held by novice
programmers?
RQ3: How can a general-purpose introductory programming language be
syntactically and semantically designed when exploiting known difficulties
and misconceptions in order to lower the barrier of entry, facilitate
conceptualization, and be universally transitional?
1.3 Motivation
Educational institutions that teach programming experience issues in terms of attrition
[7], [8], [9], [10], [11]. When choosing a programming language for introductory
courses at universities, ease of learning is a primary reason and a simple syntax seems to
be one explanation for the perceived ease [13], [42]. Nevertheless, syntactic simplicity
is not the sole answer for making programming easier, suggesting other factors also are
involved in determining how optimal a language design is for first-time programmers.
Researching and exploiting these factors would be of great benefit to educational
institutions and instructors in their choice of programming language. This research
paper better equips them so that they in turn can help minimize the very conspicuous
difficulties experienced by novices. Additionally, it also provides a resource for future
language designers whose syntactic and semantic design goals are to increase ease of
learning and understanding. Ultimately the students themselves would indeed benefit.
….The intent of the author was also to further spur the discussion around the
importance and possibility of designing languages in a way that lowers the barrier for
novices, facilitates appropriate conceptualizations, takes advantage of human intuition,
and potentially decreases the likelihood of attrition. Furthermore, it is the hope that this
research will contribute to the adoption of such languages.
1.4 Results
The results of this paper include, firstly, a presented review of literature regarding
certain aspects of introductory programming. Specifically, which programming
languages that are most commonly used in introductory programming courses at
universities are presented along with the reasons for choosing a language. Included in
the review are also studies on novices’ difficulties and misconceptions, as well as
syntactic and semantic aspects to consider for an introductory programming language.
….Following the review, an initial version of a new programming language is presented
of which the design decisions are based on the prior findings. The justifications for
individual decisions are detailed as well.
3
1.5 Scope
The literature review was scoped to novices’ issues primarily around the fundamentals
of programming, but also object-orientation to a lesser extent, almost exclusively at a
university (undergraduate) level. It concerned aspects that could potentially be
addressed via syntax and semantics in one way or another. The programming language
choice in introductory courses were also scoped to universities.
….Some of the aspects not within scope were thereby issues related to problem solving
strategies, algorithms, recursion, adherence to principles, debugging and error messages,
and surrounding tooling such as development environments.
….The presentation of the new programming language focused on syntactic and
semantic design. Thus, the architecture, implementation, and theory of interpreters and
compilers were out of scope for this paper due to both time constraints and an
alternative implementation planned for comparison. For the same reasons, out of scope
were also short-term and long-term evaluations of the new language.
1.7 Outline
This paper proceeds by presenting related work on programming languages intended for
first-time programmers and the studies that have been influential in this research
(Section 2). Described thereafter is the methodology used for the research (Section 3),
followed by a review of programming languages used in introductory courses, intrinsic
factors contributing to difficulties in learning programming, specific difficulties and
misconceptions held by novice programmers, and considerations in the design of
introductory programming languages (Section 4). A new programming language is then
presented along with its goals, syntactic and semantic characteristics, and justifications
for design decisions (Section 5). Finally, it goes on to discuss alternative language
designs and overall validity (Section 6), planned and suggested future work (Section 7),
and conclusions drawn (Section 8).
4
2 Related Work
Programming languages designed to help learn how to program and to teach concepts
have been attempted before. LOGO (created in 1967) [43], [44] combines text-based
coding with so-called turtle graphics to illustrate movements produced by commands.
Two fully text-based languages, both of which focus on a concise yet readable syntax,
are SP/k (created around 1973) [45], [46] and Turing (created in 1982) [47]. Some
languages, such as Alice (created in 1995) [48], [49] and Scratch (created in the early
2000s) [50], [51] are visual and interactive, allowing for drag-and-drop block-based
coding to control 2D and 3D objects. Both visual languages have shown positive effects
on learning programming concepts [52], [53], [54]; although, the transition from visual
to text-based has in some cases been harder, such as understanding initialization of state
[55], [56]. A more recent text-based alternative is Less-Java (created around 2019) [57]
which focuses on a simple syntax using type inference, albeit with some resemblance to
Java.
….The efforts made in trying to facilitate the learning process for novices are welcomed
and needed. Unfortunately, none of the aforementioned languages presented empirical
evidence as a foundation for the design decisions made. Around 2011, however, the
first-ever evidence-oriented programming language Quorum [58] (originally
HOP–Human-Optimal Programming) was created and is also text-based. The studies
done in the development of Quorum were highly influential in the creation of
Frendli–the new programming language designed and presented in this paper. Given
their high relevance, the methodologies used are detailed hereafter.
5
times”, “Take a behavior only when 2 conditions are true”, and “Assigning a value to a
computer’s memory”. The questions were asked in the absence of any code context. As
part of the analysis, the words were ranked in groups and order of statistical difference,
undergoing a well-defined statistical procedure. As elaborated in Section 4, their results
revealed that some of the most commonly used word choices in programming languages
today were ranked lowest; meaning, they were perceived among the least intuitive. This
implies a lack of consideration of human factors in syntactic and semantic language
design choices, which has also been claimed by others [30], [31], [32], [33].
….The later investigation conducted in 2013 built upon the aforementioned one by
exploring the intuitiveness of syntax in two empirical studies. The first one focused on
isolated word choices and the second one on constructs within the context of larger
programs written in nine different languages (Java, Perl, Ruby, Python, C++, Go, PHP,
Smalltalk, and Quorum). As in the earlier one, the participants were either non-
programmers (in this case having zero years of experience) or programmers (having
more than zero years of experience), and the data analysis followed similar procedures.
….Additionally, two empirical studies were conducted to measure novices’ syntactic
accuracy rate when writing simple programs in one of six languages (Java, Perl, Ruby,
Python, Quorum, and the metaphorical placebo-intended language Randomo). The
sample size for each language group was between 6 and 13. To know what constituted
accurate code, each person was given equivalent code samples in their respective
language from which they could derive meaning. Some concepts tested include
conditional statements, nested conditional statements, variables, and loops.
….All surveys in the studies derived from extensive peer reviews and pilot studies.
Overall, the result supported the notion that syntax significantly impacts novices insofar
as not being equally intuitive, some variations allowing for easier construction of
accurate code, and certain syntactic features being a more likely source of problems.
Their custom simple-syntax language Quorum was statistically found to be perceived as
significantly more intuitive (see Section 4 for specific results).
….There were, however, certain aspects and alternatives that were not tested in these
studies. Given that participants for obvious reasons were given a finite list of words and
symbols when rating their intuitiveness, there is a possibility that more intuitive or
better suited alternatives were not on the list. For instance, the word choices considered
for various representations such as a class, method, or variable were only nouns. Hence,
verbs such as define (abbreviated def in the programming languages Python and Ruby)
were not alternatives for indicating a function. Testing of alternative syntax was
encouraged nonetheless. Omitted were also tests specifically for the choice of the else
keyword; the choice of the end keyword for indicating the end of a block, as in Quorum
and Ruby; comprehensibility of correct yet unindented code, perhaps as a way to
provide clues on whether or not spaces ought to be semantically significant; the concept
of scope; the concept of closures; and the relationship between an object and a class.
While the later study tested the intuitiveness of word choices related to various
object-oriented concepts, the former did not.
….The research presented in this paper comparatively paid greater attention to existing
misconceptions than the two aforementioned ones. It incorporated not only that into the
design of the new language, but the potential for transitioning into a common
general-purpose language. The results of the studies on word choice and syntactic
accuracy still served as justification for several of the design choices made.
6
3 Research Methodology
This section describes the procedure adopted for identifying, selecting, and evaluating
publications relevant to this research. RQ1 (identifying languages used in introductory
programming courses and the reasons thereof) and RQ2 (identifying issues experienced
by novice programmers) were studied solely through a literature review. RQ3
(examining how novices’ issues can be exploited in programming language design) was
addressed both via the literature review and a design of a proposed language presented
in Section 5.
7
the results from the first two pages (20 results) were considered. The three papers with
the highest citations out of the most relevant ones based on their respective abstracts
were selected for further reading. Reading the papers gave a broad and meaningful view
of the difficulties experienced in introductory programming courses and a sense of what
literature existed on the topic. Using a snowball method (finding additional literature via
the references in the reviewed papers) showed that a significant amount of relevant and
valuable results derived not only from recent research, but also from research in the past
couple of decades. Therefore, the period of interest for RQ2 spanned the past 20 years;
that is, from 2002 to early 2022. An exception to the 20-year time frame on search
results was when literature was found through a snowball method and was still deemed
relevant and valuable (the definitions of which are presented in Section 3.4). For RQ1, a
limit to include only the past six years was added to the search criteria as languages
used in more recent years were of specific interest. RQ3 was not bound to a specific
time period due to the early origins of language design. Applicable to all three research
questions, the words used in all subsequent search queries all had to exist anywhere in
the article (no exact phrases were required).
TABLE 3.1
Search Query Strings Used and Their Associated Research Question
8
3.4 Selecting and Filtering Studies
The selection process described pertains to all research questions. For each query, out of
the 20 results available from the first two pages on Google Scholar, only papers from
the publishers ACM, IEEE Xplore, SpringerLink, ScienceDirect, and Taylor & Francis
Online were considered due to scope and time constraints of the research. Publications
found indirectly using the snowball technique were not required to originate from any of
the specified publishers. Additionally, 20 or more citations on Google Scholar were
required if published over 10 years ago; that is, prior to 2012. The numbers presented in
this section for how many papers were considered (papers that formed the basis for the
review), examined (abstracts examined and papers partially examined when needed),
selected (papers selected for further review), and filtered (papers fully read and from
where data was extracted) include the search results from all queries. The numbers as
grouped by publisher are presented in Table 3.2.
TABLE 3.2
The Number of Papers Addressed Directly from All Search Queries
Number of Papers
Publisher Considered Examined Selected Filtered
….The relevance was determined by each paper’s relation to the research questions. It
specifically pertained to introductory programming exclusively at an undergraduate
level (except for natural language difficulties); general and specific difficulties
encountered by students in introductory programming courses; misconceptions and
non-viable mental models held by novice programmers; factors contributing to
difficulties in learning and understanding of programming such as the level of cognitive
load; empirical studies and comparisons of text-based high-level general-purpose
programming languages; studies on novice-oriented language design; and programming
language adoption at universities.
….In total, 182 papers were considered out of which 155 abstracts were examined.
Papers with titles which clearly indicated being irrelevant to any of the research
questions were not examined. Any examined abstract that clearly implied irrelevance
was eliminated at this stage. In the case of ambiguity, the introduction and methodology
sections of the paper were read to determine whether or not to be selected for further
review. Additional reasons for not being selected included indications of being a work
in progress, lacking an abstract, being in the form of a book or book chapter due to lack
of time to evaluate the book as a whole, and being a different publication with the same
data as previously examined.
….Out of the abstracts examined, 87 were selected for deeper analysis. A deeper
analysis involved reading the full text (excluding any sections or subsections that
undoubtedly were irrelevant based on the heading and section introduction) starting
with the introduction, methodology, and result sections when available to further
9
evaluate its degree of relevance. Papers which did not study or present data within the
areas of interest based on those initial sections were eliminated, as were those which did
not appropriately provide references for claims, had less than three pages (excluding
references and appendices), or were inaccessible to the author. The remaining 51 papers
were fully read while simultaneously extracting relevant data such as names of the
authors, publisher, year conducted, number of citations, abstract and summary of the
study, sample sizes if applicable, primary means of data collection and analysis, relevant
findings, and explicitly stated validity concerns. The data was organized by results as a
means of data synthesis in preparation for presenting the results.
10
4 Literature Review
This section fully addresses research questions RQ1 and RQ2, and partially RQ3, whose
findings formed the foundation for RQ3 primarily addressed in Section 5. Section 4.1
addresses RQ1 where the programming languages used in introductory university
courses and the reasons for their adoption are presented. Sections 4.2 through 4.4
address RQ2 by presenting possible intrinsic factors of difficulties in learning,
encountered difficulties, and misconceptions held by novices. Section 4.5 addresses
RQ3 by presenting introductory programming language design problems and principles.
TABLE 4.1
Languages Used in Introductory Programming Courses in the U.S. [12]
Adoption in 2018
Rank Language Count Total %
1 Java 65 42%
2 Python 41 26%
3 C++ 30 19%
4 C 7 5%
5+ Others combined 12 8%
TABLE 4.2
Duration of Use of a Language in Introductory Programming Courses in the U.S. [12]
Language (Row %)
Duration of Use Count Total % Java Python C++ C Others
11
….In order to identify languages used in introductory programming courses and
justifications for choosing them, in 2018 a survey of 496 bachelor’s degree programs
within computer science in the United States was conducted [12]. With a response rate
of roughly 31% (155 programs), the four most common languages in introductory
courses were Java (42%), Python (26%), C++ (19%), and C (5%) as shown in Table 4.1.
Fourteen (9%) of the programs had been using their respective languages for up to only
two years, out of which Python accounted for 57%, C++ for 14%, Java for 7%, and C
for 0%, presented in Table 4.2. Similarly, 104 (67%) of the programs had been using
their language for six years or more, out of which Java accounted for 56%, C++ for
18%, Python for 17%, and C for 5%. Even though Java clearly was adopted by more
institutions among the ones asked, most institutions that adopted a language within the
most recent years chose Python.
TABLE 4.3
Reasons for Using a Language in Introductory Programming Courses in the U.S. [12]
Language (Row %)
Rank Reason Count Total % Java Python C++ C Others
….Table 4.3 shows the reasons for using a specific language (the count totals 420,
exceeding the 155 respondents since multiple reasons could be selected). The most
selected reason was language features (26%). The specific features rated most important
(not shown in the table) were repetition structures (16%), functions (15%),
object-orientation (12%), and static typing (11%). Apart from language features, other
reasons for using a language were ease of learning (19%), job opportunities (15%),
popularity in academia (13%), tradition by the institution (9%), Advanced Placement
Computer Science (APCS–a program in the United States that gives high school
students the opportunity to earn college credit, and uses only Java in such courses)
(8%), advice from an advisory board (6%), and faculty availability (5%). Notable
differences were revealed when the reasons were grouped by language. Out of the ones
selecting job opportunities as a reason, 58% were programs using Java in their
introductory course, while only 6% were those using Python. None of the programs
selecting APCS and faculty availability as reasons were using Python, while 88% and
62% respectively were accounted for by Java. Ease of learning was opted for slightly
more by Python users (44%) than Java users (38%).
12
TABLE 4.4
Languages Used in Introductory Programming Courses in Australasia [42]
Adoption in Year
Rank Language 2001 2003 2010 2013 2016
TABLE 4.5
Reasons and Their Level of Importance for Using a Language in Introductory
Programming Courses in Australasia [42]
….The survey also asked the participants to rate the importance of each reason listed for
choosing a language on a five-point scale. The results are presented in Table 4.5.
Overall, pedagogical benefits rated highest (81% overall importance), with 30% rating it
as “extremely important” (the uppermost point on the scale). The next four highest rated
reasons were relevance to industry (78%), availability and cost (67%), degree structure
13
(62%), and platform independence (57%). When analyzed by language, the most
important reasons when using Python were pedagogical benefits (67%), availability and
cost (53%), and platform independence (40%). When using Java, industry relevance
(92%), object-oriented (OO) language (86%), and platform independence (62%) were
most important (the survey only made available the top three choices). The respondents
also answered what would be the reasons for a future change in programming language,
whereby the dominant one was pedagogical benefits (52%).
….Additional data gathered by the survey relevant to this paper included, firstly, how
difficult the respondents perceived the used language to be for the novice students, and
secondly, how useful they perceived the used language to be for teaching fundamental
programming concepts. A seven-point scale ranging from “extremely easy” to “neither
easy nor difficult” (the median) to “extremely difficult” was used. Addressing the first
point regarding perceived difficulty, roughly 21% of the respondents selected the
median of “neither easy nor difficult”, 32% selected difficulty levels below the median,
and 46% above the median (totaling 99% due to rounding). From this data, languages in
general were more so perceived as difficult than easy. Although, when grouped by
language it clearly suggested that Python was perceived as easier for novices in
comparison to Java.
….As for a language’s perceived usefulness for teaching fundamental concepts, all
Python respondents rated it between “neither useful nor useless” and “extremely useful”
(the best alternative) where 47% belonged to the latter (a scale equivalent to the one
described in the previous paragraph was used). For Java, all respondents rated it
between “slightly useful” and “extremely useful” where 27% belonged to the latter.
Python accumulated more of the best rating while Java received more ratings for the
two best ratings combined.
….Despite certain perceived difficulties in the languages, the results of the survey
indicated that some languages were still considered useful in conveying concepts in
combination with teaching, yet to various degrees. It also clearly demonstrated the room
for improvement, nevertheless. Furthermore, when compared to Java, the perception
seemed to be that Python was easier for novices while at the same time possibly more
useful for explaining fundamental concepts. No measures of significance were
presented, partly due to small sample sizes at times.
14
problem solving. However, it also concluded that attempts to decrease the difficulty
could prove unsuccessful or insignificant if the material to be learned does not have the
characteristics of high element interactivity.
….Other studies also provide interesting insights. One study neuroscientifically
examined 18 novices and experienced programmers using an electroencephalogram
(EEG) [64]. They were observed when completing tasks related to program
comprehension and it demonstrated that high cognitive skills were required. Another
study showed how handling many abstractions at the same time became problematic
and interfered with novices’ ability to solve problems [38].
TABLE 4.6
Issues and Clues Concerning Difficulties Among Novice Programmers
Category Description ID
Faster comprehension speed for fully spelled out identifier words than D2
abbreviations.
Missing semicolons. D4
Low syntactic accuracy using an end keyword for ending a code block. D7
Data type More intuitive words for an integer were number, integer. D10
15
More intuitive words for a boolean were condition, logic, binary. D12
More intuitive symbols for enclosing a list of characters were ( ), “”. D14
More intuitive words for a null value were undefined, empty. D15
Operator More intuitive words/symbols for variable assignment were =, is. D18
More intuitive words/symbols for the equality comparison operator were D23
=, is, ==.
Low syntactic accuracy using the equality comparison operator ==. D24
Less intuitive symbols for the logical operators were &&, ||. D26
More intuitive were and, &, or.
Control More intuitive words for conditional constructs were with the condition D29
that, if, only if, when, while.
Less intuitive loop construct words were for, while, foreach. D32
More intuitive was repeat.
Less intuitive loop constructs as a whole were variants of the for loop. D33
More intuitive were repeat times, timesRepeat, while.
16
Difficulty selecting the appropriate loop construct. D34
Difficulty understanding which of the lines inside the loop will be D36
repeated, and the number of times.
Function More intuitive words for a function were action, procedure, work, task, D37
operation.
OOP More intuitive words for a class were object, structure. D44
More intuitive words for the this keyword were self, myself, me. D47
More intuitive words for a base class were source, foundation, parent. D48
4.3.1 Syntax
Multiple papers cite programming language syntax as a difficulty [36]. Syntax errors
have also shown to negatively impact novices’ attitude and experience of programming
[37], [65]. For instance, missing semicolons and mismatched quotation marks, brackets,
parentheses, and types are common, as well as incorrect use of the assignment operator
(=) where the comparison operator (==) was expected [21], [22], [24], [27], [37].
Although evaluated for identifier names (such as variables) and not specifically for
keywords, fully spelled out words took 19% faster on average to comprehend than
abbreviations and single letters in a study of 72 professional developers using the C#
language [41].
….As discussed in more detail in Section 2.1, the studies on programming language
syntax by Stefik and Gellenbeck [23] and a few years later by Stefik and Siebert [14]
revealed how many word and symbol choices in the syntax of commonly used
17
languages were perceived as less intuitive, likely being a source for difficulties. Perhaps
one of the most noteworthy examples given its frequent use across numerous languages
may be the words representing loop constructs. The words that were lowest ranked
among novices in both studies, starting with the worst, were for, while, and foreach.
Neither did they receive particularly high ratings from experienced programmers. The
highest ranked word was repeat, ranking approximately seven times more intuitive than
for in the first study. Performing something only when a certain condition is true was
most intuitively represented using the words with the condition that, if, only if, and
while for novices in the earlier study, and if, when, and require in the follow-up study.
The word case (as used in switch statements) was among the lowest rated ones. The
word most intuitive for describing the logical AND concept was and followed by the
single ampersand (&) which could not be statistically differentiated from the former.
Similarly, logical OR related best with the word or. For both logical concepts,
experienced programmers rated the commonly used symbols double ampersand (&&)
and double bar (||) relatively high, while non-programmers rated them significantly
lower. For variable assignments, the equal sign (=) was clearly the most intuitive of the
choices, but the word is was also rated high.
….Both studies implied that double quotes (“”) were among the most intuitive for
enclosing a list of characters, although novices in the first study rated parentheses (())
insignificantly higher. The plus sign (+) was most intuitive for concatenating string
types. In the second study, programmers unexpectedly rated string highest for the string
type, while non-programmers chose characters. The second best ranked word among
both groups was text. Additionally, number and integer rated highest for representing an
integer type, and number and decimal for representing a floating point number. The
three most intuitive choices among novices for a boolean were condition, logic, and
binary, although not showing any clear consistency.
….For representing something that can take a behavior (the concept of a method or
function) the word action was most intuitive for novices in the first study, followed by
words such as work, task, operation and function. Novices in the second study favored
procedure, operation, and task. Accessing a member field or method (commonly done
via the dot operator) of which the overall concept was explained in the studies as
“Telling a noun to take a behavior” related best by programmers with a dot (.) as
expected. Novices for unclear reasons rated colon (:) highest and dot significantly
lower. It may just be that the concept itself is hard to intuitively represent through only
symbols, or that the wording of the question was suboptimal.
….In addition to the results just presented, the follow-up study also addressed syntax
related to object-oriented programming (OOP), comparison operators, and comments
among a few other concepts. With regard to OOP, the most intuitive words for the
concept of a class for both non-programmers and programmers were object and
structure. Given how even programmers rated object higher than class itself may
indicate possible issues in successfully differentiating the two concepts in the question.
Both is a and is were among the highest rated words for an IS-A relationship, but
interestingly, novices also found colon (:) fitting, as in truck : vehicle. Both
non-programmers and programmers found source, foundation, and parent most intuitive
for the concept of a base class. The this keyword often used in object-oriented
languages was not among the highest rated words for either group; instead, they were
self, myself, and me.
….Regarding equality operators, the single equal symbol (=) and is were rated higher
by novices than the widely adopted double equal symbol (==); whereas for not being
equal, unequal and not= were most intuitive. For the concept of a null value, undefined
18
and empty were among the top choices for both groups. The double plus (++)
augmented assignment operator, as in x++, is commonly used in languages; however, it
was not rated highly by novices. The top choices were x = x + 1, x + 1, and raise x.
Both groups rated the word display most intuitive for outputting data to the user, and
output was among the highest ones as well. Bottom choices for the novice group were
console.write and printf. Unexpectedly, the highest rated choice for single-line
comments was the double forward slash symbol (//), and for multi-line comments the
forward slash asterisk (followed by that in reverse) (/**/)–both frequently seen in
languages today. This was not only true for the experienced programmers but for
novices as well, who also rated the words comment and note almost equally intuitive for
initiating a single-line comment.
4.3.2 Constructs
One of the surveys in Stefik’s and Siebert’s [14] study focused on evaluating the
intuitiveness of constructs syntactically (not solely individual words). Given a piece of
code with a construct in a specific programming language and a correct English
explanation of what the code did, participants rated how well the construct as a whole
represented the explanation. Overall, Quorum (the language previously developed for
novices), Java, and Ruby were perceived as most intuitive by novices. Programmers
instead chose Java, C++, and Quorum. Python was rated among the least intuitive for
programmers.
….For the conditional if construct, novices and programmers rated C++/Java, Quorum,
and Go highest, and Smalltalk lowest. For representing a loop, the top choices by
novices were Quorum (using repeat times as in repeat 10 times), Smalltalk (using
timesRepeat as in 10 timesRepeat:), and C++/Java (using while as in while (i <= 10)).
The bottom choices for both groups included variants of the for loop in Go, Python,
Perl, and PHP. Others have suggested that including only one non-terminating loop
construct in the language may be preferred if meant for use in introductory
programming [60]. Exiting would then be controlled via if statements from within the
loop.
….Regarding novices only, for representing a function, Quorum’s and Smalltalk’s
constructs were most intuitive and Perl’s the least; for a constructor, Quorum and PHP
were top choices and Python, Java, and Smalltalk bottom ones; and for inheritance,
Ruby, Quorum, and PHP were most intuitive while Perl and Smalltalk were the least.
….Stefik and Siebert [14] also measured the syntactic accuracy of novices when writing
small programs. The participants learned about various constructs through examples of
code snippets in the respective language being tested. The study found the syntactically
simpler languages like Quorum, Python, and Ruby to yield better results. Participants
using those three languages had noticeably higher accuracy rates than the placebo, while
the accuracy rates of those using Perl and Java interestingly could not be statistically
differentiated from the placebo. To remind the reader, Randomo was the name chosen
for the metaphorical placebo language and was generated by replacing keywords from
Quorum’s syntax with random characters from the ASCII1 table. Furthermore, the poor
accuracy scores for particular words in Quorum itself indicated that having a then
keyword as part of if statements, as in if y > 1000 then, proved problematic, yielding
between 8%-67% accuracy. Similarly, the end keyword indicating the end of a code
block yielded between 0%-67% accuracy. This led the developers of Quorum to remove
1
American Standard Code for Information Interchange provides numerical representations of characters.
19
the then keyword completely in a later version, as well as the inner end keyword in
if-else statements.
….Conditional statements with removed parentheses and braces, as in Ruby’s if y >
1000, were most successful. Only 1 out of 48 participants using Ruby, Python, Perl, and
Java correctly applied the double equal symbol for comparing equality. The single equal
symbol was correctly implemented by 100% of the novices when used as an assignment
operator. Type annotations were used accurately about half the time, leading the authors
to cautiously state that novices may experience slight difficulties with static type
systems. Important to emphasize is that they could not conclude based on their results
that dynamic typing is better for a novice-oriented language. It is possible that the
benefits of static types may outweigh the cost of syntactic difficulties once the type
system is learned.
4.3.3 Concepts
Having difficulties in conceptual knowledge affects a student’s problem solving ability
given their high correlation to difficulties in writing code [15], [16]. It is therefore
imperative that such issues be addressed. For instance, understanding how a loop works
has been found to be problematic in terms of its scope, which of the lines inside the loop
will be repeated, the number of times, and how it relates to its condition [1], [5], [27].
Selecting the appropriate loop construct such as a for or while loop for a specific context
has also shown to be difficult for novices at times [27], [66]. As a comparison between
the clean-syntax language Python and the traditional C-syntax language Java, a
quantitative study was conducted where the usage of various constructs was measured
[2]. It showed that loops were used 37% more frequently by novices using Python than
Java. For the usage of conditional constructs, such as if or if-else, the study found no
significant difference between the languages. Nevertheless, understanding how
conditional constructs work has in some cases been challenging [1], [17], [22].
….An empirical study comprised of 952 students at two universities was conducted at
the end of their introductory programming courses (taught either in Python, Java, or
MATLAB) [67]. Each student’s performance on two versions of an assessment exam
was compared. One version was based on the tool that the study developed for assessing
introductory computer science concepts (deemed by some as possibly one of the most
thoroughly evaluated tools of this kind [14]), written in verbose pseudo-code. The other
was a comparable version written in the language used in the student’s course. Each
student took both versions with the goal of evaluating the effectiveness of pseudo-code
as a means of establishing programming language independence for such a tool. The
results showed that some of the questions most frequently answered correctly pertained
to mathematical operators and the concept of if statements, while more difficult ones
were in relation to function parameters and return values. Several strong, positive
correlations were also found between the scores of the two versions. This indicated that
pseudo-code was suitable for conveying and testing fundamental concepts independent
of language priorly taught. Though not explicitly tested, it may also be indicative of
being a favorable characteristic for universally transitional languages, or at least worthy
of further investigation. Additionally, think-aloud interviews qualitatively demonstrated
that students could successfully read and reason around fundamental concepts using the
verbose pseudo-code syntax encountered for the first time.
….Further difficulties in understanding concepts include why declaring a variable
before it is used is necessary; not knowing where values in function parameters
originate from; not knowing when to pass arguments; not knowing who the receiver of a
20
return value is; having problems understanding when to return something; where and to
data from input-output (I/O) operations comes from and goes to; and frequent struggles
with object-oriented programming (OOP) concepts, such as lack of developing feasible
mental models and understanding objects, instances, classes, methods, and their
relationships [17], [19], [21], [22], [26], [27], [28], [68].
….Learning object-oriented concepts was especially challenging for students in a study
[3]. The study evaluated the impact of programming languages and teaching approaches
through the use of an instrument specifically developed for assessing fundamental and
OOP concepts. Insofar as specific languages, however, students programming in Java
and C++ consistently achieved better results overall than the ones using the
syntactically simpler language Visual Basic. The study suggested indecisively that it
may be easier to comprehend fundamental concepts if using more complex languages.
Although, student performance on questions related to OOP concepts did not seem to be
affected by the instructional language used. Furthermore, another study tried to
determine whether Python students struggled less than C++ students [27]. The study
included 1,927 introductory programming students across 20 universities. It revealed
that the struggle rate (measured in terms of excessive time spent and attempts per
exercise) was significantly higher for Python students.
….The implication of Java and C++ being easier for fundamental concepts was
contradicted by other studies. A quantitative one comparing Python and Java
demonstrated that the less complex language Python was easier for understanding
programming concepts [2]. Another one comparing Python and C showed that Python
yielded better outcomes such as exam grades [40]. Even though both latter studies
demonstrated advantages of Python in terms of concept comprehension, failure and
dropout rates were not significantly affected in either of the studies.
….The programming paradigm used has also been researched. As presented in a study
comparing the procedural paradigm using C++ with the object-oriented one using Java,
the results of problem-solving questions overall were not significantly different between
the two approaches [69]. Interestingly, a significant difference was, on the other hand,
found when instead examining the questions individually, favoring the object-oriented
paradigm when dealing to some extent with software design in particular.
….Despite several indications that OOP can be both hard to apply and understand for
novices, the literature failed to collectively conclude that the use of an object-oriented or
more complex language was either better or worse for learning concepts or producing
more favorable outcomes. What was more conspicuous was that only syntactic
simplicity, as represented in part by Python, did not appear to be the sole nor best
indicator of being an easy language for understanding concepts. More effective
indicators may exist in other syntactic design choices as well as other factors.
….It should be noted, nonetheless, that even though concepts may be perfectly
understood by a student, it does not necessarily mean that the student can apply them
practically for solving problems, it simply facilitates it [1].
21
invalid ideas that conflict with commonly held and accepted ones [71]; and insufficient
understanding in a programming context [72]. A mental model in terms of programming
can be defined as the understanding of what happens behind a particular piece of code,
or one’s explanation of how things work internally [68]; analogical structures
representing the world [73]; and a construct in the working memory of the brain that
supports logical reasoning [73].
….Students hold misconceptions and non-viable mental models of fundamental
concepts, objects, and memory usage, among other things [6], [19]. Analyzing known
ones helps to understand how to address these inaccurate or inadequate models through
means such as language design. Summarized in Table 4.7 are the misconceptions
grouped by category (the IDs are referred to in Appendix B).
TABLE 4.7
Issues and Clues Concerning Misconceptions Among Novice Programmers
Category Description ID
Data type Divisions with only integers can result in floating point numbers (not M2
true for certain languages).
Print statements are the only statements repeated in a multi-line loop M12
(since it is the only visible output).
Function Associated mistake: Wants to store the function object in memory by M13
executing its body.
Associated mistake: Wants to create a local variable called result in the M14
callee function and store the result there to return it.
22
Associated mistake: Failed to store the return value in the caller’s local M15
variable.
23
continued investigating models. In this case they found that 38 (63%) out of 60 Java
students held non-viable mental models pertaining to the value assignment [29]. Some
related to the evaluation order, such as 1 = x versus x = 1, and some to the flow of
execution that derived from the beliefs that the execution of assignments occur
simultaneously and that each line is independent of the other. Regarding reference
assignment, 41 (95%) of 43 Java students held non-viable mental models.
….In order to examine whether or not mistakes made by novices were related to known
misconceptions, data from introductory programming students at a university in Finland
was analyzed [17]. The data derived from visual program simulation exercises. During
the exercises the students graphically traced program execution in the Python language
by dragging, dropping, and clicking on elements. All students were encouraged to act on
their conceptions. The log files of over 24,000 student solutions submitted between
2010 and 2012 were analyzed of which 95% were deemed usable. Only mistakes made
by a minimum of 10 students were accounted for, totalling approximately 200. Some of
the most common mistakes were likely to be associated with misconceptions about
assignments, control structures, and functions. The results from the most recent year
(2012) are presented hereafter. For instance, rather than assigning the right-hand side
variable’s value to the left-hand side variable, 38% of students incorrectly did it the
other way around. When the condition of an if-statement evaluated to false, 17% of
students indicated that they believed the then clause would still be executed. Similarly,
when including the not operator in the condition and it evaluated to false, almost half of
the students (45%) graphically executed the corresponding then clause. As clarification
for the reader, the Python syntax did not explicitly include a then keyword, the term is
merely used here to describe the corresponding execution block. Regarding functions,
16% of students executed the body of a function instead of storing the function object in
memory using Python’s def keyword. Rather than returning the result of a calculation to
the caller, 24% of students created a local variable called result belonging to the callee
and stored the result into that variable. Almost a third (29%) of students also failed to
store the return value in the caller’s local variable. For OOP related mistakes, 14% of
students tried to copy a reference by instantiating a new object, and 18% tried to create
a new object by copying a reference. A third (33%) also tried to call an instance method
before having the object reference. These mistakes seem to reveal various inaccurate
understandings of how certain constructs work, some correlating with previously
presented ones.
….Another source of misconceptions is natural language. Since programming language
syntax is widely influenced by natural language, the words used for certain constructs
may interfere with a student’s understanding of how those constructs work if the
syntactic words do not have similar meaning in everyday life [74]. This in turn allows
for flawed conceptions to form. Noteworthy is also a study done on Chinese students in
their first programming course [75]. Among the things investigated was the correlation
between the performance in programming and the performance in subjects outside of
programming. The results showed that there was a significant correlation between
programming performance and ability of the English language. In fact, the best indicator
of success in the introductory programming course was English ability, more so than
mathematics.
….Lastly, from a theory of learning called constructivism, students form their own
mental models of the concepts they come across whether or not it is taught [76]. Some
thereby claim that the models have to be explicitly taught in order for them to be
effective.
24
4.5 Language Design for Introductory Programming
The designs of programming languages have often presented pedagogical problems
when used for teaching novice students. McIver and Conway [60] elaborated on what
design features they attribute these issues to and proposed design principles to help
avoid including such features in introductory languages. This section presents parts of
McIver and Conway’s paper by first describing some of the problems associated with
various designs (summarized in Table 4.8) and thereafter the proposed principles
(summarized in Table 4.9) (the IDs in Table 4.8 and Table 4.9 are referred to in
Appendix B).
25
TABLE 4.8
Pedagogical Problems in Introductory Programming Language Design
Hardware Multiple variations of data Data types that are conceptually equal LD4
dependency types but semantically different.
26
and one for numerical types. In some cases, instructors would still have to explain the
limitations of representations, such as approximations of certain numerical values.
Additional language features include providing only one construct for representing a
loop, one for a generic list, and one consistent input-output (I/O) syntax.
TABLE 4.9
Principles for Introductory Programming Language Design
Syntax and Start where the novice is Use syntax and semantics that do LD8
semantics not violate reasonable expectations.
27
5 Frendli – The New Programming Language
Existing general-purpose programming languages have rarely been based on empirical
data derived from human factors, sometimes lacking any evidence at all [30], [31], [32],
[33]. As discussed to a great extent throughout this paper, learning to program poses
many challenges, many of which are unalleviated or even caused by the language itself.
Hence, one of the main goals of this research was ultimately to create a friendlier
language–the Frendli programming language [34].
….This section addresses research question RQ3 by introducing Frendli, its goals,
strategies, and the syntax and semantics of language constructs. Justifications for design
decisions made, such as the reasons for including and excluding various features and
characteristics, are detailed in Appendix B and can be read alongside this section. Each
decision listed in Appendix B references the data presented in Section 4.
….Do note that Frendli is one possible alternative for an introductory language–the one
proposed by the author based on the findings in Section 4–but other syntactic
alternatives are briefly discussed in Section 6.
28
TABLE 5.1
Goals and Syntactic Design Strategies
G1 Low barrier to Easy to use and Fewer difficulties and Base design choices on
entry comprehend. misconceptions. known issues.
G2 Facilitate con- Illustrate how Higher degree of Use verbs, rather than
ceptualization constructs work self-explanation. nouns, that describe the
and what they do. action being taken and
are synonymous with
the intended concept.
G3 Universally Useful tool for Easier to focus on Use verbs that explain
transitional instructors with teaching the meaning concepts shared by
easy transition. of concepts. languages. Exclude
superfluous tokens.
29
5.1.1 Novice-Oriented
The goal of the language was first and foremost to be a low barrier to entry (G1) by
being easy to use and comprehend, in particular for first-time programmers.
Accordingly, the novice programmer was at the center of the design choices made. In
relation to other commonly used general-purpose languages, comprehensibility and ease
of use were for the development of this language defined as: producing fewer
encountered difficulties and misconceptions among novices; requiring less time fixing
syntax errors by excluding superfluous and error-prone tokens in the grammar; having a
lower degree of ambiguity by favoring explicitness over implicitness, having syntactic
and semantic consistency, and using keywords and operators synonymous with the
intended concept, high intuitiveness in terms of its English meaning, and fully spelled
out words; and lastly, posing less translation challenges for non-native English speakers
by avoiding seemingly complex or less common word choices.
5.1.2 Action-Based
In addition to being a low barrier to entry, the second goal of the language was to help
the user conceptualize and form appropriate mental models (G2). The goal can be
broken down into illustrating through the syntax itself how constructs work and what
the code is doing. Thus, rather than using nouns such as variable (or var) as in
variable x = 1 to describe what something is, verbs such as create as in
create x = 1 are used to instead illustrate the action represented by the code. This
was to allow for the code to be more self-explanatory, rather than focusing on the
terminology of individual entities that have previously shown to be the source of many
misconceptions.
….This action-based approach also facilitated certain aspects of the third main goal of
the language which was to be universally transitional (G3). The action-based syntax
may assist introductory programming instructors in introducing and explaining
commonly shared concepts while not being forced to use entity terminology specific to
the Frendli programming language. Depending on the language to transition to, a
function may for instance also be referred to as a method, procedure, subroutine, or
action, and variables may be denoted by a range of different nouns and abbreviations.
5.1.3 Low-Conflict
Not being forced to use specific terminology overlaps somewhat with the low-conflict
approach taken as an additional strategy for achieving the goal of being transitional
(G3). This was to avoid having to unlearn information as opposed to learning more
which may otherwise be caused by syntactic, semantic, and conceptual conflicts with
other languages. Syntactic word choices may represent different concepts depending on
the language. Thus, a lower degree of conflict may increase the ease of transition.
….The languages used for comparison in this approach were Java, C, C++, and Python.
For certain design decisions, achieving low-conflict took precedence over
novice-orientation. This pertained to instances where a particular syntax was shared
across the compared languages and the comprehensibility or ease of use did not seem to
be significantly affected according to the literature reviewed. One distinct example
includes using double quotes ("") for string literals rather than parentheses (()).
30
5.2 Characteristics
The language can generally be characterized as:
1) Text-based
2) High-level
3) General-purpose
4) Dynamically typed
5) Imperative
….Being an early version of the language subject to change, it encompasses a limited,
yet foundational, set of features presented hereafter.
2
Floating-point arithmetic uses the IEEE 754 standard and, thus, inherits the limitations thereof [77].
31
(characters from the English alphabet and, but not prefixed with, the digits 0 through 9)
as well as underscores. Reserved keywords cannot be used as identifiers. The reserved
keywords for the early version of the language are listed in alphabetical order below and
are introduced with context in the coming subsections.
5.2.5 Variables
Frendli is dynamically typed, thus variables may hold values of any of the data types.
Type checking, such as detecting operations involving illegal combinations of types, is
performed at runtime. Explicitly declaring a variable before use is required and is
denoted by the create keyword. Declarations of the same name can only occur once
in the same block. Initialization must be explicitly performed during declaration
(empty can be used as the value if no other value is desired initially). Reassigning
values to variables must be preceded by the change keyword. Examples of variable
declarations, initializations, and a reassignment with literals are shown below. See Table
B.1 and Table B.4 in Appendix B for justifications.
create age = 30 // number
create price = 4.25 // number
create isValid = true // boolean
create isOnline = false // boolean
create firstName = "Jane" // text
create middleName = empty // empty
change middleName = "Mary" // text
32
create a = 10 < 20 // true
create b = 10 equals 20 // false
create c = 10 equals "10" // false
create d = not true // false
create e = true and false // false
create f = true or false // true
create g = (10 + 2) / 20 // 0.6
create h = "Ten" + "Twenty" // "TenTwenty"
33
5.2.8 Functions
Declaring and defining a function are always performed in tandem using the define
keyword. All functions must have an identifiable name followed by a set of parentheses
enclosing a list of formal parameters (also known simply as parameters). Parameters are
not required in the declaration, but if provided, the list must be preceded by the
accept keyword. The function body is a block and explicitly returns a value if the
return with statement is present and executed; otherwise, if only a return
statement is executed or no return statements are present, it implicitly returns empty.
….Calling a function requires the use of parentheses and must be performed only after it
has been declared. If passing a list of actual parameters (also known as arguments) in
the call, the list must be preceded by the send keyword and must exactly match the
function’s arity (number of expected arguments) as shown below. The parameters are
scoped to the function’s local block. See Table B.6 in Appendix B for justifications.
define add1(accept a, b)
create result = a + b
return with result
define add2(accept a, b)
create result = a + b
return
display(send seconds)
34
5.4 Justifications
The design decisions made were based on the results of the literature review presented
in Section 4. The results revealed difficulties and misconceptions held by novices as
well as clues as to what decisions may be more appropriate for novices in terms of
syntax and semantics, such as word choice or the level of syntactic simplicity.
….Decisions made are listed and explained in Table B.1, Table B.2, Table B.3, Table
B.4, Table B.5, and Table B.6 in Appendix B. Each decision listed specifies which of
the goals in Table 5.1 it addressed. The specific issue (difficulty, misconception, or
language design problem or principle) found in the literature review that each decision
relates to is also specified when applicable by referring to the IDs given in Table 4.6
(prefixed with D for difficulty), Table 4.7 (prefixed with M for misconception), Table
4.8, and Table 4.9 (the latter two prefixed with LD for language design). C signifies the
decision is related to one or more conflicts. If a specific decision was not found to be
explicitly supported or refuted in the reviewed literature, the decision was instead an
unevaluated attempt to address one or more of the issues found.
….The tables in Appendix B are grouped by category of design decision which include:
1) General
2) Data type
3) Operator
4) Variable
5) Control
6) Function
35
6 Discussion
This section briefly discusses alternative designs of the Frendli programming language
and introduces the syntax of Quorum–another novice-oriented, evidence-based, and
general-purpose programming language [58]. Limitations and threats to validity of the
research are discussed in the last subsection.
36
….Even though the readability may increase in the above example, other disadvantages
emerge. The word set may be less effective than create in illustrating the start of a
variable’s lifetime, or may not distinguish equally well between declaring and updating
a variable. Moreover, if one of the goals for the language is to also be transitional, using
= instead of to as an assignment operator is likely favorable since it is commonly used,
as long as the readability is not significantly affected. Given that the = symbol was
shown to be highly intuitive for novices suggests that a rejection of the word to may
not be at the cost of significant readability.
….On the other hand, the = symbol conflicts in several ways to its conventional use in
mathematics for denoting equality. While the mathematical equation x = 1 can be
written as 1 = x, the same is not true for programming languages which distinguish
between l-values (the memory location) and r-values (the right-hand side value to store
in the memory location). As presented in Section 4.4, it is a common misconception that
assignments in programming do not always evaluate from right to left. Removing the
resemblance to mathematics as it in this case has different semantics may alleviate the
corresponding issue. The examples below show the initialization of a variable using the
: symbol (left) and <- symbol (right).
create score: 5 or create score <- 5
….The removal of = for assignment instead allows the symbol to be used exclusively as
an equality operator where the conventions of mathematics are similar in terms of both
equality and allowing values to be positioned on either side (see examples below).
if score = 5 or if 5 = score
….Additionally, changes applied to either side of the equal sign in a mathematical
equation (for instance, adding 1) need to be equally applied to the other side as well, as
in x + 1 = 1 + 1. The use of = for assignment in programming also conflicts with this
convention. Replacing = with : in the examples below illustrates the reduction in
mathematical resemblance which becomes even more conspicuous for languages that
omit keywords for declarations and reassignments.
create score = 5 or create score: 5
change score = 5 + 1 change score: 5 + 1
….The programming language Quorum should also be considered by institutions and
language designers. The studies from which the language derived are introduced in
Section 2.1 and several of their findings are presented throughout Section 4. The results
yielded possible naming alternatives more descriptively appropriate, many of which
Frendli is based on. Below are examples of an if-else statement (left) as well as a
bounded loop (right) in Quorum.
37
….The concept of a function is called an action in Quorum, given the high intuitiveness
of the word found in the studies. All programs start execution at the Main action (see
example below). Quorum is statically typed but uses a type inference system that allows
the types of variables within function bodies to be inferred rather than explicitly
declared.
action Main
number result = Add(3, 2)
end
6.2 Validity
Conclusions and decisions were derived from the results of the literature review; hence,
the limitations associated with the review should be acknowledged. Constrained
resources included the total time allocated (approximately 17 weeks) as well as the
number of authors (1), consequently limiting the comprehensiveness of the review.
Unintentional bias in literature selection and unintentional exclusions of relevant papers
due to, for instance, the choice of query strings are other internal validity concerns.
Even though the results still demonstrate multiple relevant challenges pertaining to
novice programmers, it is possible that other aspects not covered by the literature review
present greater difficulties or even contradictions. Important to consider is also how
much of the results can be attributed solely to the programming language itself. External
factors such as instructional approach or homogeneity of individual universities,
programs, or courses may have biased or otherwise affected the results and the
generalizability thereof. Thus, isolating the programming language as one independent
variable may not always be clear-cut. To mitigate such risks and reduce their potential
impact, studies entailing multiple universities and students were included in the
findings.
….Additionally, the limitations and threats to validity of each referenced paper
inevitably apply to the respective results presented in this paper. Surveys, such as the
ones conducted on the intuitiveness of word choices in the development and evaluation
of the Quorum language [14], [23], are not free from the risk of bias. The design, order,
and word choices of the questions impact how well they test the intended concepts and
thereby the results. Although, the methodological rigor of the studies around Quorum
allowed for a higher degree of confidence in presenting their quantitative results.
38
7 Future Work
Evaluations of Frendli as well as comparisons of alternative languages and syntax are
encouraged for future work. Its usefulness to instructors for teaching concepts and as a
universally transitional language is also yet to be determined. As McIver and Conway
[60] state, the success of an introductory language is most meaningfully measured by
the outcomes of students’ encounters with the language. Accordingly, such outcomes
ought to influence how a language design evolves, rather than deciding on a permanent
one without being susceptible to change.
….As for near to intermediate-term additions to the language, an array data structure is
of high priority. More research around suitable naming alternatives, properties, and
methods will be conducted prior. There will be more support for I/O operations,
arithmetic operators such as modulus, control statements for exiting a loop early, a
built-in function for checking the data type of a variable, and functions for type
conversion. Additionally, having all values, including primitive ones, be an instance of a
class in order to allow for type-specific methods will be researched.
….A critical part of learning to program which was not presented in this research
pertains to debugging. Interpreting error messages and correcting errors have proven to
be difficult tasks for novices, but there is certainly room for improvement in this part of
language design and implementation [6], [60], [79]. Difficulties often stem from terse
and uninformative error messages, providing little guidance especially for first-time
programmers. Frendli’s error reporter will strive to provide a friendlier interaction with
its users, aligned with the overall goals of the language (see Section 5.1). As an
example, one programming language that prioritizes user experience and deviates
greatly from the traditional structure of error messages is Elm [80]. More research in
this area and more languages providing a user-friendly debugging experience would
likely be well-received.
….Although not investigated, the creation of Frendli can hopefully contribute to the
blind programming community as well, as Stefik and Gellenbeck [23] point out that
well-selected syntax based on empirical data will help future studies on how to alleviate
programming for the blind. For instance, rather than hearing the line if x == y ||
x == z as “if x equals equals y bar bar x equals equals z”, the screen reader would say
“if x equals y or x equals z” using the Frendli syntax.
39
8 Conclusion
Several difficulties and misconceptions pertaining to novice programmers have been
presented, as well as languages used by universities and the reasons thereof. A new
programming language called Frendli was proposed and developed, showcasing how
known issues could be syntactically and semantically exploited with the ultimate goal of
benefiting students learning to program.
….Educational institutions use a range of different programming languages in
introductory courses, most commonly represented by Java and Python. Although, one
must not conclude that there can be a single language that fits all programs equally well.
Different programs may have different specializations, opting for languages more
aligned with courses to come. It is safe to assume, nonetheless, that institutions and
students stand to benefit from prioritizing making it as easy as possible for novices in
the early stages of learning. Despite ease of learning being a main reason for using a
specific language in introductory courses, it seemed to be based on perception more so
than actual data, especially given the apparent lack of wide empirical support of the
notion that Python is easy. With regard to designing a language suitable for use in
introductory courses, the fact that other reasons such as language features and industry
relevance also were considered important implies that merely focusing on making it
easy to learn will likely not be enough for adoption–a likelihood that should clearly be
taken into consideration. Although it does still indicate the importance of such a
language characteristic as viewed by the educational institutions.
….What demonstrated more unanimity in the literature was the notion that novices
often struggle with programming. This struggle may be attributed partly to the intricate
nature of programming itself. Since learning new material with high element
interactivity may intrinsically have a high cognitive load, it seems plausible that
programming could inherit certain characteristics that induce and require more mentally
strenuous efforts. When learning to program, as more elements interact and the need to
comprehend how they communicate grows, the intrinsic cognitive load should
consequently increase. It could thereby be beneficial to try to make it easier in other
areas. One such area could be the choice of programming language. For instance, a
simpler syntax and more intuitive keywords may reduce the number of pieces required
to learn along with their unnecessarily added cognitive load. The potential consequences
of the resistance experienced by an increase in cognitive load deserve consideration
since it may affect students differently. It could perhaps cost some their motivation or
contribute to attrition.
….The challenges of learning programming can also be attributed to the difficulties and
misconceptions that derive from, or go unassisted by, the programming language used.
Traditional C-style syntax can cause several usability issues for novices. In contrast, a
simpler syntax often reduces the number of syntax errors, allowing more attention to be
paid to other aspects. However, it is also evident from the literature reviewed that
syntactic simplicity is not always equivalent to ease of learning. When simplicity causes
a lack of clarity it sometimes takes longer to comprehend or allows students to
unknowingly form inaccurate understandings. Thus, the benefits of being syntactically
simpler need to be carefully weighed against the potential tradeoffs. Exploiting such
data in the design of new languages could consequently make for better suited
introductory languages. Moreover, since priorly held concepts may be hard to change
[20], it further demonstrates the importance of helping students form viable mental
models early on. Addressing these aspects in the syntactic and semantic design of
languages could facilitate appropriate conceptualizations while simultaneously making
40
it harder to form damaging mental models. From reviewing the literature, the author
would argue that good candidates for a suitable introductory language are ones that
intuitively convey universal programming concepts through its syntax, minimize
interference and ambiguity of syntax, and provide appropriate syntactic and semantic
consistency to also reduce unnecessary cognitive load that would otherwise impede
students’ learning. Additionally, more consideration for non-native English speakers
ought to be given in programming language design. Frendli is one attempt at such a
language.
….This paper focused specifically on the text-based programming language, but it is
also plausible that other aspects can have significant impact on both learning and
teaching programming, such as visualization and interactive tools, dual-modality
instruction (using both block-based and text-based languages), learning problem solving
prior to programming, learning syntax prior to programming, game-based learning for
motivational purposes, integration of cognitive conflict (challenging pre-existing
notions), and developing a concept inventory (probing students’ conceptual
understandings) [2], [6], [13], [17], [28], [29], [39], [81], [82].
….More of the programming community should acknowledge the numerous ways in
which programming languages can be more accommodating to us as humans if based on
human data. Being a language intended for use in introductory programming courses,
Frendli will continue to evolve as more data and new evidence from studies emerge.
Finally, the author hopes to motivate other language designers to design more
responsibly, given the unequivocal impact it has on our future programmers.
41
References
[1] E. Lahtinen, K. Ala-Mutka, and H.-M. Järvinen, “A study of the difficulties of novice
programmers,” ACM SIGCSE Bulletin, vol. 37, no. 3, pp. 14–18, Sep. 2005, doi:
10.1145/1151954.1067453.
[2] T. Koulouri, S. Lauria, and R. D. Macredie, “Teaching introductory programming: a
quantitative evaluation of different approaches,” ACM Transactions on Computing
Education, vol. 14, no. 4, pp. 1–28, Feb. 2015, doi: 10.1145/2662412.
[3] W. M. Kunkle and R. B. Allen, “The impact of different teaching approaches and
languages on student learning of introductory programming concepts,” ACM
Transactions on Computing Education, vol. 16, no. 1, pp. 1–26, Feb. 2016, doi:
10.1145/2785807.
[4] A. Robins, J. Rountree, and N. Rountree, “Learning and teaching programming: A
review and discussion,” Computer Science Education, vol. 13, no. 2, pp. 137–172, Jun.
2003, doi: 10.1076/csed.13.2.137.14200.
[5] Y. Qian and J. Lehman, “Students’ misconceptions and other difficulties in introductory
programming,” ACM Transactions on Computing Education, vol. 18, no. 1, pp. 1–24,
Dec. 2017, doi: 10.1145/3077618.
[6] A. Luxton-Reilly et al., “Introductory programming: a systematic literature review,” in
Proceedings Companion of the 23rd Annual ACM Conference on Innovation and
Technology in Computer Science Education - ITiCSE 2018 Companion, Larnaca Cyprus,
2018, pp. 55–106. doi: 10.1145/3293881.3295779.
[7] P. J. Denning and A. McGettrick, “Recentering computer science,” Communications of
the ACM, vol. 48, no. 11, pp. 15–19, Nov. 2005, doi: 10.1145/1096000.1096018.
[8] T. Beaubouef and J. Mason, “Why the high attrition rate for computer science students:
some thoughts and observations,” ACM SIGCSE Bulletin, vol. 37, no. 2, pp. 103–106,
Jun. 2005, doi: 10.1145/1083431.1083474.
[9] J. Bennedsen and M. E. Caspersen, “Failure rates in introductory programming: 12 years
later,” ACM Inroads, vol. 10, no. 2, pp. 30–36, Apr. 2019, doi: 10.1145/3324888.
[10] C. Watson and F. W. B. Li, “Failure rates in introductory programming revisited,” in
Proceedings of the 2014 conference on Innovation & technology in computer science
education - ITiCSE ’14, Uppsala Sweden, 2014, pp. 39–44. doi:
10.1145/2591708.2591749.
[11] P. Kinnunen and L. Malmi, “Why students drop out CS1 course?,” in Proceedings of the
Second International Workshop on Computing Education Research, Canterbury United
Kingdom, 2006, pp. 97–108. doi: 10.1145/1151588.1151604.
[12] O. Ezenwoye, “What language? - The choice of an introductory programming
language,” in 2018 IEEE Frontiers in Education Conference (FIE), San Jose California
USA, Oct. 2018, pp. 1–8. doi: 10.1109/FIE.2018.8658592.
[13] A. Vihavainen, J. Airaksinen, and C. Watson, “A systematic review of approaches for
teaching introductory programming and their influence on success,” in Proceedings of
the tenth annual conference on International computing education research - ICER ’14,
Glasgow Scotland United Kingdom, 2014, pp. 19–26. doi: 10.1145/2632320.2632349.
[14] A. Stefik and S. Siebert, “An empirical investigation into programming language
syntax,” ACM Transactions on Computing Education, vol. 13, no. 4, pp. 1–40, Nov.
2013, doi: 10.1145/2534973.
[15] M. Lopez, J. Whalley, P. Robbins, and R. Lister, “Relationships between reading, tracing
and writing skills in introductory programming,” in Proceedings of the fourth
international workshop on Computing education research - ICER ’08, Sydney Australia,
42
2008, pp. 101–112. doi: 10.1145/1404520.1404531.
[16] A. Venables, G. Tan, and R. Lister, “A closer look at tracing, explaining and code
writing skills in the novice programmer,” in Proceedings of the fifth international
workshop on Computing education research workshop - ICER ’09, Berkeley California
USA, 2009, pp. 117–128. doi: 10.1145/1584322.1584336.
[17] T. Sirkiä and J. Sorva, “Exploring programming misconceptions,” in Proceedings of the
12th Koli Calling International Conference on Computing Education Research - Koli
Calling ’12, Koli Finland, 2012, pp. 19–28. doi: 10.1145/2401796.2401799.
[18] L. Ma, J. Ferguson, M. Roper, and M. Wood, “Investigating the viability of mental
models held by novice programmers,” in Proceedings of the 38th SIGCSE technical
symposium on computer science education - SIGCSE ’07, Covington Kentucky USA,
2007, pp. 499–503. doi: 10.1145/1227310.1227481.
[19] L. C. Kaczmarczyk, E. R. Petrick, J. P. East, and G. L. Herman, “Identifying student
misconceptions of programming,” in Proceedings of the 41st ACM technical symposium
on Computer science education - SIGCSE ’10, Milwaukee Wisconsin USA, 2010, pp.
107–111. doi: 10.1145/1734263.1734299.
[20] J. Nussbaum and S. Novick, “Alternative frameworks, conceptual conflict and
accommodation: Toward a principled teaching strategy,” Instructional Science, vol. 11,
no. 3, pp. 183–200, Dec. 1982, doi: 10.1007/bf00414279.
[21] P. Denny, A. Luxton-Reilly, and E. Tempero, “All syntax errors are not equal,” in
Proceedings of the 17th ACM annual conference on Innovation and technology in
computer science education - ITiCSE ’12, Haifa Israel, 2012, pp. 75–80. doi:
10.1145/2325296.2325318.
[22] A. Altadmri and N. C. C. Brown, “37 million compilations: Investigating novice
programming mistakes in large-scale student data,” in Proceedings of the 46th ACM
Technical Symposium on Computer Science Education, Kansas City Missouri USA, Feb.
2015, pp. 522–527. doi: 10.1145/2676723.2677258.
[23] A. Stefik and E. Gellenbeck, “Empirical studies on programming language stimuli,”
Software Quality Journal, vol. 19, no. 1, pp. 65–99, Feb. 2011, doi:
10.1007/s11219-010-9106-7.
[24] M. C. Jadud, “A first look at novice compilation behaviour using BlueJ,” Computer
Science Education, vol. 15, no. 1, pp. 25–40, Mar. 2005, doi:
10.1080/08993400500056530.
[25] F. Johnson, S. McQuistin, and J. O’Donnell, “Analysis of student misconceptions using
Python as an introductory programming language,” in Proceedings of the 4th
Conference on Computing Education Practice 2020, Durham United Kingdom, Jan.
2020, pp. 1–4. doi: 10.1145/3372356.3372360.
[26] E. Kurvinen, N. Hellgren, E. Kaila, M.-J. Laakso, and T. Salakoski, “Programming
misconceptions in an introductory level programming course exam,” in Proceedings of
the 2016 ACM Conference on Innovation and Technology in Computer Science
Education, Arequipa Peru, Jul. 2016, pp. 308–313. doi: 10.1145/2899415.2899447.
[27] N. Alzahrani, F. Vahid, A. Edgcomb, K. Nguyen, and R. Lysecky, “Python versus C++:
An analysis of student struggle on small coding exercises in introductory programming
courses,” Baltimore Maryland USA, Feb. 2018. doi: 10.1145/3159450.3160586.
[28] R. Caceffo, S. Wolfman, K. S. Booth, and R. Azevedo, “Developing a computer science
concept inventory for introductory programming,” in Proceedings of the 47th ACM
Technical Symposium on Computing Science Education, Memphis Tennessee USA, Feb.
2016, pp. 364–369. doi: 10.1145/2839509.2844559.
[29] L. Ma, J. Ferguson, M. Roper, and M. Wood, “Investigating and improving the models
43
of programming concepts held by novice programmers,” Computer Science Education,
vol. 21, no. 1, pp. 57–80, Mar. 2011, doi: 10.1080/08993408.2011.554722.
[30] S. Hanenberg, “Faith, hope, and love: an essay on software science’s neglect of human
factors,” in Proceedings of the ACM international conference on object oriented
programming systems languages and applications - OOPSLA ’10, Reno/Tahoe Nevada
USA, 2010, pp. 933–946. doi: 10.1145/1869459.1869536.
[31] A. Stefik, S. Hanenberg, M. McKenney, A. Andrews, S. K. Yellanki, and S. Siebert,
“What is the foundation of evidence of human factors decisions in language design? an
empirical study on programming language workshops,” in Proceedings of the 22nd
International Conference on Program Comprehension - ICPC 2014, Hyderabad India,
2014, pp. 223–231. doi: 10.1145/2597008.2597154.
[32] S. Markstrum, “Staking claims: a history of programming language design claims and
evidence,” in Evaluation and Usability of Programming Languages and Tools on -
PLATEAU ’10, Reno Nevada, 2010, pp. 1–5. doi: 10.1145/1937117.1937124.
[33] A. Stefik and S. Hanenberg, “The programming language wars: questions and
responsibilities for the programming language community,” Portland Oregon USA, Oct.
2014. doi: 10.1145/2661136.2661156.
[34] L. Jansson, “Frendli,” GitHub, 2022. https://github.com/frendlilang (Accessed Apr. 04,
2022).
[35] A. E. Fleury, “Programming in Java: student-constructed rules,” in Proceedings of the
thirty-first SIGCSE technical symposium on computer science education - SIGCSE ’00,
Austin Texas USA, 2000, pp. 197–201. doi: 10.1145/330908.331854.
[36] R. P. Medeiros, G. L. Ramalho, and T. P. Falcao, “A systematic literature review on
teaching and learning introductory programming in higher education,” IEEE
Transactions on Education, vol. 62, no. 2, pp. 77–90, May 2019, doi:
10.1109/te.2018.2864133.
[37] P. Denny, A. Luxton-Reilly, E. Tempero, and J. Hendrickx, “Understanding the syntax
barrier for novices,” in Proceedings of the 16th annual joint conference on Innovation
and technology in computer science education - ITiCSE ’11, Darmstadt Germany, 2011,
pp. 208–212. doi: 10.1145/1999747.1999807.
[38] O. Muller, D. Ginat, and B. Haberman, “Pattern-oriented instruction and its influence on
problem decomposition and solution construction,” in Proceedings of the 12th annual
SIGCSE conference on Innovation and technology in computer science education -
ITiCSE ’07, Dundee Scotland, 2007, pp. 151–155. doi: 10.1145/1268784.1268830.
[39] D. Cliburn, “The effectiveness of games as assignments in an introductory programming
course,” in Proceedings. Frontiers in Education. 36th Annual Conference, San Diego
California USA, 2006, pp. 6–10. doi: 10.1109/fie.2006.322314.
[40] J. Wainer and E. C. Xavier, “A controlled experiment on Python vs C for an
introductory programming course,” ACM Transactions on Computing Education, vol.
18, no. 3, pp. 1–16, Sep. 2018, doi: 10.1145/3152894.
[41] J. Hofmeister, J. Siegmund, and D. V. Holt, “Shorter identifier names take longer to
comprehend,” in 2017 IEEE 24th International Conference on Software Analysis,
Evolution and Reengineering (SANER), Klagenfurt Austria, Feb. 2017, pp. 217–227.
doi: 10.1109/saner.2017.7884623.
[42] R. Mason and Simon, “Introductory programming courses in Australasia in 2016,” in
Proceedings of the Nineteenth Australasian Computing Education Conference on - ACE
’17, Geelong VIC Australia, 2017, pp. 81–89. doi: 10.1145/3013499.3013512.
[43] W. Feurzeig and G. Lukas, “LOGO—a programming language for teaching
mathematics,” Educational Technology, vol. 12, no. 3, pp. 39–46, 1972.
44
[44] Logo Foundation, el.media.mit.edu. https://el.media.mit.edu/logo-foundation (Accessed
Jan. 22, 2022).
[45] R. C. Holt and D. B. Wortman, “A sequence of structured subsets of PL/I,” in
Proceedings of the fourth SIGCSE technical symposium on Computer science education
- SIGCSE ’74, 1974, pp. 129–132. doi: 10.1145/800183.810456.
[46] R. C. Holt, D. B. Wortman, D. T. Barnard, and J. R. Cordy, “SP/k: a system for teaching
computer programming,” Communications of the ACM, vol. 20, no. 5, pp. 301–309,
May 1977, doi: 10.1145/359581.359586.
[47] R. C. Holt and J. R. Cordy, “The Turing programming language,” Communications of
the ACM, vol. 31, no. 12, pp. 1410–1423, Dec. 1988, doi: 10.1145/53580.53581.
[48] S. Cooper, W. Dann, and R. Pausch, “Alice: a 3-D tool for introductory programming
concepts,” Journal of computing sciences in colleges, vol. 5, no. 15, pp. 107–116, 2000.
[49] Carnegie Mellon University, “Alice – Tell stories. Build games. Learn to program.,”
Alice.org. https://www.alice.org/ (Accessed Jan. 22, 2022).
[50] J. Maloney, M. Resnick, N. Rusk, B. Silverman, and E. Eastmond, “The Scratch
programming language and environment,” ACM Transactions on Computing Education,
vol. 10, no. 4, pp. 1–15, Nov. 2010, doi: 10.1145/1868358.1868363.
[51] The Scratch Foundation, “Scratch - Imagine, program, share,” Scratch.mit.edu, 2018.
https://scratch.mit.edu/ (Accessed Jan. 22, 2022).
[52] C.-K. Chang, “Effects of using Alice and Scratch in an introductory programming
course for corrective instruction,” Journal of Educational Computing Research, vol. 51,
no. 2, pp. 185–204, Sep. 2014, doi: 10.2190/ec.51.2.c.
[53] E. R. Sykes, “Determining the effectiveness of the 3D Alice programming environment
at the computer science I level,” Journal of Educational Computing Research, vol. 36,
no. 2, pp. 223–244, Mar. 2007, doi: 10.2190/j175-q735-1345-270m.
[54] T.-C. Wang, W.-H. Mei, S.-L. Lin, S.-K. Chiu, and J. M.-C. Lin, “Teaching
programming concepts to high school students with Alice,” in 2009 39th IEEE Frontiers
in Education Conference, San Antonio Texas USA, Oct. 2009, pp. 1–6. doi:
10.1109/FIE.2009.5350486.
[55] D. Weintrop and U. Wilensky, “Using commutative assessments to compare conceptual
understanding in blocks-based and text-based programs,” in Proceedings of the eleventh
annual International Conference on International Computing Education Research -
ICER ’15, Omaha Nebraska USA, 2015, pp. 101–110. doi: 10.1145/2787622.2787721.
[56] D. Franklin, C. Hill, H. A. Dwyer, A. K. Hansen, A. Iveland, and D. B. Harlow,
“Initialization in Scratch: seeking knowledge transfer,” in Proceedings of the 47th ACM
Technical Symposium on Computing Science Education, Memphis Tennessee USA, Feb.
2016, pp. 217–222. doi: 10.1145/2839509.2844569.
[57] Z. Nasrawt and M. Lam, “Less-Java, more learning: language design for introductory
programming,” Journal of Computing Sciences in Colleges, vol. 34, no. 3, pp. 64–72,
2019.
[58] “The Quorum programming language,” Quorumlanguage.com, 2014.
https://quorumlanguage.com/ (Accessed Jan. 22, 2022).
[59] B. Kitchenham, “Procedures for performing systematic reviews,” Keele, UK, Keele
University, vol. 33, no. 2004, pp. 1–26, 2004.
[60] L. McIver and D. Conway, “Seven deadly sins of introductory programming language
design,” in Proceedings 1996 International Conference Software Engineering:
Education and Practice, Dunedin New Zealand, 1996, pp. 309–316. doi:
10.1109/seep.1996.534015.
45
[61] A. Luxton-Reilly, “Learning to program is easy,” in Proceedings of the 2016 ACM
Conference on Innovation and Technology in Computer Science Education, Arequipa
Peru, Jul. 2016, pp. 284–289. doi: 10.1145/2899415.2899432.
[62] D. Teague and R. Lister, “Manifestations of preoperational reasoning on similar
programming tasks,” in Proceedings of the Sixteenth Australasian Computing Education
Conference [Conferences in Research and Practice in Information Technology, Volume
148], Darlinghurst Australia, 2014, pp. 65–74.
[63] J. Sweller, “Cognitive load theory, learning difficulty, and instructional design,”
Learning and Instruction, vol. 4, no. 4, pp. 295–312, Jan. 1994, doi:
10.1016/0959-4752(94)90003-5.
[64] S. Lee et al., “Comparing programming language comprehension between novice and
expert programmers using EEG analysis,” in 2016 IEEE 16th International Conference
on Bioinformatics and Bioengineering (BIBE), Taichung Taiwan, Oct. 2016, pp.
350–355. doi: 10.1109/bibe.2016.30.
[65] I. Drosos, P. J. Guo, and C. Parnin, “HappyFace: identifying and predicting frustrating
obstacles for learning programming at scale,” in 2017 IEEE Symposium on Visual
Languages and Human-Centric Computing (VL/HCC), Raleigh North Carolina USA,
Oct. 2017, pp. 171–179. doi: 10.1109/vlhcc.2017.8103465.
[66] K. Fisler, “The recurring rainfall problem,” in Proceedings of the tenth annual
conference on International computing education research - ICER ’14, Glasgow
Scotland United Kingdom, 2014, pp. 35–42. doi: 10.1145/2632320.2632346.
[67] A. E. Tew and M. Guzdial, “The FCS1: a language independent assessment of CS1
knowledge,” in Proceedings of the 42nd ACM technical symposium on Computer
science education - SIGCSE ’11, Dallas Texas USA, 2011, pp. 111–116. doi:
10.1145/1953163.1953200.
[68] P. Bayman and R. E. Mayer, “A diagnosis of beginning programmers’ misconceptions
of BASIC programming statements,” Communications of the ACM, vol. 26, no. 9, pp.
677–679, Sep. 1983, doi: 10.1145/358172.358408.
[69] T. Vilner, E. Zur, and J. Gal-Ezer, “Fundamental concepts of CS1,” ACM SIGCSE
Bulletin, vol. 39, no. 3, pp. 171–175, Jun. 2007, doi: 10.1145/1269900.1268835.
[70] T. J. McGill and S. E. Volet, “A conceptual framework for analyzing students’
knowledge of programming,” Journal of Research on Computing in Education, vol. 29,
no. 3, pp. 276–297, Mar. 1997, doi: 10.1080/08886504.1997.10782199.
[71] J. P. Smith III, A. A. diSessa, and J. Roschelle, “Misconceptions reconceived: a
constructivist analysis of knowledge in transition,” Journal of the Learning Sciences,
vol. 3, no. 2, pp. 115–163, Apr. 1994, doi: 10.1207/s15327809jls0302_1.
[72] J. Sorva, V. Karavirta, and L. Malmi, “A review of generic program visualization
systems for introductory programming education,” ACM Transactions on Computing
Education, vol. 13, no. 4, pp. 1–64, Nov. 2013, doi: 10.1145/2490822.
[73] P. N. Johnson-Laird, “Mental models in cognitive science,” Cognitive Science, vol. 4,
no. 1, pp. 71–115, Mar. 1981, doi: 10.1016/s0364-0213(81)80005-5.
[74] A. Bruckman and E. Edwards, “Should we leverage natural-language knowledge? An
analysis of user errors in a natural-language-style programming language,” in
Proceedings of the SIGCHI conference on Human factors in computing systems the CHI
is the limit - CHI ’99, Pittsburgh Pennsylvania USA, 1999, pp. 207–214. doi:
10.1145/302979.303040.
[75] Y. Qian and J. D. Lehman, “Correlates of success in introductory programming: a study
with middle school students,” Journal of Education and Learning, vol. 5, no. 2, p. 73,
Mar. 2016, doi: 10.5539/jel.v5n2p73.
46
[76] M. Ben-Ari, “Constructivism in computer science education,” ACM SIGCSE Bulletin,
vol. 30, no. 1, pp. 257–261, Mar. 1998, doi: 10.1145/274790.274308.
[77] D. Goldberg, “What every computer scientist should know about floating-point
arithmetic,” ACM Computing Surveys, vol. 23, no. 1, pp. 5–48, 1991, doi:
10.1145/103162.103163.
[78] S. Kleinschmager, S. Hanenberg, R. Robbes, and A. Stefik, “Do static type systems
improve the maintainability of software systems? An empirical study,” in 2012 20th
IEEE International Conference on Program Comprehension (ICPC), Passau Germany,
Jun. 2012, pp. 153–162. doi: 10.1109/icpc.2012.6240483.
[79] B. A. Becker, “An effective approach to enhancing compiler error messages,” in
Proceedings of the 47th ACM Technical Symposium on Computing Science Education,
Memphis Tennessee USA, Feb. 2016, pp. 126–131. doi: 10.1145/2839509.2844584.
[80] E. Czaplicki, “Compiler errors for humans,” Elm-lang.org, Jun. 30, 2015.
https://elm-lang.org/news/compiler-errors-for-humans (Accessed Apr. 26, 2022).
[81] J. Blanchard, C. Gardner-McCune, and L. Anthony, “Dual-modality instruction and
learning,” in Proceedings of the 51st ACM Technical Symposium on Computer Science
Education, Portland Oregon USA, Feb. 2020, pp. 818–824. doi:
10.1145/3328778.3366865.
[82] J. Edwards, J. Ditton, D. Trninic, H. Swanson, S. Sullivan, and C. Mano, “Syntax
exercises in CS1,” in Proceedings of the 2020 ACM Conference on International
Computing Education Research, Virtual Event New Zealand, Aug. 2020, pp. 216–226.
doi: 10.1145/3372782.3406259.
47
A Sample Program in Frendli
This appendix provides a sample program written in the Frendli programming language.
When executed, the program counts down (displays each number) starting from
parameter count and decremented each time by parameter step. The implementation
below is an iterative solution, but recursive solutions are also supported.
….The function assumes only number data types are passed (a built-in function for
type-checking will be added to the language after more research on suitable design and
naming alternatives have been conducted).
if count equals 0
display(send "You have reached 0!")
otherwise
display(send "You have passed 0..")
48
B Justifications for Design Decisions in Frendli
Table B.1, Table B.2, Table B.3, Table B.4, Table B.5, and Table B.6 list syntactic
design decisions for Frendli. Each decision listed specifies which of the goals in Table
5.1 it addressed. The specific issue (difficulty, misconception, or language design
problem or principle) found in the literature review that each decision relates to is also
specified when applicable by referring to the IDs given in Table 4.6 (prefixed with D for
difficulty), Table 4.7 (prefixed with M for misconception), Table 4.8, and Table 4.9 (the
latter two prefixed with LD for language design). C signifies the decision is related to
one or more conflicts. If a specific decision was not found to be explicitly supported or
refuted in the reviewed literature, the decision was instead an unevaluated attempt to
address one or more of the issues found.
TABLE B.1
Justifications for General Design Decisions
Related ID
Decision Example Explanation Goal Issue
49
(2) Attempted to increase
familiarity.
50
TABLE B.2
Justifications for Data Type Design Decisions
Related ID
Decision Example Explanation Goal Issue
Use number for number The word number was more G1 D10
numerical types intuitive for an integer and a D11
float.
Use text for text The word text was more G1 D13
textual types intuitive for a list of
characters.
Use "" for a "My Text" (1) The symbols "" were G1 D14
text literal more intuitive for enclosing G3
a list of characters.
(2) The symbols "" were
shared across multiple
languages.
Use empty for empty The word empty was more G1 D15
the absence of a intuitive for the absence of a
value value.
51
(2) The words true and false
were shared across multiple
languages.
TABLE B.3
Justifications for Operator Design Decisions
Related ID
Decision Example Explanation Goal Issue
Use <, <=, >, >= x < y (1) Allowed comparisons to G1 LD7
for boolean be interpreted as G3 LD8
comparison conventional math. LD10
(2) The symbols were shared
across multiple languages.
52
comparison and conflict than the
alternative words and
symbols below, while being
a direct translation of the
more intuitive equal sign in
singular form.
Use not for not x (1) The word not was G1 LD10
logical negation seemingly common in G3
every-day use.
(2) The symbol ! in other
languages for the same
concept is referred to as not.
Use and and or x and y The words and and or were G1 D26
for logical x or y more intuitive for logical LD10
conjunction conjunction.
Do not use && x && y The symbols && and || were G1 D26
and || for x || y less intuitive for logical
53
logical conjunction.
conjunction
Use + for text "My" + "Text" The symbol + was more G1 D22
concatenation intuitive for concatenating
characters.
TABLE B.4
Justifications for Variable Design Decisions
Related ID
Decision Example Explanation Goal Issue
54
suggest it first has to exist.
(2) Attempted to illustrate
the order of execution of
declarations (see above) and
reassignments, as
modification ought to
succeed creation.
(3) Attempted to illustrate
that reassignments were
allowed and reduce
similarity of conventional
math where the x value is
unchanged in an equation.
TABLE B.5
Justifications for Control Design Decisions
Related ID
Decision Example Explanation Goal Issue
Do not use then if x < y then The word then as part of G1 D30
in selection doA() selection constructs had low
syntactic accuracy.
Use repeat repeat 2 times The word repeat and the G1 D32
times for doA() constructs repeat times and G2 D33
bounded loops timesRepeat were more LD10
intuitive for doing something
zero or more times.
55
Use repeat repeat while x (1) The word repeat and the G1 D32
while for doA() construct while were more G2 D33
unbounded loops intuitive for doing something G3 D34
zero or more times. LD10
(2) The word while had
significantly fewer
characters than the
speculatively less ambiguous
as long as.
(3) The word while was
shared across multiple
languages.
Do not use only while x < 2 (1) The word while was less G1 D29
while for doA() intuitive for doing something G2 D32
unbounded loops zero or more times, and more D34
intuitive for selection.
(2) Reduced consistency
between loop constructs.
(3) The lack of a preceding
verb abated the attempt to
illustrate a repetitive action.
TABLE B.6
Justifications for Function Design Decisions
Related ID
Decision Example Explanation Goal Issue
56
approval/permission.
57
results are returned.
(3) Attempted to reduce
ambiguity of possible
manipulation of the return
value by including with.
(4) Attempted to make
implicit returns of empty
more intuitive (which occurs
in the absence of the word
with), as not returning with
anything is synonymous to
returning empty handed.
58