arXiv.itsnick.co

an independent field guide to 23 million papers from arXiv & OpenAlex — not affiliated with arXiv.org

Author

Johan Jeuring

157 papers · 1991–2026

1991: 21992: 21993: 11994: 01995: 31996: 01997: 11998: 21999: 12000: 22001: 52002: 22003: 32004: 22005: 42006: 62007: 72008: 62009: 82010: 92011: 22012: 72013: 92014: 52015: 32016: 32017: 62018: 62019: 32020: 152021: 12022: 52023: 62024: 62025: 92026: 5
1991peak 15 in 20202026

Frequent co-authors

Papers

showing 1–25 of 157 RSS

A Systematic Literature Review of Automated Feedback Generation for Programming Exercises

Hieke Keuning, Johan Jeuring, Bastiaan Heeren

Computer Science Applications · ACM Transactions on Computing Education · · cited 328× · DOI ↗ · more like this ·

Formative feedback, aimed at helping students to improve their work, is an important factor in learning. Many tools that offer programming exercises provide automated feedback on student solutions. We have performed a systematic literature review to find out what kind of feedback is provided, which techniques are used to generate the feedback, how adaptable the feedback is, and how these tools are evaluated. We have designed a labelling to classify the tools, and use Narciss’ feedback content categories to classify feedback messages. We report on the results of coding a total of 101 tools. We have found that feedback mostly focuses on identifying mistakes and less on fixing problems and taking a next step. Furthermore, teachers cannot easily adapt tools to their own needs. However, the diversity of feedback types has increased over the past decades and new techniques are being applied…

PolyP---a polytypic programming language extension

Patrik Jansson, Johan Jeuring

Artificial Intelligence · Chalmers Publication Library (Chalmers University of Technology) · · cited 246× · DOI ↗ · more like this ·

Many functions have to be written over and over again for different datatypes, either because datatypes change during the development of programs, or because functions with similar functionality are needed on different datatypes. Examples of such functions are pretty printers, debuggers, equality functions, unifiers, pattern matchers, rewriting functions, etc. Such functions are called polytypic functions. A polytypic function is a function that is defined by induction on the structure of user-defined datatypes. This paper extends a functional language (a subset of Haskell) with a construct for writing polytypic functions. The extended language type checks definitions of polytypic functions, and infers the types of all other expressions using an extension of Jones' theories of qualified types and higher-order polymorphism. The semantics of the programs in the extended language is…

Code Quality Issues in Student Programs

Hieke Keuning, Bastiaan Heeren, Johan Jeuring

Information Systems · Utrecht University Repository (Utrecht University) · · cited 105× · DOI ↗ · more like this ·

Because low quality code can cause serious problems in software systems, students learning to program should pay attention to code quality early. Although many studies have investigated mistakes that students make during programming, we do not know much about the quality of their code. This study examines the presence of quality issues related to program flow, choice of programming constructs and functions, clarity of expressions, decomposition and modularization in a large set of student Java programs. We investigated which issues occur most frequently, if students are able to solve these issues over time and if the use of code analysis tools has an effect on issue occurrence. We found that students hardly fix issues, in particular issues related to modularization, and that the use of tooling does not have much effect on the occurrence of issues.

Notional Machines in Computing Education

Sally Fincher, Johan Jeuring, Craig S. Miller +9 more

Artificial Intelligence · Aaltodoc (Aalto University) · · cited 77× · DOI ↗ · more like this ·

This report defines notional machines (NMs), and provides a series of definitional characteristics by which they may be identified. Over several sections, it includes a first-hand report of the origin of NMs, reports a systematic literature review to track the use and development of the concept, and presents a small collection of examples collected through interviews with experienced teachers. Additionally, the report presents NMs in a common format, and makes some preliminary explorations of their use in practice, including examples of instructors using multiple NMs in sequence. Approach and method are fully detailed in evidential appendices, to support replication of results and adoption/adaptation of practice.

Next-Step Hint Generation for Introductory Programming Using Large Language Models

