Hi everyone, I'm Daniele Traversaro from the University of Genova and today I will present
our work to you.
Sonic Pi for TBL Teaching Units in an Introductory Programming Course.
Daniele Traversaro, Giovanna Guerrini and Giorgio Delzanno.
Why Innovative Teaching in Computer Science?
Each year we have an high number of freshmen but these numbers are mainly motivated by
the job opportunities offered by our degree.
In contrast, we have a lot of students with low motivation and autonomy that are not used
to working in groups.
In addition, there is another problem related to the balance between difficulties and gratification
reward in learning to program.
To face these problems, our University has intervened with the Innovative Teaching Project.
and our proposal belongs to the Innovative Teaching Project.
We designed two small exploratory teaching units in the context of the first semester
Introductory to Programming Course (aka CS1) Our target were first-year undergraduate students
in CS (Bachelor Degree) Why Sonic Pi?
Sonic Pi is not the traditional computer programming language, in fact is a code-based music creation
and performance tool, where each musical concept is represented by a basic computer programming
concept The musical domain is something that everyone
knows and likes and it makes computer programming concepts such as data structures, iterations
and so on natural and easy to understand.
But you can also teach more advanced concepts such as concurrency
In particular, Sonic Pi is a computer programming language with a steep learning curve, with
a very simple syntax similar to the spoken English I just put as an example a screenshot of Sonic
Pi interface, and as you can see there is a register window where you can see what your
running program is doing and other outputs, for example the output of the function print().
If you want to implement the "Hello, World!" program, you just have to write "print(hello,
world!")" without including libraries or defining classes and so on and so forth.
So this language is very suitable for introductory to computer programming courses.
You can also "hear" what you're coding, thanks to music,
getting a tangible and concrete response.
The main topic of the first teaching unit was concurrent computer programming, which
was complementary to CS1.
We did this module in November 2019, using Sonic Pi and TBL, in the next slides I will
explain TBL.
The main goals were strengthen transversal skills, such as team-work, team member accountability
etc. and strengthen motivation, curiosity and self-esteem, by showing that there is
much more then sequential imperative computer programming, but in order to understand these
advanced concepts, you must have a good knowledge of the basic concepts.
The main topic of the second teaching unit were the scope rules, which was a learning objective
of CS1 We used the same strategies, methodologies
and language of the first teaching unit, here the goals were strengthen transversal
skills and motivation and deepening of scope rules in preparation
for the CS1 written exam.
Team based Learning is a collaborative learning and teaching strategy
that enables students to follow a structured process
It is a particular case of flipped classroom and it scales very well on large classes.
In particular, TBL consists of modules that can be taught in a three-step cycle: individual
preparation, in-class readiness assurance process and application-focused exercise.
In particular, it consists of five essential components, plus an optional final peer and
self evaluation stage.
Here you can see the "Immediate Feedback Assessment Technique", aka IF-AT scratch card, which
we decided to use them for the t-RAT, team readiness assurance test
They are similar to scratch and win cards
Teams have to reach a consensus and scratch the box corresponding to the correct answer.
They allow to obtain an immediate feedback and a gamification of learning approach.
RAT quizzes are multiple-choice questions with 4 options, only one correct and all the
others false.
For the first teaching unit we decided to focus on CS concurrency and Sonic Pi data structures
Race conditions, synchronization between processes
(cue/sync in Sonic Pi), sleep, Sonic Pi threads, Live loops, lists and so on.
For the second teaching unit we designed quizzes focused on the C++ and Sonic Pi scope rules
Here the idea was that switching from one language to another it requires an additional abstraction
effort to understand the notion of "scope", regardless of the rules of a specific language.
In fact, Sonic Pi helps you to "hear" the difference between local and global variables
in particular it works on two different levels of scope: variables scope and synths scope.
Synths are quite tricky, because they are global but thread local.
Then there is the team application phase, where the task must follow the 4S framework
which means that the problem must be significant, must be complex enough to engage all the members
of a team, must be the same problem for all the teams, with a specific choice and
a simultaneous report.
After the task, teams have to prepare a poster where they can share their reasoning and this
phase triggers a lot of discussion among teams.
Here you can see both tasks of the two activities, on the left there is the first 4s task
we are asking to implement a program to generate a DJ music, obviously we have to implement more
than one musical instruments and they must be synchronized with each other.
In particular, students had to use cue/sync commands in order to synchronize the live
loops in the different buffers.
We also assigned two extra-exercises, warm-up exercises, in order to get students
familiarized and used with the new syntax of Sonic Pi.
Despite Sonic Pi has a very simple syntax, it still requires a minimal syntactic knowledge.
On the right, you can see the second 4s task Here teams have to complete an incomplete
Sonic Pi code, in order to obtain an ordered sequence of notes.
To achieve these results they have to understand the scope rules of Sonic Pi.
This is the 4s task implemented in Sonic Pi, as you can see teams used concurrent commands
such as cue, in_thread, sync, but they also defined functions, loops, etc.
Some feedback from our activities, from the first teaching unit.
Teams perform better than individuals, in particular the average number of correct answer
increases from 5 to 7.6, but if we consider also the second attempt it increases to 9.
In general, the final mark of each team is quite positive.
I want to stress the fact that we decided to not evaluate this activity in CS1, but
this activity had only a formative value for the students.
The feedback from the second teaching unit are more or less the same as before, where
teams perform better than individuals.
In general, we have an high participation (more than 130 students), teams perform better
than individuals, and peer and self evaluation results were compatible.
On the other hand, we encountered some time and space limitations, and we think that our
reward system can be improved.
So in conclusion, this approach seems applicable to undergraduate students and courses
and this educational format can be customized and adapted to different targets (by age groups,
by topic and so on) In future, we hope to repeat these two teaching
units in order to obtain more data and to perform a data analysis to identify any possible
correlation between variables and to use them in order to build new entire
courses or just part of them.
We want to design new teaching units based on Sonic Pi and TBL, for instance we are working
on a new teaching unit based on circular arrays that are a learning objective of CS1
using the ring chain data structure of Sonic Pi.
Then, we want to experiment other innovative strategies like Think-Pair-Share or Problem-Based Learning
and other programming languages with a steep
learning curve, such as Python.
Finally, this approach could also be useful for master's degree courses, and not just CS1.
Thank you for your attention!