<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Namur, Belgium
$ alvaro@ifsp.edu.br (A. Costa Neto); mjoao@ipb.pt (M. J. V. Pereira); prh@di.uminho.pt (P. R. Henriques)
 http://www.ipb.pt/~mjoao/ (M. J. V. Pereira); https://www.di.uminho.pt/~prh/ (P. R. Henriques)</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Application of Programming Cocktails Identity Cards to Development Complexity Analysis</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Alvaro Costa Neto</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Maria João Varanda Pereira</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Pedro Rangel Henriques</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ALGORITMI Research Centre/LASI, DI - University of Minho, Campus de Gualtar, Rua da Universidade</institution>
          ,
          <addr-line>4710-057 Braga</addr-line>
          ,
          <country country="PT">Portugal</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Instituto Federal de Educação, Ciência e Tecnologia de São Paulo</institution>
          ,
          <addr-line>Avenida C-1, 250, 14781-502 Barretos, SP</addr-line>
          ,
          <country country="BR">Brasil</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Instituto Politécnico de Bragança</institution>
          ,
          <addr-line>Campus de Santa Apolónia, 5300-253 Bragança</addr-line>
          ,
          <country country="PT">Portugal</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2024</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0003</lpage>
      <abstract>
        <p>Complexity in software projects tends to grow considerably as resources and stakeholders raise in numbers. Several factors may contribute to this, ranging from miscommunication between developers, to excessive dependency on external libraries and frameworks. Consequently, managing both developers and the assets they use becomes increasingly hard as features are implemented and changes in linguistic characteristics and coding styles become necessary. This position paper presents Programming Cocktails, their Ingredients, and Resources, three basic software development management concepts. These three main concepts culminate in Programming Cocktails Identity Cards, an ontology-based modelling technique to aid in assessing, planning, and understanding how each development technology contributes-both positively and negatively-to several aspects of software development, such as cognitive burden, risk and cost.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;programming cocktails</kwd>
        <kwd>programming languages</kwd>
        <kwd>development complexity</kwd>
        <kwd>cognitive analysis</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        It is well established that as development projects grow in size and requirements multiply, complexity
also increases [
        <xref ref-type="bibr" rid="ref1 ref2 ref3 ref4">1, 2, 3, 4</xref>
        ]. From the many factors that contribute to this growth, the interconnection
between programming technologies (such as languages, libraries, tools and frameworks) poses challenges
that may negatively afect cognitive efectiveness, raise risks and generate costs.
      </p>
      <p>
        In this context, analysis should be made on the combined uses and interconnections of these
technologies, reaching beyond comparison of individual metrics (as it is common [
        <xref ref-type="bibr" rid="ref5 ref6 ref7">5, 6, 7</xref>
        ]). This point-of-view
highlights several factors that may influence success in choosing and managing which programming
technologies should be used in a certain project. Which language is a better fit for a substitution
mid-development? What cognitive strains would it impose based on its diferences to other languages,
libraries and frameworks already in use? Do these diferences raise security risks and vulnerabilities, or
do they enforce behaviors that may nullify each other weaknesses?
      </p>
      <p>The answers to these questions rely on the knowledge behind these combinations and how to better
use and choose which technologies should be integrated into a development project. Naturally, it is of
utmost importance to structure and analyse this knowledge in a productive way, considering, first of all,
which factor is under evaluation (risk, cost, cognitive burden etc.), and secondly, how each technology
relates to each other in this analysis. This paper presents Programming Cocktails as a formal, structured
and novel concept that should aid developers, managers and their peers in reaching further conclusions
about the intrinsic relationships between languages, libraries, frameworks and tools in their projects.</p>
      <p>This position paper is divided into five sections. After the introduction and contextualization in
Section 1, Section 2 introduces the basic concepts of Programming Cocktails, Ingredients, and Resources.
Section 3 presents Cocktail Identity Cards as an ontological form of identification for Programming
Cocktails. Section 4 proposes augmentations to and uses for the Cocktail Identity Cards that could
isa (specialization)
iof (instantiation)
pof (composition)
pof (composition)
General Concept</p>
      <p>Concept</p>
      <p>Composed Concept</p>
      <p>Composed Individual
