ArticlePDF Available

Why is programming so difficult to learn?: Patterns of Difficulties Related to Programming Learning Mid-Stage


New software engineers and casual developers are needed in many different areas. However, students face many difficulties while learning the logic of computer programming, frequently failing in university courses. This Ph.D. research aims to identify difficulty patterns related to learning how to program, a crucial part of software engineers training. The research methodology comprises studies that put together results from a systematic literature review and empirical data collected from qualitative and quantitative studies. The difficulties identified will be compiled into a model, which may assist students in sharpening their focus, and teachers in preparing their lessons and teaching material, as well as researchers in employing methods and tools to support learning
Copyright is held by the author.
Why is programming so difficult to learn?
Patterns of Difficulties Related to Programming Learning
Yorah Bosse
University of São Paulo - USP
Rua do Matão, 1010
CEP 05508-090 São Paulo SP - Brazil
+55 11 3722 2998
Marco Aurélio Gerosa
University of São Paulo - USP
Rua do Matão, 1010
CEP 05508-090 São Paulo SP - Brazil
+55 11 3091 0753
New software engineers and casual developers are needed in many
different areas. However, students face many difficulties while learning
the logic of computer programming, frequently failing in university
courses. This Ph.D. research aims to identify difficulty patterns related to
learning how to program, a crucial part of software engineers training.
The research methodology comprises studies that put together results
from a systematic literature review and empirical data collected from
qualitative and quantitative studies. The difficulties identified will be
compiled into a model, which may assist students in sharpening their
focus, and teachers in preparing their lessons and teaching material, as
well as researchers in employing methods and tools to support learning.
Categories and Subject Descriptors
[Theory of Computation]: Semantics and reasoning
– Program Constructs – Control primitives.
General Terms
Human Factors.
Patterns of problems, novice, casual developer,
programming, software engineering education.
Many businesses fail before they are able to fulfil their potential in the
market and one of the causes is a lack of software developers [11]. This
means it is a serious challenge for modern society to prepare new
generations of software developers, since it requires people who are
skilled in algorithms and computer programming. Some governments,
such as Australia1, the USA2, Brazil3 and the United Kingdom4, and
some organizations, Code.Org5 for example, are undertaking initiatives
in this area with the support of several companies. In addition, some
researchers believe that the use of specific software development
methods can bring advantages in learn to program, bringing a different,
more productive and fun way of teaching. As an example, the research,
conducted by Missiroli et al., shows that the precocious exposure of
novices programmers to Agile brings advantages not only as a
development project, but also as a teaching tool [17].
Programmers are needed to develop and adapt modern systems.
However, programming trainees have encountered a number of
difficulties. This can be evidenced by the high dropout rates and failures
in programming courses [3, 6].
To support researchers in the creation of new methods and development
of programming learning systems and the training of new software
engineers and developers, this research seeks to identify patterns of
difficulties related to learning how to program. The patterns will be
independent of programming language. Difficulties, for this research, are
all factors that disturb the learning of programming, such as syntax and
semantic errors. We focus on the difficulties faced by learners while they
are developing the computational thinking for the procedural paradigm.
The research questions are as follows:
RQ1 What is the unsuccessful rate in introduction programming
RQ2 What difficulties have been reported in the literature with regard
to learning how to program?
RQ3 – What are the difficulties of learning how to program from the
students’ perspective?
RQ4 – What are the difficulties of learning how to program from the
RQ5What errors in syntax and semantics are recurrently found in the
code developed by the students?
RQ6How to apply the identified patterns to improve teaching-learning
of programming?
“Programming is a complicated business” [15]. This can be seen when
evaluating the high percentage of fail presented in Introduction
Programming courses [3, 6]. Beaubourg and Mason studied the reasons
for high rates, checking, among other factors, the limited problem
resolution skills, use of laboratories given for homework, and also the
fact that the students go direct to programming, not going through the
analysis and design steps [2]. Initiatives to bring programming to schools
help to develop skills needed for better performance.
5 Site: What Most Schools
Don't Teach.
DOI: 10.1145/3011286.3011301
ACM SIGSOFT Software Engineering Notes
Page 1
November 2016 Volume 41 Number 6
There are several skills needed to learn how to program, being more
obvious the ability to solve problems and fundamental knowledge of
math. Besides these, Jenkins [15] states that it is necessary to know how
to use a computer, to create the program, compile, test, and correct bugs,
and learning style and motivation are factors that influence the process of
learning to how to program.
Understanding the process of learning a first programming language can
help in the task of creating more effective learning environments [13],
thereby reducing the difficulties encountered by beginners. Several
researchers aimed to find information about these difficulties. Denny et
al. [12] show that syntax error is one of the barriers for programming
novices, delaying the feedback provided to students about the logic of the
code developed. Cechinel et al. reported that the most common problems
are the lack of ability to find errors, develop a program to solve a task,
and modularization of code using functions and procedures. The topics
considered the most difficult were functions and procedures, error
handling, and arrays (vectors) [7].
Ribeiro et al. investigated the differences between the use of textual and
visual programming environments in the introduction of computer
programming [20]. After analyzing the data collected from NASA TLX,
activity log, and survey, they concluded that visual programming is a
good model for teaching algorithms and programming. Many others
researches are conducted to determine if specific methodology, as Agile
[17], or code smells by novice programming [14] help to learn how to
Lahtinen et al. conducted a survey at six universities in five countries and
obtained responses from 559 students and 34 instructors. The answers
were given on a scale of 1, easy to learn, to 5, very difficult. As for the
educational content covered in the course, the average student perception
about how difficulty is the course (mean 2.8) is smaller than instructors
(mean 3.5). Students and instructors have the same perceptions of the
three content considered more difficult. They are, in this order: pointers,
error handling, and recursion. Other contents also considered difficult
were: using language library and abstract data types. Both in the view of
students and instructors, the three content deemed easier were: selection,
repetition, and variables. However, learning the concepts is not
considered by students and instructors the biggest problem for
programming apprentices. The biggest problem is to apply them in
practice [16].
This work contributes to the state of the art identifying patterns of
difficulties related to programming learning. As opposed to the
traditional focus on syntax problems, our study focuses mainly on the
semantic level in the procedural programming paradigm. Other studies
cite difficulties, problems, and common errors, however do not provide
an in-depth understanding of the difficulties, their relations, and their
relevance in multiple scenarios. Thus, knowledge about learning
difficulties is spread thin across the literature, and there is little
exploration of the problems faced by learners that are not from the
computer science area. Additionally, we observed that the majority of the
related research predominantly relied on quantitative questionnaire-
based methodology. Those that uncovered difficulties missed research
questions or objectives related to the in-depth understanding of the
phenomena from points of view of students and instructors. In this
research, we systematically review the literature and collect data from
students and instructors. Our study aims to provide this neglected in-
depth understanding of the difficulties and to add to the dominant
quantitative survey-based research on learning how to program.
The main goal of this research is to identify patterns of difficulties related
to learning how to program. To achieve this, we will conduct a mixed-
method research.
3.1 Research Question 1
RQ1 What is the unsuccessful rate in introduction programming
First of all, it is important to explain the meaning of unsuccessful. For
our research, unsuccessful is the result showing that the student has not
completed or did not receive a grade necessary to conclude the course. In
order to gather evidence about the problem we are dealing with, we will
conduct a quantitative study about approvals and failures in introduction
programming courses. Much of our data collection will be conducted at
the University of São Paulo - USP, which offers annual Introduction
Programming courses for thousands of students from several different
subject-areas. Thus, our goal is to discover the following: what courses
are being offered, what is the profile of the students, what is the failure
and drop-out rate, what is the profile of each instructor, and how this
compares to the data obtained from the literature. We are also analyzing
the possibility to create and submit a survey to several universities from
different countries to seek information regarding the unsuccessful rate in
introductory programming courses.
Methodology: The first step was to query Introduction to Programming
(IP) courses in the academic system using three keywords:
"programming," "algorithms," and "computing." Our search returned a
total of 207 courses. After analyzing the content of these programs, we
selected a group of 31 courses for our research. Only 29 of these courses
were considered because two were new, and their classes had not been
completed. We obtained an anonymous database which provided the
individual results of the 29 courses in the previous five years. We also
obtained the school records of each student who attended one of the 29
courses. The preliminary results of the analysis of this database have been
shown in two papers [5, 6]. We are currently analyzing the results over a
longer period of time and cross referencing additional data such as the
results of the students in the university entrance exam and in other
subjects. Our aim is to compare the results in the IP course with other
courses and specific knowledge areas, such as Languages, Math, Physics,
Validation test plans and publications: Some information has already
been obtained , such as the percentage of failures, which corroborated the
results obtained by Bennedsen and Caspersen [3]. We will also conduct
a quantitative examination of the performance of students at the
University of São Paulo, and these will be compared with the results from
the literature, and an article will be submitted to a reputable journal.
Threats to validity and other challenges: Some factors may lead to errors
in the data disclosed, such as the possibility of errors in the extraction and
compilation of the system data. To avoid this, we selected a sample of
data for manual checking, and compared this with data from other
Timeline with Milestones from RQ1: Figure 1 below shows the timeline
of RQ1.
Figure 1. Timeline with milestones from RQ1.
Writing papers
Q4 2016
Q3 2016
Q2 2015
(5 years DB)
(5 years DB +
(10 years DB)
paper of
ACM SIGSOFT Software Engineering Notes
Page 2
November 2016 Volume 41 Number 6
3.2 Research Question 2
RQ2 What difficulties have been reported in the literature with regard
to learning how to program?
Methodology: A systematic literature review will be carried out to
identify difficulties in learning how to program that have been reported
and/or empirically investigated so far. We are currently refining the
protocol, which includes a search string, databases, and criteria for
exclusion/inclusion. On the basis of these factors, the search will be
carried out, and this will involve identifying the primary studies,
determining what difficulties have been reported and evaluated, and
collating the results. A model of difficultieswill be proposed, in a
similar way to a previous study conducted by our research group [21].
Validation test plan and publication: the design of the model will be
grounded on the data obtained from the primary studies. We will also
compare our results with those of other literature reviews or catalogues,
if available. The results will be formatted in an article that will be
submitted to a Software Engineering journal.
Threats to validity and other challenges: a threat to validity that we have
in mind is the improper definition of the search string. To avoid this
threat, we will select articles that are known in the area and the string
must return these items in the search results.
Timeline with Milestones from RQ2: Figure 2 below shows the timeline
of RQ2.
Figure 2. Timeline with milestones from RQ2.
3.3 Research Question 3
RQ3 – What are the difficulties of learning how to program from the
students’ perspective?
Methodology: We have been collection information from students by
means of three different methods. The first involves individual interviews
based on the Think Aloud technique [19]. This technique consists of
observing the way users perform specific tasks in controlled
environments. The task assigned to the students was made up of 4
exercises with different levels of difficulty. They had to solve a problem
using the C programming language, in the Virtual Programming Lab -
VPL6. VPL is a plugin for Moodle developed by the University of Las
Palmas, Canary Islands - ULPGC that offers information about the
compilation of the code. In addition, through test cases set by the
instructor, it gives feedback to the students about their code. During the
interviews, the computer screen and audio was recorded for subsequent
analysis. In the pilot study, six students who had failed in the introductory
programming course took part in the interviews at the end of 2015.
The second method is based on Diaries [18]. This method was chosen
because it enables information about events and experiences to be
obtained from the perspective of the subject in a spontaneous way,
reducing the time between the occurrence of the event and the time when
it is reported to the researchers [4]. In the second half of 2015, students
6 Virtual Programming Lab VPL. URL:
from six courses were invited to participate in our research project by
filling out diaries during their studies. They were encouraged to report
their experiences, their feelings, the difficulties encountered during their
studies, and how they were resolved. 34 students took part in the activity.
Google Docs was used for the data collection, by means of individual
documents for each student. Open coding and axial coding [8] were used
for the data analysis. Our group has already used diaries and this kind of
analysis in another situation [22]. This method will be applied again in
the second half of 2016 with students from other courses.
The third method will include a survey with specific questions about
possible difficulties encountered in the introductory programming
course. This survey aims to quantitatively confirm observed patterns and
expand the scope of analysis, collect more qualitative and quantitative
data. This survey will be applied to students from several universities on
two occasions, with classes in the first and second half of 2016.
Validation test plan and publication: data were collected in three different
ways and a joint analysis will be carried out to identify the patterns. The
data collected with interviews regarding the Think Aloud method were
described in a submitted paper and the data from the diaries (part of RQ3)
and interviews (part of RQ4) were compiled and a paper is being
Threats to validity and other challenges: The greatest challenge is to
persuade the students to participate by filling in the diaries and answering
the questions in the survey. We will go to some classrooms and collect
the responses in person.
3.4 Research Question 4
RQ4 – What are the difficulties of learning how to program from the
instructors’ perspective?
Methodology: Interviews were conducted in late 2015 with 16 instructors
involved in the Introduction to Programming course. Ten instructors were
randomly selected and the other 6 were those that were teaching
Introduction Programming courses that semester. The purpose of the
interviews was to find out what are the difficulties of the students in the
view of the instructor. Inquiries were made about the syllabus of the
subject to determine the difficulties observed by the instructors. The
interviews were conducted individually, the content was recorded on
audio and transcribed. Currently, we are at the stage of analyzing and
formatting data employing the methodology of Grounded Theory.
With also aim to conduct surveys to collect additional data and confirm
some hypothesis raised during the analysis.
Validation test plan and publication: data from the diaries (part of RQ3)
and interviews (part of RQ4) were formatted and will be presented in a
paper. Data collected from students (RQ3), together with the data from
the instructors (RQ4) will be analyzed and formatted in a paper that will
be submitted to an international journal.
Timeline with Milestones from RQ3 and RQ4: Figure 3 below shows the
timeline of RQ3 and RQ4.
Figure 3. Timeline with milestones from RQ3 and RQ4.
Reading of
Q2 2017
Q1 2017
Writing papers and qualification work
Q4 2016
Q3 2016
Preparation -
selected with
search string
Papers selected
with inclusion
paper of
ACM SIGSOFT Software Engineering Notes
Page 3
November 2016 Volume 41 Number 6
3.5 Research Question 5
RQ5What errors in syntax and semantics are recurrently found in the
code developed by the students?
Methodology: Code made by students during the semesters has been
collected for analysis of error patterns. We will connect these patterns to
those identified from the previous RQs. We will use mining software
repositories techniques in order to collect, clean, and analyze the data,
searching for the patterns.
Validation test plan and publication: A problem must be detected in at
least three different situations in order to be considered a pattern. We plan
to gather evidence of the reported difficulties and find new patterns
analyzing the source code produced by the learners.
Threats to validity and other challenges: The analysis of syntax errors can
be done by a system that analyzes the code submitted by the students.
The analysis of the logic errors is more complicated to be performed by
the system. We are still testing different way of doing this activity.
Timeline with Milestones from RQ5: Figure 4 below shows the timeline
of RQ5.
Figure 4. Timeline with milestones from RQ5.
3.6 Patterns Definition
Based on the results of the RQ2 to RQ5, we will compile the difficulties
observed into patterns. Each pattern will comprise a name, situation in
which it occurs, how to solve it, and examples. We will also categorize
the patterns according to the Bloom’s taxonomy. Bloom created
categories for educational goals[1] (Figure 5). Each category has a set of
action words that could be used help identify the kind of knowledge
related to the difficulties.
Figure 5. Bloom’s taxonomy7.
3.7 Research Question 6
RQ6How to apply the identified patterns to improve teaching-learning
of programming?
Methodology: Guided by the previously modeled patterns, we will
follow an action research approach. We will specify the teaching strategy
for each pattern of difficulty identified, according to what the instructors
reported. After this, we will define two groups learning the same contents
(two different courses or two group inside the same course). In one of
them, we will apply the strategy. In the other one, we will analyze the
students manifest the difficulty related to the pattern (Figure 6). At each
stage of action research, different elements of the model will be
evaluated. We will perform the triangulation of data to validate the results
and improve accuracy [9, 10].
Figure 6. Pattern and strategy validation process.
Validation test plan and publication: An article describing the research
and its results will be submitted for publication in an international
Threats to validity and other challenges: One challenge will be to have
classes and instructors enough to work in this action research. Another
challenge will be to have time enough to make all validation.
Timeline with Milestones from RQ6: Figure 7 below shows the timeline
of RQ6.
Figure 7. Timeline with milestones from RQ6.
In the following, we present some results achieved.
RQ1 What is the unsuccessful rate in introduction programming
We have analyzed a database comprising results from introductory
programming courses at the University of São Paulo for the years 2010-
2014. Our results corroborate those of other studies [3]. Out of the 18,784
registrations made in the analyzed period, 30% resulted in failures or
dropouts, what was fairly constant over the years. We evidenced a higher
failure rate for students who were not from the computer science area,
reaching 30.3% compared to 25.1% of students who are from the area.
We also found that more than 25% of who were approved attended two
1. Set
2. Apply
in a group
3. In another
group, without
the strategy,
verify the
presence of the
4. Compare the
two groups to
see if the
Writing papers and thesis
Q3 2018
Q2 2018
Pattern and stra tegy validation process
Q1 2017
Finished the
documentatio n
ACM SIGSOFT Software Engineering Notes
Page 4
November 2016 Volume 41 Number 6
or more times the course. This course is among the ones with the highest
failure rates.
RQ3 – What are the difficulties of learning how to program from the
students’ perspective?
In the second half of 2015, 34 students from six courses filled diaries
about their studies. They reported difficulties and some strategies found
to solve them. In the following, we present some students' comments
identifying who wrote them by means of a subscript "a" followed by a
numbering. The data found in these diaries were analyzed using
Grounded Theory procedures and they were grouped by concepts,
forming four categories: Difficulties, Study Strategies, Preferences, and
Self-assessments. In the following, we present some results from the first
category. We detected that 'syntax error', with 13 occurrences, was the
problem most frequently reported by students, with comments like: “I
still have a lot of errors in basic things like braces, parentheses, and
semicolonsa1, “the program still didn't execute due to some syntax
errors that I don't know how to solvea20 and, “It is returning syntax error
all the timea22. This type of error makes students to return often to the
code before being able to check if their logic was correct.
Problems with 'variables' was the second most cited, as noted in the
following comment I had difficulty to understand what should be float
and what should be int type, so I had to go testing to finda1. The concept
'Language + IDE + Error Message' was also widely cited, having
complaints as: “initially, I had difficulty with the language, even with the
complementary material, I had difficulty putting into practicea5,
because the program's messages did not help at alla20 and,I could not
interpret the messages that the program showed, so I had to execute parts
of the program separately in another window until I could identify the
errora20. In addition to these complaints about the language and the error
messages, we received comments related to the IDE, as the instructor's
site doesn't have the link to download the updated version of the IDE, and
the available version doesn't work on Windows 8a17.
In an another study, aimed at getting more information about the students
and their behavior during the studies, using the Think Aloud method, we
conducted interviews with six students, lasting about one hour each. These
students did not succeed during the semester and needed to make the final
test if they wanted to be approved. During the interviews, they were
challenged to solve four exercises with increasing degree of difficulty.
Their interview session was registered, including the computer screen and
audio recordings, for analysis.
One of the observed attitudes, adopted by 2 of the students, was to take
notes while they read the statements (student 1 and 3). These 2 had no
better results than the others, but one of them, when asked by the interview
moderator, informed thatannotating helps to remember what needs to be
done because otherwise I cannot remember”. Analyzing the behavior of
the respondents while running the session, we observed that this
annotation process helped, for example, in the definition of which and how
many variables were required to solve the task. One difference between
these students and the others is that they had less mistakes in declaring the
variables and setting their types, practically they did not need to go back
to the code to change what they had written.
The interview moderator observed in two students a reaction while reading
the statement. Student 6 had not read the entire statement when he stopped
reading to make the comment “I get nervous when I see the word matrix”.
The student 1, when started to read the second question spoke instantly “I
do not like function” and “I have difficulties with function parameters”.
Student 1 said “At a first glance I dislike this exercise, I like exercises that
have numbers”. In these three situations the students did not succeed on
solving the exercise. This may be a sign that the students create a barrier
to the content that they face more difficulty.
We also noticed uncertainty in students and some degree of absence of
analytical thinking. They are used to copy and paste the code to read
matrix elements, but when faced by compilation errors, there stated
comments like “We will see now. Must be something wrong. There is
always something wrong.” The moderator noted that the commands to
which they referred to were correctly written, but with undeclared name.
Moreover, in some moments, the student faced problems with intention
and practice. They verbalized something, but wrote something different.
This situation was detected during interviews and can be observed in the
comments “I do not know if it's like this to read an array, but okaya1 and
I think something is missing in this printa6.
Syntax errors were common in all the interviews and exercises, e.g.
opening and closing structures with brackets, colons, correct spelling of
the commands, among others. Some errors are noteworthy, such as: (A)
attempt to read the data in the matrix; (B) create an unnamed function,
besides the incorrect declaration of the variables to receive the parameters,
and (C) semi-colon ending a structure of repetition and selection that has
not even started.
When semantic errors occurred, students usually became more
disappointed than with syntax errors. With syntax errors, they seemed to
be more accustomed. The semantic errors made students to drop out the
exercise faster, because they already realized that they need more time to
fix semantic errors.
RQ4 – What are the difficulties of learning how to program from the
instructors’ perspective?
We randomly selected 14 instructors of the Computer Science
Department of the University of São Paulo, that taught introductory
programming. Individual interviews were conducted with each of them.
The interviews were recorded and are being analyzed using Grounded
Theory procedures. The objective of this study is to seek the difficulties
encountered by students in the instructorsview.
The main difficulty, cited by instructors, is the 'logical reasoning'. They
have tried pseudocode, but most have given up. Some instructors use the
pseudocode only to quickly explain the concept, then they go straight to
the programming language. Others use pseudocode in parallel, i.e., they
develop in pseudocode and then translate into the programming language:
“...if you don't know where to start, writes in natural language a draft.
After this, you go to the pseudocode and only at the end you go to
Pythonp3. They also reported that the experience sometimes makes it
difficult to teach: “I see a problem, it already is structured in my mind and
I don't know how it happensp1 .
About the 'syntactical issues of language', they all agreed that C syntax has
much more details to be observed during programming. It was also
commented that the 'choice of language' influences on the development of
the student.
They cited operators - arithmetic, logical and relational as sources of
difficulties. Students get confused with precedence. There is also difficulty
in differentiating the logical operators 'and' and 'or' and do arithmetic with
variables from the same type, but resulting in a different type. An example
is when the division of two integers results zero, as the division of 1 by 2.
To display the correct result, the type of the resulting value must be float,
it is hard to them realize the errorp4.
Among the structures of selection/decision and repeat/loop, most
instructors start teaching the loop structure, more specifically by 'while'.
It was often cited that 'while' gives the impression of having more control
about the structure, that the student prefers 'whilerather than 'for',
information that corroborates those of diaries written by students. Students
also have difficulty in embedded loops and how to set the break condition.
In the selection structure, the difficulty issee the if..else pairs. In
addition, the students mix concepts between decision and loop structures.
For arrays, there is the 'forgotten to put the index' regarding the position,
which is solved with the strategy of 'intensive practice': You have to do
by repeating, which is a tiring business at the beginningp1 . Instructors
also commented that students understand the concept, but fail to apply in
practice, information that reinforces what has already been published [23].
About function, the difficulty lies in understanding the scope of the
variables and the importance of the return value. Teachers believe that
there are not major problems with parameter passing, however, when it is
by reference and the language used is C, the difficulty increases.
ACM SIGSOFT Software Engineering Notes
Page 5
November 2016 Volume 41 Number 6
Instructors comment that there are some factors that help to make
difficult to teach how to program, as: heterogeneity of the groups and
between groups, low participation in class, low frequency, very large
classes, disinterest in learning, the programming language adopted,
trauma of students that repeat the course, among others. They also
expressed concern about trying to motivate the student. They use strategies
like working with games, challenge, and competition. Instructors
complained about trying to know by heart instead of learning. This was a
strategy also quoted by the students in the diaries.
The next steps of the research are:
1. Complete the database analysis about the last 10 years of the
Introduction to Programming course at USP (RQ1).
2. Perform the systematic literature review to find difficulties
reported (RQ2).
3. Apply the technique of diaries in more courses and run a
confirmatory questionnaire with students (RQ3).
4. Complete interviews with instructors from USP and apply an
extended survey for instructors from outside. Analyze and
tabulate the data that will give us information about the
students' difficulties perceived by teachers (RQ4).
5. Consolidate the results from the systematic literature review
and the data collection in a single model
6. Analyze the source code produced by students (RQ5).
7. Validate the patterns (RQ6).
The specific timelines were presented in the method section.
Until now, we are not a lot of results, but some patterns are already defined.
One of these is the difficulty that students have to work with functions.
Understanding the scope of variables and why it is necessary to pass and
return parameters is not easy for them. Some strategies used by instructors
to mitigate this barrier were explained in the interviews with instructors.
We expected that the patterns of difficulty related to programming learning
help students in their studies, teachers in preparing their lessons, and
researchers in developing new tools to support teaching and learning
programming. This will help to train the next generation of software
We would like to express our thanks to the instructors and students from
the University of São Paulo for their valuable assistance with our research
[1] Anderson, L.W.. et al. 2001. A taxonomy for learning, teaching,
and assessing : a revision of Bloom’s taxonomy of educational
objectives. Longman.
[2] Beaubouef, T. and Mason, J. 2005. Why the high attrition rate
for computer science students. ACM SIGCSE Bulletin. 37, 2
(2005), 103.
[3] Bennedsen, J., & Caspersen, M.E. 2007. Failure rates in
Introductory Programming. ACM SIGCSE Bulletin. 39, 2
(2007), 3236.
[4] Bolger, N. et al. 2003. Diary methods: Capturing life as it is
lived. Annual Review of Psychology. 54, (2003), 579–616.
[5] Bosse, Y. and Gerosa, M.A. 2015. As Disciplinas de Introdução
à Programação na USP: um Estudo Preliminar. WAlgProg - I
Workshop de Ensino em Pensamento Computacional,
Algoritmos e Programação. Cbie (2015), 1389.
[6] Bosse, Y. and Gerosa, M.A. 2015. Reprovações e Trancamentos
nas Disciplinas de Introdução à Programação da Universidade
de São Paulo : Um Estudo Preliminar. WEI - Workshop sobre
Educação em Computação. (2015), 110.
[7] Cechinel, C. et al. 2008. Desenvolvimento de Objetos de
Aprendizagem para o Apoio à Disciplina de Algoritmos e
Programação. Simpósio Brasileiro de …. (2008).
[8] Corbin, J. and Strauss, A. 1990. Grounded theory research:
Procedures, canons, and evaluative criteria. Qualitative
Sociology. 13, (1990), 3–21.
[9] Creswell, J.W. 2013. Research design: Qualitative,
quantitative, and mixed methods approaches.
[10] Creswell, J.W. and Clark, V.L.P. 2007. Designing and
conducting mixed methods research.
[11] Crowne, M. 2002. Why software product startups fail and what
to do about it. Evolution of software product development in
startup companies. IEEE International Engineering
Management Conference. 1, (2002), 338343.
[12] Denny, P. et al. 2011. Understanding the syntax barrier for
novices. Proceedings of the 16th ACM conference on Innovation
and technology in computer science education - ITiCSE ’11.
(2011), 208.
[13] Garner, S. et al. 2005. My program is correct but it doesn’t run:
A preliminary investigation of novice programmers’ problems.
Conferences in Research and Practice in Information
Technology Series. 42, (2005), 173180.
[14] Hermans, F. and Aivaloglou, E. 2016. Do Code Smells Hamper
Novice Programming ? (2016).
[15] Jenkins, T. 2002. On the Difficulty of Learning to Program. ICS
- International Conference on Supercomputing. (2002).
[16] Lahtinen, E. et al. 2005. A study of the difficulties of novice
programmers. ACM SIGCSE Bulletin. 37, 3 (2005), 1418.
[17] Missiroli, M. et al. 2016. Learning Agile Software Development
in High School : an Investigation. Proceedings of the 38th
International Conference on Software Engineering (ICSE).
(2016), 293302.
[18] Reis, H.T. 1994. Domains of experience: investigating
relationship processes from three perspectives. 87110.
[19] Renzi, A.B. et al. 2012. Use of Think-Aloud Protocol to Verify
Usability Problems and Flow During Use of Entertainment and
Personal Journal. 12o Congresso Internacional de Ergonomia e
Usabilidade de Interfaces Humano-Computador (Natal - Brasil,
2012), 7.
[20] Ribeiro, R. da S. et al. 2014. Programming web-course analysis:
How to introduce computer programming? 2014 IEEE Frontiers
in Education Conference (FIE) Proceedings. 2015–Febru,
February (2014), 18.
[21] Steinmacher, I. et al. 2015. A systematic literature review on the
barriers faced by newcomers to open source software projects.
Information and Software Technology. 59, (2015), 67–85.
[22] Steinmacher, I. et al. 2016. Overcoming open source project
entry barriers with a portal for newcomers. Proceedings of the
38th International Conference on Software Engineering (ICSE).
(2016), 273–284.
[23] Winslow, L.E. 1996. Programming Pedagogy - A Psychological
Overview. ACM SIGCSE Bulletin. 28, 3 (1996), 1722.
ACM SIGSOFT Software Engineering Notes
Page 6
November 2016 Volume 41 Number 6
... Furthermore, one of the reasons for the company's failure is the absence of proficient developers [2], as fostering proficient developers is demanding. Therefore, several countries and private organizations, including the United Kingdom, Brazil, the United States, and Australia, are focusing on developing SW talent with the help of quite a few corporations [3]. In Korea, education is conducted in elementary and middle schools to enhance the public's understanding of SW and spread the use of SW by revising the SW Promotion Act [4], and related education is being conducted for non-major students through the SW-centered university project [5]. ...
... However, programming courses are among the ones with a higher failure rate. In this respect, Bosse and Gerosa (2016) investigated why programming is difficult to learn [3]. From 2010 to 2014, the study's classes served as the foundation for programming classes at the University of Sao Paulo. ...
Full-text available
As a result of the COVID-19 pandemic, many universities have shifted to non-face-to-face classes resulting in numerous changes in the educational system. Since programming education includes a greater proportion of practice than theory-oriented courses, non-face-to-face classes have several constraints. As a result, to properly execute software education and enhance educational performance for non-major students, it is required to conduct research. Students’ psychological moods and activities collected in online classrooms were used to investigate factors impacting academic success as measured by scores and grades. Multiple regression analysis and logistic regression analysis were conducted by using data mining analytical approach. Attendance, effort expectancy, hedonic motivation, confidence, frequency of communication in mobile chat rooms, and Python programming intention factors were retrieved as an outcome of the performance. The relevance of the factors was confirmed, and it was revealed that hedonic motivation was crucial for students in Class A, while attendance had a significant impact on academic progress for students in the other grades. The goal of this research is to assist university organizations in making decisions by enhancing computer liberal arts education and offering implications for future non-face-to-face teaching environments such as during the COVID-19 pandemic.
... Nonetheless, professionals in both academia and industry have faced several obstacles in keeping up with the plethora of programming languages, libraries, and standards that emerge on a regular basis. Studies show using programming languages might present hurdles for researchers who lack the essential knowledge or time to learn how to properly apply scripts to perform their jobs (López Pimentel et al., 2021;Bosse & Gerosa, 2017). ...
We introduce HydroLang Markup Language (HL-ML), a programming interface that uses markup language to perform environmental analyses using the hydrological and environmental framework HydroLang. The software acts as a self-contained interface that uses HTML tags powered by the web components specification to generate simple hydrological computations that enable data analysis, visualization and manipulation via semantically driven instructions. It enables hydrological researchers and professionals to use markup language to retrieve, analyze, visualize, and map data without the need for a programming experience. The components' adaptability enables users to run analytical routines that perform simple and complex analyses on the client side. We present the implementation details of the approach, the use of custom elements in web technologies and academia, and share sample usages to demonstrate the simplicity of use of the human-readable and computer-executable framework.
... Although computer programming is used to inform the study, the reader need not understand the technicalities thereof to use the proposed methodology in their own discipline. Studies about how students learn professional practice are endless and it has been recorded many times that learning a professional practice is a challenge for students (Bosse and Gerosa 2017;Daley 2000;Williams 2001). Educators use a variety of teaching approaches in order to address challenges faced when teaching a professional practice such as self-directed learning (Davenport 2018), reflection (Paterson and Chapman 2013), and project based learning (Fernandes 2014). ...
Full-text available
Learning the art of any professional practice like engineering design or computer programming is a challenge for students and adds to the complexity of teaching such a technical discipline. Institutional regulations, along with industry expectations, increase the burden on the educator to develop a successful instructional environment. Critical systems thinking provides practitioners, in general, with a framework for understanding interrelation and complexities in a variety of problem situations. The art of systems thinking requires discourse on both the interdependencies, and multiple perspectives present in a problem situation. However, little guidance exists for educators in applying the concepts of critical systems thinking in their everyday practice of teaching a professional practice module at university level. This paper suggests a methodology based on action research and critical systems thinking concepts, to incorporate the art of systems thinking in the teaching of a professional practice module. The phases of action research are described from the critical systems perspective of Ulrich, in order to provide guidelines for an educator to embrace the complexity of professional practice education. Programming is used as a demonstration of the proposed methodology. The methodology incorporates systems thinking aspects such as the totality of conditioned realities, boundary critique, and acting as a witness sensitive to polemical argumentation on behalf of the affected. It demonstrates how Ulrich’s approach involves - and respects - all stakeholders in a system and guides the individual educator to excel in teaching a professional practice module. By making a conscious effort to listen to the affected and to incorporate as many conditioned realities as possible, the educator should be able to improve student engagement, resulting in better skills. We provide a demonstration of the art of teaching a professional practice module methodology which enables the educator to develop the programming skills of students in a complex environment.
Full-text available
Oyun geliştirmeye dayalı öğrenme stratejisi, öğrencilerin oyunlara karşı olan ilgilerini sıfırdan bir oyun geliştirmeye veya mevcut bir oyuna eklentiler yapmaya yönlendirerek programlamayı öğrenmelerini sağlamayı amaçlamaktadır. Bu stratejide öğrenciler yazılım mühendisliği yöntem ve tekniklerini oyun geliştirme projeleri vasıtasıyla deneyimlemektedir. Bu tez çalışmasında araştırmacının kendisinin vermekte olduğu Nesne Yönelimli Programlama dersinde yaşanan sorunları en aza indirebilmek ve dersin verimliliğini artırabilmek için oyun geliştirmeye dayalı programlama öğretiminin mevcut derse bütünleşmiş edildiği bir eylem araştırması yürütülmüştür. Bu bağlamda araştırmanın amacı; mevcut Nesne Yönelimli Programlama dersinin sorunlarının tespit edilmesi; mezun öğrencilerin, uzmanların ve alanyazındaki çalışmaların önerileri ışığında mevcut dersin oyun geliştirmeye dayalı öğretim stratejisini temel alarak yeniden tasarlanması; geliştirilen dersin uygulanması ve bu süreçte yaşanan deneyimlerin raporlanması olarak belirlenmiştir. Belirlenen amaç ve hedefler doğrultusunda bu tez çalışması, iki araştırma döngüsünü kapsayacak şekilde tasarlanmış ve uygulanmıştır. Birinci döngü analiz, tasarım, uygulama ve değerlendirme basamaklarını içerirken ikinci döngü tasarım, uygulama ve değerlendirme basamaklarını içermiştir. Birinci döngünün analiz aşamasında daha önce nesne yönelimli programlama dersini almış ve okullarından mezun olmuş 59 katılımcı ile nesne yönelimli programlama dersini vermekte olan altı öğretim elemanından veriler toplanarak mevcut dersin sorunlarının detaylı bir şekilde tespit edilmesi sağlanmıştır. İlave olarak analiz aşamasında öğrencilerin derste geliştirmek istedikleri yazılım projesi ve oyun türleri nedenleriyle incelenmiştir. Tasarım aşamasında; analiz aşamasından elde edilen verilerin çözümlenmesinden ve alanyazından yararlanılarak mevcut nesne yönelimli programlama dersi Morrison, Ross ve Kemp öğretim tasarım modeli ışığında oyun geliştirmeye dayalı öğretim stratejisini temel alacak şekilde yeniden tasarlanmıştır. Birinci döngünün uygulama aşaması sekiz hafta sürecek şekilde Türkiye’deki bir meslek yüksekokulunun bilgisayar teknolojisi programında öğrenim görmekte olan 29 önlisans öğrencisi ile yürütülmüştür. Birinci döngünün uygulama aşamasından sonra uygulanan eylem planının etkinliği değerlendirilmiş ve birinci döngüde karşılaşılan sorunların giderilmesi amacıyla ikinci döngünün tasarım aşamasında bazı revizyonlar gerçekleştirilmiştir. Revize edilen nesne yönelimli programlama dersi acil uzaktan öğretim yöntemi kullanılarak 15 hafta sürecek şekilde Türkiye’deki bir meslek yüksekokulunun bilgisayar teknolojisi programında öğrenim görmekte olan 30 önlisans öğrencisi ile yürütülmüştür. Bu aşamadan sonra uygulanan eylem planının değerlendirilmesine yönelik yansıtma yapılmıştır. Araştırmada hem nitel hem de nicel araştırma tekniklerine uygun olarak toplam 14 adet veri toplama aracı kullanılmıştır. Araştırmanın birinci döngü bulgularına göre oyun geliştirmeye dayalı stratejisi temel alınarak sunulan öğretimin katılımcıların nesne yönelimli programlama bilgi ve becerilerini anlamlı şekilde geliştirdiği tespit edilmiştir. Bunun yanında katılımcıların en çok çokbiçimlilik, kurucu metot ve kapsülleme konularında zorlandıkları da ortaya çıkmıştır. İkinci döngüde gerçekleştirilen revizyonlarla birlikte bu konularda gelişim sağlanmıştır. Araştırmanın diğer sonuçlarına göre oyun geliştirmeye dayalı programlama öğretiminin her iki döngüde de katılımcıların çoğunun programlama dersine yönelik motivasyonlarını ve programlama öz yeterlilik algılarını olumlu etkilediği görülmüştür. Ancak programlama kaygısı bağlamında değerlendirildiğinde, katılımcıların programlama kaygılarının çalışmanın başlarında arttığı ancak süreç içinde azaldığı; yine de programlama kaygılarının devam ettiği sonucuna varılmıştır. Bu çalışma kapsamında gerçekleştirilen öğretim tasarımın ve uygulama sonucunda elde edilen deneyimlerin, geliştirilen “Programlama Kaygı Ölçeğinin” alanyazına katkı sunması açısından önemli görülmektedir. Oyun geliştirmeye dayalı öğretim stratejisinin nesne yönelimli programlama dersine entegrasyonu açısından değerlendirildiğinde, mevcut çalışmanın öğrencilerin nesne yönelimli programlama dersinde karşılaştıkları sorunları en aza indirmeye çalışması; öğrencilerin programlamaya yönelik ilgi ve motivasyonlarını artırarak programlama öz yeterlilik algılarında olumlu değişimler yaratmayı amaçlaması bakımından güncel, işlevsel ve özgündür. Anahtar Kelimeler: Nesne Yönelimli Programlama, Oyun Geliştirmeye Dayalı Programlama Öğretimi, Oyun Programlama, Programlama Dersine Yönelik Motivasyon, Programlama Öz Yeterliliği, Programlama Kaygısı.
Conference Paper
Full-text available
This article presents the results of a systematic literature review (RSL) on the use of Spaced Repetition (RE) methodology in Computer Education. Primary studies from 2011 to 2021 were analyzed, resulting in 46 studies indexed from the search string, of which nine were analyzed to answer the research questions. This RSL confirms that the RE methodology, although widely studied and applied in the teaching of Foreign Languages and Medicine, is still a little-explored field concerning the teaching of Computer Science. This work contributes to identifying research gaps and possibilities for new pedagogical practices in computing teaching.
Conference Paper
Full-text available
A disciplina de introdução à programação ensina aos alunos a lógica da programação de computadores, desenvolvendo o pensamento sistemático e criativo. Entretanto, muitos autores a apontam como sendo uma das disciplinas que os alunos mais reprovam. Com o intuito de investigar tal afirmação, realizamos um levantamento dos resultados das disciplinas de introdução à programação na USP de 2010 a 2014. O índice de reprovação na disciplina foi de 30%, sendo que em vários casos ultrapassam os 50%. Esses dados mantemse constantes ao longo dos anos e mais de 25% dos alunos aprovados neste período fizeram 2 ou mais vezes a disciplina. Comparando-se com disciplinas do mesmo semestre, nos cursos de computação, ela é uma das que mais reprova.
Conference Paper
Full-text available
This work presents the very first stage of a research project which aims to develop learning objects to support algorithms and programming teaching and learning process. The paper describes the developed learning objects (focused on C programming language), their contents and goals, and the evaluation of these materials by the students. This work also highlights some student's difficulties on learning how to program, and points out which are the didactic materials considered relevant by them to support their studies. Resumo Este trabalho apresenta a primeira etapa de execução de um projeto voltado para o desenvolvimento de objetos de aprendizagem para o apoio ao ensino de Algoritmos e Programação. O trabalho descreve os primeiros objetos de aprendizagem desenvolvidos (para o ensino da linguagem de programação C), seus conteúdos e objetivos, e uma avaliação inicial dos acadêmicos sobre o uso dos mesmos. O artigo também apresenta algumas observações sobre as dificuldades enfrentadas pelos estudantes no processo de ensino-aprendizagem dos conteúdos de programação e quais materiais didáticos os alunos apontam como úteis para o apoio a esse processo. Palavras-chave: Objetos de Aprendizagem, Algoritmos e Programação, Gravações de Desktop 1. Introdução O presente trabalho tem como objetivo principal relatar as atividades e resultados obtidos na primeira etapa de execução do projeto "Desenvolvimento de um Repositório de Objetos de Aprendizagem para o Apoio ao Ensino dos Fundamentos da Área de Conhecimento de Algoritmos e Programação e Estruturas de Dados". O mesmo tem como objetivo auxiliar os alunos da disciplina de Algoritmos e Programação (AP) através da criação e disponibilização de objetos de aprendizagem (OAs), que neste primeiro momento estão sendo desenvolvidos em formato de vídeos explicativos (tutoriais). Esses tutoriais constituem-se basicamente em gravações do desktop do computador durante a programação de algum algoritmo ou
Conference Paper
Full-text available
Context: Empirical investigations regarding using Agile programming methodologies in high schools are scarce in the literature. Objective: This paper evaluates (i) the performance, (ii) the code quality, and (iii) the satisfaction of both students and teachers in using Agile practices in education. Method: this study includes an experiment, administered in a laboratory controlled setting to measure students' performances and a case study to value the code quality improvements. Questionnaires were also used to evaluate qualitative aspects of Agile practices. Results: groups of students with mixed skills performed significantly better than groups with the same skill level. Moreover, there was also a general increase in code quality along with satisfaction. Conclusions: Agile methodologies are useful in the High School education of young software developers.
Conference Paper
Full-text available
Community-based Open Source Software (OSS) projects are usually self-organized and dynamic, receiving contributions from distributed volunteers. Newcomer are important to the survival, long-term success, and continuity of these communities. However, newcomers face many barriers when making their first contribution to an OSS project, leading in many cases to dropouts. Therefore, a major challenge for OSS projects is to provide ways to support newcomers during their first contribution. In this paper, we propose and evaluate FLOSScoach, a portal created to support newcomers to OSS projects. FLOSScoach was designed based on a conceptual model of barriers created in our previous work. To evaluate the portal, we conducted a study with 65 students, relying on qualitative data from diaries, self-efficacy questionnaires, and the Technology Acceptance Model. The results indicate that FLOSScoach played an important role in guiding newcomers and in lowering barriers related to the orientation and contribution process, whereas it was not effective in lowering technical barriers. We also found that FLOSScoach is useful, easy to use, and increased newcomers' confidence to contribute. Our results can help project maintainers on deciding the points that need more attention in order to help OSS project newcomers overcome entry barriers.
Using grounded theory as an example, this paper examines three methodological questions that are generally applicable to all qualitative methods. How should the usual scientific canons be reinterpreted for qualitative research? How should researchers report the procedures and canons used in their research? What evaluative criteria should be used in judging the research products? The basic argument we propose is that the criteria should be adapted to fit the procedures of the method. We demonstrate how we have done this with grounded theory and suggest criteria for evaluating studies done in this mode. We suggest that other qualitative researchers might be similarly specific about their procedures and evaluative criteria.