<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0717-5000</journal-id>
<journal-title><![CDATA[CLEI Electronic Journal]]></journal-title>
<abbrev-journal-title><![CDATA[CLEIej]]></abbrev-journal-title>
<issn>0717-5000</issn>
<publisher>
<publisher-name><![CDATA[Centro Latinoamericano de Estudios en Informática]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0717-50002016000200003</article-id>
<title-group>
<article-title xml:lang="en"><![CDATA[Understanding Notional Machines through Traditional Teaching with Conceptual Contraposition and Program Memory Tracing]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Hidalgo-Céspedes]]></surname>
<given-names><![CDATA[Jeisson]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Marín-Raventós]]></surname>
<given-names><![CDATA[Gabriela]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Lara-Villagrán]]></surname>
<given-names><![CDATA[Vladimir]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad de Costa Rica Centro de Investigaciones en Tecnologías de la Información y Comunicación CITIC-ECCI ]]></institution>
<addr-line><![CDATA[San José ]]></addr-line>
<country>Costa Rica</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>08</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>08</month>
<year>2016</year>
</pub-date>
<volume>19</volume>
<numero>2</numero>
<fpage>3</fpage>
<lpage>3</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_arttext&amp;pid=S0717-50002016000200003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_abstract&amp;pid=S0717-50002016000200003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_pdf&amp;pid=S0717-50002016000200003&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="en"><p><![CDATA[A correct understanding about how computers run code is mandatory in order to effectively learn to program. Lectures have historically been used in programming courses to teach how computers execute code, and students are assessed through traditional evaluation methods, such as exams. Constructivism learning theory objects to students’ passiveness during lessons, and traditional quantitative methods for evaluating a complex cognitive process such as understanding. Constructivism proposes complimentary techniques, such as conceptual contraposition and colloquies. We enriched lectures of a “Programming II” (CS2) course combining conceptual contraposition with program memory tracing, then we evaluated students’ understanding of programming concepts through colloquies. Results revealed that these techniques applied to the lecture are insufficient to help students develop satisfactory mental models of the C++ notional machine, and colloquies behaved as the most comprehensive traditional evaluations conducted in the course.]]></p></abstract>
<abstract abstract-type="short" xml:lang="es"><p><![CDATA[Una comprensión correcta sobre cómo las computadoras corren programas es imprescindible para aprender a programarlas efectivamente. Clases magistrales se han usado históricamente en los cursos de programación para enseñar cómo las computadoras ejecutan código, y los aprendizajes de los estudiantes se han evaluado a través de métodos tradicionales, como exámenes. La teoría de aprendizaje constructivista objeta la pasividad de los estudiantes durante las lecciones y los métodos cuantitativos para evaluar procesos cognitivos complejos, tales como la comprensión. El constructivismo propone técnicas complementarias, tales como la contraposición conceptual y los coloquios. En este trabajo se enriquecieron las clases magistrales de un curso de "Programación II" (CS2) combinando contraposición conceptual con rastreos de memoria de programa. Luego se evaluó la comprensión que los estudiantes tenían de los conceptos de programación a través de coloquios. Los resultados revelaron que esas técnicas aplicadas a la clase magistral son insuficientes para ayudar a los estudiantes a desarrollar modelos mentales satisfactorios de la máquina nocional de C++. Además se encontró que los coloquios se comportaron como las evaluaciones tradicionales más exhaustivas realizadas en el curso.]]></p></abstract>
<kwd-group>
<kwd lng="en"><![CDATA[programming learning]]></kwd>
<kwd lng="en"><![CDATA[notional machine]]></kwd>
<kwd lng="en"><![CDATA[lecture]]></kwd>
<kwd lng="en"><![CDATA[constructivism]]></kwd>
<kwd lng="en"><![CDATA[conceptual contraposition]]></kwd>
<kwd lng="en"><![CDATA[cognitive dissonance]]></kwd>
<kwd lng="en"><![CDATA[program memory tracing]]></kwd>
<kwd lng="es"><![CDATA[aprendizaje de la programación]]></kwd>
<kwd lng="es"><![CDATA[máquina nocional]]></kwd>
<kwd lng="es"><![CDATA[clase magistral]]></kwd>
<kwd lng="es"><![CDATA[constructivismo]]></kwd>
<kwd lng="es"><![CDATA[contraposición conceptual]]></kwd>
<kwd lng="es"><![CDATA[disonancia cognitiva]]></kwd>
<kwd lng="es"><![CDATA[rastreo de memoria de programa]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.64cm; line-height: 100%"> <font face="Verdana, sans-serif"><font style="font-size: 14pt">Understanding Notional Machines through Traditional Teaching with Conceptual Contraposition and Program Memory Tracing</font></font></p>     <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>Jeisson Hidalgo-C&eacute;spedes, Gabriela Mar&iacute;n-Ravent&oacute;s, Vladimir Lara-Villagr&aacute;n</b></font></font></p>     <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Universidad de Costa Rica, CITIC-ECCI</font></font></p>     <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">San Jos&eacute;, Costa Rica, 2060</font></font></p>     <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><i>{<a href="mailto:jeisson.hidalgo@ucr.ac.cr">jeisson.hidalgo,</a> <a href="mailto:gabriela.marin@ucr.ac.cr">gabriela.marin</a>, <a href="mailto:vladimir.lara@ucr.ac.cr">vladimir.lara</a>}@ucr.ac.cr</i></font></font></p>     <p class="western" style="margin-right: 1.54cm; text-indent: 0cm; margin-top: 0.64cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>Abstract</b></font></font></p>     <p class="western" style="margin-right: 1.54cm; text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">A correct understanding about how computers run code is mandatory in order to effectively learn to program. Lectures have historically been used in programming courses to teach how computers execute code, and students are assessed through traditional evaluation methods, such as exams. Constructivism learning theory objects to students&rsquo; passiveness during lessons, and traditional quantitative methods for evaluating a complex cognitive process such as understanding. Constructivism proposes complimentary techniques, such as conceptual contraposition and colloquies. We enriched lectures of a &ldquo;Programming II&rdquo; (CS2) course combining conceptual contraposition with program memory tracing, then we evaluated students&rsquo; understanding of programming concepts through colloquies. Results revealed that these techniques applied to the lecture are insufficient to help students develop satisfactory mental models of the C++ notional machine, and colloquies behaved as the most comprehensive traditional evaluations conducted in the course.</font></font></p>      <p class="western" style="margin-right: 1.54cm; text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>Abstract in Spanish</b></font></font></p>     <p class="western" style="margin-right: 1.54cm; text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Una comprensi&oacute;n correcta sobre c&oacute;mo las computadoras corren programas es imprescindible para aprender a programarlas efectivamente. Clases magistrales se han usado hist&oacute;ricamente en los cursos de programaci&oacute;n para ense&ntilde;ar c&oacute;mo las computadoras ejecutan c&oacute;digo, y los aprendizajes de los estudiantes se han evaluado a trav&eacute;s de m&eacute;todos tradicionales, como ex&aacute;menes. La teor&iacute;a de aprendizaje constructivista objeta la pasividad de los estudiantes durante las lecciones y los m&eacute;todos cuantitativos para evaluar procesos cognitivos complejos, tales como la comprensi&oacute;n. El constructivismo propone t&eacute;cnicas complementarias, tales como la contraposici&oacute;n conceptual y los coloquios. En este trabajo se enriquecieron las clases magistrales de un curso de &quot;Programaci&oacute;n II&quot; (CS2) combinando contraposici&oacute;n conceptual con rastreos de memoria de programa. Luego se evalu&oacute; la comprensi&oacute;n que los estudiantes ten&iacute;an de los conceptos de programaci&oacute;n a trav&eacute;s de coloquios. Los resultados revelaron que esas t&eacute;cnicas aplicadas a la clase magistral son insuficientes para ayudar a los estudiantes a desarrollar modelos mentales satisfactorios de la m&aacute;quina nocional de C++. Adem&aacute;s se encontr&oacute; que los coloquios se comportaron como las evaluaciones tradicionales m&aacute;s exhaustivas realizadas en el curso.</font></font></p>     <p class="western" align="left" style="margin-right: 1.54cm; text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.64cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>Keywords:</b> <span style="font-weight: normal">programming learning, notional machine, lecture, constructivism, conceptual contraposition, cognitive dissonance, program memory tracing</span></font></font></p>     ]]></body>
<body><![CDATA[<p class="western" align="left" style="margin-right: 1.54cm; text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.64cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>Keywords in Spanish: </b><span style="font-weight: normal">aprendizaje de la programaci&oacute;n; m&aacute;quina nocional; clase magistral; constructivismo; contraposici&oacute;n conceptual; disonancia cognitiva; rastreo de memoria de programa</span></font></font></p>     <p class="western" align="left" style="margin-right: 1.54cm; text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.64cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><span style="font-weight: normal">R</span></span><span style="font-weight: normal">eceived:  2015-11-10 revised 2016-05-12 accepted 2016-05-30</span></font></font></p>     <p class="western" align="left" style="margin-right: 1.54cm; text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.64cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="font-weight: normal">DOI: <a href="http://dx.doi.org/10.19153/cleiej.19.2.2">http://dx.doi.org/10.19153/cleiej.19.</a></span><a href="http://dx.doi.org/10.19153/cleiej.19.2.2"><span lang="es-UY"><span style="font-weight: normal">2</span></span><span style="font-weight: normal">.</span><span lang="es-UY"><span style="font-weight: normal">2</span></span></a><span lang="es-UY"><span style="font-weight: normal"> </span></span><span style="font-weight: normal"> </span></font></font> </p>     <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>1. Introduction</b></font></font></p>     <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Unlike other types of texts, such as novels or scientific articles, source code of computer programs has a behavioral dualism. Source code is static when it is written in text editors, but it has a dynamic behavior when it is run by a computer. This dualism is obvious for experienced programmers, but not for programming learners  <a id="br1">[</a><a href="#r1">1</a>]. A correct understanding of its dynamic behavior is mandatory for writing valid source code, and this ability is especially difficult for some students  <a id="br1">[</a><a href="#r1">1</a>].</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">In order to understand the behavior of code at runtime, one needs an understanding how a computational machine works. It is common that some courses be included in undergraduate computing curricula in order to achieve this goal, such as digital circuits, computer architectures and assemblers  <a id="br2">[</a><a href="#r2">2</a>]. Paradoxically these courses are usually not taught before the programming courses. However, mastery of the real machine is not mandatory in order to understand the dynamics of the programs at runtime. Programming languages, through its constructs, provide an abstraction of the real machine, Boulay et al. in 1981 called this concept a <b>notional machine</b>  <a id="br3">[</a><a href="#r3">3</a>]. Each programming language provides a notional machine. For example, a C programmer could conceive that the machine has data types and is able to execute functions, but the actual machine does not have these constructs. A Java programmer would think that the machine is capable of running methods polymorphically, and that it has a garbage collector  <a id="br4">[</a><a href="#r4">4</a>]. The right side of <a href="#f1">Fig 1</a> represents the relationship between the actual machine and the notional machine mediated through its programming language.</font></font></p>      <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.42cm; line-height: 100%"><a name="_Ref293354635"></a> <a name="f1"> <img src="/img/revistas/cleiej/v19n2/2a03f1.jpg"> </a>     <br> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Fig 1 Process of creating mental models about notional machines</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Students build their mental models about the notional machine through the teaching and learning methods and materials used in programming coursers. The most commonly used teaching method around the world is the lecture  <a id="br5">[</a><a href="#r5">5</a>], <a id="br6">[</a><a href="#r6">6</a>]. In its simplest form, the </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>lecture</b></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> is an oral speech performed by a teacher in front of a group of students  <a id="br7">[</a><a href="#r7">7</a>]. Historically, teachers would read the material and students took notes, hence its name </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">lecture</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">. Over time, other activities and materials were incorporated in order to enrich the lecture, such as dialogues with students, illustrations on the blackboard, or projection of prepared slides.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Programming professors usually enrich lectures with other techniques in order to help students understand how notional machines execute programs. An example is the technique that Hertz and Jump called <b>program memory tracing  <a id="br8">[</a><a href="#r8">8</a>]</b>. This technique consists in illustrating the distribution of the different program&rsquo;s concepts within the computer memory, and how they change while the program is executed  <a id="br8">[</a><a href="#r8">8</a>]. We provide examples applying this technique in section 4.1. Hertz and Jump reported higher grades and higher motivation when program memory traces are produced by students  <a id="br8">[</a><a href="#r8">8</a>]. But, no scientific evidence was found when program memory traces are produced by professors during traditional lectures, which is the most common scenario  <a id="br5">[</a><a href="#r5">5</a>], <a id="br6">[</a><a href="#r6">6</a>]. In traditional instruction, professors commonly assess students&rsquo; learning through written exams, and programming assignments. <a href="#f2">Fig 2</a> shows, in the left-most column, traditional instruction composed of the methods described previously.</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">There are concerns in the scientific community about the effectiveness of educational methods for programming learning, specially those used by traditional instruction  <a id="br9">[</a><a href="#r9">9</a>]. Multinational statistics indicate that 67.7% of students pass their first programming courses  <a id="br10">[</a><a href="#r10">10</a>], <a id="br11">[</a><a href="#r11">11</a>], and the majority of them do not know how to program  <a id="br12">[</a><a href="#r12">12</a>]. The main objections are stated by other learning theories, such as constructivism. Traditional instruction is criticized mainly for students&rsquo; passivity and lack of intrinsic motivation  <a id="br13">[</a><a href="#r13">13</a>].</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The authors of social constructivism suggest using several principles and techniques such as the ones listed in the middle column of <a href="#f2">Fig 2</a>. In the same fashion that constructivism can adopt classical means of instruction such as lecturing and reading books  <a id="br14">[</a><a href="#r14">14</a>], traditional instruction can be enriched with these constructivist techniques. This research applies the conceptual contraposition and the colloquy techniques to the traditional teaching. </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Conceptual contraposition</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> is a technique to arouse students attention and interest to learn a new concept. </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Colloquy</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> is an evaluation technique based in conversations that allows both, assessing and fostering, the learning process of students. We will further discuss these techniques in section 2.</font></font></p>      <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.42cm; line-height: 100%"><a name="_Ref307660296"></a> <a name="f2"> <img src="/img/revistas/cleiej/v19n2/2a03f2.jpg"> </a>     <br> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Fig 2. Teaching and evaluation methods used this research</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">A preliminary version of this work was presented in Spanish at the 2015 Latin American Computing Conference (CLEI 2015)  <a id="br15">[</a><a href="#r15">15</a>]. This version has an extended discussion about theoretical background. A section about previous work includes a more systematic literature review. The methodology was extended and structured in two sections. Results were separated in qualitative and quantitative sections. Qualitative descriptions were slightly increased and scans were provided for all memory tracing drawings made by students. Quantitative results were merged in one table and explained deeper. Argumentation sections, i.e., discussion of results, conclusion, and future work, were significantly extended.</font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>2. Theoretical background</b></font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">A correct understanding about how computers run programs is required in order to effectively program them. Students acquire this understanding through the educative methods used in introductory program courses. The most used teaching method worldwide in programming courses is the lecture. Professors explain how programs are run using verbal explanations and static visualizations. However, this method is criticized by the Constructivism learning theory if students stay inactive during lectures. Constructivism claims that knowledge must be actively rebuilt, instead of passively absorbed by students  <a id="br13">[</a><a href="#r13">13</a>], <a id="br14">[</a><a href="#r14">14</a>]. Social constructivism and lectures are not considered incompatible  <a id="br14">[</a><a href="#r14">14</a>], and some constructivist techniques may be applied to increase the activeness of students&rsquo; mind during lectures. Constructivism also objects to quantitative methods, such as exams, for evaluating a cognitive process, such as understanding. In this paper, we apply two constructivist techniques: conceptual contraposition for arousing an active state of students&rsquo; mind during lectures, and colloquies for evaluating students&rsquo; understanding of how programs are run by computers.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The notion of </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">conceptual contraposition </font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">is suggested by social constructivism in order to increase students&rsquo; intrinsic motivation and prepare their minds for the assimilation of new concepts  <a id="br13">[</a><a href="#r13">13</a>]. The </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>conceptual contraposition</b></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> technique consists in challenging students by posing to them a situation or problem such that existing concepts in their minds are insufficient or contradictory to resolve it  <a id="br13">[</a><a href="#r13">13</a>]. Students enter into a state of cognitive uncertainty by experiencing that their beliefs or knowledge are wrong or incomplete  <a id="br13">[</a><a href="#r13">13</a>]. In order to overcome the uncertainty and achieve a state of mental equilibrium, students must inevitably reorganize old concepts and build new ones. This mind restructuration inherently occurs without dependence on external reinforcements  <a id="br13">[</a><a href="#r13">13</a>]. The conceptual contraposition technique has received other names in the Western literature, as theory of </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">cognitive dissonance</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> or </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">cognitive conflict</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">. The latter term is used by Ma et al.  <a id="br16">[</a><a href="#r16">16</a>]<a id="br17">&ndash;</a>&ndash;<a id="br18">[</a><a href="#r18">18</a>].</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Social constructivism also questions the use of exams as an evaluation method for complex cognitive processes. Exams provide late feedback about a finished product, instead of immediate feedback about the learning process. Social constructivism&rsquo;s authors propose qualitative methods to evaluate students&rsquo; mental models  <a id="br14">[</a><a href="#r14">14</a>]. One of these methods is the colloquy, which allows achieving both functions of evaluation: diagnostics and learning.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">According to Vygotsky, learned concepts reach the level of <b>knowledge</b> if students construct systems of concepts that reflect the relationships between objects and phenomena in the real world, and these systems are stable over time  <a id="br13">[</a><a href="#r13">13</a>]. In the programming learning context, students&rsquo; mental models must reflect valid relationships of the notional machine&rsquo;s concepts and these mental models must be stored in the students&rsquo; long-term memory. Otherwise, students will only associate sparse or incomplete concepts called <b>fragile knowledge</b>, and they will be able to explain only pieces of the code  <a id="br19">[</a><a href="#r19">19</a>]. Assessments done immediately after finishing a subject will be prone to evaluate fragile knowledge, therefore, they should be deferred or repeated in time in order to evaluate actual knowledge  <a id="br13">[</a><a href="#r13">13</a>].</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The <b>colloquy</b> is a formative evaluation method used by social constructivism authors  <a id="br13">[</a><a href="#r13">13</a>]. It consists of a dialogue between the professor and the student while the latter performs an educational task. We suppose that colloquies can be used to assess the two development levels stated by Vygotsky&rsquo;s learning theory. In a first phase of the colloquy the professor only investigates the level of skill that the student has in solving the task, called <b>effective development level</b>  <a id="br13">[</a><a href="#r13">13</a>]. In a second phase, the professor asks the student to reattempt the task, especially where deficient mental models (wrong concept systems) were detected. The professor provides key questions, information, tools, and tips to help the student overcome the deficiencies (scaffolding). That is, the professor helps the student understand or learn concepts that are in his or her zone of proximal development. The <b>zone of proximal development</b> is a metaphorical representation about the set of all concepts that a student may learn in the company of a more skilled collaborator (adapted from  <a id="br13">[</a><a href="#r13">13</a>], <a id="br20">[</a><a href="#r20">20</a>], <a id="br21">[</a><a href="#r21">21</a>]). Afterwards the professor evaluates the <b>potential development level</b> that the student has reached with this aid  <a id="br13">[</a><a href="#r13">13</a>]. The first phase is oriented to the evaluation, the second to student&rsquo;s learning.</font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b><span lang="es-UY">3. Previous work</span></b></font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Constructivism has been suggested as the learning theory to face the fast technological changes in Computer Science education  <a id="br22">[</a><a href="#r22">22</a>]. However, studies about constructivism in Computer Science are rather reduced compared with studies in related fields such as Science and Mathematics  <a id="br14">[</a><a href="#r14">14</a>]. Studies about the application of conceptual contraposition or colloquies to the teaching and learning of computer programming are even scarcer. As our previous work, we considered all relevant papers found in ACM Digital Library, IEEE Xplore and Scopus, that resulted from the following query string:</font></font></p>     <p class="western" align="left" style="margin-left: 0.51cm; margin-bottom: 0cm; letter-spacing: -0.3pt; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">(&quot;cognitive dissonance&quot; OR &quot;cognitive conflic&quot; OR &quot;think aloud&quot;) AND programming AND (teach* OR learn*)</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Although, the term </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">conceptual contraposition</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> is not found in the computer education scientific literature, a few results appear as synonyms. An abstract-only publication by Kearney and Nodine reports an experimental comparison of traditional lectures from a Fortran course against assignments with no formal instruction (i.e. </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">cognitive dissonance</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">)  <a id="br23">[</a><a href="#r23">23</a>]. They found both methods as effective, but students reached a deeper understanding of Fortran using cognitive dissonance  <a id="br23">[</a><a href="#r23">23</a>]. However, they did not study both methods applied together.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Ma et al. found positive results on student mental models when </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">cognitive conflict</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> was applied before program visualizations  <a id="br16">[</a><a href="#r16">16</a>]&ndash;<a id="br18">[</a><a href="#r18">18</a>]. However, they did not apply the conceptual contraposition to the lecture, which is still the prevalent method of education around the world  <a id="br5">[</a><a href="#r5">5</a>], <a id="br6">[</a><a href="#r6">6</a>].</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Constructivism states that qualitative evaluations, such as colloquies, must be conducted in order to assess complex cognitive processes, such as understanding  <a id="br13">[</a><a href="#r13">13</a>], <a id="br14">[</a><a href="#r14">14</a>]. Although the term &ldquo;colloquy&rdquo; was not found in programming learning literature, related methods can be found. Colloquies may be conceived as </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">interview</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> sessions where students are asked to perform a task while &ldquo;</font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">thinking aloud</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">&rdquo;. During the interview, the professor observes, takes notes (</font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">assessment</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">), and may provide some clues or questions when the student experiences problems or impasses (</font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">scaffolding</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">).</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Whalley and Kasto used </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">think-aloud</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> sessions to follow volunteer students up from an introductory programming course in Java  <a id="br21">[</a><a href="#r21">21</a>]. Students were asked to solve programming problems that required processes of knowledge restructuration (</font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">accommodation</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> in Piaget&rsquo;s nomenclature). Students&rsquo; potential development levels were analyzed and classified using the theory of Perkins et al. about type of learners: stoppers, tinkerers and movers  <a id="br21">[</a><a href="#r21">21</a>]. However, in their study, results were obtained directly from student&rsquo;s performance in think-aloud sessions, and were not related to the teaching-learning methods or other evaluations used in the course.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Teague and Lister have conducted several think-aloud studies with introductory programming students. They used think-aloud protocols for discovering misconceptions of students resolving a simple assignment exercise  <a id="br24">[</a><a href="#r24">24</a>], resolving a complex exercise about reversing the effect of a given program  <a id="br25">[</a><a href="#r25">25</a>], and characterizing the stages of the learning process experienced by a student  <a id="br26">[</a><a href="#r26">26</a>]. Their results are analyzed in light of the neo-Piagetian theory, but they did not relate these results to the teaching methods, such as lectures.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Arshad found positive opinions when think-aloud protocols were used by teaching assistants or expert programmers explaining, in front of the class, how they resolve a given programming problem  <a id="br27">[</a><a href="#r27">27</a>]. However, this scheme is distinct to that proposed in this paper. We use think-aloud protocols as an assessment method instead of a teaching method.</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Think-aloud protocols are mainly found in software engineering scenarios, where participants already know to program software applications. For example, Wiedenbeck and Engebretson conducted think-aloud protocols in order to know how secondary school teachers understand an existing application&rsquo;s code that they must modify later  <a id="br28">[</a><a href="#r28">28</a>]. Because our research is targeted to introductory programming students, these studies were out of scope.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">In summary, we found evidence of conceptual contraposition applied to programming assignments or program visualizations, but not lectures. In the same fashion, we found think-aloud protocols used for teaching or evaluating students&rsquo; performance, but not related to the effect of lectures or other teaching methods.</font></font></p>      <p lang="es-UY" class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>4. Methodology</b></font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The treatment proposed in this paper was applied in two stages. First, each programming concept that has an effect in the C/C++ notional machine was introduced using conceptual contraposition along the course duration. Second, students&rsquo; understanding of the C/C++ notional machine was evaluated using colloquies at the end of the course for extra credit. Both stages are explained in the following subsections.</font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">4.1 </span>Conceptual contraposition</font></font></p>     <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The conceptual contraposition was applied to a Programming II course (sometimes called CS2 in scientific literature). This course belongs to the Computer Science undergraduate program at the University of Costa Rica. The first author of this article taught the course from August to November 2014. By convention, the programming language used in this course is C++. The teaching method used for this course was the &ldquo;enriched&rdquo; lecture depicted in the third column of <a href="#f2">Fig 2</a>. During the semester, each programming concept that has impact on the notional machine was introduced using conceptual contraposition and explained using program memory tracing. In addition to regular course&rsquo;s assessments, the evaluation of students&rsquo; understanding of notional machine concepts was conducted at the end of the course using colloquies between the professor and each student who voluntarily participated.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The conceptual contraposition technique was applied during lectures to introduce programming concepts that have effect on the C/C++ notional machine. For example, as a prelude to introduce the concept of pointer, the professor wrote the program in <a href="#f3">Fig 3(a)</a> in the computer used for projection. The program prints all integer values &#8203;&#8203;between two numbers given by a user. If the user inputs an inverted range, the program is supposed to swap them and to continue as usual. This program will be referred as the &ldquo;range program&rdquo; in this document.</font></font></p>      <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.42cm; line-height: 100%"><a name="_Ref293407291"></a><a name="_Ref307735023"></a> <a name="f3"> <img src="/img/revistas/cleiej/v19n2/2a03f3.jpg"> </a>     <br> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Fig 3. The &ldquo;range program&rdquo;, a C++ program that prints all integers within a given range:     <br> (a) its source code, (b) professor&rsquo;s program memory trace before finishing its execution (line <span style="letter-spacing: -0.3pt">22</span>)</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The professor asked students about their predictions about the program. The program seemed perfect according to students. The professor ran the program on the computer and projected it in front of the class (<a href="#f4">Fig 4</a>). The professor entered a valid range (<span style="letter-spacing: -0.3pt"><b>10 20</b></span>, underlined in <a href="#f4">Fig 4</a>), and the program printed the expected values. Then, the professor executed the program again and entered an inverted range (<span style="letter-spacing: -0.3pt"><b>20 10</b></span> in <a href="#f4">Fig 4</a>). The program should have printed the same result, but its output was empty. Staring at the program that seemed correct, but was not, should foster a state of mental uncertainty, necessary for learning the new concept, according to the theory of social constructivism  <a id="br13">[</a><a href="#r13">13</a>].</font></font></p>      <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.42cm; line-height: 100%"><a name="_Ref307736259"></a> <a name="f4"> <img src="/img/revistas/cleiej/v19n2/2a03f4.jpg"> </a>     <br> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Fig 4. Two running examples of the &ldquo;range program&rdquo; on Unix. The $ prompt indicates the operating system is waiting for commands. Underlined text is inputted by user. The remaining text is program output.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The professor explained the program behavior at runtime using the </font></font><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">program memory tracing</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> technique. This technique consists in traversing a program line by line reflecting the effect of each one on an abstract drawing  <a id="br8">[</a><a href="#r8">8</a>]. The drawing (<a href="#f3">Fig 3(b)</a>) represents the state of the program distributed among the memory segments of the notional machine  <a id="br8">[</a><a href="#r8">8</a>]. The C/C++ notional machine is very close to the underlying architecture, with at least four segments: code segment (CS), data segment (DS), stack segment (SS) and heap segment (HS). Segments are represented in <a href="#f3">Fig 3(b)</a> as rectangular regions. Interesting actions in the &ldquo;range program&rdquo; occur on the stack segment (SS).</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The professor acted as the processor running each line, updating the memory drawing on the blackboard, and verbally explaining each effect in order to make the error evident. In the case of the &ldquo;range program&rdquo; (<a href="#f3">Fig 3(a)</a>), the <span style="letter-spacing: -0.3pt">swap</span> function receives two numbers as parameters by value. The function receives them in this way because parameter-by-value is the concept already present in the minds of students before introducing the concept of pointer.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">After observing that the program failed and the cause, students are still in mental state of uncertainty and require knowing how to correct it. The professor, then, introduced the new concept, in this case, the pointer and its syntax. He corrected the program (<a href="#f5">Fig 5(a)</a>) and executed it manually updating the program memory trace with the effect of the pointers (<a href="#f5">Fig 5(b)</a>). Finally, he ran the program on the projection computer, which produced the expected result.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The described method, i.e., introducing a concept after a conceptual contraposition and its tracing on the notional machine, was used for each concept that had an effect on the program state. The underlining concern is: have students built correct mental models of the C/C++ notional machine with this method?</font></font></p>      <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.42cm; line-height: 100%"><a name="_Ref307741444"></a> <a name="f5"> <img src="/img/revistas/cleiej/v19n2/2a03f5.jpg"> </a>     <br> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Fig 5. Range program fixed using pointers: (a) its source code,    <br> (b) professor&rsquo;s program memory trace before finishing its execution (line <span style="letter-spacing: -0.3pt">22</span>)</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">4.2 Colloquies</span></font></font></p>     <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The chosen educational task for mental model evaluation was explaining how the C/C++ notional machine executes the &ldquo;median program&rdquo; show in <a href="#f6">Fig 6(a)</a> line by line. A blank paper sheet was provided to each participant and he was asked to draw the program state as he was explaining its execution. An example of a memory trace drawing made by the professor is shown in <a href="#f6">Fig 6(b)</a>. Colloquies were recorded only on audio format. There were no time restrictions. Students had access to documentation of the algorithm <span style="letter-spacing: -0.3pt">std::sort()</span> during the session.</font></font></p>      <p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.42cm; line-height: 100%"><a name="_Ref307769368"></a> <a name="f6"> <img src="/img/revistas/cleiej/v19n2/2a03f6.jpg"> </a>     <br> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Fig 6. The &ldquo;median program&rdquo;: a C++ program used to evaluate mental models; (a) its source code, (b) professor&rsquo;s program memory trace before finishing its execution (line <span style="letter-spacing: -0.3pt">25</span>)</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The C++ program in <a href="#f6">Fig 6(a)</a> calculates the median of sets of data entered in the standard input. The size is entered before the data set. Students were asked to use the values &#8203;&#8203;<span style="letter-spacing: -0.3pt">(3, 100, 70, 90, EOF)</span> as standard input. The value <span style="letter-spacing: -0.3pt">3</span> indicates that the data set has three values. The size for the second data set is the special end-of-file (<span style="letter-spacing: -0.3pt">EOF</span>) mark. The &ldquo;median program&rdquo; reacts ending its execution when the <span style="letter-spacing: -0.3pt">EOF</span> mark is entered. Every time the <span style="letter-spacing: -0.3pt">calc()</span> method is called, an array is created in dynamic memory (line <span style="letter-spacing: -0.3pt">06</span>), but it is not deleted, therefore a memory leak is generated. The only statements in this paragraph that were communicated to the students were the input data values. </font></font> </p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Not all programming concepts covered in the course were assessed during the colloquies. We only evaluated the concepts involved in the &ldquo;median program&rdquo; in <a href="#f6">Fig 6(a)</a>. These concepts are listed below, along with a description of the expected actions that students must take for tracing them.</font></font></p>  	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">1. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Memory 	segmentation</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must distribute the program&rsquo;s memory into four 	segments; each one represented as a rectangular area in the drawing. 	Students must name them, and state their purpose.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">2. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Program 	entry point</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must begin the program execution at </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">main()</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	function on line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">18</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	and not at another line of the program.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">3. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Function 	call</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must represent the invocation of both functions, </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">main()</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	and </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">calc()</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	as rectangles (stack frames) in the stack segment.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">4. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Local 	variable</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must represent local variables within their function calls 	and not elsewhere. Variables must have a name and a value in the 	drawing.</font></font></p> 	    ]]></body>
<body><![CDATA[<p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">5. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">While 	loop</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must indicate that the loop body (the invocation of the 	function </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">calc()</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	on line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">22</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">) 	is called repeatedly until the loop condition becomes false (the 	user enters </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">EOF</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">21</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">).</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">6. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Standard 	input</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must indicate that the program expects a value from the 	standard input or keyboard in line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">21</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	and </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">09</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">. 	When a value is entered, it must be drawn on the destination memory 	space.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">7. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Function 	parameter</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must represent parameters as local variables, and 	initialize them with the values provided when the function is 	called. It happens for lines </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">22</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	and </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">04</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">8. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Dynamic 	memory allocation</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must draw space for variables in the heap segment when the 	</font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">new</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	operator is executed on line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">06</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">9. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Array 	or vector</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must draw the exact number of continuous elements (</font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">3</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	when line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">06</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	is executed).</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">10. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Pointer</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must draw pointers as integer variables, and connect them 	with the pointed data using arrows or hypothetical memory address 	values. In the case of line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">06</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	the pointer must be represented as a local variable within the 	</font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">calc()</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	function call.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">11. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">For 	loop</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must perform steps in order: initialization, condition, 	body, and increment; and repeat the last three in order until the 	condition becomes false. It is also valid to interpret the cycle at 	a higher level of abstraction. For example, students could explain 	the lines </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">08</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	and </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">09</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	as &quot;here all array elements are read from standard input&quot;.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">12. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Library 	function</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must indicate the purpose of the function and its effect on 	the program memory. Line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">11</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	calls </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">std::sort()</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	a function that is not defined within the program. This function is 	defined by the C++ standard library. The function was studied during 	course lessons, and students had access to its official 	documentation during the colloquy session. Students must state this 	function sorts the values &#8203;&#8203;of the array.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">13. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Iterator</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must indicate that algorithms from C++ standard library 	work on subsets of data containers, and these subsets are delimited 	by iterators. An iterator is an object able to traverse the elements 	of a data structure, even if the elements are not continuous in 	memory. The iterator interface mimics a C/C++ pointer. The 	</font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">std::sort(begin,end)</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	function receives two iterators </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">begin</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	and </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">end</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	and sorts the elements in the range </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">[begin, 	end[</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">14. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Pointer 	arithmetic</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must find the pointed memory by the result of a pointer 	arithmetic expression. Line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">11</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	adds an integer to a pointer (</font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">arr 	+ size</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">) 	to get a pointer to a nonexistent item (immediately after the last 	valid element), in order to build an iterator to the end of the 	array.</font></font></p> 	    ]]></body>
<body><![CDATA[<p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">15. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">If/else 	conditional statement</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must evaluate the condition of line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">12</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">. 	If the condition is true, they must run line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">13</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	and not line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">15</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">. 	If the condition evaluates to false, they should ignore line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">13</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	and run line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">15</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">16. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Expression 	evaluation</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must perform arithmetic or Boolean expressions according to 	the priority of operators, and get a unique value result of the 	evaluation.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">17. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Array 	indexing</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	When students run the line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">13</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	or </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">15</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	they must evaluate an arithmetic expression and use the integer 	result to access an array element.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">18. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Standard 	output</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must write or verbalize the value printed on the standard 	output (by default, the screen).</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">19. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Function 	return</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	When students run line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">16</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	or </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">25</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	they must indicate that the function ends its invocation, release 	its memory (stack frame) from the stack segment, and continue the 	execution where the function was invoked.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">20. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Memory 	leak</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	When students return from </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">calc()</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	function on line </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">16</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">, 	they must remove the </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">arr</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"> 	pointer memory but not the pointed memory. They must discover that a 	memory leak is generated, and indicate its consequences.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">21. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Memory 	de-allocation</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	If the student discovers the memory leak, the teacher asks the 	student how to correct it. The student must alter the program to add 	an invocation to operator </font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="letter-spacing: -0.3pt">delete 	[]</span></font></font><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">.</font></font></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">22. 	</span></font></font></em></em><em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Integer 	division</font></font></em><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">: 	Students must distinguish between integer division and floating 	point division. They must indicate the result of the integer 	division (/) or the module (%) according to the operator used. This 	concept was initially considered part of concept 16, but it was 	separated during data analysis.</font></font></p>      <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Some programming concepts were not included in the above list because they do not have effect in the notional machine or they are already included in previous ones. Some examples are: increasing integer variable, namespaces, the <span style="letter-spacing: -0.3pt">size_t</span> data type re-definition, and inclusion of header files.</font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b><span lang="es-UY">5. Results</span></b></font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Courses in our Computer Science undergraduate program are offered in groups. A maximum of 20 students per group is allowed. The &ldquo;enriched&rdquo; lecture was applied to a group of students in the Programming II course in the second semester, 2014. From the 18 students enrolled in the group, 13 were active at the end of the semester (5 dropped the course at some point), and 11 participated voluntarily in colloquies for additional credit. Since the colloquy is a qualitative data collection method, the following subsection presents qualitative findings related to mental models of the notional machine. Then, a quantitative interpretation of these findings is presented in the second subsection.</font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">5.1 Qualitative results</font></font></p>     <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">For each participant, the following list includes a brief description of the mental models for some programming concepts. It also includes a scanned image of the program memory trace made by each participant.</font></font></p>  	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>1. 	</b></span><b>Participant 1</b> distinguished the heap segment but 	not other segments. He placed two local variables within an unnamed 	segment, presumably the stack frame for <span style="letter-spacing: -0.3pt">main()</span>, 	but he did not distinguish function calls at all. He reused the 	<span style="letter-spacing: -0.3pt">main</span>&rsquo;s <span style="letter-spacing: -0.3pt">size</span> 	local variable instead of creating a <span style="letter-spacing: -0.3pt">size</span> 	parameter for <span style="letter-spacing: -0.3pt">calc()</span> 	function call. He added a copy of the local variable <span style="letter-spacing: -0.3pt">size</span> 	as first element of the array on the heap, which led to wrong 	decisions and wrong program output even with scaffolding. He 	conceived the module 2 (<span style="letter-spacing: -0.3pt">size % 	2 == 0</span> in line 12) as asking if the dividend is even, which 	is a high level interpretation of the expression. He abruptly ended 	the program execution from line 16. He indicated that the machine 	automatically cleans the memory. He detected and corrected memory 	leak only with scaffolding.</font></font>    <br> <a name="f8"> <img src="/img/revistas/cleiej/v19n2/2a03f8.jpg"> </a>     <br></p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>2. 	</b></span><b>Participant 2</b> did 	not recall the names of memory segments, but he had a clear idea of 	&#8203;&#8203;usage of three of them. He clearly explained the 	function call and parameter passing process. He confused the size 	and capacity of a floating-point array with a C-style string, so he 	added space for another element but he did not use it. He considered 	pointer arithmetic as a sum of incompatible types and made wrong 	assumptions. He dedicated long time guessing the internal 	implementation of <span style="letter-spacing: -0.3pt">std::sort</span>. 	He required a lot of scaffolding in order to abstract the <span style="letter-spacing: -0.3pt">std::sort</span> 	functionality. He made floating-point divisions (<span style="letter-spacing: -0.3pt">3/2=1.5</span>) 	rather than integer divisions (<span style="letter-spacing: -0.3pt">3/2=1</span>), 	and he was confused using this floating-point result to subscript 	the array (line <span style="letter-spacing: -0.3pt">15</span>). He 	managed to output the correct result through wrong assumptions. He 	stored temporary values in the stack segment for intermediate 	expression evaluations, but the notional machine does not store 	these values. He successfully detected and corrected memory leak.</font></font>    <br> <a name="f9"> <img src="/img/revistas/cleiej/v19n2/2a03f9.jpg"> </a>     <br> </p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>3. 	</b></span><b>Participant 3</b> only remembered the name for the 	dynamic memory segment. For the remaining segments, he explained 	their usage properly. He represented the <span style="letter-spacing: -0.3pt">calc()</span> 	function call as a pointer to the value of <span style="letter-spacing: -0.3pt">size</span> 	parameter, instead of a stack frame. He idealized both, the pointer 	and the array, as members of a container class, and located them in 	dynamic memory. He considered that the program causes an error when 	trying to access the element at the <span style="letter-spacing: -0.3pt">arr 	+ size</span> (line 11). He doubted if the integer division discards 	or rounds decimals. He favored rounding, so he managed to print the 	correct result. He identified the memory leak. He considered that 	<span style="letter-spacing: -0.3pt">delete[]</span> operator must 	be called within a loop in order to delete all array elements. He 	finished the program execution correctly.</font></font>     ]]></body>
<body><![CDATA[<br> <a name="f10"> <img src="/img/revistas/cleiej/v19n2/2a03f10.jpg"> </a>     <br> </p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>4. 	</b></span><b>Participant 4</b> indicated that the machine separates 	memory in subsections or spaces, and he only remembered the name of 	one of them: the &quot;stack&quot;. He separated the dynamic memory 	from the stack. He considered the <span style="letter-spacing: -0.3pt">size</span> 	variable (line 20) as global to the entire program. He duplicated 	the <span style="letter-spacing: -0.3pt">main()</span> stack frame 	because &ldquo;the size variable was twice, one time declared and 	another initialized&rdquo;, reflecting confusion with the code 	segment. He assumed that <span style="letter-spacing: -0.3pt">calc()</span> 	can access a local variable from <span style="letter-spacing: -0.3pt">main()</span>. 	He considered that a pointer is the same as an array. He evaluated 	pointer arithmetic correctly, but he considered that the program 	should fail when invoking <span style="letter-spacing: -0.3pt">std::sort</span>, 	reflecting misconceptions about iterators. He correctly evaluated 	whole divisions and printed the correct value on the screen. He 	identified the memory leak, but tried to correct it with the C 	library function <span style="letter-spacing: -0.3pt">free()</span>. 	He required a lot of scaffolding to remember the operator <span style="letter-spacing: -0.3pt">delete[]</span>.</font></font>    <br> <a name="f11"> <img src="/img/revistas/cleiej/v19n2/2a03f11.jpg"> </a>     <br> </p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>5. 	</b></span><b>Participant 5</b> did not recall names of the 	segments, but he indicated &ldquo;there are three parts&quot;: 	&quot;where dynamic things are&quot;, &quot;where methods run&quot;, 	and &quot;where global variables are saved&quot;. Although he 	verbally explained the mechanics of function calls, he did not 	reflect it his drawing (stack frames). He separated between pointer 	and the pointed array correctly. He explained pointers drawing 	arrows, hypothetical memory addresses, and sizes of data types, 	reflecting mastery of these concepts. He incorrectly added the null 	string terminator (<span style="letter-spacing: -0.3pt">'\0'</span>) 	to the array of floating-point numbers. He explained the reading of 	array elements at high level of abstraction. He had serious 	difficulties doing the whole division <span style="letter-spacing: -0.3pt">3/2</span> 	and using the result for indexing the array. He said that the 	program should not compile. With scaffolding he argued that the 	program must fail at runtime. He did not eliminate the stack frame 	when executed line <span style="letter-spacing: -0.3pt">16</span>. 	He did not detect the memory leak. He finished the program execution 	but he was unable to explain how the while loop breaks on line <span style="letter-spacing: -0.3pt">21</span>; 	he required scaffolding to remember it.</font></font>    <br> <a name="f12"> <img src="/img/revistas/cleiej/v19n2/2a03f12.jpg"> </a>     <br> </p> 	    <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>6. 	</b></span><b>Participant 6</b> sliced the program memory in two 	segments. He stated the first segment is intended for operating 	system resources (he labeled it as &ldquo;hip&rdquo;, referring to 	the heap segment). The second segment is &quot;where functions are&quot;. 	He placed all program variables in the latter segment because &quot;I 	do not see [this program] use dynamic memory at all&quot;. He 	expressed he does not know how data from the keyboard arrive to the 	variable when it is read from standard input. He separated functions 	calls (stack frames) with their local variables, but omitted 	parameters. He did not distinguish between pointer and array; he 	drew them as a single entity. He explained array sorting at high 	level thinking that <span style="letter-spacing: -0.3pt">std::sort</span> 	receives indexes instead of iterators. He evaluated correctly whole 	divisions, and printed the central element correctly. He could not 	explain how <span style="letter-spacing: -0.3pt">calc()</span> ended 	its call and did not reflect it on his program trace. He believed 	that the C++ standard states that the program memory must be 	automatically released.</font></font>     <br> <a name="f13"> <img src="/img/revistas/cleiej/v19n2/2a03f13.jpg"> </a>     ]]></body>
<body><![CDATA[<br> </p>  	    <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>7. 	</b></span><b>Participant 7</b> separated three segments of memory: 	&quot;the data segment that holds the local variables&quot;, another 	for functions but he could not remember its name, and he separated 	the &quot;system memory&quot; from the previous two, and he was 	unable to explain why. He created a pointer and a stack frame, both 	called <span style="letter-spacing: -0.3pt">calc</span>, but he was 	unable to explain the difference. He did not read the <span style="letter-spacing: -0.3pt">size</span> 	variable on line <span style="letter-spacing: -0.3pt">21</span>, and 	he could not explain how the <span style="letter-spacing: -0.3pt">calc()</span> 	function got the value for <span style="letter-spacing: -0.3pt">size</span> 	from standard input. He built the array within the &quot;system 	memory&quot; segment when he run the <span style="letter-spacing: -0.3pt">new</span> 	operator, but he verbally explained it as an array of pointers to 	<span style="letter-spacing: -0.3pt">double</span>, then as a 	matrix, finally as an array of floating-point values with some 	scaffolding. He explained the operation of <span style="letter-spacing: -0.3pt">std::sort</span> 	at high level. He calculated whole divisions flawless. He printed 	the expected value to the standard output. He was very confused 	about how control breaks the cycle on line <span style="letter-spacing: -0.3pt">21</span> 	in the first iteration; however, when the input was the <span style="letter-spacing: -0.3pt">EOF</span> 	character, he recalled it spontaneously. He required scaffolding to 	detect the memory leak.</font></font>    <br> <a name="f14"> <img src="/img/revistas/cleiej/v19n2/2a03f14.jpg"> </a>     <br> </p> 	    <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>8. 	</b></span><b>Participant 8</b> separated between local variables, 	function calls, and dynamic memory. However, he also separated local 	variables from their values, placing values in the dynamic memory 	indicating that the variables point to their values. He filled the 	array with counter values instead of values read from standard 	input. He required scaffolding to notice it. He tried to explain the 	internal implementation of the <span style="letter-spacing: -0.3pt">std::sort</span> 	algorithm, but then he abstracted its effect on the array. He 	hesitated how the module and integer division works. He could not 	explain how the computer indexes the array from a real number (the 	result of <span style="letter-spacing: -0.3pt">3/2</span>, on line 	<span style="letter-spacing: -0.3pt">15</span>). He assumed that the 	computer takes the integer part of the division, then he hesitated, 	and he was unable to explain why the module <span style="letter-spacing: -0.3pt">3%2</span> 	generates an integer value but not the division <span style="letter-spacing: -0.3pt">3/2</span>. 	He stated that the computer automatically removes the dynamic 	memory.</font></font>    <br> <a name="f15"> <img src="/img/revistas/cleiej/v19n2/2a03f15.jpg"> </a>     <br> </p> 	    <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>9. 	</b></span><b>Participant 9</b> correctly distinguished between code 	segment and dynamic memory. However, he separated stack segment (not 	recalled its name) into two, one for variables and another for 	&quot;method calls and pointers&quot;. He tried to start executing 	the code from line 1, and he required minimum scaffolding to 	discover the <span style="letter-spacing: -0.3pt">main()</span> 	function. He mixed instructions and function calls in a segment. He 	explained <span style="letter-spacing: -0.3pt">std::sort</span> 	properly at high level. He initially interpreted the module 2 (<span style="letter-spacing: -0.3pt">size 	% 2 == 0</span> in line 12) as equivalent to asking if a number is 	even. Then he hesitated and said that the program should crash at 	runtime when attempting to access the nonexistent array index <span style="letter-spacing: -0.3pt">3/2</span>. 	With scaffolding, he said that the program should print spurious 	values. He stated that vectors in dynamic memory are automatically 	destroyed. He abruptly ended the program execution from line 13. He 	printed incorrect results in standard output. He required 	explanation of whole division to print the correct result.</font></font>    <br> <a name="f16"> <img src="/img/revistas/cleiej/v19n2/2a03f16.jpg"> </a>     <br> </p> 	    ]]></body>
<body><![CDATA[<p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>10. 	</b></span><b>Participant 10</b> correctly recalled the four memory 	segments and their functionality. But he placed local variables in 	the data segment, and separated them from functions calls. He 	confused integer variable values with pointers and initialized them 	with the memory address 0. He conceived that the value of a pointer 	is another pointer stored in dynamic memory, and the value of the 	latter is the data array. He estimated sizes of variables and 	structures along his verbal discourse. He interpreted <span style="letter-spacing: -0.3pt">std::sort</span> 	as &quot;scrambling the data&quot; until he read the official 	documentation. He hesitated about module and the whole division, 	although he evaluated the operations properly. He indexed the array 	starting at 1 and required scaffolding to realize it. He did not 	discover the memory leak; with scaffolding, he stated that dynamic 	memory is automatically released.</font></font>    <br> <a name="f17"> <img src="/img/revistas/cleiej/v19n2/2a03f17.jpg"> </a>     <br> </p> 	    <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY"><b>11. 	</b></span><b>Participant 11</b> correctly recalled the purpose of 	three segments (omitted the code segment). He correctly interleaved 	local variables with function calls. However, he also included some 	code instructions in stack segment. He needed scaffolding to 	discover and start running from <span style="letter-spacing: -0.3pt">main()</span> 	function. He doubted if the<span style="letter-spacing: -0.3pt"> &gt;&gt;</span> 	operator is overloaded by <span style="letter-spacing: -0.3pt">std::cin</span> 	for reading variables of type <span style="letter-spacing: -0.3pt">size_t</span>, 	demonstrating mastery of operator overloading. He did not create a 	local variable for the <span style="letter-spacing: -0.3pt">size</span> 	parameter when called <span style="letter-spacing: -0.3pt">calc()</span>. 	He copied the array values &#8203;&#8203;from dynamic memory into 	stack segment. He interpreted the expression <span style="letter-spacing: -0.3pt">arr+size</span> 	as a sum of integers, instead of pointer arithmetic. After reading 	the <span style="letter-spacing: -0.3pt">std::sort</span> 	documentation, he correctly inferred the range of values to be 	sorted. He evaluated some arithmetic expressions wrong, but did 	modules and entire divisions correctly. After requesting him to 	re-evaluate them, he did it correctly. He finished executing <span style="letter-spacing: -0.3pt">calc()</span> 	without eliminating its stack frame; with minimum scaffolding, he 	did it correctly. He identified the memory leak, and properly fixed 	it.</font></font>    <br> <a name="f18"> <img src="/img/revistas/cleiej/v19n2/2a03f18.jpg"> </a>     <br> </p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">5.2 </span>Quantitative results</font></font></p>       <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">A subjective summative evaluation prepared by the professor from colloquies is presented in <a href="#t1">Table 1</a>. The student&rsquo;s understanding of each concept was graded with a real value between 0 and 1, where 1 indicates evidence of mastery of the concept and 0 absence of evidence of mastery. The color of each cell reflects its value in a range from red (0) to green (1). Blank cells correspond to values that could not be retrieved from audio recordings.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Each row in <a href="#t1">Table 1</a> contains the level of understanding of a programming concept. The <span style="letter-spacing: -0.3pt">Avg</span> column lists the average understanding for each concept. At the bottom, the <span style="letter-spacing: -0.3pt">Colloq</span> row shows the average of each student, and the <span style="letter-spacing: -0.3pt">Passed</span> row indicates if the student passed the course or not. Rows are in descending order by the average level of understanding (i.e. <span style="letter-spacing: -0.3pt">Avg</span> column). The concepts at the top of the table were more understood by students than concepts at the bottom. Concepts were grouped into three categories listed in column <span style="letter-spacing: -0.3pt">Acc</span>. These groups indicate that students have:</font></font></p> <ul> 	    <li>     ]]></body>
<body><![CDATA[<p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Excellent 	mental models of 7 evaluated concepts (31.8%): conditionals, array 	indexing, standard output, program entry point, for-loop, expression 	evaluation, and library function. None of these concepts is 	introduced in the Programming II course.</font></font></p> 	    <li>     <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Acceptable 	mental models of 6 evaluated concepts (27.3%): while loop, standard 	input, dynamic memory allocation, pointers*, pointer arithmetic*, 	and arrays. The two concepts marked with asterisks are introduced in 	the Programming II course.</font></font></p> 	    <li>     <p class="western" style="margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Deficient 	mental models of 9 evaluated concepts (40.9%): function return, 	function call, integer division, memory segmentation*, local 	variables, memory leak*, dynamic memory de-allocation*, function 	parameters, and iterators*. The four concepts marked with asterisks 	are introduced in the Programming II course.</font></font></p>     </ul>      <p class="western" align="center" style="text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.21cm; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Table 1. The results of professor&rsquo;s subjective grading for each concept</font></font>    <br> <a name="t1"> <img src="/img/revistas/cleiej/v19n2/2a03t1.jpg">  </a>     <br></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The &ldquo;Programming II&rdquo; course is a continuation of &ldquo;Programming I&rdquo; course. Concepts learned in &ldquo;Programming I&rdquo; are reused in &ldquo;Programming II&rdquo; (i.e. they are not introduced again). <a href="#f7">Fig 7</a> depicts the 22 evaluated concepts in terms of the course in which they are introduced. Concepts introduced in &ldquo;Programming I&rdquo; have blue background, and concepts introduced in &ldquo;Programming II&rdquo; have red background. Concepts are classified on the y-axis by the level of understanding that students had of them in colloquies.</font></font></p>      ]]></body>
<body><![CDATA[<p class="western" align="center" style="text-indent: 0cm; margin-bottom: 0.42cm; line-height: 100%"><a name="_Ref308072725"></a> <a name="f7"> <img src="/img/revistas/cleiej/v19n2/2a03f7.jpg"> </a>     <br> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Fig 7. Level of understanding of the concepts introduced by course</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Colloquies are suggested as an evaluation method by the constructivism learning theory  <a id="br13">[</a><a href="#r13">13</a>], but they have been rarely used in introductory programming courses (as think-aloud protocols), and never as formal evaluation methods. We were interested in knowing if colloquies have potential to behave as some traditional evaluation methods. The quantitative data acquired from the 11 colloquies were compared against the grades that the same 11 participants obtained in the traditional evaluations conducted in the &ldquo;Programming II&rdquo; course.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a href="#t2">Table 2</a> is the correlation matrix of the nine evaluations conducted during the course: colloquies (<span style="letter-spacing: -0.3pt">Colloquy</span>), two long programming assignments (<span style="letter-spacing: -0.3pt">Project1</span>, <span style="letter-spacing: -0.3pt">Project2</span>), short programming assignments (<span style="letter-spacing: -0.3pt">Homework</span>), three partial exams (<span style="letter-spacing: -0.3pt">Exam1</span>, <span style="letter-spacing: -0.3pt">Exam2</span>, <span style="letter-spacing: -0.3pt">Exam3</span>), short exams (<span style="letter-spacing: -0.3pt">Quizzes</span>), and course&rsquo;s final grade (<span style="letter-spacing: -0.3pt">Final</span>). The matrix is symmetric. Evaluation method names are stored in the diagonal. Correlation values are explicit in the lower triangular matrix, and proportionally sized circles in the upper triangular matrix. A cell is the correlation between the method located in its row and the method located in its column. Evaluation methods are sorted by correlation with colloquies. First project and homework assignments had the lowest correlations. Highest correlations show that colloquies behaved as the third exam or second project. This is an interesting result because these traditional evaluations are conducted near the end of the course, and they demand the highest levels of comprehension of programming concepts. These results will be interpreted in the next section.</font></font></p>     <p class="western" align="center" style="text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.21cm; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Table 2. Correlation matrix of the conducted evaluation methods</font></font>    <br> <a name="t2"> <img src="/img/revistas/cleiej/v19n2/2a03t2.jpg">  </a>     <br></p>     <p class="western" align="left" style="text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.21cm; line-height: 100%"><a name="_Ref323745287"></a> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b><span lang="es-UY">6. </span>Discussion</b></font></font></p>     <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">The quantitative results in <a href="#t1">Table 1</a> show that students developed correct mental models for approximately one third of the concepts evaluated in colloquies (31,8% in column <span style="letter-spacing: -0.3pt">Acc</span>). All of these concepts were introduced in the &ldquo;Programming I&rdquo; course, which is taught using Java as the programming language in our university (top bar in <a href="#f7">Fig 7</a>). These concepts were reused and reinforced in the &ldquo;Programming II&rdquo; course (with C++). The traditional teaching method (the lecture) enriched with conceptual contraposition and program memory tracing seems appropriate for this reinforcement; but 40.9% of the evaluated concepts reflected incorrect mental models (the third category in column <span style="letter-spacing: -0.3pt">Acc</span> in <a href="#t1">Table 1</a>). Half of the concepts in the third category are also introduced in the &ldquo;Programming I&rdquo; course (bottom bar in <a href="#f7">Fig 7</a>). That is, students have preserved incorrect mental models throughout two programming courses taught with lectures. A notorious example is the concept of integer division eclipsed by a generalization of the floating-point division. Approximately half of the participants experienced this problem, and suffered severe anxiety states because they were unable to resolve or explain a notional machine&rsquo;s phenomenon that they considered elemental.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">None of the evaluated programming concepts that were introduced in &ldquo;Programming II&rdquo; course had an excellent level of student&rsquo;s understanding (top bar in <a href="#f7">Fig 7</a>). These concepts are essential to achieve the objectives of the Programming II course, and are required by subsequent courses in our Computer Science undergraduate program. The conclusion from these results is that lectures enriched with conceptual contraposition and program memory tracing are insufficient to ensure proper construction of notional machine mental models by apprentices. This result is of importance when considering that lectures maintain their prevalence as a teaching method for computer programming.</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Previous studies found positive results of these techniques when combined with other methods and materials; particularly conceptual contraposition combined with program visualizations  <a id="br16">[</a><a href="#r16">16</a>]&ndash;<a id="br18">[</a><a href="#r18">18</a>], and program memory traces combined with active learning  <a id="br8">[</a><a href="#r8">8</a>]. The differences between their results and ours may suggest that lectures are the main cause for students&rsquo; lack of understanding of notional machine concepts.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Excepting participant 11, qualitative results revealed that all students had serious deficiencies with at least three of the evaluated programming concepts. All students&rsquo; explanations lacked terminological precision and conceptual clarity. Most students had problems dividing the state of the program in memory segments (concept 1); the mechanics of calling, passing parameters and returning from functions (concepts 3, 19, 7); storing local variables (concept 4); and managing dynamic memory (concepts 20, 21). Comparing these results against the final course grades, six of these ten students passed the &ldquo;Programming II&rdquo; course. These results agree with the conclusion of McCracken et al., i.e. many students pass their first programming courses without a proficient level of programming  <a id="br12">[</a><a href="#r12">12</a>]. Further research is required to determine if traditional instruction methods or traditional evaluation schemes are the main cause of this phenomenon.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Qualitative data also revealed that very few students (4 out 11) detected and corrected the memory leak in the &ldquo;median program&rdquo;. This is an advanced concept that must be compulsorily learned in order to program C/C++ effectively. We included this concept in our evaluation because we know our students have serious difficulties to grasp it, therefore we consider it is a good candidate to judge whether a teaching method is effective or not. A hypothesis that may be explored in future research is if memory leak understanding is negatively affected when C/C++ students have previously learned Java programming. The underlining rationale is the following. The creation of objects shares almost the same logic and syntax in Java and C++, but their deallocation is different. Java deallocates dynamic objects automatically using a garbage collector service. C++ delegates the responsibility to the programmer, but keeps quiet if programmer forgets doing it. This scenario encourages that students keep applying the object creation habit developed in the Java course (assimilation in Piaget&rsquo;s nomenclature), inhibiting the learning process of C++&rsquo;s dynamic memory deallocation system (accommodation in Piaget&rsquo;s nomenclature).</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Constructivism suggests qualitative evaluation methods for assessing the students&rsquo; learning process further than quantitative ones  <a id="br14">[</a><a href="#r14">14</a>]. However, quantitative methods have historically been trusted in programming learning, and qualitative methods, such as colloquies, have rarely been used in programming learning research. We compared the subjective quantitative data gathered from colloquies against grades that participants obtained through traditional evaluation methods in our course. Correlations in <a href="#t2">Table 2</a> show that colloquies behaved very dissimilarly to the first long programming assignment (also know as &ldquo;programming project&rdquo; in our university) and short programming assignments (homework). Students had plenty of time to resolve these evaluations, and they may have obtained scaffolding from diverse sources. Therefore, these evaluations may not reflect effective student&rsquo;s knowledge. In the other hand, colloquies behaved very similarly to the traditional methods conducted near the end of the course, i.e. the third exam and final project. These were the two most comprehensive quantitative assessments, because they demanded comprehension of most programming concepts learned in the course. These findings support the suggestion about qualitative assessments stated by constructivists  <a id="br14">[</a><a href="#r14">14</a>], and this is the second most important contribution of this paper. However, further research is required in order to know if these results can be generalized.</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Future research may answer if exams can be replaced by colloquies or both are only complementary methods. In this research, both methods had different purposes. Exams were intended to assess problem-solving abilities whereas colloquies were intended to assess understanding of the C++ notional machine. The authors have a positive judgment about the potential and benefits of colloquies. For example, if notional machine understanding was evaluated using standard questions, most students would have correctly answered a question that asked to predict the output for the program in <a href="#f6">Fig 6</a>, and no evidence of whole division misunderstandings would have been detected. In the other hand, colloquies may have serious drawbacks, mainly with large populations of students, not self-confident participants, or students that reject being recorded. Further research is required in order to have a better picture of this method in the programming learning field.</font></font></p>      <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"><a name="_Ref323745329"></a> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>7. Conclusions and Future Work</b></font></font></p>     <p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">From a review of the literature, it is known that a correct understanding of runtime behavior of programming concepts is mandatory to program computers  <a id="br1">[</a><a href="#r1">1</a>], and students are expected to acquire this understanding mainly through the most used teaching method worldwide: the lecture  <a id="br5">[</a><a href="#r5">5</a>], <a id="br6">[</a><a href="#r6">6</a>]. However there is a lack of evaluations for this method for programming learning. This research advances the knowledge with the following conclusions:</font></font></p> 	    <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">1. 	</span>Lectures are insufficient to guarantee that students acquire 	a correct understanding of the notional machine of a programming 	language, even though, enriched lectures with concept contraposition 	and program memory tracing techniques are used.</font></font></p> 	    <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">2. 	</span>McCracken et al. suggested that many students do not know how 	to program after passing the first programming courses  <a id="br12">[</a><a href="#r12">12</a>]. 	Findings in the evaluated group of students in this research support 	the McCracken et al. statement, but at a more specific level: many 	students do not understand the runtime behavior of programming 	concepts after passing the first programming courses.</font></font></p> 	    <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> 	<font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span lang="es-UY">3. 	</span>Colloquies behaved in the same role as the most comprehensive 	traditional assessment methods. Furthermore, they empowered 	researchers to detect and correct some important program 	misconceptions that exams or projects were unable to detect.</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">There are many interesting topics for future research in order to have a better picture about how students learn computer programming. The following is just a short suggestion list. </font></font>      <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><span style="font-weight: normal">1. Can lectures be enriched with other techniques or materials to guarantee that students acquire a correct understanding of notional machines? For example, lectures enriched with program visualizations.</span></font></font></p>     <p class="western" style="margin-top: 0.42cm; margin-bottom: 0.21cm; font-weight: normal; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">2. Are constructivism teaching-learning methods more effective than lectures to guarantee the student&rsquo;s correct understanding of notional machines? Are they more efficient?</font></font></p>     <p class="western" style="margin-top: 0.42cm; margin-bottom: 0.21cm; font-weight: normal; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">3. Are mental models of notional machines stable in the student&rsquo;s long-term memory? In other words, do students actually learn notional machines?</font></font></p>     <p class="western" style="margin-top: 0.42cm; margin-bottom: 0.21cm; font-weight: normal; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">4. How do students transfer notional machine understandings when the programming language is changed? For example, from Java in the Programming I course to C++ in the Programming II course. How is the notional machine transfer process affected if the programming paradigm is changed as well? For example from C++ to Lisp.</font></font></p>     <p class="western" style="margin-top: 0.42cm; margin-bottom: 0.21cm; font-weight: normal; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">5. Is the ability of writing memory-leak free code in C++ negatively affected when students have learned Java programming previously?</font></font></p>     <p class="western" style="margin-top: 0.42cm; margin-bottom: 0.21cm; font-weight: normal; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">6. Does an understanding of the physical machine help students transfer from one notional machine to another or not?</font></font></p>     <p class="western" style="margin-top: 0.42cm; margin-bottom: 0.21cm; font-weight: normal; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">7. Are colloquies more effective to assess achievement of the programming course&rsquo;s objectives than traditional exams? In what contexts are they useful (e.g.: small number of students, cooperative learning, problem solving)?</font></font></p>     <p class="western" style="margin-bottom: 0cm; line-height: 100%"><font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">Answering these questions will enrich our understanding of the process for learning computer programming. These answers can be also used by educational systems to enhance programming learning methods and materials, and ensure that students that pass programming courses actually know how to program.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.21cm; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>Acknowledgements</b></font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="text-indent: 0cm; margin-bottom: 0cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt">This research is supported by the Centro de Investigaciones en Tecnolog&iacute;as de la Informaci&oacute;n y Comunicaci&oacute;n (CITIC), the Escuela de Ciencias de la Computaci&oacute;n e Inform&aacute;tica (ECCI), both from Universidad de Costa Rica (UCR), and the Ministerio de Ciencia Tecnolog&iacute;a y Telecomunicaciones de Costa Rica (MICITT).</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.42cm; margin-bottom: 0.21cm; line-height: 100%; page-break-after: avoid"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><b>References </b></font></font> </p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r1">[</a><a href="#br1">1</a>] J. Sorva, &ldquo;Visual Program Simulation in Introductory Programming Education,&rdquo; Aalto University, 2012.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r2">[</a><a href="#br2">2</a>] ACM and IEEE Computer Society, &ldquo;Computer Science 2013: Curriculum Guidelines for Undergraduate Programs in Computer Science,&rdquo; 2013.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r3">[</a><a href="#br3">3</a>] B. du Boulay, T. O&rsquo;Shea, and J. Monk, &ldquo;The black box inside the glass box: presenting computing concepts to novices,&rdquo; Int. J. Man. Mach. Stud., vol. 14, no. 3, pp. 237&ndash;249, Apr. 1981.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r4">[</a><a href="#br4">4</a>] J. Sorva, &ldquo;Notional machines and introductory programming education,&rdquo; ACM Trans. Comput. Educ., vol. 13, no. 2, pp. 1&ndash;31, Jun. 2013.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r5">[</a><a href="#br5">5</a>] T. L. Naps, S. Rodger, J. &Aacute;. Vel&aacute;zquez-Iturbide, G. R&ouml;&szlig;ling, V. Almstrum, W. Dann, R. Fleischer, C. Hundhausen, A. Korhonen, L. Malmi, and M. McNally, &ldquo;Exploring the role of visualization and engagement in computer science education,&rdquo; ACM SIGCSE Bull., vol. 35, no. 2, p. 131, Jun. 2003.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r6">[</a><a href="#br6">6</a>] E. Isohanni and H.-M. J&auml;rvinen, &ldquo;Are visualization tools used in programming education?: by whom, how, why, and why not?,&rdquo; in Proceedings of the 14th Koli Calling International Conference on Computing Education Research - Koli Calling &rsquo;14, 2014, pp. 35&ndash;40.</font></font></p>     <!-- ref --><p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r7">[</a><a href="#br7">7</a>] M. P. S&aacute;nchez Gonz&aacute;lez, T&eacute;cnicas docentes y sistemas de evaluaci&oacute;n en educaci&oacute;n superior. Narcea Ediciones, 2010.    </font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r8">[</a><a href="#br8">8</a>] M. Hertz and M. Jump, &ldquo;Trace-based teaching in early programming courses,&rdquo; in Proceeding of the 44th ACM technical symposium on Computer science education - SIGCSE &rsquo;13, 2013, p. 561.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r9">[</a><a href="#br9">9</a>] A. Vihavainen, J. Airaksinen, and C. Watson, &ldquo;A systematic review of approaches for teaching introductory programming and their influence on success,&rdquo; in Proceedings of the tenth annual conference on International computing education research - ICER &rsquo;14, 2014, pp. 19&ndash;26.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r10">[</a><a href="#br10">10</a>] J. Bennedsen and M. E. Caspersen, &ldquo;Failure rates in introductory programming,&rdquo; ACM SIGCSE Bull., vol. 39, no. 2, p. 32, Jun. 2007.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r11">[</a><a href="#br11">11</a>] C. Watson and F. W. B. Li, &ldquo;Failure rates in introductory programming revisited,&rdquo; in Proceedings of the 2014 conference on Innovation &amp; technology in computer science education - ITiCSE &rsquo;14, 2014, pp. 39&ndash;44.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r12">[</a><a href="#br12">12</a>] M. McCracken, V. Almstrum, D. Diaz, L. Thomas, M. Guzdial, I. Utting, and D. Hagan, &ldquo;A multi-national, multi-institutional study of assessment of programming skills of first-year CS students A framework for first-year learning objectives,&rdquo; ACM SIGCSE Bulletin, Volume 33 Issue 4, pp. 128&ndash;180, Dec-2001.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r13">[</a><a href="#br13">13</a>] Luria, Leontiev, and Vigotsky, Psicolog&iacute;a y pedagog&iacute;a, 4th ed. Sevilla, Espa&ntilde;a: Ediciones Akal, 2011.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r14">[</a><a href="#br14">14</a>] M. Ben-Ari, &ldquo;Constructivism in Computer Science Education,&rdquo; J. Comput. Math. Sci. Teach., vol. 20, no. 1, pp. 45&ndash;73, 2001.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r15">[</a><a href="#br15">15</a>] J. Hidalgo-C&eacute;spedes, G. Mar&iacute;n-Ravent&oacute;s, and V. Lara-Villagr&aacute;n, &ldquo;Student understanding of the C++ notional machine through traditional teaching with conceptual contraposition and program memory tracing,&rdquo; in 2015 Latin American Computing Conference (CLEI), 2015, pp. 1&ndash;8.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r16">[</a><a href="#br16">16</a>] L. Ma, J. Ferguson, M. Roper, and M. Wood, &ldquo;Investigating the viability of mental models held by novice programmers,&rdquo; in Proceedings of the 38th SIGCSE technical symposium on Computer science education, 2007, vol. 39, no. 1, pp. 499&ndash;503.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r17">[</a><a href="#br17">17</a>] L. Ma, J. D. Ferguson, M. Roper, I. Ross, and M. Wood, &ldquo;Using cognitive conflict and visualisation to improve mental models held by novice programmers,&rdquo; in Proceedings of the 39th SIGCSE technical symposium on Computer science education, 2008, vol. 40, no. 1, pp. 342&ndash;346.</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r18">[</a><a href="#br18">18</a>] L. Ma, J. Ferguson, M. Roper, I. Ross, and M. Wood, &ldquo;Improving the mental models held by novice programmers using cognitive conflict and jeliot visualisations,&rdquo; in Proceedings of the 14th annual ACM SIGCSE conference on Innovation and technology in computer science education, 2009, vol. 41, no. 3, pp. 166&ndash;170.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r19">[</a><a href="#br19">19</a>] D. Perkins and F. Martin, &ldquo;Fragile Knowledge and Neglected Strategies in Novice Programmers. IR85-22.,&rdquo; Sep. 1985.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r20">[</a><a href="#br20">20</a>] C. Crook, &ldquo;Computers in the zone of proximal development: Implications for evaluation,&rdquo; Comput. Educ., vol. 17, no. 1, pp. 81&ndash;91, Jan. 1991.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r21">[</a><a href="#br21">21</a>] J. Whalley and N. Kasto, &ldquo;A qualitative think-aloud study of novice programmers&rsquo; code writing strategies,&rdquo; in Proceedings of the 2014 conference on Innovation &amp; technology in computer science education - ITiCSE &rsquo;14, 2014, pp. 279&ndash;284.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r22">[</a><a href="#br22">22</a>] T. Greening, &ldquo;Emerging Constructivist Forces in Computer Science Education: Shaping a New Future?,&rdquo; in Computer Science Education in the 21st Century, T. Greening, Ed. New York, NY: Springer New York, 2000, pp. 47&ndash;80.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r23">[</a><a href="#br23">23</a>] J. F. Kearney and J. Nodine, &ldquo;Application of cognitive dissonance in the teaching of FORTRAN IV in an unstructured setting,&rdquo; in Proceedings of the annual conference on - ACM&rsquo;73, 1973, pp. 436.1&ndash;437.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r24">[</a><a href="#br24">24</a>] D. Teague and R. Lister, &ldquo;Manifestations of preoperational reasoning on similar programming tasks,&rdquo; in ACE &rsquo;14 Proceedings of the Sixteenth Australasian Computing Education Conference, 2014, pp. 65&ndash;74.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r25">[</a><a href="#br25">25</a>] D. Teague and R. Lister, &ldquo;Programming: reading, writing and reversing,&rdquo; in Proceedings of the 2014 conference on Innovation &amp; technology in computer science education - ITiCSE &rsquo;14, 2014, pp. 285&ndash;290.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r26">[</a><a href="#br26">26</a>] D. Teague and R. Lister, &ldquo;Longitudinal think aloud study of a novice programmer,&rdquo; in Proceedings of the Sixteenth Sixteenth Australasian Computing Education Conference (ACE2014), 2014, pp. 41&ndash;50.</font></font></p>     <p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r27">[</a><a href="#br27">27</a>] N. Arshad, &ldquo;Teaching programming and problem solving to CS2 students using think-alouds,&rdquo; in Proceedings of the 40th ACM technical symposium on Computer science education - SIGCSE &rsquo;09, 2009, vol. 41, no. 1, p. 372.</font></font></p>     ]]></body>
<body><![CDATA[<p class="western" style="text-indent: 0cm; margin-top: 0.21cm; margin-bottom: 0.21cm; line-height: 100%"> <font face="Verdana, sans-serif"><font size="2" style="font-size: 10pt"><a id="r28">[</a><a href="#br28">28</a>] S. Wiedenbeck and A. Engebretson, &ldquo;Comprehension Strategies of End-User Programmers in an Event-Driven Application,&rdquo; in 2004 IEEE Symposium on Visual Languages - Human Centric Computing, 2004, pp. 207&ndash;214.</font></font></p>      ]]></body><back>
<ref-list>
<ref id="B1">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sorva]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Visual Program Simulation in Introductory Programming Education]]></source>
<year>2012</year>
<publisher-name><![CDATA[Aalto University]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<nlm-citation citation-type="">
<collab>ACM and IEEE Computer Society</collab>
<source><![CDATA[Computer Science 2013: Curriculum Guidelines for Undergraduate Programs in Computer Science]]></source>
<year>2013</year>
</nlm-citation>
</ref>
<ref id="B3">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[du Boulay]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
<name>
<surname><![CDATA[O’Shea]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
<name>
<surname><![CDATA[Monk]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The black box inside the glass box: presenting computing concepts to novices]]></article-title>
<source><![CDATA[Int. J. Man. Mach. Stud.]]></source>
<year>Apr.</year>
<month> 1</month>
<day>98</day>
<volume>14</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>237-249</page-range></nlm-citation>
</ref>
<ref id="B4">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sorva]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Notional machines and introductory programming education]]></article-title>
<source><![CDATA[ACM Trans. Comput. Educ.]]></source>
<year>Jun.</year>
<month> 2</month>
<day>01</day>
<volume>13</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>1-31</page-range></nlm-citation>
</ref>
<ref id="B5">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Naps]]></surname>
<given-names><![CDATA[T. L.]]></given-names>
</name>
<name>
<surname><![CDATA[Rodger]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Velázquez-Iturbide]]></surname>
<given-names><![CDATA[J. Á.]]></given-names>
</name>
<name>
<surname><![CDATA[Rößling]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Almstrum]]></surname>
<given-names><![CDATA[V]]></given-names>
</name>
<name>
<surname><![CDATA[Dann]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Fleischer]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Hundhausen]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Korhonen]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Malmi]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[McNally]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Exploring the role of visualization and engagement in computer science education]]></article-title>
<source><![CDATA[ACM SIGCSE Bull]]></source>
<year>Jun.</year>
<month> 2</month>
<day>00</day>
<volume>35</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>131</page-range></nlm-citation>
</ref>
<ref id="B6">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Isohanni]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Järvinen]]></surname>
<given-names><![CDATA[H.-M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Are visualization tools used in programming education?: by whom, how, why, and why not?]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<volume>14</volume>
<conf-name><![CDATA[ 14th Koli Calling International Conference on Computing Education Research - Koli Calling]]></conf-name>
<conf-loc> </conf-loc>
<page-range>35-40</page-range></nlm-citation>
</ref>
<ref id="B7">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sánchez González]]></surname>
<given-names><![CDATA[M. P.]]></given-names>
</name>
</person-group>
<source><![CDATA[Técnicas docentes y sistemas de evaluación en educación superior]]></source>
<year>2010</year>
<publisher-name><![CDATA[Narcea]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hertz]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Jump]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Trace-based teaching in early programming courses]]></article-title>
<source><![CDATA[]]></source>
<year>2013</year>
<conf-name><![CDATA[ Proceeding of the 44th ACM technical symposium on Computer science education - SIGCSE ’13]]></conf-name>
<conf-loc> </conf-loc>
<page-range>561</page-range></nlm-citation>
</ref>
<ref id="B9">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Vihavainen]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Airaksinen]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Watson]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A systematic review of approaches for teaching introductory programming and their influence on success]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<conf-name><![CDATA[ Proceedings of the tenth annual conference on International computing education research - ICER ’14]]></conf-name>
<conf-loc> </conf-loc>
<page-range>19-26</page-range></nlm-citation>
</ref>
<ref id="B10">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bennedsen]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Caspersen]]></surname>
<given-names><![CDATA[M. E.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Failure rates in introductory programming]]></article-title>
<source><![CDATA[ACM SIGCSE Bull.]]></source>
<year>Jun.</year>
<month> 2</month>
<day>00</day>
<volume>39</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>32</page-range></nlm-citation>
</ref>
<ref id="B11">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Watson]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Li]]></surname>
<given-names><![CDATA[F. W. B.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Failure rates in introductory programming revisited]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<conf-name><![CDATA[ Proceedings of the 2014 conference on Innovation & technology in computer science education - ITiCSE ’14]]></conf-name>
<conf-loc> </conf-loc>
<page-range>39-44</page-range></nlm-citation>
</ref>
<ref id="B12">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[McCracken]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Almstrum]]></surname>
<given-names><![CDATA[V]]></given-names>
</name>
<name>
<surname><![CDATA[Diaz]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Thomas]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Guzdial]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Utting]]></surname>
<given-names><![CDATA[I]]></given-names>
</name>
<name>
<surname><![CDATA[Hagan]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A multi-national, multi-institutional study of assessment of programming skills of first-year CS students A framework for first-year learning objectives]]></article-title>
<source><![CDATA[ACM SIGCSE Bulletin]]></source>
<year>Dec-</year>
<month>20</month>
<day>01</day>
<volume>33</volume>
<numero>4</numero>
<issue>4</issue>
<page-range>128-180</page-range></nlm-citation>
</ref>
<ref id="B13">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Luria]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Leontiev]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
<name>
<surname><![CDATA[Vigotsky]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
</person-group>
<source><![CDATA[Psicología y pedagogía]]></source>
<year>2011</year>
<edition>4th</edition>
<publisher-loc><![CDATA[Sevilla ]]></publisher-loc>
<publisher-name><![CDATA[Akal]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ben-Ari]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Constructivism in Computer Science Education]]></article-title>
<source><![CDATA[J. Comput. Math. Sci. Teach.]]></source>
<year>2001</year>
<volume>20</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>45-73</page-range></nlm-citation>
</ref>
<ref id="B15">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hidalgo-Céspedes]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Marín-Raventós]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
<name>
<surname><![CDATA[Lara-Villagrán]]></surname>
<given-names><![CDATA[V.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Student understanding of the C++ notional machine through traditional teaching with conceptual contraposition and program memory tracing]]></article-title>
<source><![CDATA[]]></source>
<year>2015</year>
<conf-name><![CDATA[ Latin American Computing Conference (CLEI)]]></conf-name>
<conf-loc> </conf-loc>
<page-range>1-8</page-range></nlm-citation>
</ref>
<ref id="B16">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ma]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Ferguson]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Roper]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Wood]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Investigating the viability of mental models held by novice programmers]]></article-title>
<source><![CDATA[]]></source>
<year>2007</year>
<volume>39</volume>
<conf-name><![CDATA[ Proceedings of the 38th SIGCSE technical symposium on Computer science education]]></conf-name>
<conf-loc> </conf-loc>
<page-range>499-503</page-range></nlm-citation>
</ref>
<ref id="B17">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ma]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Ferguson]]></surname>
<given-names><![CDATA[J. D.]]></given-names>
</name>
<name>
<surname><![CDATA[Roper]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Ross]]></surname>
<given-names><![CDATA[I.]]></given-names>
</name>
<name>
<surname><![CDATA[Wood]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Using cognitive conflict and visualisation to improve mental models held by novice programmers]]></article-title>
<source><![CDATA[]]></source>
<year>2008</year>
<volume>40</volume>
<conf-name><![CDATA[ Proceedings of the 39th SIGCSE technical symposium on Computer science education]]></conf-name>
<conf-loc> </conf-loc>
<page-range>342-346</page-range></nlm-citation>
</ref>
<ref id="B18">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ma]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Ferguson]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Roper]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Ross]]></surname>
<given-names><![CDATA[I]]></given-names>
</name>
<name>
<surname><![CDATA[Wood]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Improving the mental models held by novice programmers using cognitive conflict and jeliot visualisations]]></article-title>
<source><![CDATA[]]></source>
<year>2009</year>
<volume>41</volume>
<conf-name><![CDATA[ Proceedings of the 14th annual ACM SIGCSE conference on Innovation and technology in computer science education]]></conf-name>
<conf-loc> </conf-loc>
<page-range>166-170</page-range></nlm-citation>
</ref>
<ref id="B19">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Perkins]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Martin]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
</person-group>
<source><![CDATA[Fragile Knowledge and Neglected Strategies in Novice Programmers]]></source>
<year>Sep.</year>
<month> 1</month>
<day>98</day>
<page-range>IR85-22</page-range></nlm-citation>
</ref>
<ref id="B20">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Crook]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Computers in the zone of proximal development: Implications for evaluation]]></article-title>
<source><![CDATA[Comput. Educ.]]></source>
<year>Jan.</year>
<month> 1</month>
<day>99</day>
<volume>17</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>81-91</page-range></nlm-citation>
</ref>
<ref id="B21">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Whalley]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Kasto]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A qualitative think-aloud study of novice programmers’ code writing strategies]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<conf-name><![CDATA[ Proceedings of the 2014 conference on Innovation & technology in computer science education - ITiCSE ’14]]></conf-name>
<conf-loc> </conf-loc>
<page-range>279-284</page-range></nlm-citation>
</ref>
<ref id="B22">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Greening]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Emerging Constructivist Forces in Computer Science Education: Shaping a New Future?]]></article-title>
<collab>Computer Science Education in the 21st Century</collab>
<source><![CDATA[]]></source>
<year>2000</year>
<page-range>47-80</page-range><publisher-loc><![CDATA[New York^eNY NY]]></publisher-loc>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B23">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kearney]]></surname>
<given-names><![CDATA[J. F.]]></given-names>
</name>
<name>
<surname><![CDATA[Nodine]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Application of cognitive dissonance in the teaching of FORTRAN IV in an unstructured setting]]></article-title>
<source><![CDATA[]]></source>
<year>1973</year>
<conf-name><![CDATA[ Proceedings of the annual conference on - ACM’73]]></conf-name>
<conf-loc> </conf-loc>
<page-range>436.1-437</page-range></nlm-citation>
</ref>
<ref id="B24">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Teague]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[Lister]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Manifestations of preoperational reasoning on similar programming tasks]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<conf-name><![CDATA[ ACE ’14 Proceedings of the Sixteenth Australasian Computing Education Conference]]></conf-name>
<conf-loc> </conf-loc>
<page-range>65-74</page-range></nlm-citation>
</ref>
<ref id="B25">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Teague]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Lister]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Programming: reading, writing and reversing]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<conf-name><![CDATA[ Proceedings of the 2014 conference on Innovation & technology in computer science education - ITiCSE ’14]]></conf-name>
<conf-loc> </conf-loc>
<page-range>285-290</page-range></nlm-citation>
</ref>
<ref id="B26">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Teague]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Lister]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Longitudinal think aloud study of a novice programmer]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<conf-name><![CDATA[ Proceedings of the Sixteenth Sixteenth Australasian Computing Education Conference (ACE2014)]]></conf-name>
<conf-loc> </conf-loc>
<page-range>41-50</page-range></nlm-citation>
</ref>
<ref id="B27">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Arshad]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Teaching programming and problem solving to CS2 students using think-alouds]]></article-title>
<source><![CDATA[]]></source>
<year>2009</year>
<volume>41</volume>
<conf-name><![CDATA[ Proceedings of the 40th ACM technical symposium on Computer science education - SIGCSE ’09]]></conf-name>
<conf-loc> </conf-loc>
<page-range>372</page-range></nlm-citation>
</ref>
<ref id="B28">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Wiedenbeck]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Engebretson]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Comprehension Strategies of End-User Programmers in an Event-Driven Application]]></article-title>
<source><![CDATA[]]></source>
<year>2004</year>
<conf-name><![CDATA[ IEEE Symposium on Visual Languages - Human Centric Computing]]></conf-name>
<conf-loc> </conf-loc>
<page-range>207-214</page-range></nlm-citation>
</ref>
</ref-list>
</back>
</article>
