Translator: Denise RQ Reviewer: Lena Clemente
Hi.
Hello.
Computing - it's become part and parcel of our daily lives
from how we communicate with each other
to how we consume media to how we find a ride to the airport.
Computers are obviously everywhere in our lives.
What may not be so obvious is how computer programming
has been integrated into how we work, how we do research, and how we create.
Often times, we have to tell computers how to solve specific problems for us
to make our lives more efficient, or more informed, or better in some ways.
That means programming them.
Programming is becoming more and more common
outside of the typical computer science sphere.
For example, I work with a biologist,
and she writes her own software
to run experiments or to analyze data.
If you are a graphic designer,
maybe you need to code to make an interactive animation or installation.
If you are a small business owner,
perhaps you need the ability to make a custom website
to have a greater online presence.
In fact, the Association for Computing Machinery recently said
that by the end of the decade,
one out of every two science and technology-related jobs
in the entire country
will be in computing.
In other words, computer programming is becoming a new literacy
for the 21st century.
While programming has become integrated with the way that we work,
these are the faces of the programming literates in the US:
overwhelmingly white and Asian males.
Whether that's because perceptions of programming culture's been negative
or viewing programers as nerdy or uncool,
a vast portion of our population,
especially women and many ethnic minorities,
simply aren't interested in learning how to program.
For example, 57% of the undergraduate degrees awarded in the US are to women.
Yet, only 18% of computer science degrees are awarded to them.
Similarly, 13% of our country is African-American,
yet, less than 7% of computer science degrees are awarded to them.
In other words, we have to do something
about the socio-cultural barriers
that are threatening to leave vest majorities of our population behind
in a society that's becoming increasingly demanding of technological literacy.
Researchers look at addressing this
not only looking at what we teach in Programming classes
but also how and what context we teach in.
The most successful projects have been ones that introduced
a motivating context into programming like artistic expression.
For example, Ron Eglash's work in ethno-computing,
where he takes culturally-motivated practices like hair braiding
and mixes it with mathematics and computing concepts
for African-American students.
Or MIT's Scratch, which is used by young learners
for introductory programming concepts related to making interactive animations.
Or the LilyPad Arduino kits,
which is this really cool combination of textile design and computing.
However, as successful as these projects and others like them have been,
none of them've had that broad appeal across ethnicity and gender
for high-school students.
So, my colleagues and I have considered this connection
between creative expression and programming
and have considered music
as a potential solution with a broad appeal.
Music is ubiquitous across cultures and socio-economic barriers,
has a rich relationship with technology.
Millions of people across the world use Hobbyist software for making music
like GarageBand,
while famous musicians like Jay-Z, or The Beatles, or Radiohead
have a rich history with their music-making process
being intertwined with new technologies.
Music has been integrated with learning how to program before,
but there is always this significant barrier
of having to know music theory first.
It's very difficult to express yourself with code in music,
if you don't know theory
about how to write with individual notes and chords.
We asked, "What about music remixing instead?"
Music remixing is when you take small snippets of audio
from different samples and different songs
and string them together to make something new,
like if you've ever heard Justin Bieber mixed with Dubstep music
or Led Zeppelin's drum beats that is in your favorite Dr. Dre tune.
Music producers can change how these samples sound
by adding effects to them,
making it sound more distorted, or echoey, or teenier.
You can also use a drum machine to add customed beats
to the remix that you are making.
Maybe, combining programming
with this composition of samples, beats, and effects,
could potentially sidestep this issue
of having to learn music theory beforehand
and getting learners upfront coding and expressing themselves quickly.
This is exactly what we have been working in
in a learning environment called EarSketch.
EarSketch is a free to use, online tool
for the combination of music remixing and programming,
which we call computational music remixing.
EarSketch has an online sample library
that has thousands of samples from a wide variety of genres
produced by music industry professionals;
students can also record their own samples on the site
or even upload stuff they've recorded elsewhere.
Students are really actually excited about laying down a few tracks
by writing code,
and then, recording their own vocals or instruments on top of it.
It also has an online curriculum
that chapter by chapter, intertwines with this idea
of making music with introductory computing.
The idea is that if you're a student,
and you've never programmed or made music before,
you can sit down with your sketch and start learning to do both, in tandem.
Finally, there's a programming environment - seen at the bottom here -
where you can write in real programming languages
like Python or JavaScript,
and an audio window, here at the top,
that shows the music that's made by it.
So, one of the big design challenges in building something like this
is to have an authentic connection
between making music and programming.
So it's on us to show how programming can make music composition easier,
more efficient, or even be more creative and expressive
than making music without programming.
Let's step through a few examples of this interconnection
between music and programming in EarSketch.
One topic we cover is data structures.
Data structures are like the organizers for your program.
So just like in your closet, if you have a specific place
for your sweaters, your favorite jeans, and your ties go here,
data structures are the way that programs store information
in a way that makes sense to us.
If you want to write a program that uses data structures,
it's just like writing a set of instructions
for how to put away clothes in your closet.
In the first slot go the blue jeans, in the second slot go the sweaters, etc.
In programming in EarSketch,
we often use data structures
as ways of holding collections of samples or musical rhythms
that we want to use in our piece.
This example here, from this student - at the very top -
you can see a couple of data structures that are holding the samples
that they are going to compose with later on, in the code.
Randomness -
randomness is a very common introductory programming concept
that focuses on giving the computer the ability to make unexpected decisions
by basically, rolling dice inside.
Just like if you are playing a board game
and you roll dice for something unexpected to happen,
or maybe consult your magic 8-ball to decide how to get to work today.
Randomness in EarSketch is great for when you want to make a single program
(Music sample playing)
like this one
(Music)
that generates rhythms.
When you run it multiple times,
the computer rolls the dice and generates a new rhythm
every time that you run it.
So you can have one program
and have multiple decisions being made randomly inside of it,
and have something new come out of it.
For example, what we just heard here,
if we literally, don't change the code and run it again,
this first rhythm track will visibly and audibly change.
(Music sample playing)
The last topic we'll cover is user-defined functions.
User-defined functions are just like having a recipe card
for something that you use a lot in recipes that you write.
So let's say you use pesto a lot in your recipes;
as opposed to writing it down how to make pesto in every single recipe,
you have one card that says, "Pesto - here is how I make pesto,"
and whenever I want to refer to it, I just write 'pesto' in my recipe.
So user-defined functions are exactly the same thing in your program,
where we have some snippet of code that you want to use in lots of places;
instead of writing it down every single time,
you just refer to it by name, like your pesto.
So in music composition in EarSketch, one of the things that we do
is focus on using user-defined functions for musical structure, musical sections.
You might have your chorus code, your verse code, and your intro code,
and whenever you want to have that stuff laid down on a track,
you just refer to it by name: "chorus", "chorus", "verse," etc.
There are these kinds of connections that we make
like through randomness or user-defined functions
that really start to show students how programming with music
can be more efficient, or easier to do in some ways, or more expressive.
The success of this work has led to over 30,000 learners so far
using EarSketch in a variety of contexts:
in massively on-line courses,
in AP Computer Science classes across the country,
after-school workshops, summer workshops, etc.
Our findings from using this have been overwhelmingly positive
in terms of changing student attitudes towards computing,
addressing these socio-cultural barriers that we are talking about,
especially for these underrepresented groups.
So the biggest effect that we've seen
has been for women, African-Americans, and Latinos.
We have students saying things like, "I liked learning how music is made
and how we can learn and get good at doing things
that people in the music industry do now."
Or "I enjoyed making my own music tracks
that people, including myself, actually liked."
Or "It gives me choices for college.
Like this is something I would actually like to do for college,
and I'd actually like to do probably with my life.
Yeah, I would love to do it."
Hearing this stuff is the stuff that keeps us going.
By learning how to program, you are not just learning how to code.
Students are also learning
how to think about the world and solve problems in new ways.
For example, learning how to program helps you understand
how to take big problems and decompose them
into smaller and smaller problems that are easier to solve.
Or how to think algorithmically;
which means the ability to write down specific instructions
on how to solve complex tasks.
Broader lessons in computing can even educate us
about Internet privacy, copyrights,
or the socio-economic impacts of technology.
(Music playing)
A student, not unlike the one who composed the music
that's playing right now,
recently told me how he liked using EarSketch so much in this class
that he actually brought it home to use it in his band with his buddies,
and that's the kind of stuff that really represents
the motivational power of EarSketch.
We engage learners in ways that matter to them.
If we have students who are doing computer programming in their classes,
and bring it home to share and show off to their friends and family,
then we've known we've succeeded in ways that we hadn't dreamed possible before.
Through this, we are generating--
we are creating a new generation of learners
that is engaged in programming
because they are given a tool to express themselves personally.
By doing so, we are broadening the future possibilities they have
for the kinds the problems they solve,
ideas they may have, or careers they may go into.
By doing so, maybe if EarSketch and other projects like it
are as successful as we hope,
then we're creating this new age of the programming literates
that is is far more diverse than anything we have now.
Society, in turn, can benefit
from this increased diversity of thought, values, and culture.
That is our ultimate dream.
Thank you.
(Applause)