Lianne Roest, Hieke Keuning, Johan Jeuring

cs.CY · · cited 75× · arXiv ↗ · more like this ·

Large Language Models possess skills such as answering questions, writing essays or solving programming exercises. Since these models are easily accessible, researchers have investigated their capabilities and risks for programming education. This work explores how LLMs can contribute to programming education by supporting students with automated next-step hints. We investigate prompt practices that lead to effective next-step hints and use these insights to build our StAP-tutor. We evaluate this tutor by conducting an experiment with students, and performing expert assessments. Our findings show that most LLM-generated feedback messages describe one specific next step and are personalised to the student's code and approach. However, the hints may contain misleading information and lack sufficient detail when students approach the end of the assignment. This work demonstrates the…

A generic deriving mechanism for Haskell

José Pedro Magalhães, Atze Dijkstra, Johan Jeuring +1 more

Artificial Intelligence · · cited 73× · DOI ↗ · more like this ·

Haskell's deriving mechanism supports the automatic generation of instances for a number of functions. The Haskell 98 Report only specifies how to generate instances for the Eq, Ord, Enum, Bounded, Show, and Read classes. The description of how to generate instances is largely informal. The generation of instances imposes restrictions on the shape of datatypes, depending on the particular class to derive. As a consequence, the portability of instances across different compilers is not guaranteed.

Comparing libraries for generic programming in haskell

Alexey Rodriguez, Johan Jeuring, Patrik Jansson +3 more

Artificial Intelligence · The HKU Scholars Hub (University of Hong Kong) · · cited 71× · DOI ↗ · more like this ·

Datatype-generic programming is defining functions that depend on the structure, or "shape", of datatypes. It has been around for more than 10 years, and a lot of progress has been made, in particular in the lazy functional programming language Haskell. There are morethan 10 proposals for generic programming libraries orlanguage extensions for Haskell. To compare and characterise the many generic programming libraries in atyped functional language, we introduce a set of criteria and develop a generic programming benchmark: a set of characteristic examples testing various facets of datatype-generic programming. We have implemented the benchmark for nine existing Haskell generic programming libraries and present the evaluation of the libraries. The comparison is useful for reaching a common standard for generic programming, but also for a programmer who has to choose a particular approach…

Generic programming with fixed points for mutually recursive datatypes

Alexey Rodriguez Yakushev, Stefan Holdermans, Andres Löh +1 more

Artificial Intelligence · · cited 67× · DOI ↗ · more like this ·

Many datatype-generic functions need access to the recursive positions in the structure of the datatype, and therefore adopt a fixed point view on datatypes. Examples include variants of fold that traverse the data following the recursive structure, or the Zipper data structure that enables navigation along the recursive positions. However, Hindley-Milner-inspired type systems with algebraic datatypes make it difficult to express fixed points for anything but regular datatypes. Many real-life examples such as abstract syntax trees are in fact systems of mutually recursive datatypes and therefore excluded. Using Haskell's GADTs and type families, we describe a technique that allows a fixed-point view for systems of mutually recursive datatypes. We demonstrate that our approach is widely applicable by giving several examples of generic functions for this view, most prominently the Zipper.

A Tutoring System to Learn Code Refactoring

Hieke Keuning, Bastiaan Heeren, Johan Jeuring

Artificial Intelligence · Data Archiving and Networked Services (DANS) · · cited 61× · DOI ↗ · more like this ·

In the last few decades, numerous tutoring systems and assessment tools have been developed to support students with learning programming, giving hints on correcting errors, showing which test cases do not succeed, and grading their overall solutions. The focus has been less on helping students write code with good style and quality. There are several professional tools that can help, but they are not targeted at novice programmers.

"I know it when I see it" Perceptions of Code Quality

Jürgen Börstler, Harald Störrle, Daniel Toll +7 more

Information Systems · Open University of the Netherlands Research Portal · · cited 52× · DOI ↗ · more like this ·