improve planning of several aspects in development life-cycles, both technical, such as risk and cost,
and psychological, such as cognitive burden and afinity attrition. Finally, Section 5 concludes the article
with final remarks of what has already been modelled via Cocktail Identity Cards, and what is planned
to be researched and implemented in the near future.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Programming Cocktails</title>
      <p>
        At its basis, Programming Cocktails are the sets of programming technologies that are directly used to
develop software systems [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. They may be composed of four types of Ingredients:
• Languages for programming, communication, configuration etc.
• Libraries, both in source and pre-compiled varieties;
• Frameworks, as complementary code that requires the use or adoption of specific protocols,
behavior or paradigms;
• Tools that are directly used in the development tasks, such as source code editors, and IDEs.
      </p>
      <p>Finally, technologies that indirectly participate in the development process, such as services and
runtime support systems (e.g. Database Management Systems, DBMS) are considered Resources. While
some of them might have components that are directly used in the development process (such as a
connection library for a DBMS), the Resource itself is intended to support execution, not development.</p>
      <p>
        These concepts were defined in an ontology that was initially created to structure knowledge about
data that was gathered in a survey [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. It formed the basis on which the entire model of Programming
Cocktails was created, including the Cocktail Identity Cards (explained in Section 3). Figure 2 shows
the open conceptual model for the ontology (see Figure 1 for the graphical notation), with all its basic
definitions, such as the previously mentioned concepts, the core concepts of System, Development, and
Cocktail, as well as Tasks, which correspond to actual development tasks, such as Front-end Development,
Database Communication and equivalent. There are two more important points to be made about the
ontology:
• Despite the fact that the original intention of the ontology was to structure the data gathered in
the survey [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], the results have become a foundation for modelling Cocktails via instantiation of
the open conceptual model. This should aid stakeholders in the development team to visualize,
document, analyse and decide which programming technologies should be used and why;
• The conceptual model is considered open because the definition of the Task specializations ( TaskA
to TaskZ ) is deferred to the individuals that will model Programming Cocktails using it. This
decision aims to avoid pre-defining tasks that would eventually be either too generic for any kind
of useful representation, or too granular and specific, which would inevitably lead to obsolescence.
      </p>
      <p>The conceptual model is the starting point to the actual modelling of the Programming Cocktails,
leaving practical application to its instantiation: the Cocktail Identity Cards.</p>
      <p>TaskA
TaskB</p>
      <p>...</p>
      <p>TaskZ</p>
      <p>Task</p>
      <p>Resource
uses
Development</p>
      <p>Cocktail
Ingredient</p>
      <p>Library
Language
extends</p>
    </sec>
    <sec id="sec-3">
      <title>3. Cocktail Identity Cards</title>
      <p>The conceptual model forms the basis for the modelling process, providing guidelines akin to schematics
for the actual model. Its instantiation, consequently, renders a series of interconnected individuals1
that provides an instant overview of the Cocktail’s structure. If carefully drawn and pruned2, the
resulting diagram is easily recognizable and most of the structural information about the Cocktail is
immediately observable, such as ingredient quantity and diversity, diferent branches of development,
which languages are more dependant of complementary ingredients, etc.</p>
      <p>
        Figures 3 and 4 show two Cocktail Identity Cards, for two diferent software systems. The first
is a Web application for an in-house Questions and Answers (Q&amp;A) system. As can be seen, not all
relations are shown, as the System, Development and Cocktail concepts are hidden to improve legibility.
The tasks were defined in a higher level of abstraction, including only general areas of development
(markup, styling and scripting). This might not be the case with a diferent Cocktail, or even at another
situation for the same Cocktail that requires a more detailed representation of each Ingredient’s role
in the project implementation. In the end, the definition of the granularity (or abstraction level) of
the tasks is highly situational. The second Identity Card (shown in Figure 4) models a Covid-19 pass
management mobile application. It has two branches of development, one for each target platform: iOS
and Android. This Identity Card also shows that both languages, Swift and Kotlin, are less dependant on
complementary code, as no instances of Library and Framework are connected to them3. This may lead
to a lower complexity, as linguistic and psychological features (such as afinity [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ] and cognitive
load [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]) are constant in each branch.
      </p>
      <p>The Cocktail Identity Cards are useful as-is for quick identification of several characteristics of
the Cocktails they represent. Nonetheless, if augmented with further information, it may serve as a
foundation for other, more complex analysis.
4. Possible Uses and Augmentation for Cocktail Identity Cards
Despite the immediate structural feedback obtained from the Identity Cards, more can be represented
and documented if the relationships in the model are augmented to represent specific metrics. These
metrics may relate to technical aspects, such as cost of maintenance, size needed for cloud hosting, or
1The instance of an ontological concept may also be called an individual.
2Some instantiation relations are hidden in order to avoid cluttering the diagram.
3That is not to say that these languages are inherently less dependent on other components, only that in this case, the model
indicates a lower level of dependency.</p>
      <p>Elasticsearch</p>
      <p>MongoDB</p>
      <p>RabbitMQ</p>
      <p>App1
uses
App1Cocktail</p>
      <p>uses
App2iOSCocktail</p>
      <p>
        Swift
definitive linguistic metrics, such as number of data types and functions. On the other hand, some more
qualitative metrics could also be applied, such as cognitive burden [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], afinity, security risk, etc. With
these augmentations, the Identity Cards would provide diferent points-of-view for the structure of the
Cocktail. Stakeholders would be able to quickly assess current, former and even possibilities for future
changes in the Cocktail’s structure and how these changes would afect each of the augmented metrics.
This use would form a historic account of how the programming technologies in the project have
      </p>
      <p>HIGH
JavaScript</p>
      <p>HIGH</p>
      <p>HIGH</p>
      <p>HIGH
LOW</p>
      <p>NodeJS</p>
      <p>ReactJS
changed and evolved, aiding in tracking and predicting software evolution, as the software evolution
can be represented by a set of identity cards in a timeline sequence.</p>
      <p>A second possible use for the Identity Cards is decision support. By comparing diferent Identity
Cards augmented with metrics such as cost, risk and cognitive burden, decision on which technologies
should be included (or substituted) in the project could be taken with an overview of its impact on
the project and on the team behind it. Figure 5 presents part of App1’s Cocktail Identity Card (see
Figure 3) with hypothetical augmentations that represent security risks for each Ingredient. The values
superimposed on the relations (HIGH and LOW ) could be measured based on specific linguistic features,
such as the direct memory access via pointers, manual memory allocation, lack of bounds management
in data structures, etc. but could also take into consideration historic findings about each technology
and the inherent nature of its use. As an example of the latter, a markup language is naturally less
vulnerable to exploits as it tends to express only structure instead of behavior and would contribute less
to possible vulnerabilities. A simple score-card could be created to establish the level of risk for each
Ingredient, and most important of all, for the relations between each other (such as between NodeJS
and JavaScript in Figure 5).</p>
      <p>As for comparison against other modelling options, a few points can be made:
• By their own nature, ontologies are more flexible in their construction than other modelling
techniques that have pre-defined semantics, such as Class Diagrams. This fact could lend Cocktail
Identity Cards to better fit specific scenarios, as characteristics from diferent points of view
can be assembled in one model. One possible caveat with this argument is that this flexibility
could also decrease standardization. It could eventually hinder communication and information
exchange between peers that come from diferent projects, given that each group would adapt
the ontology to their particular needs;
• Diferent levels of abstraction can be expressed in a single model, as new concepts do not have to
adhere to any sort of pre-established abstraction level or standard;
• By using only ontological modelling, fragmentation of tools and techniques can be avoided or at
least reduced. This lowers development complexity between diferent peers in a project, such as
developers, designers, managers, etc.</p>
    </sec>
    <sec id="sec-4">
      <title>5. Conclusion</title>
      <p>Programming Cocktails provide a novel way to model and observe how diferent technologies compose
and interact in a development setting. This paper presented the foundational ideas and concepts
behind them, as well as their immediate result: Cocktail Identity Cards. Through future research
into augmenting these Identity Cards, stakeholders in a software development project could evaluate,
record, document and analyse diferent metrics, ranging from the most technical and quantitative, such
as points of vulnerability and racing conditions, to more philosophical and qualitative ones, such as
quality, afinity, and attrition. Software evolution and maintenance could also be tackled by constructing
historic accounts for the changes that occur in Cocktails during its lifetime, establishing a sequence of
Identity Cards that represent the evolution of their development technologies. The Cocktail Identity
Cards will be used to assess cognitive burden in Programming Cocktails, culminating in a
decisionsupport methodology that should aid developers and educators in choosing programming languages,
frameworks, libraries and tools that lessens the cognitive load requirements for developers and students.</p>
    </sec>
    <sec id="sec-5">
      <title>Acknowledgments</title>
      <p>This work has been supported by FCT – Fundação para a Ciência e Tecnologia within the R&amp;D Units
Project Scope: UIDB/00319/2020. The work of Maria João was supported by national funds through
FCT/MCTES (PIDDAC): CeDRI, UIDB/05757/2020 (DOI: 10.54499/UIDB/05757/2020) and UIDP/05757/2020
(DOI: 10.54499/UIDP/05757/2020); SusTEC, LA/P/0007/2020 (DOI: 10.54499/LA/P/0007/2020).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ghazarian</surname>
          </string-name>
          ,
          <article-title>A theory of software complexity</article-title>
          ,
          <source>in: 2015 IEEE/ACM 4th SEMAT Workshop on a General Theory of Software Engineering</source>
          ,
          <year>2015</year>
          , pp.
          <fpage>29</fpage>
          -
          <lpage>32</lpage>
          . doi:
          <volume>10</volume>
          .1109/GTSE.
          <year>2015</year>
          .
          <volume>11</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Benaroch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Lyytinen</surname>
          </string-name>
          ,
          <article-title>How much does software complexity matter for maintenance productivity? the link between team instability and diversity</article-title>
          ,
          <source>IEEE Transactions on Software Engineering</source>
          <volume>49</volume>
          (
          <year>2023</year>
          )
          <fpage>2459</fpage>
          -
          <lpage>2475</lpage>
          . doi:
          <volume>10</volume>
          .1109/TSE.
          <year>2022</year>
          .
          <volume>3222119</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>T.</given-names>
            <surname>Honglei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Wei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Yanan</surname>
          </string-name>
          ,
          <article-title>The research on software metrics and software complexity metrics</article-title>
          , in: 2009
          <source>International Forum on Computer Science-Technology and Applications</source>
          , volume
          <volume>1</volume>
          ,
          <year>2009</year>
          , pp.
          <fpage>131</fpage>
          -
          <lpage>136</lpage>
          . doi:
          <volume>10</volume>
          .1109/IFCSTA.
          <year>2009</year>
          .
          <volume>39</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>L.</given-names>
            <surname>Hanyan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Shihai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Bin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Peng</surname>
          </string-name>
          ,
          <article-title>Software complexity measurement based on complex network</article-title>
          ,
          <source>in: 2017 8th IEEE International Conference on Software Engineering and Service Science (ICSESS)</source>
          ,
          <year>2017</year>
          , pp.
          <fpage>262</fpage>
          -
          <lpage>265</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICSESS.
          <year>2017</year>
          .
          <volume>8342910</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A. H.</given-names>
            <surname>Odeh</surname>
          </string-name>
          ,
          <article-title>Analytical and comparison study of main web programming languages: Asp and php</article-title>
          ,
          <source>TEM Journal 8</source>
          (
          <year>2019</year>
          )
          <fpage>1517</fpage>
          -
          <lpage>1522</lpage>
          . URL: http://www.temjournal.com/content/84/ TEMJournalNovember2019_1517_
          <fpage>1522</fpage>
          .pdf. doi:
          <volume>10</volume>
          .18421/TEM84-58.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fourment</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. R.</given-names>
            <surname>Gillings</surname>
          </string-name>
          ,
          <article-title>A comparison of common programming languages used in bioinformatics</article-title>
          ,
          <source>BMC Bioinformatics 82</source>
          (
          <year>2008</year>
          ). URL: https://bmcbioinformatics.biomedcentral.com/ articles/10.1186/
          <fpage>1471</fpage>
          -2105-9-82. doi:
          <volume>10</volume>
          .1186/
          <fpage>1471</fpage>
          -2105-9-82.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>N.</given-names>
            <surname>Walia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kalia</surname>
          </string-name>
          ,
          <article-title>Programming languages for data mining: a review</article-title>
          ,
          <source>International Journal of Computer Trends and Technology</source>
          <volume>68</volume>
          (
          <year>2020</year>
          )
          <fpage>38</fpage>
          -
          <lpage>41</lpage>
          . URL: https://ijcttjournal.org/archives/ ijctt-v68i1p109.
          <source>doi:10</source>
          .14445/22312803/IJCTT-V68I1P109.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A. C.</given-names>
            <surname>Neto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J. V.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. R.</given-names>
            <surname>Henriques</surname>
          </string-name>
          ,
          <article-title>An ontology to understand programming cocktails</article-title>
          , in: M.
          <string-name>
            <surname>Ganzha</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Maciaszek</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Paprzycki</surname>
          </string-name>
          , D. Ślęzak (Eds.),
          <source>Proceedings of the 19th Conference on Computer Science and Intelligence Systems, Annals of Computer Science and Information Systems</source>
          , IEEE,
          <year>2024</year>
          . To be published.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Costa Neto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Araújo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J. V.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. R.</given-names>
            <surname>Henriques</surname>
          </string-name>
          , Programmers' afinity to languages, volume
          <volume>91</volume>
          , Open Access Series in Informatics (OASIcs),
          <source>Schloss Dagstuhl - Leibniz-Zentrum für Informatik</source>
          ,
          <year>2021</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>7</lpage>
          . URL: https://drops.dagstuhl.de/opus/volltexte/2021/14219. doi:
          <volume>10</volume>
          . 4230/OASIcs.ICPEC.
          <year>2021</year>
          .
          <volume>3</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>A.</given-names>
            <surname>Costa Neto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Araújo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J. V.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. R.</given-names>
            <surname>Henriques</surname>
          </string-name>
          ,
          <article-title>Value-focused investigation into programming languages afinity</article-title>
          , volume
          <volume>102</volume>
          , Open Access Series in Informatics (OASIcs),
          <source>Schloss Dagstuhl - Leibniz-Zentrum für Informatik</source>
          ,
          <year>2022</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>12</lpage>
          . URL: https://drops.dagstuhl.de/opus/ volltexte/2022/16605. doi:
          <volume>10</volume>
          .4230/OASIcs.ICPEC.
          <year>2022</year>
          .
          <volume>1</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>V.</given-names>
            <surname>Chiew</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <article-title>A large-scale empirical study on the cognitive complexity of software</article-title>
          ,
          <source>in: CCECE</source>
          <year>2010</year>
          ,
          <year>2010</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>4</lpage>
          . doi:
          <volume>10</volume>
          .1109/CCECE.
          <year>2010</year>
          .
          <volume>5575116</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>J.</given-names>
            <surname>Sweller</surname>
          </string-name>
          ,
          <article-title>Cognitive load during problem solving: Efects on learning</article-title>
          ,
          <source>Cognitive Science 12</source>
          (
          <year>1988</year>
          )
          <fpage>257</fpage>
          -
          <lpage>285</lpage>
          . URL: https://onlinelibrary.wiley.com/doi/abs/10.1207/s15516709cog1202_4. doi:https: //doi.org/10.1207/s15516709cog1202_
          <fpage>4</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>