Surveying Upper-Secondary Teachers on Programming Misconceptions
Luca Chiodini
Joey Bevilacqua
Matthias Hauswirth

2025

Proceedings of the 2025 ACM Conference on International Computing Education Research - Volume 1

Background and Context: Misconceptions in programming have been studied extensively, but most research focuses on uncovering and assessing misconceptions in students. When teachers are involved, it is usually only to elicit their perspective on misconceptions in their students. However, there is no guarantee that teachers do not hold misconceptions themselves. Detecting the possible presence of misconceptions in teachers is a crucial step for improving their content knowledge and pedagogical content knowledge, which benefits hundreds of students each year. Objectives: The study aims to answer the following research questions: Which programming misconceptions do teachers themselves hold? Are teachers aware of these misconceptions, do they observe them in their students, and do they consider them important? Are there differences in the teachers’ perspectives, depending on whether they hold misconceptions themselves? Which strategies do teachers employ to deal with the misconceptions in their students? Method: We conducted an extensive, 55-page-long survey of uppersecondary informatics teachers who teach programming in Python. The survey focused on 16 Python misconceptions reported in prior research that involve concepts covered in the teachers’ upper-secondary courses. The first part of the survey assessed whether the teachers held misconceptions, probing their knowledge with two related questions for each misconception and asking for mandatory explanations. The second part of the survey asked teachers whether they previously knew about the misconceptions, how prevalent they were in their students, how important they believe them to be, and how they could tell that their students hold the misconceptions. Findings: The number of teachers who gave incorrect answers on programming misconception questions varies considerably by misconception, ranging from 3 % to 40 %. Most teachers report being familiar with the misconceptions that were part of the study, consider them rather important, and have observed them at least once in their students. Teachers who answered correctly consistently rate misconceptions as more important and more prevalent among their students. Strategies to deal with the misconceptions include ways to prevent, detect, and fix them. Implications: When teachers hold misconceptions, all of their students can be affected. This study highlights the importance of professional development for teachers so that they can both correct their own misconceptions and recognize them in their students, ultimately leading to better programming education. Our results also caution computing education researchers against assuming that teachers are free from misconceptions. We recommend that future studies include an assessment of the participants’ knowledge, to ensure that findings are properly contextualized.

Study Information
Manually extracted from the paper by the Progmiscon.org team

Programming Languages

Python

Method

Quantitative systematic research

Subjects

97 Swiss high school teachers and their students

Phenomena Studied

Programming Language Misconceptions
Misconceptions that directly correspond to Progmiscon.org misconceptions

Artifact

https://zenodo.org/records/15633868

Related Misconceptions
Referenced by 34 Misconceptions

Misconception
AssignComparesJava
= compares two values
Misconception
AssignComparesPython
= compares two values
Misconception
AssignmentCopiesObjectJava
Assignment copies the object
Misconception
AssignmentCopiesObjectJavaScript
Assignment copies the object
Misconception
AssignmentCopiesObjectPython
Assignment copies the object
Misconception
CompareBooleanToConstantScratch
To test whether an expression evaluates to true or false, one must compare it to a constant
Misconception
ComparisonWithBoolLiteralPython
To test whether an expression is True or False, one must compare it to True or to False
Misconception
ComparisonWithBooleanLiteralJava
To test whether an expression is true or false, one must compare it to true or to false
Misconception
ConditionalIsSequenceJava
If-else is equivalent to sequence of two ifs
Misconception
ConditionalIsSequencePython
If-else is equivalent to sequence of two ifs
Misconception
DeferredReturnJava
A return statement in the middle of a method doesn't return immediately
Misconception
DeferredReturnPython
A return statement in the middle of a function doesn't return immediately
Misconception
IfIsLoopJava
The body of an if statement executes repeatedly, as long as the condition holds
Misconception
IfIsLoopPython
The body of an if-statement executes repeatedly, as long as the condition holds
Misconception
MapToBooleanWithIfJava
To map a boolean expression to a boolean, an if statement is necessary
Misconception
MapToBooleanWithIfPython
To map a boolean expression to a bool, an if statement is necessary
Misconception
MultipleValuesReturnPython
Functions can return multiple values
Misconception
NoAtomicExpressionJava
Expressions must consist of more than one piece
Misconception
NoAtomicExpressionJavaScript
Expressions must consist of more than one piece
Misconception
NoAtomicExpressionPython
Expressions must consist of more than one piece
Misconception
NoReservedWordsJava
Every sequence of letters and digits starting with a letter can be used as an identifier
Misconception
NoReservedWordsPython
Every sequence of letters and digits starting with a letter or an underscore can be used as an identifier
Misconception
NoShortCircuitJava
&& and || always evaluate both operands
Misconception
NoShortCircuitPython
and/or always evaluate both operands
Misconception
OutsideInFunctionNestingPython
Nested function calls are invoked outside in
Misconception
OutsideInMethodNestingJava
Nested method calls are invoked outside in
Misconception
ParenthesesOnlyIfArgumentJava
() are optional for method calls without arguments
Misconception
ParenthesesOnlyIfArgumentPython
() are optional for function calls without arguments
Misconception
ReturnCallJava
Return statements need () around the return value
Misconception
ReturnCallPython
Return statements need () around the return value
Misconception
ReturnUnwindsMultipleFramesJava
A return statement can unwind multiple call stack frames
Misconception
ReturnUnwindsMultipleFramesPython
A return statement can unwind multiple call stack frames
Misconception
VariablesHoldExpressionsJava
= stores an expression in a variable
Misconception
VariablesHoldExpressionsPython
= stores an expression: it stores a reference to the expression in a variable

Stay up-to-date

Follow us on  twitter to hear about new misconceptions.