Transcript: Teaching Python - Nicholas Tollervey
Hello and welcome to another episode of Django Chat. This week we're joined by Nicholas Tollery
to talk about teaching Django and all the many hats he wears in the community. How are you,
Nicholas? I'm good. How are you? Good. And also Carlton is here as always. Hi, Carlton.
Hello, hello, hello. Hi, Carlton. So we met, well, if you call it meeting at PyCon, though,
I've been a fan of your work for a long time from afar, and you have such a broad background.
I wonder, what's the quick version of, you know, why are you at PyCon, how do you do
all these hats, and then we'll get into teaching Django and all the rest of it.
Okay, so...
So, who are you?
So, who am I?
I often ask myself that question.
Okay, so, Thumbnail Sketch is, as a kid growing up in the UK in the 80s, we had 8-bit.
micros and i was the recipient of all the work that went on in schools then my mom and dad were
both teachers and they used to bring home the school's bbc micro and my brother and i learned
bbc basic when i don't know i'd be about eight or nine and it was a case of you know 10 cls 20
print you're an idiot 30 go to line 20 um that sort of stuff uh and then was this for you too
carlton just because i'm smiling because i'm smiling because that is exactly my experience
um ah but were you a spectrum guy a commodore guy or a bbc guy i was a bbc guy later on i was an
acorn gay acorn archimedes guy oh yeah that's okay so our stories are exactly the same i graduated
oh good cool nice to meet you fantastic it has a lot to answer for the uh bbc micro so that's not
the case in the us so that's why the uh yeah it's bbc well the thing is is that there was a report
uh published a few years ago uh the sort of 20th anniversary of this thing and uh they think that
the reason that there's so many video games um in the uk video games companies in the uk uh a lot
of it is down to the fact that you know the people who are working in them are designing these games
all started on the on the bbcs and the spectrums and the commodores and things in the 80s so uh
It has a lot to answer for.
The stuff you've done with the Microbit project, you sort of brought that to the new generation, right?
I mean, you put a physical device in the hands of, what, a million?
A million 11-year-olds.
What's the term? Secondary?
Yeah.
11-year-olds. Okay.
Yeah.
So we should quickly say what the Microbit project is here to introduce us.
Yeah, I'm happy to do that.
So the BBC, again, wanted to do some intervention in the spirit of the BBC Micro from the 80s.
So they asked themselves, well, what would it look like for today?
You know, it would need to be small, handheld, mobile, communicate, that sort of stuff.
Maybe an Internet of Things sort of thing.
And so they came up with the concept of a micro bit.
And they invited, at the end of 2015, partners to become a part of the micro bit project.
Now the BBC because it's funded from the license fee have to be very careful about interventions that they make because of course if the BBC say we're going to go into the computing education world then those companies in the UK who are in the computing education world are going to be rather frightened because there's rather a large organization with huge amounts of resources.
So the way they got around that was by having a partnership, which was under the umbrella of the BBC.
And it was individual companies and organizations such as the Python Software Foundation who contributed to the partnership to deliver the project.
And so in the spring of 2017, a million of these devices were given out to kids in the UK.
So every 11 year old in the UK got one.
The Python Software Foundation was a partner in this project, and Damien George, who's the creator of MicroPython, volunteered a huge amount of time and effort in making MicroPython run on the device, and I built a whole bunch of tools that went around it.
And there were, I guess, about 80 volunteers in the wider, mostly UK Python community, but we had some international contributions as well.
So about 80 volunteers, to a greater or lesser extent, submitting resources, code, time, that sort of stuff.
And the device itself is about the size of a playing card.
It has a 5x5 LED screen, a couple of buttons, an accelerometer, GPIO pins, a compass, and very simple networking as well that could be Bluetooth capable, except they forgot to put enough memory in the device.
Genius.
Nobody can make the damn thing work with Bluetooth properly.
Fine.
And are these available to buy still?
Yes.
Like if you wanted one?
Because lots of people are into that kind of thing.
Yeah, go grab it from Adafruit, for example.
or some other online shop like that.
But perhaps one of the things that makes me most happy about the legacy of microbit
is that you now have a whole bunch of other folks doing something very, very similar.
So you have in China there's the CenoBit, which is based on the microbit
but has rather a larger LED screen because, of course,
the characters in chinese are a lot more complicated than the western alphabet uh there's
the calliope in in germany and of course as we've been at pycon uh we all got an adafruit circuit
playground express uh an adafruit have been that that's just amazing uh that board um and and and
this sort of um python for embedded uh it is is gaining momentum and it's a wonderful thing to see
yeah and can you explain about micropython because that's a really interesting project and
you mentioned it but yeah so micropython is the creation of damien george uh damien
is a physicist by training uh he was based in cambridge in the uk um and uh he worked uh
on stuff to do with the large hadron collider and that's about as much as i'm prepared to say because
it gets a lot more technical after that and i don't know but it sounds very impressive if you
go look him up on his cambridge university website um so he's obviously an academic um
but uh whilst an undergraduate he had an interest in robotics and he wrote a very simple scripting
language for the robo world cup uh entry from his university in australia when he was an undergraduate
and uh and this involved him writing a compiler for embedded systems and things like that
and that experience uh and his interest in robotics and the fact that he was looking at
the computing ecosystem wondering well what scripting language is popular and well known
that might attract people to this sort of project led him to decide to create micropython and so
he had a proof of concept working um and then he did the famous kickstarter where he said you'll
get a pie board if you support more than fifty dollars or whatever it was and then he was
expecting to maybe raise ten thousand dollars at the most and a hundred thousand dollars later
the world obviously wanted uh micropython um and he's done other stuff uh other um kickstarters
since um but micropython is python a full re-implementation of python 3 for embedded
and microcontroller based uh devices it can run in as little as 8k of ram um and uh the way damien
has written it is a feat of software engineering really it is uh you've got yeah pretty much the
whole language there and if you're used to working in embedded systems and you're working in c and
every time you do a new project you have to reinvent the wheel and then you get python and
you have the data structures exception handling um you know the strings strings or or you know
memory management all this sort of stuff already there then uh it's a revelation when i was working
with damien he was telling me that he had sort of c programmers saying you know this thing it's
taking me like a couple of hours this afternoon it would normally take a week in c and this speaks
to micropython's power because people will often criticize it and say well you know micropython
it's interpreted it's going to be slow and what have you but um actually it's often fast enough
and it's possible to write the bits that you need to be fast in c and import them as modules into
micropython but most importantly um it's software developers who are the most expensive part of
often of of this equation and micro python makes this so easy so quick so fast uh and such a joy to
to write in this we know you know python's a beautiful language what you just said is the
story of python at every level not just micro python python regular you know you can write it
faster in go or rust or c or whatever but python will be fast enough and your software developer
of time is much more expensive by an order of magnitude and you know it's a joy to write and
you're more productive and that you know it's almost it's brilliant that at every level that
applies exactly the same yeah it's it's it's python's it's one of python's secret weapons
really it's it'll come into a uh i don't know if i was a business type it comes into a particular
market and um and what's been there before is uh it is often difficult or fiddly or time-consuming
and and python um because you know guido's great insight readability counts and and the other sort
of set of python uh tropes that we have um they really are important um and the community is
awesome as well um it's it's a fantastic community who wouldn't want to be a part of it right well
let's see i i took us a field from your background but yeah let me if i could i mean my 10 second
take and and you've given many many talks so partly i didn't want you to have to say the
same things as you know classically trained in tuba um musician then you taught and were what
head of music at numerous schools throughout your 20s yeah and then you got into c sharp asp.net
right before python yeah so uh so whilst i was a teacher uh i was using linux um to uh
uh because the windows 3.1 machine that i'd inherited from my father-in-law kept crashing
and i installed naively this this linux thing and i was using it to plan my work and do my
kind of paperwork and things uh but uh i was having a lot of time so i was aware of open
source free software um and when my children arrived i did an msc in computing as a conversion
to allow me to sort of step out of teaching and into computing because it's something that i was
interested in um and my first job was using c-sharp and because i only had commercial experience in
c-sharp the only jobs i really went for were c-sharp jobs um but my my last job as a c-sharp
developer was at an investment bank in london i was working with a bunch of quants they wanted
to script the tool that i had written for them and iron python this is i don't know 2007 2008
iron python was becoming a blip on people's radar and um microsoft had been investing time in what
they call the dlr the dynamic language runtime i have no idea what's become of that but i encountered
iron python i went to pycon the very first pycon uk uh met john pinner who gave a free
course um in in in python it was an incredibly welcoming community uh and john was uh who's
since passed away sadly um without John the UK Python community would be um would be nothing
really uh but that autumn um had a big uh big effect on me and I thought well okay I've got
enough money to spend maybe three months of my time retraining in Python doing something
uh and and uh and getting a new job in python um and uh interestingly for this podcast the the
mechanism the vehicle for that was via a django website i'm pretty yeah what was that like back
in the day because obviously i'm aware of sort of current yeah you know it feels like there's not a
lot of ways to learn django currently i mean it's growing but i mean 10 10 years ago right what was
the landscape like why and why and why django right because it wasn't necessarily you know
there were still a number of other options
that Django hadn't had the sort of supremacy
that Django and Flask have today.
Yeah, that's right.
So I knew Python was the language.
I'd used Ruby on Rails,
and Django felt close-ish
because other options were things like Plone and Soap
and things like that.
I wanted to use the web
because I'd been an ASP.NET developer.
I'd done an awful lot of work
in addition to the Windows Forms work
I'd been doing at the bank.
Um, so I, I knew HTML and, and, uh, you know, how to write a website, um, uh, in broad terms.
And what I found was that, uh, I, I just, the documentation for Django has always been
extraordinarily good.
Um, a touchstone I'd say for, for other projects to copy.
Um, and so I just followed the tutorial, wrote what I can't even remember.
It might even have been a blog.
um i think it's was it polls back then or it probably hasn't do you know carlton i assume
it hasn't changed it's been the same as long as i can remember but yeah i don't know it was some
you know something some crud thing yeah yeah abc crud thing um and uh so that took about a week
because i was whilst i was doing the tutorial i was also reading around the the technology that
i was using as well and um so what i decided to do was uh create a a job website where people could
post jobs and people could apply for them but again a simple crud thing as a kind of an academic
exercise and i found that within about three weeks i was more productive using django and python as
a beginner python developer than i was as an asp.net uh c sharp developer with you know six
or seven years experience of doing that um and this was a real revelation to me um and that's
even with um the tooling yeah because microsoft traditionally provide good tooling and oh oh do
they uh the number of times visual studio managed to rewrite my code to lighten it up um and then
You know, readability counts.
We know this with Pythonistas and then seeing
sort of code spaghetti as Visual Studio
has munched your HTML.
Yes, it's a double-edged sword.
um if i'm honest with you i'm quite old school and just use vim yeah right uh and and the tooling
um i'm healthily cynical about it um but we use it when needed um i saw that one of the projects
you mentioned the job board one of the projects you worked on was at the guardian on their dating
site right so that's i mean the logistics of that or was was that because you knew you're
gonna be working on that that you did the job board that's sort of pretty similar i mean job
Or a dating site?
No.
Sorry, that's the best segue ever.
Jobs to dating.
It's remarkably similar, actually.
Makes sense to me, Carlton.
Think about it.
You've got a person, and you need a funnel of people who are approaching you for whatever reason,
to get a job or to go on a date.
And you sift through them, and you either give them a job or you go on a date.
And then so on and so forth.
Rinse and repeat.
No, the Guardian stuff came after I'd done quite a bit of Python program.
I'd been a Python program for four or five years, maybe, when I did the Guardian.
It was an interesting place to work, I can tell you, because I was there when the Snowden revelations were happening.
Oh, yeah.
Every morning they have a morning conference, and I got our morning stand-up moved so that we could all go.
And there you'd see sort of Russ Bridger, the editor, and all the other folks in the room discussing what the day's news was.
Anybody could attend.
And it was just fascinating watching a newsroom.
And thinking about it, it was their morning stand-up, except that they were talking about Snowden and what was happening in U.S. elections or, you know, the way Downing Street was dealing with such and such a thing.
So it was a fascinating place to work.
And are they still Django Stack or something like that?
When I was there, the dating website was Django, and it was backed by MongoDB.
The main website is a Java app, which is built in-house.
I think, no, not Java.
It's JVM, so Scala is what they used.
But it could have all changed by now.
I was there 2013, 2014, something like that.
Okay.
Well, I know you're incredibly involved in Python and teaching realm, and I want to talk about that.
But I'm also you have this perspective of, you know, where do you see Django fitting into all that? Because my sense was this is my first PyCon. I know you've been to many that maybe four or five years ago, Django and the web was a bigger presence. Whereas now, you know, I went to a talk that Jacob Kaplan Moss gave and not that many people there. Fantastic talk. I mean, it was very much a secondary citizen, which, you know, I'm in the Django world. So it was eye opening to me.
I'm curious how you've seen that evolution of the web and just Python and there's hardware and what you make of all that with your experience.
Because it's all new to me.
I was like, oh, wow, maybe, like, where do they get their data for the web for all this stuff?
I was like, I don't know, somehow.
So that's more of a thought rather than a question.
I guess a question would be, when were your first PyCons and how have you seen those develop over time?
Because it was a fantastic experience and it's a little bit different than a DjangoCon.
yeah so um my first my first pycons were 2007 um i think i've i went to my first django con
it was a euro django con that had been 2010 ish 29 that's before carlton right yeah no but i i've
i was in the um the closet for years i you know i've been using django forever but i never went
to a django event until like 2017 and then i was like wow why have i not been before this is yeah
I think I was lucky because I experienced the community very early in my sort of Python story.
When I remember EuroPython in 2010, which was held in the UK, Django was everywhere because I think 1.0 had just been released.
And, yeah, Django this, Django that, Django the other.
It was all over the place.
And this made me very happy because I was earning a living making Django stuff.
In terms of the evolution, and you mentioned, you know, Django seems to sort of be a second class citizen, and also its relation to education.
I don't see that.
I think this is just a natural sort of life story, the journey of a piece of software, and that it starts, you know, as being kind of under the radar.
and then all of a sudden it becomes the next shiny new thing
like MicroPython perhaps is or CircuitPython currently is
and then things mature.
It's like the Gartner hype cycle really.
And I think Django as a project has been extraordinarily,
at least from the outside, from my perspective,
well run and steered so that you have this solid stack
that that folks um you know have no problem using it it's uh it's so good at its job it's almost
sort of uh boring plumbing it's kind of like the plumbing now yeah exactly i don't mean it's boring
you know you're boring i mean it's business as usual sort of stuff you know i want to write
a python website well my first thought is okay i'll use django for that um because and i understand
what the steps are likely to be or what the stack might look like so it's it's not an unexpected
proposition and um and this is in a sense a good thing because uh there are no surprises um but to
speak of Django and education the sort of elephant in the room with that is uh Django Girls and the
work that Ola and Ola um have been doing with that which is phenomenal um I well I it always
gives me a huge cheshire cat like grin to think of um to think of the stuff that they've done
uh but um i think the genius that they have is they realize that people want to be able to write
their own website because it's a kind of a hey mom do you see what i've built and you can point
your granny or your mom or your dad or your uncle or your son or your daughter to to this thing
it's a very simple blog so people get it and in in a day you've you've um you've created something
that you can feel proud of it feels like i don't know and i've been a mentor on several jango girls
um but looking at the at the end result at the end of the day people feel proud of their work
and what's more important is that people can see how they might change their blog and customize it
and that's what you want is that they've been given the foundation they've got the skills now
to start experimenting and they feel ownership over this code so um so janga girls forever that's
what i say yeah yeah no entirely entirely it is too i just i did mentoring at janga girls barcelona
and yeah kind of two moments that really stuck out what stuck out for me stuck out what's that
um stuck out for me one was um when they cracked open the shell and uh you know we've created these
models and all of a sudden they're in the shell and they're using they're querying the orm and
And then all of a sudden they're like, they're flying the ORM and you see the spark and they're like, ah, and it's like, yeah, you're driving it.
And that was magic.
And then the second for my group was towards the end of the day when they started to push beyond and they said, oh, I could put a map in here.
And, you know, they've just gone on to Google and, you know, got the snippet from Google and embed it in the HTML.
And it's like, look, I put a map on my blog.
So what I really like, I'm going to step back and do a kind of a meta thing here.
It's not only that mentors at Django Girls see the sort of the joy of coding in the Django Girls who turn up to learn.
But what I like to see is what you've just done, which is seeing people who are usually professional coders who have been asked to mentor at Django Girls.
Everybody has their favorite story about that time when, well, you just said, I could put a map in here, I could do this thing.
So it speaks to me because having been a teacher, I know what a rewarding experience that can be.
And I think that as software developers, as part of our career development, perhaps at some point, we're always going to have to mentor somebody else, a junior programmer or a new hire that needs to understand how the system works and get up to speed or repair programming.
you need to develop the skills of being able to explain and listen importantly listen um and uh
and listening to you just now was uh you know another one of those moments so um it's good
good that this happens jango girls facilitates so much good stuff in lots of subtle ways
yeah more power to it so let's maybe here how's this for a segue so
mu i want to ask about that because seamless so see carlton we're learning something over time
so this is awesome because one of the takeaways from anyone who's tried to use python is it's
can be challenging to install and everyone's on different computers and so this is not just web
based but uh deliberately simplified right so we'll link to the website and you you want to
yeah so what is this thing it's not web-based it's a native code editor oh oh sorry um don't worry
um although i have i'm not afraid to be ignorant on the podcast no no don't worry um so uh it was
written as uh part of the pss contribution to microbit um i wrote a browser-based python editor
for microbit um and being a good engineer i i hope i i took it out and tried it out on teachers
and students and developers and things and the feedback i got was whilst it's convenient to have
a python editor in a browser actually um because of the limitations of a browser being a sandbox
and things we can't connect to the repl through usb serial or you couldn't back then um and you
couldn't do this that and the other and so i sat down one sunday afternoon thinking you know how
hard can it be to write to write a simple codex for for users you know i've got pycutes that's
a mature platform there's q scintilla so i could use that as a widget uh we just need some you know
new load save run type buttons that's all you need and uh and mu was was born and people started
using it much to my surprise and after a while uh people started asking well could rather than
just being a micro bit editor native editor could you make it a generic python editor and so the
The Raspberry Pi Foundation were very gracious and supported me in a block of time
where I was able to do the refactoring and turn it into a generic beginner's Python editor.
So it also has a debugger and the REPL is an IPython REPL and so on and so forth.
And so it's sort of grown from there.
But what we did, or what I did at that time, is went around lots of schools to observe how teachers were using the Python stack.
And they were using IDLE.
And IDLE's great because it's always going to be there.
But it's based on TKinter, so it really looks like it's from 1997.
This is off-putting to teenagers who might not be used to that sort of GUI widget set.
and there are other sorts of uh how can i put it pedagogical problems with idle kids are forever
losing the two windows behind each other yeah and so uh you know idle is an amazing tool but
you know there are certain ways in which it could be improved or it it's not it needs ux love and
things like that so i did all that stuff and um and the next generation of mu the next version
of me sorry was was created and the the other interesting revelation was that i i got to to
meet with uh with school network admins um who generally live in some dark room in the basement
of a school and even the teachers only hear of them via rumor but i managed to find several of
them and entice them with a cup of tea to just have a chat with me about what their work entailed
and essentially and unsurprisingly it was just make it as easy as you can for us to be able to
install this thing in such a way that the students won't be able to take down my network
so so mu actually if you use the package version of mu the installer for windows and os 10
comes with python bundled in it so it doesn't use system python if you have
oh already um because a lot of schools the the attitude of the network admins was you know i'm
not letting children anywhere near python on my shiny school network it's taking me years to make
it like that and kind of a classic aside here is uh i was at a school in northampton recently where
um the the network admins you know python was a was like a swear word for them because a student
had worked out that in the sys module
you could automate the shutting down
of the operating system.
And so they'd written a little script
that did the equivalent on Windows
of shutdown minus H.
Now, you know, hard shutdown.
Just close everything, switch it off.
He emailed it to a friend.
He double-clicked it and his machine switched off.
And if you're 14 years old, this is hilarious.
So he switched his machine back on
and then emailed it to everybody else in the year.
this is the second kid not the kid who originated the script um and of course uh what happens is
that everybody in his year clicks this thing and people were losing their work um because they had
word open or they were on a website filling in a form or something like that um and so i pointed
out to the network admins that actually this kid should be congratulated because he's only
automating something that you know you're allowed to do anyway you can click start and then shut
down to close the machine down it's just he'd done what any programmer does which is feel a
bit lazy and automate something so it was a good life lesson but but what i'm getting to is that
network admins um they are small c conservative and very very risk averse because their job
depends on it really um and so putting a programming language that makes it easy for
children to um do interesting things with computers it's like their worst nightmare
um so uh what we do with new is uh python's bundled with it and so the kids can't actually
they can only use python via mu so um and it also means that the network admins if they want
to install new on um a computing suite or several classrooms uh they only have one thing to install
they don't have to first install python then install the dependencies and then install new
it's just a single package so um i might be laboring a point here but this is so incredibly
important for the folks who actually administer things in schools um that is just this is something
that python more generally could learn from as well oh yeah people come to it and it's like
install python ah okay that's non it's still non-trivial and then you know yeah packaging is
is hard, especially if you want to create a standalone
Python app on the desktop.
Now, I realize that that's not a typical
python app you know i'd say maybe a typical python app is say for example a django website or
something like that in which case you're accessing the python assets through a web browser um
interacting with the website but um if you want to have a desktop app um you know russell keith
mcgee's beware uh is an astounding project and i recommend uh everybody go listen to his keynote
from pycon 2019 this year but he's um his keynote yeah oh yeah you just mentioned it his keynote
here exactly about this is like what happens when you know everybody hasn't got a laptop where you
know we've got a tablet and well you know is python going to be available on that tablet can
i code in python on that tablet and if i can't am i going to choose python yeah yes well i was
talking yesterday somebody wanted to cross platform mobile friendly app and essentially
uh the simplest way to do it is to um shim a website within an app you know you get various
frameworks where they uh they use the browser uh as a way of delivering a mobile app and so
you write javascript and html and then it's packaged up for ios and ipads and android and
things and uh well where's the python story in that um we're in danger of missing the whole
mobile thing and um and packaging and embedding python within your uh application assets so that
it runs properly that's that's a non-trivial problem and i spend i have spent an inordinate
amount of time feeling the pain of packaging new so um so the teachers and network admins don't
have to uh you know uh that they get an easy story at the end of it and it would be so good if we
could do the same sort of thing for um uh if there was a well as they say in the center python there
should be one and one obvious way of doing it there needs to be a standard story that you know
oh i want to i want to i want to bundle python here's how you do it yes exactly a tool or a way
of doing it that um that's a no-brainer that covers most you know most things apart from the
difficult edge cases so you you've got sort of the 80 20 rule going on there as well so for most
people it will work um and run russell is um is is making significant inroads into that his briefcase
uh project which is part of beware is something that new uses um and uh it was just beautifully
simple to to package things for for os 10 using using keith russell keith mcgee's work and uh he's
put a huge amount of effort into it so kudos to him he deserves all the respect and um and
celebration that he's getting at the moment and he needs help as well financial support and uh ways
of folks paying for the work uh that needs to be done to make this fundamental sort of infrastructure
of work but now i'm just echoing his keynote and he does it so much better so go and watch his
keynote he does he did he sets a high bar yeah we'll link to that yeah that talk i was able to
be in the room for it um well so one of the takeaways i had from uh well actually i wanted
to say so that teaching tracks at these python events because um i know you were involved with
setting up the first one at pycon uk right that's right yeah um and then so one of the things i
heard teachers say again this won't be new to you is that they keep repeating the same content
over and over again yeah and i know you have what are your thoughts on that i don't want to
so we're going into code grades territory here aren't we yeah i'm staring at the code grade
site so i was sort of so i wanted to get at that too um i'm gonna use a friend of mine as a typical
example and um she's uh she's called dawn hewitson and she is the lead tutor the the person who runs
the course um at edge hill university in the uk uh that trains computing teachers and ofsted we
have this thing called ofsted in the uk it's the office for standards in education and they
are basically the school inspectors and dawn's course is rated the highest in the whole of the
uk for computing teacher education and dawn made a fantastic point a few months ago when we were
chatting which was that we have so many beginner python things um you know make an led blink
say hello world make a simple blog that sort of stuff and yet as professional software developers
um the sorts of learning that we do are perhaps based on a in-depth technical discussion on stack
overflow or reading something on read the docs or auditing the source code and what have you
and so in this continuum of educational resources everything's on either side there's nothing kind
of in the middle how do you get from one end to the other and this reminded me of the problem of
how you train musicians you know how do you get the five-year-old little girl scratching away on
the violin and entertaining the local cats um to uh become nicola benedetti a sort of a concert
uh violinist virtuoso violinist um you know at some point she got a little bit better and then
a little bit better and then she was kind of average and then she was good and so on and so
forth people have to go through this process you're not just born a violin virtuoso you have
to figure out where to put your fingers and how to hold the bow and things like that and so the
way we do this in the uk and it's a very successful system it's been around for about 150 years
and this also speaks to the fact that music education i have 500 years of music education
i can draw upon whereas in programming education i don't know 20 years we've only been programming
doesn't change every nine months yeah and there's been there's been enough time in the world of
music to have revolutions counter revolutions and consolidations and different schools of
thought and so on and so forth and that's not so much the case in programming and so i i being a
music having been a music teacher i thought well what could i borrow from the world of music and
transpose um no pun intended transpose into the world of technical education um and so this notion
of music grades uh is is is the first thing that happened although that it's a rich vein and i have
lots of ideas about how we could use techniques using music pedagogy to help in technical education
computing education but music grades work like this grade one is easy enough that most people
who practice semi-regularly will be able to take a grade one after only a few months okay
and what happens in a grade well what you're doing is you're practicing what a musician
actually does you go in and you give a performance and you have to give a performance that has three
pieces in it and then you're also asked to sight read music which is something else that musicians
have to learn to do and then you get some oral tests so we sort of check out your listening
ability and you might have to sing back as well because musicians are always doing that sort of
thing and finally you might be asked to play some scales and arpeggios or an orchestral excerpt or
something because scales and arpeggios are like the lego bricks building blocks of how you play
and perform your instrument and so for grade one you have three buckets containing i don't know
about 10 pieces each and you choose one piece from each bucket so that you'll get
a nice little recital out of it and those pieces are appropriate for grade one so grade one is
very very easy okay and then by the time you've taken grade one you've you've got a feather in
your cap you've had some feedback from the examiner who listened to you this examiner
is a professional musician they're probably an expert in your instrument as well and you get a
mark so you can see which aspects of your performances were good and which need work on
and that sort of stuff and you get written feedback as well that tells you uh in an encouraging and
a supportive way uh the sorts of things that you should perhaps think about or well done in that
first piece you really set the tempo and the mood really well i really enjoyed what you did at letter
j but think about the tuning at letter z or something like that it's that sort of feedback
letter j i like that yeah well these are rehearsal marks in music um so we know where uh we know
where we are so we can talk about a specific bar in a piece of music and so you take your grade one
And then grade two comes into view.
It doesn't seem so impossible because you've acquired the skills for grade one.
You've, as it were, you've passed.
No one could take away from you the fact that you are now a grade one pianist or trombonist or, you know, flute player or something.
So you take your grade two and so on and so forth, rinse and repeat until you get to grade eight.
And grade eight is kind of, I don't know, like black belt at karate in music.
One of my lasting memories of Sixth Form is all my musical friends stressing to death about their grade eight, you know, whatever.
Yeah, well, if you get to grade eight, so to audition for Music Conservatoire, you need to be grade eight.
The important thing is that in music education and in the wider musical world, folks will say, oh, I'm grade six at such and such a thing.
And people kind of know what that level is.
And so if you're joining like a youth orchestra, they might say you need to be grade five or above.
And so it's also a signal to those people who might not be confident, but they are grade six.
So they're one grade better than the minimum requirements that perhaps maybe I will audition for it.
So it's also important because it's trajectory as well.
You can see where you're going to.
You can see when you go to music school on a Saturday morning and you're only grade three and you see the grade eight sixth form as your buddies from school doing amazing things.
You can see what you're aiming for and what sort of skills and what sort of music you're playing and how cool they sound when they do that electric guitar riff or they're playing in their jazz combo or the string quartet plays this beautiful piece of music.
And so I thought, well, if we were to do that with programming, what would that look like?
And this is where CodeCrate comes in.
And like music, it's eight grades.
What I wanted to do so far in its early days, I wanted to test whether the idea would work.
So before Christmas, I helped a cohort, a handful of folks, learn grade one Python, which is very basic Python.
what they were asked to do was prepare a project of their own devising so they had ownership of
this code it was something that they were passionate about or it was a problem that
they wanted to solve or in one case it was a game that they wanted to play
and they needed to show some core concepts that matched to the level of attainment for grade one
OK, so we need to see that you understand what loops are or that you can call functions or you understand how assignment works.
These are very basic things. But with that sort of stuff, you can make very simple projects.
And then I asked a friend of mine, Tim Golden, who's a core developer, Python core developer, to play the part of an examiner.
And these rather nervous beginner programmers came along and they did two things.
they presented their project to Tim one-to-one and it was like a code review where you stand up
and you say this is my piece this is my this is my project this is this is why I wrote it this is
how it works let me show you the code and Tim would ask them questions and make sure that they
were sort of ticking all the boxes for the requirements and then the second thing that
they did is they did a paired programming task where they were given a short fragment of code
And it had two errors in it for grade one, a syntax error and a runtime error.
And they had to just sit there and debug it together so they could ask questions of each other.
But it allowed him to get a feel of how this person approached code, watch them make mistakes, see what sort of questions they asked,
see how they were actually getting into the code and interpreting and reasoning about it.
and then at the end he filled in a google form um and uh they would give marks and uh
and then and that was an entirely positive experience for them they would arrive very
nervous they would go in and do their stuff they would come out and sort of wipe their forehead and
go i'm pleased that's over and i say well how did it go and they said oh i forgot about this or i
didn't do that you know you go through all the things that you wish you'd said um and then
they'd go but actually the demo went really well and he laughed when my game started and he really
liked the way that i used the the loop within the loops to do the thing so actually it wasn't that
bad um and when we uh put together the feedback for the people who took the grades so that they
could see um how their project had gone and how their pair programming task had gone um the feedback
we got from that was was universally good because they really liked the fact that somebody was
telling them where they were making mistakes giving them ideas about what they should improve
it allowed them to see where their weaknesses were and things like that and so all of them said well
when can i do my next code grade and so since the new year you know grade one python before christmas
was me making it up as I went along.
Now I've been working on eight grades for Python.
You've got eight?
Go on, sorry.
There are eight.
There are eight.
There will be.
There are?
Yeah.
There are eight.
I would say I'm about 60% through this process
of making the syllabus for it.
Wow, is that...
So there are eight grades.
When you write a syllabus or educational resources,
you don't just make it up as you go along.
You have to make sure that things line up in the right way.
And you also need to make sure that you revisit things as well.
So I've been sort of going back to my geeking out as a teacher,
putting on my teacher hat and thinking about when I was writing a school curriculum for a music department
and thinking about and going through that sort of a process,
analysing what sort of knowledge, what sort of skills, what sorts of social interactions,
because this is important in software developers,
should the people taking grades encounter
and when should that happen on the story
and what needs to be in place before they can get to that place.
So the way I did it was I started with grade one.
What would the first step look like so that it was appealing to people?
And then I did grade eight, you know, what's the end point?
And grade eight, if you're grade eight, you are a competent junior developer.
You understand GitHub. You understand how to merge code.
You understand object orientation, you can write unit tests, you can run a test suite, you know what continuous integration is, you can take part in the code review, you have written a website, you have done all this sort of stuff.
So somebody who's turning up to an open source project or their first job in code and they have the skills necessary to build on those.
about this idea is um the point you made earlier about having the confidence because yeah they're
only asking for grade five and i'm grade six and so many people i see uh are unwilling to bet on
their own ability and they you know and that's natural and it's you know the imposter syndrome
is a real thing but yeah you know to find it to be given an objective measure that helps you
overcome that is just phenomenal fantastic it's um well thank you it's uh imposter syndrome as you
say i mean i have that um you know i'll be honest i'm a classically trained musician um
and whenever i'm stood up i'm forever thinking just when are they going to find out
you know i might be really good at playing tuba but um you know this programming stuff
is stuff i've picked up as i've gone along um really to be honest with you um i think musicians
make the best coders though i mean here in here in boston there's any number of you know there's
The Berklee College of Music, you know, folks who've, you know, who self-taught and just they have, as you said, they have that structure.
They had the idea of dedicated practice.
Yeah.
And just that progression, right?
Because when I'm, yeah, no one can even say what level you're at.
I mean, at PyCon, I met a number of people who'd read my book or were learning Django and they just have this sense of, they just don't know where to put themselves.
And so, yeah, that leads imposter syndrome when it looks like an ocean of knowledge and there's no, yeah, it's such a brilliant idea.
Yeah, well, I had a conversation yesterday where I was talking to a friend who is an exceptionally talented software developer.
She's a very talented software developer.
And she said to me, she confided in me, she said, you know what?
I'm not sure I understand this or that about Python, but people think I do.
And it's like, oh, imposter syndrome is terrible, terrible, terrible.
We were sprinting on something.
And at this point, she's involved in this particular project.
Some random person came up, as they do in sprints, and said, hey, you know, I've got this problem.
There's a thing that does a thing, but it doesn't do the thing which I was expecting to.
And my friend said, ah, yeah, that's easy.
What you want to do is blah, blah, blah, blah, blah, blah.
And beautifully and succinctly gave the technical support required for this person to be able to sprint.
And I said to my friend, you know, you know what?
How can you possibly say, you know, you're worried about, you know, your technical competence when not 10 seconds later,
you beautifully answer this email in this um this person's query in the sprints in a supportive um
and technical way um and so the code grades are uh it's like an initiation you've you've got your
grade five no one can take that away from you and by taking grade five you've shown you've done
a b c and d um and so uh hopefully it will be a confidence building thing because like music you
need to have a lot of confidence in in coding as well um it can be quite a frightening proposition
yeah it can i have to ask one question about it in in the music grades there's this um great
barrier this great milestone which is the grade five theory test so is there an equivalent of
the grade five theory tests where you have to learn about binary trees or something silly like
that no reverse a link list yeah yeah exactly on a whiteboard only on a whiteboard not in the
computer uh no so the other important aspect of this is that uh the syllabus curriculum whatever
you want to call it is written it's not just me who's writing although i'm doing most of the
legwork i'm getting help but it is professional working jobbing python programmers who are
contributing to what they believe uh should be in code grades right good rather than a professor
of computer science doing you know binary tree search or you know um you know uh i can't think
of something now um well you just did you just did it was a telco recursion or something like
that you know you're you've got to learn about this stuff and you do have to learn about this
stuff but this is more practical focused it's about giving people the nuts and bolts and skills
and the social malls and conventions so that they can engage uh initially with the python community
and become become part of it and feel that they have the technical chops to be able to do the
things that they want to do that they're interested in doing themselves it's a kind of an emancipation
exercise yeah i love that roadmap i mean i often think of that when i'm teaching of you know for
web right because there's so much involved with web and you know i think you mentioned you'd already
sort of learned some of the basics of web stuff but you know some people as people do come to me
and say i don't know anything i want to build a website you know what is that progression what
is that hierarchy you know if i can point to things and also as a teacher like it's so much
more helpful to agree upon the concepts that we're going to cover i love that idea because
when people come in and volunteer it's like yeah they're gonna you know hop into vim or something
but if it's like nope we're talking about this discrete level of concepts yeah that really helps
yeah helps volunteers that's a really great point because in the uk and i'm imagining all over the
world um computing teachers often don't have a computing background they are business studies
teachers who have been co-opted into teaching computing and they don't know anything about
perhaps some of the more technical aspects of that subject because obviously computing isn't
just programming it's there's a whole bunch of other stuff that kids do but in the uk
there's a a large part of it though is learning to code and you have a bunch of teachers who are
like well they're not professional coders they they they've not seen what it is to be a coder or
experienced writing a piece of code and releasing it and all the life cycle of of what code is and
so um so being able to share in a helpful and constructive way what it is that software
developers what coders expect coders do is useful for teachers because then they can start to write
resources that that speak to that that that meet these requirements um it also shows teachers well
what sort of things what sort of skills do i need to become a computing teacher as well um yeah yeah
i found that again picking up coding well i think even later in life than you i mean the the hardest
thing was a lack of good educational resources and a sense of progress it's all just who knows
and and i think maybe combined with the fact that i mean i also play musical instruments my daughter
is sick so i'm hearing her scratch out these scales yeah um you know there's in a way as a
as programmers we sort of write the script and then we don't practice the scales yeah right like
as a musician you know a professional musician spends hours every day and you kind of you're
like oh i do know how to play this like it makes it better but in programming at least it's i'm
tempted to i've completely forgot something i learned because i just wrote a script and now i
move on and yeah so that sort of yields the imposter syndrome because i go well i haven't
done that thing in a year yeah right like i you know that's sort of i think expert level is you
you have a concept and you've done it once but you're like well i gotta go look it up you know
i don't i can't sort this all in my head whereas you know where it's a musician you know right it's
whatever you know it's half the day is is the fundamentals a violinist anyways my i know some
those professionals you know they're just doing you know so i sort of wonder what is that you know
i know there's like code katas and stuff but i think that's perhaps a difference between music
and coding though is that as a when i was playing the tuba professionally i kind of knew what sort
of things i would be doing and the scales and you know all that sort of stuff and the breathing and
the posture and the getting yourself into the right mental state as well that music is an
incredibly intense experience when when you do it properly um at a high level um but for the nature
of our job in programming is that we are going to be ignorant of most of our subject area you know
i i know python relatively well but not as well as many other people but i don't know go i don't know
um you know rust i don't know c plus plus or anything like that um i don't have although i
have an msc in computing that was um uh that wasn't a an amazingly technical degree so i don't
have like a computer science background i don't know about the academic aspects of this um and
like you say there's kind of a half-life of knowledge you know i learn about this thing
and then i met somebody who is the chair of the xmpp foundation you know jabber that sort of stuff
um at pycon a couple of days ago and i said to him um oh we used uh xmpp as a protocol for some
federated system i built in 2012 or something in the start of that i was working for he went oh
right oh excellent so did you use this this this or this and i was like well i have no idea
i remember xmp was really helpful in this particular problem but um so being ignorant
is part of our job um and knowing knowing that you're ignorant is an important aspect of that
i mean socrates said you know why is this today that no they know nothing um i think that holds
very well for programmers and one one good test of a program is how quick they can get the docks open
yes yes exactly exactly exactly um and i think as programmers mature i know i'm speaking for
myself only here is that i've done enough different things that i know you could potentially do a
thing and i once did a thing like that and so i have in the back of my mind the right words or
concepts to google or or where the documentation might be or the name of the person who was
maintaining that library so that i might be able to drop them an email because we once had a beer
at pycon three years ago that sort of thing um but it's certainly not you know i have now retained
the specification for xmpp um from 2012 um that's certainly not the case um and it's kind of
strategies that might work you know you sort of as time goes by you kind of learn to to start in
the right way it's not that you've got a solution but you kind of think well that kind of shape is
going to be about right here and this kind of shape will be about right there and a little bit
while later it fits together and that happens and that's nice yeah but there's also scar tissue i
mean that's the i was talking to uh yeah some educators and they were telling me things they
wanted to build you know they didn't know web but they knew python things they wanted to build and
i'm just sitting there thinking oh my god you know they're like i'm in a third-party api call this
enterprise system and i'm gonna have 12 of those and you know it's it was great for me i was like
i love your optimism and your ignorance right because it may have gotten better but i'm just
seeing all the problems. And there is a little bit of a, you know, Eeyore aspect to programming
where you're just thinking of problems. So I think that, you know, that scar tissue, I love having
those conversations with people who don't know anything because they, you know, they open my
mind and they're so excited. And, you know, I usually in those cases, I can sort of say, well,
maybe let's, you know, let's narrow it down a little bit. But just that, like, anything's
possible, right? Instead of as we do go, oh, well, I felt, you know, I wasted two weeks fiddling with
that thing one time and i don't want to go anywhere near that again yeah i i damien micropython damien
um on several occasions on the micro bit project uh i'd say you know because i'm not an embedded
programmer you know would it be possible to do this and he'd say with a sort of a wistful smile
you know nicholas anything's possible with a computer it's just whether you've got enough
money and time um is the answer uh but that what you've just spoken of again speaks to education
here because as software developers we are constantly learning and forgetting and reconciling
and um and retrieving and um synthesizing knowledge and skills and things um it's just part of the job
we're always learning there's always a new api there's always a new technology there's always a
new cool thing um and we're also and this speaks to your point just now we're kind of learning how
to learn and that's i think what i'm trying to do with code grades is give people a safe place
where they're learning the right sorts of learning skills so that they can become effective by the
time they're grade eight and understand i'm new to a project i'm going to read the docs i know
where to look i know how to ask for help that sort of stuff yeah and the ability to pick up a new
language or a new library or you know how to get through the readme how to get it installed those
kind of things that you pick up and you're like i can get started with this new technology because
i've done it lots of times not with this one but with similar so if people are interested in uh
in mu uh also linked to the made with dot mu website as well so that's a blog where we we put
all the goofy projects that people make with new or things that um that that folks have done with
you um i would say uh to developers if you have an opportunity to volunteer in a school or just
go in for an hour to tell people what you do or you have kids and um and the teacher's asking for
help go and volunteer uh if you can because it's an extraordinarily um rewarding experience to work
with with beginner coders like you say there's the there's the perhaps naive optimism um but also
there's the energy as well and sometimes if you're a darkly cynical eeyore i like that i'll use that
again then uh then it can't it's a yeah yeah but it it's it counterbalances things it's it's like
aristotle you know when he's talking about you to be brave means to be a little bit foolhardy but
not too foolhardy and careful but not cowardly coward like you know you've got to kind of try
and find the the mean as it were in this and so you do want to be naively optimistic in some sense
but at the same time that needs to be tempered with a sense of and how long is that going to
take you then you know so uh you know and you learn that as you as you go along and working
with other people especially beginner programmers it's a great way to kind of bring those sorts of
feelings to the fore um and finally it's an unambiguously good thing to do yeah well in
teaching is i mean in some ways too i see this with you know you sort of get used to doing
certain things but like having as a parent having kids you know my daughters will make brushing
teeth so much more interesting and creative and challenging than i thought it could be and you
know that's what and so it just makes it interesting right instead of me just you know zoning out it's
like oh i never thought about it yeah that way yeah exactly exactly the capacity of uh of
creativity um when people see an opportunity um is is wonderful well thank you so much for coming
on we'll link to all these things we've mentioned um and if if people want to follow up to help is
there what's the best way for them to get in touch with you okay so if they have questions about code
grades um uh there's a form that they can fill in and uh when i'm ready with more information i will
just ping people or they can reach out to me on twitter for mu we have github code with dot mu
is the user-facing website but mu dot read the docs is if you're a developer is where is where
you can go if you want to get involved and help there and i think that's it yeah super great all
right well thanks so much for being on yeah thank you very much thanks for having me