Summary
With the increasing role of software in our world there has been an accompanying focus on teaching people to program. There are numerous approaches that have been attempted to achieve this goal with varying levels of success. Nicholas Tollervey has begun a new effort that blends the approach adopted by musicians and martial artists that uses a series of grades to provide recognition for the achievements of students. In this episode he explains how he has structured the study groups, syllabus, and evaluations to help learners build projects based on their interests and guide their own education while incorporating useful skills that are necessary for a career in software. If you are interested in learning to program, teach others, or act as a mentor then give this a listen and then get in touch with Nicholas to help make this endeavor a success.
Announcements
- Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
- When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With 200 Gbit/s private networking, scalable shared block storage, node balancers, and a 40 Gbit/s public network, all controlled by a brand new API you’ve got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. Go to pythonpodcast.com/linode to get a $20 credit and launch a new server in under a minute. And don’t forget to thank them for their continued support of this show!
- You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers you don’t want to miss out on this year’s conference season. We have partnered with organizations such as O’Reilly Media, Dataversity, Corinium Global Intelligence. Coming up this fall is the combined events of Graphorum and the Data Architecture Summit. The agendas have been announced and super early bird registration for up to $300 off is available until July 26th, with early bird pricing for up to $200 off through August 30th. Use the code BNLLC to get an additional 10% off any pass when you register. Go to pythonpodcast.com/conferences to learn more and take advantage of our partner discounts when you register.
- Visit the site to subscribe to the show, sign up for the newsletter, and read the show notes. And if you have any questions, comments, or suggestions I would love to hear them. You can reach me on Twitter at @Podcast__init__ or email hosts@podcastinit.com)
- To help other people find the show please leave a review on iTunes and tell your friends and co-workers
- Join the community in the new Zulip chat workspace at pythonpodcast.com/chat
- Your host as usual is Tobias Macey and today Nicholas Tollervey is back to talk about his work on CodeGrades, a new effort that he is building to blend his backgrounds in music, education, and software to help teach kids of all ages how to program.
Interview
- Introductions
- How did you get introduced to Python?
- Can you start by describing what CodeGrades is and what motivated you to start this project?
- How does it differ from other approaches to teaching software development that you have encountered?
- Is there a particular age or level of background knowledge that you are targeting with the curriculum that you are developing?
- What are the criteria that you are measuring against and how does that criteria change as you progress in grade levels?
- For someone who completes the full set of levels, what level of capability would you expect them to have as a developer?
- Given your affiliation with the Python community it is understandable that you would target that language initially. What would be involved in adapting the curriculum, mentorship, and assessments to other languages?
- In what other ways can this idea and platform be adapted to accomodate other engineering skills? (e.g. system administration, statistics, graphic design, etc.)
- What interesting/exciting/unexpected outcomes and lessons have you found while iterating on this idea?
- For engineers who would like to be involved in the CodeGrades platform, how can they contribute?
- What challenges do you anticipate as you continue to develop the curriculum and mentor networks?
- How do you envision the future of CodeGrades taking ship in the medium to long term?
Keep In Touch
Picks
- Tobias
- Nicholas
- Kivy
- Wittgenstein: The Duty Of Genious
- The Hitchhiker’s Guide To The Galaxy by Douglas Adams
Links
- CodeGrades
- Blog Post
- C#
- .NET
- London
- IronPython
- Musical Grades
- Autodidact
- Lambda School
- How To Draw An Owl
- Dunder (double underscore) methods
- Duck Typing
- Impostor Syndrome
- Django Girls
- Mu Editor
- Baroque Music
- Chamber Music
- PyData
- Adafruit
- CircuitPython
- PyPortal
- Hypercard
- Pypercard
- Kivy
- Alan Turing
The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA
Hello, and welcome to podcast. In it, the podcast about Python and the people who make it great. When you're ready to launch your next app or want to try a project to hear about on the show, you'll need somewhere to deploy it. So take a look at our friends over at Linode. With 200 gigabit private networking, scalable shared block storage, node balancers, and a 40 gigabit public network, all controlled by a brand new API, you've got everything you need to scale up. And for your tasks that need fast computations, such as training machine learning models and running your CICD pipelines, they just launched dedicated CPU instances.
And they've also got worldwide data centers, including a new 1 in Toronto and 1 opening in Mumbai at the end of the year. So go to python podcast.com/linode, that's l I n o d e, today to get a $20 credit and launch a new server in under a minute. And don't forget to thank them for their continued support of this show. You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers, you don't want to miss out on this year's conference season. We have partnered with organizations such as O'Reilly Media, Dataversity, and the Open Data Science Conference with upcoming events, including the O'Reilly AI Conference, the Strata Data Conference, and the combined events of the Data Architecture Summit in Graphorum. Go to python podcast.com/conferences to learn more and to take advantage of our partner discounts when you register. And don't forget to visit the site at python podcastdot com to subscribe to the show. Sign up for the mailing list and read the show notes. And to help other people find the show, please leave a review on iTunes and tell your friends and coworkers. Your host as usual is Tobias Macy, and today I'm interviewing Nicholas Tollervey about his recent work on code grades, a new effort that he is building to blend his backgrounds in music, education, and software to help teach kids of all ages how to program. So, software to help teach kids of all ages how to program.
So, Nicholas, can you start by introducing yourself? So hello, everybody. My name is Nicholas,
[00:02:00] Unknown:
and I'm a freelance Python software developer. But before I was a software developer, I was a classically trained musician and then a teacher. And this will become relevant as I'm sure we go forward through the podcast.
[00:02:14] Unknown:
And for anybody who hasn't listened to your past interview on this show, can you remind us how you first got introduced to Python?
[00:02:21] Unknown:
Sure. Absolutely. So, I went into software development after getting interested in open source technology, Linux. I taught myself a little bit of c. And my first job was working with c sharp. So my CV, was full of dot net related things, and I ended up working in an investment bank in the City of London. Whilst there working with a bunch of quants, they wanted to script a tool that I had written for them, and Iron Python was a thing back then in 2 1, 008. And, so I I started to investigate Python, realized that this was this is a good place to be, an interesting place to be, and made the transition into Python.
[00:03:05] Unknown:
And so now you have gone down the path of starting a new educational resource for people who wanna get involved in programming, and I'm wondering if you can describe a bit about what the CodeGrades platform is and your motivation for starting the project.
[00:03:20] Unknown:
Okay. So, CodeGrades is an experiment to help folks learn about programming, and initially, Python. It's a sort of an exercise in digital empowerment in in that sense. And it's an experiment because its modus operandi, is is based upon aspects of music education, transplanted into the world of coding. Now it remains to be seen if if it will work, but but I'm help I'm hopeful for a number of reasons. So the first 1 is, well, coding is like music in that it's a long term investment of time and effort, and it can also be a very abstract thing to do. And it also involves learning about a certain sort of a culture, such as, in the case of music playing in a band or or in the case of coding, send have send a bug report that's useful to, to a project on GitHub or something like that. Another reason why I'm hopeful is that the at least in the western tradition of music education, it's it's 100 of years old, and I've been both on the receiving and giving end of this tradition.
And, music education has developed a number of techniques and processes and cultural expectations to address the problem of training folks in the complicated and long term sort of, skill of, and social practice of making music. And so my idea, this is how code grades came about, is is the sort of typical lazy programmer outlook applied to coding education. And I asked myself, well, surely someone has thought about these sorts of problems before. And this led me to realize that a large part of my life, both as a learner and professionally, has been in a world from which we can borrow, adopt, and adapt educational practices, stuff from the from the music world.
So cogrades is is a first step in this process. So, you might ask yourself, well, what actually does code grades do? Well, it's very simple. There are 8 grades. To pass a grade, you present 1 of your own coding projects for 1 to 1 evaluation by a professional developer. And you also get asked to do some pair programming task at an appropriate sort of a level to where to where you are as a programmer. And, this takes some time, to prepare for. And, and the actual grading itself can take anywhere between 20 minutes to an hour depending on the level of the grade. And at the end, you get a mark with indications of what your various strengths and weaknesses are along with a written report about how you've done and sort of feedback, with suggestions and constructive criticism and encouragement.
And, obviously, grade 1 is easy. And as the grades get higher, the scope and requirements get more challenging, until you get to grade 8, which is the highest grade. Everything to do with co grades is free except for grading, which people will have to pay for because, obviously, people are giving up their time and and and and need to be able to earn a living and things. And, I hope that, if it's a success that people who want to find some way of supporting themselves as free software developers, rather than having to go and get a gig at, some mega corp turning red widgets blue.
They can actually, perhaps work as, somebody who does, the assessment. I call them code mentors, and and earn some sort of a living that way to help them pay for their open source work. And, if, you're from a a Commonwealth country or East Asian country, you'll recognize what I've just described as the music grades system, that we use. So there are 8 music grades in the UK, and you start honking away on your trumpet at grade 1, and eventually you get to grade 8. And, you can, you you you're a very competent musician as a result. And it's also very similar to the belt system, used in martial arts as well. So it's this sort of stepwise system that that that appears to work well in supporting folks who wants to acquire a skill over a long that that requires long term investment of time and effort. So that in a nutshell is is code grades. So a lot of people have
[00:07:53] Unknown:
been able to learn programming and learn development in a variety of different ways, and I'm wondering what you have found to be different in your experience of seeing the outcomes of those methodologies, and maybe any experience that you've had as far as participating in any of those, learning systems, and how you view the differences in your approach with code grades and some of the benefits and trade offs that you see that would lead somebody to go down the code grades path versus some of the other ways that they might have approached it prior?
[00:08:28] Unknown:
Yeah. That's a really great question. So let's think. When I learned to code when I was a kid, I was just experimenting, and I was self taught. And that takes a particular sort of a character or personality or situation. Life chances as well play a large part of this. And so there are various ways, in which folks have tried to teach coding. I'll I'll mention 2 now. The first 1 is is the code boot camp. And code grades, I guess, is a sort of anti code boot camp. So for those who aren't familiar with boot camps, companies will charge folks $10, 000 or more for 3 months, of of coding boot camp with the promise usually of employment.
At the end of it, you can become a software developer. If you if you complete our 3 month, boot camp just pays all the money. Now this is good that they're trying to get people into, into coding, but, you know, ask yourself, would you hire musicians to play at your wedding if they'd just completed a 3 month boot camp? I guess such musicians and their audience have been sold a sort of a false promise in a sense. And I'm not saying that the folks who attend boot camps are not developers. I'm just saying that they're the sort of developer that you get after 3 months of intense cramming, And that is perhaps what the problem is, here. So how is code grades different? Well, it's an awful lot cheaper than paying $10, 000 to a boot camp. It's self paced, so you don't have to, fit all this in in 3 months and not work for 3 months and things like that.
And you can skip grades as well. You might find yourself doing grade 1, find, find that that you you you have an ability at this, and then next do grade 4, then grade 6, and then grade 8. The important thing is is that you're deciding when you're when you're taking the grades. And code grades rather than trying to, I don't know, fill your head with lots of information in the kind of cramming style that that that that that I've encountered from, talking with graduates of boot camps. Co grade is trying to create a sort of a scaffolding through the syllabus for a more practical and, complete grounding, in both the practice and culture of software development, rather than here's everything you need to know about SQL databases.
And, obviously, you can't learn that in a week. It takes a a a period of time for you to, first encounter something, some aspect of coding, and then, you need to be able to make mistakes. You need to explore this. It takes time for your mind to sort of get its head around the particular ways in which different concepts fit together. And so, this is this is how code grades is different to the boot camps. The other way in which folks are famously helping people learn to code is, all the efforts that that we see around the world to, to educate kids. Now this is obviously really very, very good, but, I I want to tell you about a friend of mine, called Dawn Hewitson, who is a professor at, 1 of the at a university here in the UK, and she trains teachers to teach computer science. And we have a thing in the UK called OFSTED, the Office For Standards in Education, and they have rated Dawn's course as the best course in the country for teacher training. So Dawn is, someone that I listen to.
And she has explained that, actually, at this teaching kids to code level, we have a huge and confusing range of beginner resources. It's they're always some sort of variation of hello world or making an LED blink or, you know, measuring the number of times a cat flap opens and closes and things like that. But there's very little to do in the way of progression or upward momentum. And the best you can do with all these resources is to move sideways from 1 beginner project to another. And, what it means is that we have, what I like to call the, how to draw an owl problem. I I don't know if you've seen the cartoon, but it's 2 frames, how to draw an owl. The the first frame is draw 2 circles, and the second frame is draw the rest of the damn owl.
And these kids are stuck constantly in that first frame. Draw 2 circles. Draw 2 circles. And what Cograde is trying to do is, what in the past has been called Gradosat Parnassum, which means steps to Parnassus, where Parnassus is the, is the is the hall of the Greek gods, really. And, what you do, it it it it steps to a higher level of understanding. And so by having the grades, you're not going around in circles doing beginner stuff all the time. You have a sense of, well, there's the next thing that's going to lift me up, and there's a sense of moving upwards on a long and difficult climb, but so well supported climb to mastery. And, I don't know, we're gonna.
So godlike powers. That's what you're, trying to get to. But, that's that's the other way I would characterize how co grades is is is is different. So, yeah, that's how I guess co grades is
[00:14:08] Unknown:
different to the current offerings of, of training folks to to code. There are a few things that come out of that. So 1 of the things you mentioned is the idea of these intensive boot camps where we have tried to take the standard educational model of sit a bunch of people in a room, cram them full of knowledge, and then test them at the end that has been so wildly successful in western education for so long, and then just trying to condense it down. And so then there are also programs such as Lambda School that try to get rid of the up front cost of participating in that, but they still have a similar methodology of the professor at the front of the room teaching everybody.
And then there are also challenges as far as self paced education with people who are autodidacts, who teach themselves how to program. But there's always this gulf between, as you were saying, the beginner level information and then the expert level information where you're just sort of left to wander in the wilderness, and hopefully, someday you'll get out the other side. And I'm wondering how you're approaching the overall curriculum development to make sure that people are able to stay on a good path and have an entry point that is accessible to people at varying different levels, because that's often a challenge as well where hello world is too easy for some pea people and maybe just the right amount for other people, and then bring them along a progression that is going to work for a wide variety.
And largely curious about the structure of the curriculum, how you're approaching the development of that and any resources you're pulling on, and some of the challenges that you're facing in terms of how to structure that mid level of content. That you're on fire. That's a really great
[00:15:54] Unknown:
question. I'm really pleased you asked it as well because it's it really speaks to my geeking out about education, side of my personality because this is something I find, fascinating. So when it comes to how the curriculum how the syllabus, sorry, is, structured, there are obviously the 8 grades, but within that, I've subdivided the grade. So the first 2 grades are essentially all about having fun and engaging with the process of learning to code, really. So it's not onerous to to be able to pass those grades, although there there are challenges involved. But it it's essentially all about welcoming people onto their journey about learning to code. Then grades 3, 4, and 5, I call the core grades, because by the time you finished grade 5, you have been introduced to pretty much most aspects of coding, but at a simple level. So for example, object orientation is, dealt with in grade 5, but you're not expected to be an extraordinary expert at object orientation.
But you need to be able to demonstrate that you have some knowledge and enough skill to be able to understand how to correctly apply that knowledge in a Python project that you are presenting to, to a code mentor or assessor. And then beyond grade 5, grades 6, 7, and 8, these are the the extended enhanced grades. In those grades, you revisit the stuff that you were doing in all the previous grades, but you are asked to do that in greater depth. So, for example, in grade 8 let's talk about object orientation again. In grade 8, as a Python programmer, you will be expected to understand what dunder methods are and perhaps be able to talk about how Python has this notion of of protocols, on objects. So if if an object quacks like a list, and it, walks like a list, then it is a list and a duck typing and, and understand how or where do we get this information from? Well, it's from a PEP. That's over here. I can tell you a little bit about it. So the the 3 broad groups are introduction and having fun, getting a core understanding of a good base of all the things that you need to know about, and then refine, refine, refine, so that you're eventually at at the at a quite a competent level by the time you've done grade 8.
And there so for each grade, there are core concepts in the syllabus, which each candidate should demonstrate for the grade that they're going for. And these are cumulative, and ordered in such a way that getting mastery of the core concepts at the lower grades prepares you for the more advanced stuff, at the later grades. And core concepts can be stuff like you understand, what a loop is and how to write 1 in Python or conditionals, for example. Or it might be something more abstract, like, you have some notion of logging, so you understand there's a logging module. You understand there might be other choices about, how you might do logging, why you might log in the first place anyway, that sort of stuff. And here's a demonstration in my project I'm presenting of logging, and this is why I'm logging these sorts of things, through to things like version control and, perhaps into, interacting in a more social sense, as a coder with, other projects, understanding how to create a good pull request so that the person at the other end isn't bombarded with, with with just a spaghetti code and and and things like that.
So the the assessment of these core concepts is generally in in in 3 sorts of areas. So we're assessing your coding, I. E. Your knowledge of programming. You know, can you explain what a loop is? Things like that. Your creativity, how do you apply your knowledge in the projects that you present as part of your grading or is part of the pair programming task that happens during the grading. And and community, is is a third, sort of assessment criteria that we use. So do you do you understand and see how what you're doing fits into the wider culture of programming? This is the, can I create a good poll request type, thing I'm talking about here? And as as the grading takes place, what happens? Well, the the the code mentor, the person doing the assessment is filling in a form, and that eventually turns into the feedback that the candidate gets at the end. So that sort of closes that sort of a loop. And, actually, I just wanted to to make 1 important point that by passing a grade, you're also getting validation.
And this this is important because it's designed to be the antidote to imposter syndrome. Because what's happened when you achieve a grade? Well, a professional coder has said that you are, for for instance, grade 5 Python. And, this is somebody external to you who has seen what you've what you can do, and they said, yes. You can do this at the grade 5 level. And there's nothing anyone else can do about it. Okay? And so it's a sort of an initiation into a particular sort of a level, and it's evidence of a certain sort of achievement. And it gives you a sense of progress, recognition of all the effort that you've put in. You feel pleased when you've passed, and it's a celebration of of your success in in being able to successfully present a project and get useful feedback
[00:21:34] Unknown:
on it. There are a few things coming out of that. At the end, you were talking about the sense of achievement and accomplishment and the fact that you are receiving this grade and this level in the overall system. And 1 thing I'm wondering about is how you are thinking of approaching the idea of basically credentialing so that somebody can take their achievement in the code grade system and then show that to somebody else and then have that be a meaningful symbol for them to be able to gain some insight from. And then also, there are the ideas of how the learning process takes place. So it's self paced, but how do you keep people accountable? How do you keep them engaged? And how do you provide the necessary support structure and reference materials for them to be able to gain that level of achievement and understanding to be able to pass the grade? Those are great questions. So the first 1 is about recognition, and the second 1 is about support. So I'll do
[00:22:35] Unknown:
1 after the other. So in terms of, recognition, unless you are the queen of England who can say by royal proclamation, make it so, the only way that, people genuinely are are are going to see any value in, in having a co grade for recognition is if other people start recognizing co grades. So it's a sort of a chicken and an egg situation, but I'm hopeful because once again, looking to the music world and, you know, belts in, in martial arts, those aren't, mandated by, say, a government agency or something like that as an official qualification.
It's just over a period of time, the culture of that particular group of people, martial artists or or musicians, who have accepted this as a reliable measure of, of achievement and a record of of of attainment as it were. So the the the simple answer is that this is this is hard to do, and it will involve a culture change. And that's, I have to be honest, 1 of the risks about this, is that if people, if people don't see any value in co grades, then then we're sort of dead in the water, really. But then if people don't see any value in doing boot camps, after which you don't really get a certificate, I guess, it's not a formal qualification. You can just say, I've completed such and such a boot camp. Now give me a job. I guess it's a similar sort of processes we've seen as, when boot camps have have have come on the scene.
We'll just have to wait and see in in that respect, I guess. And to turn to your second question, which is about how do you keep people engaged, how you keep people supported, where are the resources, and things like that. So I'm I've done the code grading process 2 times now with different cohorts of people, and I keep iterating on on the process and learning from from the mistakes, that I've made and and and watching, what the candidates have been have been doing and, and trying to find out where the bumps in the road are for them. Now, the important aspect the most important aspect that I can see is, keeping people enthused enough.
And this is why I ask people to bring a project of their own choice, of their own making, to the grading, so long as it can demonstrate the core concepts of that particular grade as it were. Because, of course, there's the famous hotel booking system that everybody gets set in an exam at some point in their career. They have to solve problem. Nobody's really interested in that. But if you are trying to solve a problem that you care about, then you will have the wind in your sails, 1 would hope. When it comes to those tough times when you just can't see where the bug is in your code and the damn thing won't run, You have the wind in your sails to be able to overcome that, but that's often not enough. So the way that I have been approaching preparing people for code grades is by doing it in a group, a small group.
And this works very well because the candidates that we meet once a week, it's a very relaxed and informal, way of meeting, as well. It's not like a class or anything. And it's more like a study group, really. And I act as a facilitator, where I try and help people to come to the grade that they're going for in such a way that they're able to, get the energy and the information they need. So what I mean by that is it's not like I'm teaching a lesson. Today, we're going to do conditionals or something like that. It's somebody will ask me a question. I will point them in the right direction, and then they'll go off and find, their their their own solution to that particular problem to do with what they are doing to present in their grade. So what I've noticed, and I'm kind of smiling to myself here, is because the second cohort of people that I've been working with has been a group of teenagers and their parents, all of whom are separately taking different grades.
And it's been wonderful to see often the teenagers helping the adults out. And this is an important aspect of working together in a study group is that folks of different levels of attainment are able to help each other and the, and and the people who are just starting out get to see it's alright to ask stupid questions or they're not stupid questions, but apparently stupid questions. You know, that that person over there knows a lot about web development, so I know I can ask them about this sort of stuff. So I'm trying to create a place where every week somebody can come along, and they can just feel that they're getting all the nourishment in an educational sense that they need. They're getting they have people there who can point them in the right direction if they need help with particular problems.
And, I'm also asking folks to prepare presentations for next week. So they are researching what is it to do logging, and they will practice explaining logging. And therefore, there's like a mini lesson happening in this group. Now here's where it gets interesting is that this process for Code Grey's to succeed needs to, be reproducible with not just me in the room. That's what the 3rd cohort, that's gonna be starting in September is all about. And I imagine, I guess, in a similar way to how Django Girls have a particular format of how Django Girls Day happens, what I want to try and do is after the 3rd cohort has gone through, is come up with here are here are some recipes for how you might organize your study group. Here's where you might be able to find the help that you need. There are online resources over here. We have our, chat platform over there where you can ask questions and see what other candidates are up to so that you feel that you're joining a community that is helpful, that has the, support that you need to help you get through those bumps in the road when you find them. And because everybody's on that sort of a journey, there's that feeling of, well, you know, what grade are you going for? Well, I'm going for my grade 5. Oh, that's really cool. I'm only going for my grade 3. But you've got something in common. You're doing a common sort of journey, if you see what I mean. So I hope that answers your questions. That's 2 rather complicated answers, but that speaks to the complexity of the problem that that I'm trying to address, I guess.
[00:29:28] Unknown:
Yeah. I definitely like the approach that you're taking approach it in somewhat of an anarchic fashion and be able to find their own information at the pace and in the manner that suits them. Because I think that that's definitely the best way to be able to learn, where you have the group for being able to lean on for support and to keep yourself accountable so that you don't just drop off and decide, oh, I'm not gonna work on it this week because you have somebody expecting something from you at your next meeting. But you're taking the carrot and not the stick approach, and I think that that's definitely great. And I appreciate what you're saying too about being able to make your process repeatable so that so that other people can pick it up.
And as somebody who is interested in trying to start up my own, sort of code education group for my own community, I'm definitely curious to hear about your experiences and be able to try and use some of the materials that you're developing to experiment with it on my own. So, I I like all of the what you're saying there. And then another thing that I'm curious about is the sort of base level of understanding that you're expecting for somebody coming in, and what your approach is for being able to sort of test out of a certain grade without necessarily having to go through the preceding exercises.
[00:30:53] Unknown:
I'd like to add something to sort of complement what you were just talking about, when you said about the study group. You know, you feel it's a place where you perhaps, it encourages you to keep turning up all the time. To me, the study group is like the weekly rehearsal of the band or the choir or or going to the dojo once a week just to meet the sensei and and what have you. I mean, obviously, you practice outside of those situations, but there's always a point of contact. So, I think what you say is is is is absolutely right. I think we're definitely on the on the same page there.
And so you asked about what the expectations are for, those coming to programming for the first time. And that's really interesting because what I've been doing, basically, over the last, I don't know, 5 or 6 years is building tools for beginner programmers. So the new editor is a a classic case, in point. So this is an editor specifically targeted at beginner programmers. This is what I use with the never programmed before level of, people who turn up, as potential candidates for code grades. They can just download it. They install it. Python and everything they need is there, and then, they can just start coding as quickly as possible.
I found that, so many beginners, and I've seen this actually with, with Django Girls, and I like the way that they've overcome this with their install party. But, so many folks, just trying to get yourself set up with a development environment is so hard to do, and which is why Mu is is quite an important aspect of welcoming complete beginners into into this process. I I kind of try and imagine explaining to my dad, who is a clever person, but a complete ignoramus when it comes to computers. You know, how do you get this person into a working environment where they can start to engage with the educational resources and the educational activities that are going on to prepare you for your 1st grade, that's where something like Mu comes in.
When it comes to, judging where you are in the syllabus I mean, obviously, the syllabus is there. If you're unsure what what you should do, then you should do grade 1, And it will very quickly become apparent whether this is this is for you or you're working way beyond this. And in which case, my suggestion is try looking at grade 2 for a while. And if that seems easy, go to grade 3. And and this is actually what happens. Again, I'm thinking of when I did karate quite a number of years ago. Now, you learn the kata, the particular patterns of movement for different belts. And if you've done all the first belt ones in a matter of weeks, then go on to the second belt, 3rd belt, and so on and so forth. I'm I'm using numbers here because the colors are always different. They all end in black, but they're always different order of colors, depending on which martial art that you were doing.
So, but, basically, you start at the beginning, and you just find your level, really. And then you you get your grade and you know, okay, from now on, I can start to see the next grade by taking, say, grade 4. The requirements for grade 5 come into view over the horizon. They no longer seem like the intimidating, confusing thing that I don't know about anymore. I have enough understanding and context by doing grade 4 that grade 5, is now achievable and so on and so forth until grade 8. You can look over your shoulder and go, wow. That's an awful lot of work I've managed to do over the how many years it might have taken or maybe months if you're very good at this.
What's left? Well, you have a portfolio of work. You've got a support network of people who you've gone through the grading system with, And, you should have, over a period of time, been inducted into what it is to be an effective software developer. And
[00:35:05] Unknown:
you mentioned that for somebody who completes up through grade 8, that they should be facile with the various aspects of software engineering in a professional context such as version control, pull requests, the basics of actually building applications and object orientation. And I'm just wondering if your expectation is that for somebody who does complete up through that grade 8, that they would then be in a organization where recognizing that junior versus mid versus senior is completely arbitrary depending on where you're landing. Oh, yeah. Absolutely.
[00:35:44] Unknown:
Okay. So for grade 8, grade 8 is obviously like getting a black belt at karate. And for for martial artists, that means you discover that you've got to the end of the beginning of your journey, and you've managed to overcome the little bit of knowledge is a dangerous thing problem. So I want it to feel like that for programmers who who get their grade eights. They can see that they've achieved such a lot, but there's so much more to learn. They've perhaps acquired that humbleness that you need to be able to become an effective autonomous learner. Because if you're a know it all, then you're blind to being able to acquire more skill and knowledge.
So, in terms of the real world, what does that mean? Well, I would judge, grade 8 means that you'll be a good junior level coder who could immediately engage with any Python project they might find on GitHub. And by that, I mean that they know how to interact with the project. So they they can git clone the repository. They'll create a virtual environment. They'll run the, unit tests with a make command or something like that. They know how to submit patches that contain well designed and thought out code, that includes unit tests, documentation, comments in the code, that sort of a thing. The important thing is is that what we don't want to do is train a bunch of people to become a nuisance, if you see what I mean. They, their little bit of knowledge is a dangerous thing problem, where they turn up to a a Python project and essentially go, well, I've got the solution to this without actually realizing that the people who've been working on this problem have, perhaps a greater level of detail and depth and understanding of of of what the problem might be. So this is why I also tend to, accentuate the the the cultural aspects of this as well. The fact that being an effective software software developer is is often having, how can I describe this, Well, a sense of humbleness, really?
You you don't know what the answer is, but you're exploring the problem space. You you can look at other people's work, or maybe you thought of an idea of how to solve this problem, but you're checking all the time, that this might be a good way to go forwards, that sort of a thing. So grade 8 means you are effective as a software developer and a helpful enough member of the community that you're behaving in such a way that you are positively contributing to it. But perhaps most importantly, as a software developer yourself, you feel you have the knowledge and the perspective and the understanding of the community that you can build the projects that you are interested in, or you can engage with those projects that are doing stuff in the parts of software development that you're interested in. That, I guess, is the bottom line. And we've been talking this whole time with the understanding that the syllabus and the course material that you're working through is oriented around the Python language and its community, and that makes sense given your affiliation
[00:38:57] Unknown:
to the language and your engagement with the overall ecosystem of Python development and people who are working there. I'm wondering what your thoughts are on the viability and the level of effort necessary to be able to translate this to other languages or other sort of subdisciplines within engineering, whether that's systems administration, machine learning, graphic design, and just the overall idea of this being an applicable framework for education both at the entry level, but also once you've achieved grade 8 at the base framework, then, going forward to try and achieve grades in some of those other sub disciplines?
[00:39:38] Unknown:
So that's a really great question, because it allows me to say that code grades is just 1 sort of a technique that I've borrowed from music. So I guess by the time you've got grade 8 on your instrument, you've got your kind of core skills sorted out. You've overcome the little bit of knowledge is a dangerous thing sort of thing, and you understand that you've got a lot more to learn. And perhaps you have some notion of what it is that you want to specialize in or or get into. As a software developer, you might say, I'm gonna do data science or machine learning or games development or or web programming or something like that. In music, we have a similar sort of thing. It's that you you you get good at your instrument, and then you might want to specialize as a cellist in baroque music or as a brass player in in brass bands or as a wind player, as a soloist, or, playing in chamber music. The the, you know, the the music world is is a is a complicated, diverse, huge sort of world to exist in. And so the notion of grades kind of stops there.
So I guess my answer to you would be, if you would like to acquire a new base language, then if using the way code grades works with Python, and that is shown to be a success, if we use that as a template, I can't see there being any reason why you couldn't do that with, for example, JavaScript or Ruby or something like that. However, I would say that Python is particularly suitable for working with beginners because of its relatively simple and uncluttered syntax. And the fact that you use white space to, to to define code blocks and things like that means that it's easy to read. So accessibility when it comes to Python is and beginner programmers is is is a win there. Although, other programming languages could be used, and it would be interesting to see if that is in fact the case. So that, I guess, is like saying, I've made a a grading system for brass players, but now the wind players and the string players and the keyboard players and the electric guitar players and the drummers all want to get involved and have their own grade system. But then the other things in the wider community, the system administration, the statistics, the graphical design, the the machine learning sort of stuff, That feels like stuff that you do after you've got your grade 8. And the way musicians do that is they well, they have master classes for a start, where you will have an acknowledged expert will come along and students will prepare at the particular level they are at, a concerto or something or other in the discipline that this person is an expert on, and they do it in public as well. So I remember when I was at music college going along to master classes. They're terrifying because you're sat in front of your peers, and you're playing to, usually a world famous musician at that sort of a level, and they take you apart.
And I don't mean that in a nasty way. I mean, they are finding ways in which they can help you, support you, and so on and so forth, as well as giving you constructive criticism. The important thing is that because everybody's sat in the room, then everybody gets the benefit from these pearls of wisdom. Now this reminds me a little bit like PyData meetups, where folks have perhaps that baseline of Python knowledge. They wanna get into Python data science. What will you get? You'll get people giving talks or maybe workshops on on on on data analysis, data science, statistics, or machine learning or something in a pie data meetup.
And that feels to me very much similar to the sort of master class type thing that, that that musicians do. I hope that answers your question. Yes.
[00:43:37] Unknown:
And then in terms of your experiences so far, and your efforts, and your work that you've done with some of these study groups, I'm wondering what you have found to be particularly interesting or exciting or unexpected outcomes that you've observed and lessons that you've learned in the
[00:43:59] Unknown:
process? So the perhaps the most wonderful aspect of this is watching folks as they're preparing for their grade because they are investing themselves in a particular coding project, which is something that they're quite passionate about because it's something that interests them. And so they really get into it, and there's a sort of an energy involved in that. I I've seen on a couple of occasions. I've only done this with, you know, small cohorts so far. But some of the people in the room, they'll they'll they'll get their thing working, and you know how it is. You go, wow. I could add this other feature though.
And they they start to explore the problem space more, and they start to refine the thing that they're going to present. And and this is a wonderful thing to see because it's also another sort of learning opportunity. And then the outcome is always or has been so far always, they feel extraordinarily nervous when it comes to the grading. And it's very similar actually to the way music grades work. You know, there's a sort of dentist's waiting room type vibe before they go in. Then they go in, and the nerves fall away, and you're just focused on presenting your project and doing the pair programming task. And, so far, I've always been outside ready to kinda do a debrief with these folks.
They come out, and the first thing they always do, guaranteed, is they kinda wipe their forehead and go, phew. I'm pleased that's over. And they grin because it was a generally, a a a sort of a positive sort of way of framing that. And then for the next 30 seconds to a minute, they'll say things, but I forgot to tell them about blah blah blah blah, or I didn't mention such and such thing, or, I forgot what the, function signature was for such and such thing when we were pair programming and things like that. So they kind of remember all the mistakes or all the things they could have done better.
But then they go, but, but the actual presentation went well. They liked the game that I made or the project that they made, blah blah blah blah blah. And they remember actually that there's more positive stuff that happened, okay, in in the in in the grading process. And, generally, they feel, I'm pleased I did that. When can I do it again? That was a really fun aspect of the first cohort is that all of them said that they wanted to do another code grade because they'd had such a positive experience of it. So this bodes well. So, that for me is the positive that that I keep hold of when, when I'm looking at my laptop thinking in an evening. Oh, gosh. Right. Okay. So what needs doing on code grades?
[00:46:52] Unknown:
So far, we've been focusing on the learner side of the equation of how they progress through the different grades and how they pursue their education, but there's also, as you mentioned, the mentoring side and the evaluation side. And I'm wondering what you have established as criteria for a good mentor and evaluator for the students who are trying to achieve their code grades, and what's involved in, getting involved in your efforts as a mentor and becoming part of your network? Okay. So
[00:47:24] Unknown:
this is an extraordinarily important aspect of the project. So upfront, I need to say that, to become a code mentor, you need to be a well, how do you explain a good, developer? How do we know that you're a good developer? Well, it's because we can see evidence that you are displaying the sorts of behavior, the sorts of code, the sorts of, community interaction that, that 1 would expect from somebody working in a mentorship, position, within the community. So there's that. Secondly, there's the whole piece about ensuring that, given different mentors assessing, for example, the same person, the same candidate, sorry, they will give similar enough marks that the person gets the same sort of feedback. So there is a consistency between the mentors as they are assessing similar sorts of candidates, but also similar across time, as well. So that the same code mentor doesn't go sort of easy on people as they get older as it were. So part of the training to be a mentor and training would be offered, is, is how to do effective assessment.
And that's actually quite a skill. Now when I trained to be a teacher, we spend an awful lot of time, looking at the way, you could go about assessments. But, essentially, it's something that, that that you can practice, and it's a skill that you can get better at. And part of the training for being a code mentor is to do lots of, well, not lots, but a number of dummy, assessments that you compare against, other folks so that you can see, well, actually, was I too hard on this? Am I thinking about the right sorts of things when I'm assessing? That sort of thing. And the third aspect of this is that the assessment happens, on, probably it's a Django based website that that I'm currently building at the moment.
But the the assessment form is a, it is a guided process, really, for want of a better word. So as as the assessment unfolds in real time, you'll be able to, select certain things, certain sentences, certain, levels from, available options, and, and and you're given opportunity to be able to write sort of free form feedback, so that by the end of 20 minutes or an hour or however long it takes depending on the level of the grade, the, the end result for the candidate is, is a PDF with feedback saying things like, you know, your pair programming was strong because you did this, this, this, and this.
And, there's some feedback about I liked it when you asked questions about such and such. It showed that you had the depth to understand that, there was more to this problem than perhaps met the eye at first met the eye, that sort of stuff. So it's an interesting problem, and I hope that for those developers who are interested in in doing this sort of code mentorship, the sorts of skills that you need to develop to become an effective code mentor are also the skills that you need to, become an effective how can I put it? A project leader, for example. You are going to have to give people feedback about their pull requests. You're going to have to tell somebody who has perhaps presented spaghetti code that they need to rethink their approach.
You need to, be able to, pair program or very quickly assess, the quality of of of of code that that that's going on here. So, I hope in that sense, it's an appealing prospect. The fact that, obviously, the only thing that people pay for is the grading, and, a large part of that is passed on to the person doing the the assessment. So I I hope that it would be appealing as, perhaps a solution to that eternal question of how do you fund open source software developers who give away the fruits of their labors for, for for no money under a liberal MIT or GPL type license. So it might go some way to addressing that. But right now, what I'm doing is working with a a small group of, people, professional Python developers that I know through virtue of the fact that I'm a Python software developer. And I'm working with them, to to work out the whole, mentor story as it were, getting their feedback.
Some of them are doing some of the assessments with the cohorts that are coming through, giving me feedback about that. And in in the same way, as you said, there are 2 parts to this story. I'm constantly trying to refine what's happening for the candidates. It's a similar sort of story for the the folks that are,
[00:52:16] Unknown:
acting as as mentors as well. So looking forward to the future of code grades in the medium to long term, what are the goals that you have set for yourself, and what are the challenges that you anticipate and that you're actively planning for? And just any other thoughts that you have on your experiences so far?
[00:52:38] Unknown:
The end goal is very simple, and that is for co grades to become sustainable and useful and a positive contributor to the wider software development community in the same way that music grades are for the music world. It's a complicated project. There are lots of ways in which it can go wrong. There are lots of things that need to happen to make it go right. So the biggest challenge I have is just trying to make that happen, really. Soon, in the autumn, fall in America, I'll be publishing the syllabus publicly. At the moment, it's being reviewed, by the folks helping me with the mentorship side of things. And, I'm gonna be publishing the website with more details of the process, that I'm currently testing with the candidates.
So, over the winter month, I hope to be able to get lots of open feedback as it were. I hope that sometime in the new year to start, actually properly recruiting senior level engineers who are interested in getting paid, to give back to the community, by evaluating candidates. And, well, we'll see what happens at that point, really. But, it's hard to tell. It's what can I say? We'll just have to wait and see. It's the best I can do. I'm hopeful and positive about what I've managed to achieve so far, about the direction of travel that Cogrades is going in. But it it's, small steps, over a long period of time, building up, building up, building up, building up. And, eventually, perhaps there might be a tipping point, and it can become sustainable.
That is the long term goal. Because this involves humans, and it's a human rather than a technical problem, It's not as if I'm sort of making widgets here. There's a a little an awful lot of investment of person time as it were, working with people and and helping them, get to the place they need to to become effective candidates or effective mentors. So I guess time is the thing that, I I most require.
[00:55:02] Unknown:
Is there any other way that people who are listening to this podcast can help in terms of growing the community of people that are part of this project or any other
[00:55:24] Unknown:
com, website, where you'll be able to sign, sign up via a form. And and as, like I say, over the autumn, winter, New Year, things start to happen. I'll be getting in touch with the folks who've expressed an interest, to see how they engage, invite them to to provide feedback, invite them to take part in various activities, just so that I can start to, to to test the the work that's, that that's gone on so far and and and see how it works in a wider context. If it goes well, then we can open it up and, to to more people and, hopefully, have a a a good pipeline of candidates and mentors, to help support them. It's also important to point out, by the way, is that, by becoming a mentor, 1 of the, I guess, responsibilities, or things that you would be invited to do would be to help continue the development of code grades itself as well. So it it it's not just a case of here's the thing, it's finished.
Now go do your mentoring. It's a case of, here's the thing. It's unfinished. We're a community here. Can we work out how we can improve it? You're a mentor. You know coding. You know what it's like to mentor people or to, to assess people. We'd love to hear your feedback. So in a sense, we're following the kind of open source, community development,
[00:56:57] Unknown:
model here as well. Are there any other aspects of your work on the CodeGrades platform itself and growing the community, or your thoughts on software education in general that we didn't discuss yet that you'd like to cover before we close out the show? Yes. Actually, something that's happened in the last, I don't know, 3 or 4 weeks, really.
[00:57:17] Unknown:
The the second cohort of, candidates that I've been working with the the teenagers and their parents, 1 of the things that I noticed is that many of them wanted to create, Python applications that had a graphical user interface. Now if you're doing grade 1, 2, or 3, some of the lower grades, you don't have the programming chops to perhaps engage with PyQt or TKinter or PyGTK or some other horrendous user interface kind of framework, that might be easy if you're an experienced developer. But, in order to be able to use them effectively, you need to actually know quite a lot about how computers work, how software is put together, and things like that. So I I saw that there was a need for some sort of a solution for how do we make graphical user interfaces with beginners.
And about the same time, Adafruit, the folks who make those wonderful, boards, that run their variant of MicroPython called CircuitPython, They have a device called a PyPortal, which is a Python device that has a touchscreen attached to it. It's rather cool. And they used a HyperCard style of organizing their user interface is the best I can put it. They use the example of a choose your own adventure game, if you remember those from the 19 eighties. You know, you are in a sort of a a room full of twisty passages. Turn to page 7 if you'd like to go left, page 93 if you wanna go right, or or page 2 if you want to go down, that sort of thing. And, what would happen is that, they would be presented some buttons. You press the button, it would transition you to the next card in the application stack.
And I realized that, this would be a really great way of helping beginner programmers, figure out how to create a simple graphical user interface led pieces of software. So this last 2 weeks, I've been working on, just such a library. It's called PiperCard, as in it's like HyperCard, but it's Pythonics, and that's pypercard, PiperCard. And so I'm looking for folks to, take a look at it and give feedback, please. That'd be rather helpful. Thank you.
[00:59:42] Unknown:
Well, for anybody who does want to get in touch and contribute to your various projects and efforts and follow along with the work that you're doing. I'll have you add your preferred contact information to the show notes. And so with that, I'm going to move us into the pics. And this week, I'm going to choose the Parsi library. I've been experimenting with that lately for a simple little script on my own time, and it's been quite pleasant to use. So definitely recommend that for anybody who's looking to put together some simple parsing logic. And I'm also going to pick the book Nevermore, The Trials of Morrigan Crow. I'm about halfway through that with my older son, and it's been a great book.
Lot of really interesting ideas and concepts built into that. It's hard to summarize the plot effectively, but if you're looking for a good book to read, I definitely recommend picking that up. And so with that, I'll pass it to you, Nicholas. Do you have any picks this week? The the Piper card project that I mentioned earlier, I built that on top of the Kivy
[01:00:39] Unknown:
library, which isn't perhaps that well known, but it's, it's a cross platform Python, user interface come game development, platform. And the reason that I started looking into this is that not only does it work on Windows, iOS, iOS 10 and Linux, It also runs on Android and iOS. So it targets mobile devices. And this is the next thing I'm going to do is is have a look at trying to get the the piper card project working on my mobile phone and tablets and things like that. And when it comes for written suggestions, I'm going to suggest 2, if you don't mind.
First 1 is a biography of the philosopher, Ludwig Wittgenstein, by, by another philosopher called Ray Monk. Wittgenstein, the duty of genius, it's called. Now I I imagine your listeners sort of holding their their heads in their hands going, oh god. This sounds terrible. But, really, it's a very readable biography, and Wittgen Stein was a fascinating man. I especially like the chapter that describes the discussions Wittgenstein was having with Alan Turing about the fundamental nature of mathematics, the the the fundamentals of the nature of mathematics and logic and things. That was, that was really, really very and the sort of thing that would appeal to, geeky programmers who who like their kind of, maths and logic. The second 1 is, an old chestnut, the hitchhiker's guide to the galaxy. My 11 year old son is reading it at the moment, and he's laughing out loud at different sections. And he's sending to the family WhatsApp group particular quotes and things like that. But the reason I'm mentioning it is that I love the sense of optimism about how useful some sorts of technology can be in a playful sort of a way. But I also like the way Douglas Adams is completely cynical about the way technology can be used in the wrong sort of way. And I'm thinking about the way the doors open and close on the spaceship, with an artificial intelligence that everybody loathes.
This reminds me of certain, ways in which the web has developed.
[01:02:53] Unknown:
Yeah. I'll definitely second the recommendation for the Hitchhiker's Guide. That's a great series that I've read a couple of times, and I'm looking forward to reading that with my children as well. So thank you very much for taking the time today to join me and discuss your experiences and efforts in building the code grades platform and network. I'm very excited to see how that plays out in the future, and I look forward to you releasing the syllabus so that I can try it out with my own kids and with the group that I'm looking to start up in my area. So thank you for all of your efforts on that front and in helping to produce and drive forward the efforts of education in the Python community. And so I hope you enjoy the rest of your day. Thank you very much. It's been, it's been great to be here.
Introduction to Nicholas Tollervey and CodeGrades
What is CodeGrades?
Comparing CodeGrades to Other Learning Methods
Curriculum Development and Structure
Recognition and Support in CodeGrades
Entry-Level Expectations and Progression
Applicability to Other Languages and Disciplines
Interesting Outcomes and Lessons Learned
Criteria for Mentors and Evaluators
Future Goals and Challenges
Recent Developments and PiperCard