Context. Code quality is a key issue in software development. The ability to develop high quality software is therefore a key learning goal of computing programs. However, there are no universally accepted measures to assess the quality of code and current standards are considered weak. Furthermore, there are many facets to code quality. Defining and explaining the concept of code quality is therefore a challenge faced by many educators.

Dependency-style generic haskell

Andres Löh, Dave Clarke, Johan Jeuring

Artificial Intelligence · Data Archiving and Networked Services (DANS) · · cited 51× · DOI ↗ · more like this ·

Generic Haskell is an extension of Haskell that supports the construction of generic programs. During the development of several applications, such as an XML editor and compressor, we encountered a number of limitations with the existing (Classic) Generic Haskell language, as implemented by the current Generic Haskell compiler. Specifically, generic definitions become disproportionately more difficult to write as their complexity increases, such as when one generic function uses another, because recursion is implicit in generic definitions. In the current implementation, writing such functions suffers the burden of a large administrative overhead and is at times counter-intuitive. Furthermore, the absence of type checking in the current implementation can make Generic Haskell hard to use.In this paper we develop the foundations of Dependency-style Generic Haskell which addresses the…

A Systematic Mapping Study of Code Quality in Education

Hieke Keuning, Johan Jeuring, Bastiaan Heeren

Computer Science Applications · Utrecht University Repository (Utrecht University) · · cited 48× · DOI ↗ · more like this ·

While functionality and correctness of code has traditionally been the main focus of computing educators, quality aspects of code are getting increasingly more attention. High-quality code contributes to the maintainability of software systems, and should therefore be a central aspect of computing education. We have conducted a systematic mapping study to give a broad overview of the research conducted in the field of code quality in an educational context. The study investigates paper characteristics, topics, research methods, and the targeted programming languages. We found 195 publications (1976-2022) on the topic in multiple databases, which we systematically coded to answer the research questions. This paper reports on the results and identifies developments, trends, and new opportunities for research in the field of code quality in computing education.

How Teachers Would Help Students to Improve Their Code

Hieke Keuning, Bastiaan Heeren, Johan Jeuring

Computer Science Applications · Data Archiving and Networked Services (DANS) · · cited 44× · DOI ↗ · more like this ·

Code quality has been receiving less attention than program correctness in both the practice of and research into programming education. Writing poor quality code might be a sign of carelessness, or not fully understanding programming concepts and language constructs. Teachers play an important role in addressing quality issues, and encouraging students to write better code as early as possible.

An interactive functional programming tutor

Alex Gerdes, Johan Jeuring, Bastiaan Heeren

Computer Science Applications · · cited 43× · DOI ↗ · more like this ·

We introduce an interactive tutor that supports the stepwise development of simple functional programs. Using this tutor, students receive feedback about whether or not they are on the right track, can ask for a hint when they are stuck, and get suggestions about how to refactor their program. Our tutor generates this semantically rich feedback from model solutions, using advanced concepts from software technology. We show how a teacher can add an exercise to the tutor, and fine-tune feedback. We report on an experiment in which we used our tutor.

Computational Thinking Interventions in Higher Education

Imke de Jong, Johan Jeuring

Computer Science Applications · Open University of the Netherlands Research Portal · · cited 41× · DOI ↗ · more like this ·

Computational Thinking is seen as a crucial skill in an increasingly digital society. Researchers and educators in higher education therefore aim to improve the Computational Thinking (CT) skills of students using appropriate interventions. However, there is currently no overview of interventions used to teach CT and how effective they are. With this scoping literature review, we provide such an overview by identifying articles that discuss interventions used to teach CT in higher education. We identify the teaching approaches used in these interventions, and discuss their effectiveness and how this is assessed. Furthermore, we look at the use of adaptive interventions. Our search of three academic databases (Scopus, ACM and ERIC) resulted in 1839 articles. After screening, 49 articles remained. A detailed examination of the interventions discussed in these articles showed that CT is…

Communicate! — A Serious Game for Communication Skills —

