<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.0 20120330//EN" "JATS-journalpublishing1.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="article">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">INFEDU</journal-id>
      <journal-title-group>
        <journal-title>Informatics in Education</journal-title>
      </journal-title-group>
      <issn pub-type="epub">1648-5831</issn>
      <issn pub-type="ppub">1648-5831</issn>
      <publisher>
        <publisher-name>VU</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="publisher-id">INFEDU2021_4_26</article-id>
      <article-id pub-id-type="doi">10.15388/infedu.2021.26</article-id>
      <article-categories>
        <subj-group subj-group-type="heading">
          <subject>Article</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Understanding Students’ Failure to use Functions as a Tool for Abstraction – An Analysis of Questionnaire Responses and Lab Assignments in a CS1 Python Course</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <name>
            <surname>HAGLUND</surname>
            <given-names>Pontus</given-names>
          </name>
          <email xlink:href="mailto:pontus.haglund@liu.se">pontus.haglund@liu.se</email>
          <xref ref-type="aff" rid="j_INFEDU_aff_000"/>
        </contrib>
        <aff id="j_INFEDU_aff_000">Linköping University, Sweden</aff>
        <contrib contrib-type="author">
          <name>
            <surname>STRÖMBÄCK</surname>
            <given-names>Filip</given-names>
          </name>
          <email xlink:href="mailto:filip.stromback@liu.se">filip.stromback@liu.se</email>
          <xref ref-type="aff" rid="j_INFEDU_aff_001"/>
        </contrib>
        <aff id="j_INFEDU_aff_001">Linköping University, Sweden</aff>
        <contrib contrib-type="author">
          <name>
            <surname>MANNILA</surname>
            <given-names>Linda</given-names>
          </name>
          <email xlink:href="mailto:linda.mannila@liu.se">linda.mannila@liu.se</email>
          <xref ref-type="aff" rid="j_INFEDU_aff_002"/>
        </contrib>
        <aff id="j_INFEDU_aff_002">Linköping University, Sweden</aff>
      </contrib-group>
      <volume>20</volume>
      <issue>4</issue>
      <fpage>583</fpage>
      <lpage>614</lpage>
      <permissions>
        <copyright-year>2021</copyright-year>
        <copyright-holder>Vilnius University, ETH Zürich</copyright-holder>
        <license license-type="open-access">
          <license-p>Open access article under the CC BY license.</license-p>
        </license>
      </permissions>
      <abstract>
        <p>Controlling complexity through the use of abstractions is a critical part of problem solving in programming. Thus, becoming proficient with procedural and data abstraction through the use of user-defined functions is important. Properly using functions for abstraction involves a number of other core concepts, such as parameter passing, scope and references, which are known to be difficult. Therefore, this paper aims to study students’ proficiency with these core concepts, and students’ ability to apply procedural and data abstraction to solve problems. We collected data from two years of an introductory Python course, both from a questionnaire and from two lab assignments. The data shows that students had difficulties with the core concepts, and a number of issues solving problems with abstraction. We also investigate the impact of using a visualization tool when teaching the core concepts.</p>
      </abstract>
      <kwd-group>
        <label>Keywords</label>
        <kwd>abstraction</kwd>
        <kwd>core concepts</kwd>
        <kwd>procedural abstraction</kwd>
        <kwd>data abstraction</kwd>
        <kwd>CS1</kwd>
        <kwd>Python</kwd>
        <kwd>functions</kwd>
        <kwd>prerequisites</kwd>
        <kwd>parameter passing</kwd>
        <kwd>scope</kwd>
        <kwd>references</kwd>
        <kwd>Python Tutor</kwd>
      </kwd-group>
    </article-meta>
  </front>
</article>
