Surveying Upper-Secondary Teachers on Programming MisconceptionsLuca ChiodiniJoey BevilacquaMatthias Hauswirth
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 InformationManually 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 misconceptionsArtifact
https://zenodo.org/records/15633868Related MisconceptionsReferenced by 34 Misconceptions
AssignCompares — Java
= compares two valuesAssignCompares — Python
= compares two valuesAssignmentCopiesObject — Java
Assignment copies the objectAssignmentCopiesObject — JavaScript
Assignment copies the objectAssignmentCopiesObject — Python
Assignment copies the objectCompareBooleanToConstant — Scratch
To test whether an expression evaluates to true or false, one must compare it to a constantComparisonWithBoolLiteral — Python
To test whether an expression is True or False, one must compare it to True or to FalseComparisonWithBooleanLiteral — Java
To test whether an expression is true or false, one must compare it to true or to falseConditionalIsSequence — Java
If-else is equivalent to sequence of two ifsConditionalIsSequence — Python
If-else is equivalent to sequence of two ifsDeferredReturn — Java
A return statement in the middle of a method doesn't return immediatelyDeferredReturn — Python
A return statement in the middle of a function doesn't return immediatelyIfIsLoop — Java
The body of an if statement executes repeatedly, as long as the condition holdsIfIsLoop — Python
The body of an if-statement executes repeatedly, as long as the condition holdsMapToBooleanWithIf — Java
To map a boolean expression to a boolean, an if statement is necessaryMapToBooleanWithIf — Python
To map a boolean expression to a bool, an if statement is necessaryMultipleValuesReturn — Python
Functions can return multiple valuesNoAtomicExpression — Java
Expressions must consist of more than one pieceNoAtomicExpression — JavaScript
Expressions must consist of more than one pieceNoAtomicExpression — Python
Expressions must consist of more than one pieceNoReservedWords — Java
Every sequence of letters and digits starting with a letter can be used as an identifierNoReservedWords — Python
Every sequence of letters and digits starting with a letter or an underscore can be used as an identifierNoShortCircuit — Java
&& and || always evaluate both operandsNoShortCircuit — Python
and/or always evaluate both operandsOutsideInFunctionNesting — Python
Nested function calls are invoked outside inOutsideInMethodNesting — Java
Nested method calls are invoked outside inParenthesesOnlyIfArgument — Java
() are optional for method calls without argumentsParenthesesOnlyIfArgument — Python
() are optional for function calls without argumentsReturnCall — Java
Return statements need () around the return valueReturnCall — Python
Return statements need () around the return valueReturnUnwindsMultipleFrames — Java
A return statement can unwind multiple call stack framesReturnUnwindsMultipleFrames — Python
A return statement can unwind multiple call stack framesVariablesHoldExpressions — Java
= stores an expression in a variableVariablesHoldExpressions — Python
= stores an expression: it stores a reference to the expression in a variable