Johan Jeuring, F.J.M. Grosfeld, Bastiaan Heeren +8 more

Artificial Intelligence · Lecture notes in computer science · · cited 40× · DOI ↗ · more like this ·

Communicate! is a serious game for practicing communication skills. It supports practicing interpersonal communication skills between a health care professional such as a doctor or a pharmacist, or a (business) psychologist, and a patient or client. A player selects a scenario, and holds a consultation with a virtual character. In the consultation, the player chooses between the various options offered in the scenario. The player scores on the learning goals addressed by the scenario, and gets immediate feedback through the effect of the choice between the answer options on the utterance and emotion of the virtual character. Communicate! also offers an editor for scenarios. A scenario is a graph-like structure, extended with several constructs to avoid the development of repetitive structures. We have performed several experiments with Communicate!, both with students to evaluate the…

A lightweight approach to datatype-generic rewriting

Thomas van Noort, Alexey Rodriguez Yakushev, Stefan Holdermans +3 more

Information Systems · Journal of Functional Programming · · cited 40× · DOI ↗ · more like this ·

Abstract Term-rewriting systems can be expressed as generic programs parameterised over the shape of the terms being rewritten. Previous implementations of generic rewriting libraries require users to either adapt the datatypes that are used to describe these terms or to specify rewrite rules as functions. These are fundamental limitations: the former implies a lot of work for the user, while the latter makes it hard if not impossible to document, test, and analyze rewrite rules. In this article, we demonstrate how to overcome these limitations by making essential use of type-indexed datatypes. Our approach is lightweight in that it is entirely expressible in Haskell with GADTs and type families and can be readily packaged for use with contemporary Haskell distributions.

Specifying Rewrite Strategies for Interactive Exercises

Bastiaan Heeren, Johan Jeuring, Alex Gerdes

Artificial Intelligence · Mathematics in Computer Science · · cited 38× · DOI ↗ · more like this ·

Strategies specify how a wide range of exercises can be solved incrementally, such as bringing a logic proposition to disjunctive normal form, reducing a matrix, or calculating with fractions. In this paper we introduce a language for specifying strategies for solving exercises. This language makes it easier to automatically calculate feedback, for example when a user makes an erroneous step in a calculation. We can automatically generate worked-out examples, track the progress of a student by inspecting submitted intermediate answers, and report back suggestions in case the student deviates from the strategy. Thus it becomes less labor-intensive and less ad-hoc to specify new exercise domains and exercises within that domain. A strategy describes valid sequences of rewrite rules, which turns tracking intermediate steps into a parsing problem. This is a promising view at interactive…

Towards Giving Timely Formative Feedback and Hints to Novice Programmers

Johan Jeuring, Hieke Keuning, Samiha Marwan +7 more

Computer Science Applications · Aaltodoc (Aalto University) · · cited 37× · DOI ↗ · more like this ·

Every year, millions of students learn how to write programs. Learning activities for beginners almost always include programming tasks that require a student to write a program to solve a particular problem. When learning how to solve such a task, many students need feedback on their previous actions, and hints on how to proceed. For tasks such as programming, which are most often solved stepwise, the feedback should take the steps a student has taken towards implementing a solution into account, and the hints should help a student to complete or improve a possibly partial solution.

Polytypic unification

Patrik Jansson, Johan Jeuring

Artificial Intelligence · Journal of Functional Programming · · cited 33× · DOI ↗ · more like this ·

Unification, or two-way pattern matching, is the process of solving an equation involving two first-order terms with variables. Unification is used in type inference in many programming languages and in the execution of logic programs. This means that unification algorithms have to be written over and over again for different term types. Many other functions also make sense for a large class of datatypes; examples are pretty printers, equality checks, maps etc. They can be defined by induction on the structure of user-defined datatypes. Implementations of these functions for different datatypes are closely related to the structure of the datatypes. We call such functions polytypic. This paper describes a unification algorithm parametrised on the type of the terms, and shows how to use polytypism to obtain a unification algorithm that works for all regular term types.

