ment with the Java programming language. Java was
chosen deliberately, as subsequent courses, building
on top of this course, rely on and require students
to have basic programming knowledge in Java. The
course starts with a basic introduction to program-
ming principles (statements, conditions, loops, data
types), covers the foundations of Java programming
(methods and arrays), and concludes with object ori-
entation, and basic inheritance principles.
With 6 ECTS credits (corresponding to approxi-
mately 150 hours of work), the course consists of two
separate parts. First, a weekly lecture, where atten-
dance is optional (but highly recommended), and sec-
ond, a weekly exercise with mandatory attendance.
Lecture: This part consists of a 90-minute slide-
based lecture, covering one topic per week, over the
course of 14 weeks. The slides are augmented with
live-coding sessions in which the lecturer presents
programming examples, supporting students with
hands-on experience. Slides and programming ex-
amples are provided to the students, alongside an op-
tional textbook. We encourage students to read the
book chapter and/or familiarize themselves with the
topic that is covered before the lecture and prepare
questions.
Excercise: The exercise is synchronized with the lec-
ture and takes place in the same week (typically one or
two days after the lecture). Students are divided into
several smaller exercise groups of approximately 30
people. In order to provide an optimal learning expe-
rience, we have recently adopted a new teaching con-
cept specifically designed for teaching STEM classes
at the university level. It has a strong focus on dis-
covery and cooperative learning, and instead of solely
relying on front-of-class teaching, the exercise is split
into three parts.
In the first part (Repetition and Questions) the
lecturer summarizes the most important concepts of
the previous lecture and provides additional exam-
ples and code snippets. During this time, students are
encouraged to ask clarification questions. The sec-
ond part (Discovering) is dedicated to self-learning.
Students have time to take a look at what we call
“Reading Corners”, where we provide sample solu-
tions, step-by-step exercises, and examples related to
the topic. The third part (Pair Programming) of the
90-minute exercise is dedicated to teamwork and pair
programming. Students work together in groups of
two or three on their weekly assignments.
Beginning with 2020, due to the COVID pan-
demic, lectures and exercises were both held online.
Despite not having students physically present in the
classroom, we tried to follow the same teaching con-
cepts previously introduced as close as possible. Pair
programming sessions were performed in breakout
Zoom rooms, and the lecturer was called for help
when needed. Students shared their screens or used
the collaborative online editor to work together on
the assignments. Additionally, a lecturer visited each
team at least once during the pair programming ses-
sion.
Homework Assignments: The weekly homework
assignments are composed of several smaller exam-
ples, typically five to six individual tasks, includ-
ing different types of tasks. Besides “traditional”
programming tasks, we also include tasks such as
reading, understanding, and describing code snippets.
Each student has to submit the weekly homework as-
signment tasks electronically within one week.
During the semester, we hand out ten assignments
out of which a minimum of eight must be submitted.
If more are submitted, we only consider the best eight
assignments when calculating the final grade. With
regards to grading, assignments are manually graded
by a tutor, typically a student in a higher semester, that
has Java programming experience. The tutors are pro-
vided with grading guidelines provided by the lecturer
to ensure consistent grading. As part of the feedback,
students not only receive points for each assignment,
but tutors provide detailed feedback about the errors
made by the students as well as the quality of the code
and the way the solution is implemented.
Additionally, complementing the lectures and ex-
ercises, a weekly tutorial is offered. Attendance to
the tutorial is optional and run by a tutor where sup-
port is provided to students who experience problems
or have questions about the assignment.
Teaching Materials: Besides lecture slides and
homework assignments, the students receive differ-
ent learning materials for studying the course con-
tents. They are provided with supporting literature
in the form of books, summary slides of the exercises
with additional examples, and a weekly Reading Cor-
ner that contains sample solutions and step-by-step
examples to foster pattern recognition and discovery
learning. In addition, links to videos are provided that
contain further examples and coding sessions. While
the teaching material does include guidelines, recom-
mendations, and best practices for Java programming,
it is part of the lecture and we do not present this as
a separate topic, but blend these into the first three
lectures and exercises. We present best practices and
guidelines regarding variable, method, (and later on)
class names as well as braces in control structures.
Exam: Students have to take an exam at the end of the
semester. The final grade is a result of both the assign-
ment and exam results. In order to pass the course,
students have to (1) receive at least 50% of the total
Common Code Quality Issues of Novice Java Programmers: A Comprehensive Analysis of Student Assignments
351