Polytypic pattern matching

Johan Jeuring

Artificial Intelligence · Data Archiving and Networked Services (DANS) · · cited 31× · DOI ↗ · more like this ·

The pattern matching problem can be informally specified as follows: given a pattern and a text, find all occurrences of the pattern in the text. The pattern and the text may both be lists, or they may both be trees, or they may both be multi-dimensional arrays, etc. This paper describes a general pattern-matching algorithm for all datatypes definable as an initial object in a category of F-algebras, where F is a regular functor. This class of datatypes includes mutual recursive datatypes and lots of different kinds of trees. The algorithm is a generalisation of the Knuth, Morris, Pratt like pattern-matching algorithm on trees first described by Hoffmann and O'Donnell.

Student Refactoring Behaviour in a Programming Tutor

Hieke Keuning, Bastiaan Heeren, Johan Jeuring

Computer Science Applications · Open University of the Netherlands Research Portal · · cited 30× · DOI ↗ · more like this ·

Producing high-quality code is essential for professionals working on maintainable software. However, awareness of code quality is also important for novices. In addition to writing programs meeting functional requirements, teachers would like to see their students write understandable, concise and efficient code. Unfortunately, time to address these qualitative aspects is limited. We have developed a tutoring system for programming that teaches students to refactor functionally correct code, focussing on the method-level. The tutoring system provides automated feedback and layered hints. This paper describes the results of a study of 133 students working with the tutoring system. We analyse log data to see how they approach the exercises, and how they use the hints and feedback to refactor code. In addition, we analyse the results of a student survey. We found that students with some…

Using strategies for assessment of programming exercises

Alex Gerdes, Johan Jeuring, Bastiaan Heeren

Computer Science Applications · · cited 30× · DOI ↗ · more like this ·

Programming exercise assessment tools alleviate the task of teachers, and increase consistency of markings. Many programming exercise assessment tools are based on testing. A test-based assessment tool for programming exercises cannot ensure that a solution is correct. Moreover, it is difficult to test if a student has used good programming practices. This is unfortunate, because teachers want students to adopt good programming techniques. We propose to use strategies, in combination with program transformations, as a foundation for functional programming exercise assessment. Expert knowledge, in the form of model solutions, can be expressed as programming strategies. Using these strategies we can guarantee that a student program is equivalent to a model solution, and we can report which solution strategy has been used to solve the programming problem.

Comparing approaches to generic programming in Haskell

Ralf Hinze, Johan Jeuring, Andres Löh

Artificial Intelligence · Utrecht University Repository (Utrecht University) · · cited 29× · OpenAlex ↗ · more like this ·

Abstract. The last decade has seen a number of approaches to datatype-generic programming: PolyP, Functorial ML, ‘Scrap Your Boilerplate’, Generic Haskell, ‘Generics for the Masses’, etc. The approaches vary in sophistication and target audience: some propose full-blown programming languages, some suggest libraries, some can be seen as categorical programming methods. In these lecture notes we compare the various approaches to datatype-generic programming in Haskell. We introduce each approach by means of example, and we evaluate it along different dimensions (expressivity, ease of use, etc). 1

Optimizing generics is easy!

José Pedro Magalhães, Stefan Holdermans, Johan Jeuring +1 more

Artificial Intelligence · · cited 27× · DOI ↗ · more like this ·

Datatype-generic programming increases program reliability by reducing code duplication and enhancing reusability and modularity. Several generic programming libraries for Haskell have been developed in the past few years. These libraries have been compared in detail with respect to expressiveness, extensibility, typing issues, etc., but performance comparisons have been brief, limited, and preliminary. It is widely believed that generic programs run slower than hand-written code. In this paper we present an extensive benchmark suite for generic functions and analyze the potential for automatic code optimization at compilation time. Our benchmark confirms that generic programs, when compiled with the standard optimization flags of the Glasgow Haskell Compiler (GHC), are substantially slower than their hand-written counterparts. However, we also find that more advanced optimization…