Transcript: Django LMS - Sheena O'Connell
Hi, welcome to another episode of Django Chat. I'm Will Vincent, joined by Carlton Gibson.
Hi, Carlton.
Hello, Will.
And we're very pleased to have Sheena O'Connell join us for this episode. Welcome.
Thanks. Hi, both of you.
Thank you for coming on, Sheena.
We met you at DjangoCon US. You gave a talk about all the work you're doing. Maybe just
is a quick introduction quickly who are you and um what's your involvement with with django right
who are you and why are you here okay cool um so django was my introduction to python which is
kind of cool i um yeah many years ago randomly had a django project given to me and i was like
i could do this and therefore learned the language um the reason i got to django con was that i was
talking about a thing that I built in Django. Basically, what I do for a living is I work for
a non-profit in South Africa. And our main stick has generally been to find high potential young
people who come from underserved communities, but who really have the aptitude as well as the grit
to succeed in a software engineering career or or another career as well so we do all sorts of
different training we do like web development and data science and we do design and you and like
um copywriting and all sorts of different things but um i'm involved in the in the technical side
of things so we we find these high potential people and we effectively hire them and their
job is to learn for a year and then at the end of that year we get them into um like real jobs
somewhere so we get them um placed into different corporates and whatnot um the django part of that
is that we have a custom-built learner management system that's built um primarily with django um
can i can i jump in with it i've got like a whole load of questions about that but um the most the
one that jumps most to me to me is how so okay you you you're identifying what you call high
potential individuals how on earth does one do that what's what does that look like
it's quite a long process so um the first thing we do is we find people who are keen so we advertise
a lot and we do word of mouth things and that sort of thing um and people apply and they do
some aptitude tests online and if somebody does well on the aptitude test it generally means like
either you or someone you know has maybe the aptitude to take the stuff on so that is a
challenge on its own you have a question i do because aptitude tests are sort of famously biased
um in that you like you know take the classic iq test it it turns out that what that that that
tests more than anything is where you schooled in a particular kind of middle class upbringing
and blah blah it doesn't necessarily test any underlying attribute of the candidate but carl
then the question is what's what's the alternative right i mean failed as it is yeah i believe that's
the issue so i'm just wondering like how do you like it's easy to test aptitude for people who
have had all the advantages because you just give them the standard tests do how do you try and work
around that or do you i mean i don't have any answers or questions it's just a question it's
like so that's just one one step in the process um so we use a bunch of different tests and a lot
of it is also just like comprehension like can you read this text and answer simple questions
about it and then there's some like spatial reasoning and some basic stats and things like
that but it's not like um yeah it's not it's not like super hard um from that we take the people
who perform the best and we we invite them to take part in a selection boot camp so that um so back
in the day when we were in in person we used to actually just bus people into jeffy's town in
johannesburg from all over the country and then they'd hang out with us for two weeks and we would
assess their skills in person um but we don't do it do that anymore um now we have a online boot
camp and basically what we do is we we get these um these applicants loaded up onto our
learner management system, and they behave as though they are already recruited into our
program. So they'll have some cards on a Kanban board, and they need to move the things across
the board. And the things that they do during this boot camp are, like we give them some basic
code tutorials to do, and we give them a bunch of cartas to do, which are like, they're not super
hard. And if somebody comes in with coding experience, and they tend to do quite well in
that um we also get them to do some git things so um we we've got like quite a cool git tutorial
and then they they bump their heads on things like merge conflicts and need to figure that out
um and even people who do have some coding experience who are self-taught often haven't
met that before and so the idea is to give them something that they'll have to learn
like while they're with us um and then if people do really well in all of that
then it might still mean that someone they know has the ability to code
and is helping them out.
This happens, unfortunately, quite a lot.
So then after that, we have a test.
So we use a platform called Coderbyte,
which is really nice because you can run lots of tests for very cheap.
And that's, again, just like a Carta thing,
and we can detect certain kinds of plagiarism.
And even then, we're still nervous about letting the wrong people in.
So we have a staff member interview the people who get through to the end.
And it's very hard to cheat on this kind of thing.
So what we'll do is we'll say, like the staff member will write some code that they made up just then and say, what does this do?
Like, what is this going to print?
and tweak the code as the interaction continues
to make sure that the learner kind of grasped
all of the concepts that they demonstrated
during the course of the bootcamp.
And like that final interview is quite a,
like that's the decision point in the end.
But one of the things we try really hard to do
is just add value at every point in the program.
So like as soon as somebody gets into the bootcamp,
We try and make sure that they're learning and growing, even if they don't get into our program.
So if they come to a point where they don't actually understand something, then the staff member will spend some time with them and try and get them to understand.
Be like, oh, you know, that was naughty, that thing you did when you wrote that code or gave us this code that you didn't write yourself.
But let's see if we can get you to understand it.
So if somebody gets caught plagiarizing, we don't throw them out.
We'll say, um, we can, we can generally tell in this interview, like, look, you actually have the potential to pick this up. You just like, please don't do that dumb thing again. Um, and we'll often take those folks and put them into some kind of bridging course and see how they do, um, for a prolonged period of time before bringing them into a full course. Um, and that is, that's the selection process. So it's quite a heavy thing. Yeah.
it sounds like quite like quite a lot of contact for you know to yeah yeah it is for each individual
candidate it is um but it's worth it as well because once we bring somebody into our program
we don't really like we look after them you know so if somebody's struggling we'll help them and
we'll just like keep on piling on staff hours with this person to to lift them up and like
we have a wellness team that'll coach them and all sorts of stuff like that so if we let in the
wrong person it ends up being like very expensive for us um because yes you can't just say like oh
yeah just ignore that person they can fail there by themselves um and it also ends up being quite
unpleasant for the learner if we if we live in the wrong person they signed a contract with us
for a year and then they're just like bashing their head on this thing that's not suitable for
them for a year it's yeah it's like all around unpleasant so yeah we work very very hard to
to find the right people you said in the beginning of your django con talks um you i can't remember
the first thing you said you built you said you build something and then you said you build people
and i was like yes that's that's amazing yeah that's that's the most important thing so we
build tools in order to build people basically yeah yeah we're going to link to the talk and
try not to um have you repeat it but i one of the other things you mentioned speaking of the
wellness was because it's underserved communities you have courses on financial literacy and all
these non-coding things that somebody who as you said you know once they graduate is going to be
the highest paid person probably in their family and trying to set them up for success you know
beyond the screen yeah yeah yeah that's yeah it's quite a big deal we actually don't run those
courses ourselves we have a partner who does it for us and that's just like another online course
that we offer to all of our learners but it is a very very big leverage point i think so um yeah um
if somebody comes from a very poor community in south africa then chances are um they they don't
have the financial literacy to make good decisions with their very first paycheck um and we are we're
not just about getting people jobs we're about you know um setting their lives up for um all sorts of
good things so we want to make sure that they don't make bad decisions as much as possible like
go have some fun with your money but um save up and look after the important stuff yeah i believe
um to your background i believe you you have a computer science degree is that right no i did um
electrical engineering because because i because i was going to ask you you got you got given this
django project this and then you're like right i'm going to learn python was that your first
programming language or were you already coded before so i learned um so i started coding when
i was in schools i learned turbo pascal as my first language uh which was great fun
um and then after that i learned c++ um i don't know if i learned c first or python first
i don't remember but uh yeah python was something that um yeah like once i started coding in it i
just love the language um yeah when i was in university i picked up a lot of um coding jobs
just to eat and get by um and that was my introduction to python was yeah okay well i i
was mentioning that in the context of um you're mentioning things around git and doing all these
tasks i think still most undergrad computer science majors have no experience with any of that right
They don't know how to build a Django site.
They don't know how to use Git.
So in many ways, you're teeing people up to succeed more readily than someone from that formal background just because they're certainly not getting that training at school.
Yeah, they can hit the ground running.
That's always been the goal is to make sure that people, as soon as they get that first job, they're practical and useful.
I think the other thing to think about or the other thing that I think about is if you put a person into a new job and they last the first, like, three months, then they tend to last for a longer, like, a significant amount of time until, you know, something better comes along.
And so I'm like, all right, so what does a person need to know in order to not annoy their coworkers in the first three months?
Yeah, it is a tough one. But you know, when you start working with a junior person and they just bump their head on Git for the first two weeks, you're like, ah, come on. So we just make sure that none of that stuff happens. We take care of all of the things that their employer would need to teach them in the first three months. Or we try to, at least.
it's hard to tick everybody's boxes and and whatnot but um i think we've got a very firm
foundation built yeah so um we'll have links to all this but the so the code is all open source
so it's tilde right which i thought was a nice play on you mentioned your talk you know muzy's
home home um can we talk about the tech stack i mean oh yeah yeah sure we can technical podcast
Yeah, all good.
So did you start from scratch or there was an existing thing?
We had a syllabus already, and that was basically a Hugo static site.
So we had a bunch of markdown files, and that was what we gave our learners to work through.
And that was generally managed in person.
We had spreadsheets, you know, and some, like, random little scripts that managed those spreadsheets.
But a lot of things were handled just in a very hands-on way.
Later on, so when we went remote, I, like, that's really all we had was the syllabus and some random scripts.
And it was in no way sufficient.
So Tilda came out of that.
It wasn't an obvious thing to build initially.
I think probably the hardest thing about building it
was figuring out what we should actually build.
And then once the solution was clear,
it was like, oh, this is obvious.
Let's build a Kanban board.
So yeah, so the tech stack back in this Django
and Django REST framework,
and we use Dramatic for long running requests.
And then on the front end, React and Redux and some Saga stuff and Material UI.
So it's not like out there in any way.
I think like a lot of people have Django and DRF on the back and React on the front.
There are things that I would do differently if I were to start over again.
A lot of it was built in a hell of a hurry.
I think the the core of the the core of
the application, the Django application is this, is the way we think about content. So our content
is basically consumed as a bunch of configuration files for the Django app. So we've got all these
markdown files, and they've got front matter in YAML. And we look at that YAML and think of it as
a like a knowledge graph so you can say in order to get the syllabus done you need to do this
project and this project has that project has a prerequisite and since you're doing this in python
you should do that in python or since you're doing this in javascript you should do that one in
javascript and so you've got these content items we call them and they can come in different flavors
and so from that kind of graph of knowledge we generate people's we generate some kanban boards
that people need to work through um so yeah yeah go on can i ask because this is a fascinating
question for me it's like the um django and relational database they work very well with
the relational model but a lot of the data structures are graph like and there's always
this sort of imp because you can model a graph in python in memory but then how do you write that to
disk now do you like like how can i ask you to explain a bit about how you're handling because
i think it's a good challenge so i don't know if we did it in the most elegant way possible and i
think it is worth revisiting but yeah basically we've got um a table called content item and then
we've got a another table for marking like what is what which content item is a prerequisite of
which other content item and is it like a hard prerequisite or not like is it a strict requirement
or is it a nice to have um and then from those two tables um we and then we have like a like a
curriculum object as well that says like do these content items in a specific order then from that
we generate a kanban board for a learner so we'll say okay cool you've got these cards and then
that's just like a normal that no longer resembles a graph in the same way um so we yeah yeah you've
sort of flattened it you've made it linear yeah yeah yeah um yeah so we don't have to do like
crazy recursive queries except when we're generating a person's board and then once
the board is set up for that person then they just need to move through it um and do you do
can i just do you serialize so you do that calculation once and then serialize it in the
database so each time you just fetch the curriculum as it was generated yeah okay nice because then
we can add extra status information to the the cards that show up on a person's board so you
can say this is when you started the thing this is when you requested a review this is how it
moved around um here's the repo associated with your card um yeah can can i ask a little bit about
your your previous background with django because like we all talk about you're like oh i needed to
spin up this site and you listed a laundry list of technologies and it worked and you know people
who are new are like wait you can you can you know build a twitter clone in a weekend like
so could you could you fill in kind of your the django or web bit that kind of gets you to the
place where you're like, I could build a Kanban board in a couple of weeks, you know, that is
prototype and then scale it? I'm going to try and understand your question. Let me know if I'm going
off on a tangent. Okay. So the question is your, your, your, the web experience, you sort of
mentioned you picked up programming and doing jobs in college. You know, what gets you to the
point where you can not just, you can say, you can just like spin up prototype anything, right?
Because I think after however many years, you know, any basic kind of crud thing, like, yeah, I can do that in Django.
But you have to have done a bunch of stuff before to get to that point.
Yeah, I think.
Does that help with the question?
Yeah, yeah.
So it's sort of like, what experience do you need in order to get to a point where you can solve these sorts of problems?
I guess so.
Yeah.
Like, how many major sites have you built before?
What got you to that point?
Because it differs by person, right?
It's not a linear thing.
Yeah, it is.
My career journey was not linear or intentional in any way.
It was very, very meandering.
I think I learned a bunch of web dev when I did that first Django app,
but I also did some C Sharp stuff once upon a time,
and I've done PHP and some PHP front-end stuff
and a lot of Pyramid work and some Flask work.
And so I've touched a lot of different frameworks for different reasons with different clients.
And so I think the one thing is knowing, like, having an idea of the lay of the land and, like, what kind of tools are out there and the trade-offs between them is a big deal.
So that's, like, I think that's a huge problem on its own worth solving for people because, like, if you don't know which tool to use, then you could just research that for ages.
Then the other thing is knowing almost like the anatomy of a web app to say, okay, what is a back end?
What is a front end?
Like, how do these things talk?
Where does the code actually run?
And how, like, what are the tradeoffs between, like, using a template, like, something that's generated on the back end versus a React app?
so i think knowing that the like how these different things can talk and how to make
decisions about that is also a big deal um and then once you know how to make those major decisions
it's like um you know which technologies you want um you know their major configuration and then
writing the code it's almost like you've already solved the problem a lot of the time and now you
just need to write down the solution yeah um does that but it's really it's no i i mean i'm not i'm
nodding i i concur i just i when i was first learning i i just had no idea what that roadmap
is for people yeah it's so like my talk my talk at django con was about the roadmap being like
kind of here is the yeah the canvas of what you laid out that you need to have some experience
with. And then it's a matter of picking and choosing and y'all figure out the details,
but I kind of know the overarching structure of what I want to do. And, um, I mean, that's great
that you touch so many technologies, you know, cause I do think some people, um, you know,
learn one thing and just stick with it. And then there's a little bit of like, well, I don't want
to do C, I don't want to do C sharp. Like, um, especially as maybe as you get more competent in
a certain set of tools, it's like, why, why would I change? And that's why knock on wood, it's nice
that Python and Django are still here because I'm not like, you know, I play around with new
frameworks because it's fun, but I don't really want to have to go build a Rails site, you know?
Yeah, yeah. I think one thing that's interesting, I think, is that I actually stayed, so after I
started working with Django and went and tried a whole lot of other technologies, I circled back
to it very intentionally for this project because of the fact that I found Django to be a fantastic
teacher when i was learning python um and when i was learning about web dev as well i think one of
the things that has frustrated me about django is the fact that it is so opinionated it means that
like you have to deal with those opinions and if you have your own opinion then that can sometimes
be like like a little tricky um but if you're a new programmer um and you want to learn about web
dev then jumping in with a very opinionated framework is fantastic because then you get
the opinions of all these like you know like really clever people who built the framework
and thought really hard about it and you get to you know walk that well-trodden path and
do something like you can build something effectively without having to make all those
decisions as your first step so yeah so chose it because it's a good teacher partially because like
a lot of the people who I work with are fairly junior so it's like okay cool guys like learn
Django it's going to serve you um so yeah well the flip side of that exact point though is it's
not just that when you're learning it's when you're um the senior and you need to bring on
juniors to have something where they don't have to be able to intuit what went on in your mind
when you were stuck in your ivory tower writing your thing from scratch that's really kind of
helpful yeah yeah here's the Django app oh yeah yeah I know how that works yeah yeah scalable
teams is a big deal yeah um that's awesome well the the fact that like you know carlton i can
look at the code base and very quickly kind of know how it's structured whereas let me pick on
flask right like that's not the case yeah yeah everybody's got their own flavor yeah it makes
that well back in the back in the day homebrew micro framework i broke myself it's like even
Oh, yeah. Forget that. Forget that. Yeah. Yeah. Well, we just interviewed last week, Craig Kirstens of Crunchy Data. And he was, we were quizzing him on kind of Rails and Django because he's a lot of experience with both. And he was making the point that Rails is more opinionated, but Django has more batteries actually under the hood, which I thought was quite nice to, you know, okay, yeah, it's, you know, because Rails is like, whoa, it just works.
But I hadn't really thought about, like, the built-in auth and the actual batteries part is very strong in Django.
You know, sometimes I wish maybe for beginners it had more opinions, actually.
But, you know, the batteries just take for granted.
Whereas every time I touch another framework, I'm like, what, you don't have an admin?
You don't, like, you know, what are you doing here?
Build that by hand?
Yourself?
Yeah.
Yeah.
Do you have a question?
So you got Kubernetes in here. I have to ask about deployment. That's not a small step to go to Kubernetes. So how did you make that decision?
So I had Kubernetes experience before, which was quite helpful. And yeah, like learning it from scratch under pressure might not have been the best situation, but it was useful to know already.
And I also had experience with making use of auto-scaling things like Google App Engine and how that can go terribly wrong if you use it inappropriately because auto-scaling things can become quite expensive.
And so I was like, okay, cool.
App Engine is really, really nice for front-end things, which is why I'm still using it for the front-end of the application.
So the React app is running there.
but um the kubernetes stuff i i wanted control over um yeah i just wanted control over how many
instances of the django app were running and i didn't want to have to like fiddle with a virtual
machine and like a docker composition or um yeah just kubernetes just fits fits in my head a little
bit so you're running on um google cloud platform yeah yeah yeah and so you so you're using the
managed kubernetes service yeah yeah yeah yeah right so that's that's not there's two things
that's different yeah no but there's two things when you run kubernetes like please can you run
my pod yes i can run your pod no problem i'd like four of those pods that's one thing the other thing
is setting up the cluster yeah yeah so i didn't set up the cluster myself yeah which is just like
The madness was like, why are you doing this?
Yeah, I do prefer managed services very much.
This is a managed service stand show here.
Oh, yeah.
Yeah.
One of the other tech cool things you noted in your talk
was the project cards where when someone,
you create a GitHub repo,
automatically protect the main branch.
Can you talk a little about that?
Because that was really cool to me.
how you automate that and awesome um yeah so basically the way our philosophy for teaching
is we want to make professionals and so we want to simulate a professional environment as much
as possible and if you are a developer working on a team of developers on some realistic project
you're not just going to push to the main branch or willy-nilly you're going to push to
a different branch and you're going to make pull requests or merge requests
And so we wanted to get that feel for the learners.
And we also wanted to make use of GitHub's lovely review functionality.
So basically what we have is we've got this Kanban board and different cards on that board behave in different ways.
And there are these cards called repo project cards.
and if a learner like chooses to start one of those then the card will pop across into the next
column but in the background yeah we create a repo for them and we it's a private repo and they are
added to as a collaborator the main branch is protected there's a little bit of a readme added
in there for them and now they get to start contributing code in their own branch then
other learners get to review this so um one thing that coders need to do in life is review each
other's code read code that you didn't write have an opinion on it um give and receive
constructive feedback so once a learner has finished a specific project let's say um i don't
know um i don't know just some project where they have to build a thing and now somebody else is
doing the same project and they have to build the same thing so a password thing right that's
using your example yeah yeah password checker yeah so there's like a little password checker
project um and so if somebody has finished the password checker project then they are allowed
to review other people's password checker projects um and they can be added as reviewers it's sort of
like a random allocation of like who you're going to review um so long as you've done the work and
And then they can merge the pull requests and help people get their cards across the
board.
So that's, yeah, that's pretty fun.
Yeah.
I love the, you know, automating and just getting a learner set up to focus on what
you want instead of all the other cruft that we have to deal with as programmers that isn't,
yeah, isn't primary.
Yeah.
Yeah.
I think there are a couple of extra benefits.
to getting the learners to review each other.
Like one obvious one is that it saves our staff members time.
So it makes our jobs like way, way easier
because we don't have to always say,
you know, point out the obvious stuff.
But from the learner's perspective,
they get that experience of giving, receiving feedback,
which is great, but they also get the experience,
they get the benefit of like spaced repetition
in their learning.
So they have to revisit things that they wrote,
but now it's written in a slightly different way.
And now they have to understand it.
And that's a pretty good way to make sure that they do absorb as many concepts as possible.
So that's, yeah, pretty cool.
I think as well that reading code and understanding code is by far the biggest part of the actual job.
You know, you'd spend some time writing it.
But realistically, if you just spend your entire training period writing code,
and then you get put into a job where you get to write, I got two hours actually doing some code.
So, no, to have to review it, I think that's lovely.
I think it's a really good thing.
Well, that reminds me of the saying that, sorry, Carlton, one last thing.
And then I know I've been talking.
Jeff Triplett, who works at RevSys, often has said that he gets paid to write tests, not code.
Because when he goes, you know, he gets parachuted into a code base that's on fire.
He's like, you know, where the tests are like, let's write better tests.
So, so much of it is, yeah, writing tests at a professional level.
Like actually writing Greenfield new code is quite rare.
And the more senior you get, the less you do that because your time is better spent
reviewing and orchestrating rather than, you know, actually building the thing itself,
which is sort of, you know, in a way it doesn't make sense.
But with experience, you're like, oh, well, that's kind of where the value add is, is
being in that review capacity as opposed to just, even though it's, you know, fun to,
you need to write your own code too sometimes, right?
You can't just only review people's code.
Yeah, yeah.
Something that I often find, something I often end up doing is just swooping in and writing a chunk of code that has almost gaps in it for somebody else to complete.
And that also works pretty well, especially on front-end stuff.
I'll just, I don't know, build some new functionality, but it's like the padding's all wrong and it's a little bit like squonk.
It's like, okay, guys, here are some guardrails.
and that works pretty well as well for onboarding new people yeah that's a nice word squonk
so i had a couple of questions about the pedagogy one is that um i think you say you're adding start
you know start date spend dates you've got this cameraman board that the curriculum
is kind of like that um how do you find that as um helping people on because sometimes i find people
um you know if there isn't a kind of nice structure they kind of just drift away not
meaning to but there's just not the discipline to do that so that would be my first question is
yeah that's that is a big deal momentum so if we were a purely asynchronous remote course without
any like human interaction then i do think we'd have pretty high drop-off rates because that's
that's a normal thing i think coursera has something like a seven percent completion rate
maybe that's generous even i'm not sure um and i think that that's pretty generous yeah so so
from what i've heard yeah it's pretty bad and um there's lots of reasons for it but um i think
one thing so so we've got a whole lot of different things that we do to keep people on track
um the first thing to know is that we are self-paced so um we don't we don't try to make
everybody do the same project at the same time or sit in the same situation at the same time
um but we do um we do have stand-ups every day so we've got um little baby scrum masters we call
them scrumlings um hopefully they run a lot of the stand-ups um and help the learners like plan
out their week um and spot any kinds of problems that might be happening um and so that's the one
like major interaction we have is just like every day people will say like this is what i'm working
on this is where i'm stuck and that kind of thing um but then we'll also keep an eye on their pace
so if it looks like somebody's falling behind like we know on average how long each project
takes and we know how much time we have with people so we can say oh it looks like if you
continue like this you're probably not going to finish in time um so how can we like what can we
do um and sometimes just telling the person like look you've got to pick up the pace is enough
um sometimes they need extra support in different ways um so that's yeah so those are the main
accountability things um we've also got all sorts of different um interventions for different kinds
of different kinds of things so um one so there's all sorts of different pitfalls that junior coders
tend to fall into when they're self-taught um so one thing for example is that um if somebody is
self-taught, they'll often think that print and return are the same thing. And the reason for
that is because of REPLs. Because they learn to code in a REPL and they have a function that
returns a thing and then they run the function and it's like, look, it printed. And so there's
all sorts of little weird things like that that we've noticed. So we'll have mini workshops just
on those concepts. So it's like, all right, cool. We're just going to sit with one staff member and
three learners for 45 minutes and we're just gonna make sure everybody freaking nails the
difference between return and print and then once that's done it actually solves a lot of problems
so so you know it'll be return and print and some other like how functions interact and um just
because you're printing the returned value twice doesn't mean you're calling the function twice and
and like yeah there's all sorts of like weird little pitfalls that people fall into um yeah so
we we aim to like nail those very very early um yeah you have a question that's an important
knowledge as well i think that there's there's just like really understanding how a function
works in terms of what happens when you pass the the the arguments in and are they by reference
or value and you know is it a reference of value type and then what happens if you don't return
anything is it like what what's the return value of a function without you know they're kind of
low-level stuff but actually learning those is really important yeah and while we're teaching
that we're also trying to teach people how to experiment with code and how to assess their own
understanding of things so we always like follow the same sort of process when exploring the stuff
like the staff member will write a little simple piece of code and say hey learners what do you
think this is going to do and they'll each like tell say what they think and you'll write that
down and then you'll run the code and then you'll write some code and then ask them what they think
and then run the code and that's the way we explore the topics and it's like look you can
actually do this yourself we don't actually have to do this for you you can explore like this look
we just made a random change and you took another guest like cool and um the people who click onto
that way of self-assessment um they tend to do really really well and that really fits the python
model of like iterative exploratory yeah yeah yeah yeah so that's um nice yeah um
I had another question, which was just about what you think about this new wave of AI tools that are coming along.
So CodePilot and the chat one that's been out this week that people have been talking about.
I mean, is that a worry for plagiarism and people sort of hacking the course content?
But also, is it a tool that you think is useful for people in their careers?
So I haven't personally used them. It's something that I want to explore. I think for junior coders, it's probably a bit of a danger to get too reliant on them. So one problem that exists that I've noticed, I think it's probably everywhere, but it happens a lot in our education system.
The South African education system is a bit of a mess, really. It's nonsense. And people come out of that system thinking that memorizing and understanding are the same thing. And it's really not.
I think that's pretty universal, unfortunately.
So annoying. And so snapping people out of that is really, really hard. Yeah. And the other thing
that's challenging is things like illusions of competence, where you read the code, you run the
code and you're like, yeah, I could have guessed that. And then you think that you can write the
code, but you can't because you've just stroked your own ego instead of actually assessing your
own ability to do the work. And then there's people who are so focused on moving their cards
to the complete column that they don't necessarily
put in the time to understand everything.
They just want to get things done quickly
so they can look cool.
And so I do worry about people making use
of those kinds of tools while learning
if it just ends up giving them perceptions
of being able to do things that they can't do.
Yeah, that's a big deal.
So, yeah, it's a concern.
And I generally actually tell the learners to not rely on that stuff for their projects.
Like they can play with it and it's cool.
And maybe some kind of co-generating thing will come up with something that they can learn from.
But they shouldn't be reliant on it.
Yeah.
Have you guys used those sorts of tools?
I've played with Copilot or Copilot or whatever it's called.
And I like it for writing boilerplate-y stuff like bootstrapping, unit tests, that kind of thing.
It's awesome.
But when I really want to think, I have to turn it off because I'm like, no, no, no.
Because it's like pair programming with someone who's drunk.
It looks right and it's fine.
And then you realize that it's massively wrong.
And it's like, no, no, no.
If I just tab through there, it would look as if it was right.
And it just isn't.
There's logic errors.
So when you're trying to think, you don't want that distraction. But yeah, if I'm trying to write a unit test and it's the same as the other 40 unit tests in the file and I don't want to have to write out 30 lines of boilerplate, it's super for that. I'm sure they'll improve with time, but I'm just interested in, I think, the points you made about the comprehension and the understanding and that false sense of competence. That's an interesting viewpoint I hadn't considered, so I like that.
Yeah, I would agree with you. I spent quite a while. I don't think I mentioned this before, talking with Simon Wilson at DjangoCon about these AI tools. I mean, specifically that was a Dolly, the image generation, but because he's like, you know, really interested in all that. And then he was with Copilot. He was mentioning that he uses it all the time. And the thing is, you know, he said, you know, half the time it's rubbish and half the time it's correct.
But, you know, it'll return, like, code he wrote because it's, like, pulling from Django, right?
So I think I agree that, like, if you're Simon Willison, like, sure, like, it's just, like, sort of interesting and you, like, immediately pick up on, like, oh, that's wrong.
But for an average person, yeah, it's the—I think it's dangerous, actually.
It's, you know, the drunk programming.
And certainly for a beginner, I think you don't want the crutch.
It's really not helpful.
But it's interesting. I was like, of all the people who don't need this, and he's like, no, no, it's cool. I just always type it in. So I would also advise people to play with it. But yeah, I think there's going to be some tricky things there other than the more mundane tasks.
But yeah, in a couple of years, like maybe the new frameworks will be, you know, there'll be like an AI framework and we'll all be focusing on some other part of the web stack, right?
I mean, probably.
Yeah, yeah.
I can imagine it getting way, way better than it is now.
Yeah, but it is still, I think it'll always be a thing where you should learn your basics, probably.
Yeah, I mean, actually the testing might actually be an area where it's easier to, you know, have it generate stuff.
you can kind of look and see like i don't know anyways i speaking of testing i wanted to ask you
so you use on your stack um drone drone io right for your continuous integration like could you
talk through just the testing or just change but just your testing strategy and how it's changed
over time um so yeah it's it's slightly more chaotic than i'd like it to be um but it is what
of this so um our test coverage on the back end is quite high um like it's like very high um so
that's that's pretty solid um if somebody makes a pull request the tests have to pass
and before we deploy the tests have to pass um we yeah so nothing nothing fancy it's just um
standard unit tests that need to pass at different points um yeah so testing strategy you might be
also referring to like tdd versus not um we're not too fussy about like if you write your tests
first or later or anything like that um so long as the code is properly tested um yeah yeah fair
Fair enough. Yeah, it's a very broad question. With your current stack you're using, Hugo,
I think you've mentioned maybe you would revisit that decision. What do you make of static site
generators like Eleventy and others? What would you use today if you were starting from scratch
with static site generators? So for a long time, I was thinking I should move towards Eleventy
because it's sort of like low level in a way in that it just relies on web components. And
Yeah, it's just like a very elegant little thing.
It's like small and it's very easy to understand and the code is all in JavaScript and I'm
pretty good at JavaScript, so that helps.
So we were using Hugo initially and it seemed like a good idea at the time, but I think
the version that there was at the moment is pretty unstable.
So as soon as we wanted to upgrade it at all, like even by zero
0.01 then it'd be like oh now things are broken and we have to fix them um and that was a little
bit frustrating it's javascript i mean what do you expect oh hugo's in golang which is no oh yeah no
hugo's oh i thought you'd my 11t yeah javascript i'm just gonna get a dig in on javascript it's
totally acceptable like every time i have to write significant javascript i have to go take a shower
afterwards it's a messy language but but it's also um yeah it's also solid in a lot of ways
um so i've done some playing with eleventy and it seems very very capable and very um
yeah like easy to extend in different ways which is really cool like hugo
like i hardly ever write go code like practically never and so if i want to do anything interesting
then it's a bit of a mission, and so interesting things don't happen.
Whereas with 11T, it would be much, much easier.
I'm actually also thinking about Next,
because you can also do static site generation with Next,
and it's got the full power of React.
So it's heavier again, but it's also,
you can do all sorts of cool things with it, so that's an option.
Because it would be nice for the contents itself
to be a bit more interactive.
So right now we've just got markdown files.
It comes out as text with some pictures and some videos and things like that.
But maybe it would be cool to have a little quizzy thing or some interactive content.
So I think maybe Next would be better for that sort of thing.
So it is going to change at some point, but it's not like the highest priority thing on the list right now.
It's difficult as well because these framework decisions, they come with a lot of overhead in terms of each time you switch.
So you've got to choose carefully, you know.
When you do go, you've got to say, okay, we can commit to this for a period of time.
Yeah, yeah.
Yeah, we chose Hugo like years and years and years ago.
And at the time, from what I knew at the time, it seemed like a good idea.
It seemed like the best bet.
But yeah, there's different things now and things that seem more appropriate now.
that point about not not using go very often it's like whenever you've got like multiple
texts in the stack it's like the one on the edge where you don't use it very often every time you
go back to it i've got to remember all that and you say the the velocity is just so slow yeah
yeah and it's got like that mental hurdle that you're like okay getting into it you've got to
block out a week yeah yeah um but that's one of the benefits of next because it's just react
well it's react with other bells and whistles and our front ends react so it's not like super
different it's not like a whole other thing um so that's that's cool gatsby is also available
but i think react i think next is maybe nicer yeah right if we want to get yeah i haven't used
next seems like a mindshare next seems to have the mindshare at the moment it seems to be you know
it's always a it's always an up and down thing with javascript worlds but like you know that
your Hugo story is bringing back memories because six years ago when I was at a startup, we had
someone had started and I had to gin up the blog using Hugo. And it was exactly like that. It was
like, oh, this is fast and it's cool. But anytime I had to do anything, I was just like, oh God,
I don't really want to be an expert in another language. Which maybe it's not the worst thing
because you just sort of leave it alone and just post content. But it's nice to stick to Python,
javascript if you can just because one less thing to worry about but anyways yeah i agree it's yeah
i don't think it's quite the hotness that it was um pandas you're are you using pandas in the
project in some way like so it is being used not by me personally um but basically we've got another
repo off to the side um that our data folk um deal with and it's got a tilde client api thingy in
there um that they can fetch data from tilde and put it into a data frame and do what they need to
from that um so from that we do things like figure out how long different cards are meant to take
and spot different kinds of outliers and spot different kinds of problems um yeah so so there's
a bunch of random things happening there or like syncing data from Tilda into things like Airtable
because a lot of our non-technical staff live on Airtable. And so we get data dumps and put it into
Airtable and then they can wrangle it how they want to and make reports and send emails to
partners and things like that. So yeah, Pandas is handy for all of that kind of thing.
Do you, is it one cohort goes through over a year and then you have another one each time?
Is it like that as opposed to continuous?
So everything's pretty overlapping.
We generally take in a cohort every couple of months.
And it's nice because of the fact that they review each other.
So there's overlap and one cohort will be a little bit more senior to the next cohort
and they'll be able to help out.
We even have things called JTLs, which are junior tech leads.
So we'll generally take like a more advanced learner and then get them to sit in the standups
of a more junior cohort so that they can like have an opinion on things. And that also works
quite nicely. So yeah, that overlap is really handy. If or when is there time for the team to
go, okay, a cohort's graduated, let's revisit and potentially change things. It sounds like
that has to be more continuous too, because you're just constantly having people go through. So
So maybe, I guess it'd always be nice to have a month to think about things, but it's not a real-world situation.
Yes, that's what holidays are for.
So a funny thing is that I actually work with my brother.
So he started off volunteering at Amuzi, and then I was like, I want to hire my brother.
Will it be dodgy?
And they're like, yeah, it'll be dodgy, but we like him.
You should hire your brother.
And then my boss hired my brother, which is better.
But he's great.
He works freaking hard, and he's not a techie.
He's more like a management type of person,
so we're actually quite a good team in that way.
Now he doesn't work in – it's complicated,
but a lot of major decisions were made in random caves
in the Drakensberg because we're away from work,
having a nice hike, sitting in a cave somewhere.
We're like, oh, I just thought of something.
So, yeah, sometimes getting away from the daily grind
is yeah critical it helps a lot um but yeah other than that reflection happens yeah reflection is
just a constant thing yeah right it's like a active equilibrium as opposed to a you know
going off to a monastery or something yeah um so speaking of external things i i did see from
your cv that um you've i guess not not as much now but you had done brazilian jiu-jitsu at quite
a high level for a while. My daughter has recently gotten really into it. And that seems like the
kind of thing people, once they get to it, they don't usually step away, especially if they're
as accomplished as you were. So I'm just curious, what was that like? Because it seems like a
natural fit for a programming mind, right? You're solving problems. And that's for my daughter,
who's 10, she likes the intellectual aspect of it, as opposed to just run harder or, you know,
The fact that it's solvable fits her mind quite well.
Yeah, it's super cool.
Yeah, it's a puzzle.
And I love how many subtleties the different moves have and the little tweaks that you can make to things to make them more effective.
Yeah, you can really geek out about BJJ for ages.
It's super cool.
Yeah, so I started it randomly.
So I've always been a climber, and I wanted to do something else besides climbing.
And this mixed martial arts gym opened up near my place.
And I was like, let me go see what that's about.
And BJJ was part of what they taught and it just stuck.
So I ended up getting like seriously into it.
I've competed internationally.
I am, so I'm the world runner up at Blue Belt, which was.
Yeah.
I mean, like not, not a small thing.
Yeah, it was a mission.
Yeah, it was hard work.
Yeah, so that was, so at the time when I was training for that,
I was working for a fintech and it was just a very, very intense time.
So I was like, wake up, like go for a run or something, go to work,
work like freaking hard, then go train, you know.
So it was just like, that was all that was happening.
And go choke a couple people out and go to sleep, right?
Yeah, but it was very, very nonstop.
And then afterwards, I needed a break.
I was just like, okay, I just need to step away from this for a moment
because I've been too completely obsessed.
And then my gym closed and my very favorite coach moved to Germany.
And I haven't found another home gym that quite fits my personality, I suppose.
I'm actually thinking very seriously about getting back into it next year because my original first room ever is nearby and I just haven't been able to get back into it.
I haven't been able to build up the habit again.
I don't know my own head sometimes.
I really loved it for a really long time, but I haven't managed to refine the love for it in the same way.
I think when you're so committed, you need a full reset to kind of enjoy it for itself as opposed to, I mean, I'm thinking of something in my life, like to get the competitive part out of it and rediscover the primal part because it's hard not to just switch the mode into like, I need to be good and do all these things.
And then it kind of leads to the things that led you to go away in the first place as opposed to the initial interest.
Yeah, yeah. That is a big deal. Just to bring it back to that playful way it used to be. It would be nice. I think it was also, I don't know, my coach was fantastic. I find that I can push myself incredibly, incredibly hard if I'm like involved. Like if there's, I don't know, if there's somebody on my team that's also doing that.
when i got my medal i tried to give it to my coach but he didn't want it
which was a bit of a um yeah it was a bit weird but
yeah he's such a great guy um gosh yeah it's super cool that your daughter's
into it yeah no i mean i think the habit the
habit the point about habit is that if once
you drop the habit it's really hard to pick it back up it's
like it's you know you miss one and then oh dear it's really easy then to miss
the next one and then but to be in that routine of like no this is what i do this is what i am i
i am a jujitsu i am a tai chi or i am a you know this i know you're looking at me carlton i'm just
a parent yeah i was gonna say what i yeah no i had well i bring i have to bring my um my two-year-old
son and he's watching the you know the the sessions and he's he asked me the other day he's
like he's like daddy you exercise and i was like you know no i pay money and watch other people
exercise with at this stage of life so but he was like he's like you do that i was like no no
but now he now he wants to you know he wants to do everything they do so he's
you know yeah anyways yeah it's a it's a good it seems like a good activity so i'm pleased my
my daughter's into it and then i just okay world runner-up like oh like yeah no that's super yeah
that's pretty impressive um are there any any things you want to as we wrap up any things you
want to promote or things people can do to help moosey or publicize um nothing offhand actually
that i can think of um yeah yeah i think uh i think that's fair enough i mean yeah go on if
you've got something else to say i was just gonna say thank you to sheena for coming on because
i've really enjoyed the chat and but if you've got something else i say thank you and i i was
i was gonna say i was um thank you for coming to django con like you know the fact this is why
these communities exist that and then you were around for some of the sprints as well i mean
i think for all of us i think i don't know if i had you been to a django con before or a us one
no that was my very very first um yeah it was a very good experience the django community it was
just lovely yeah um oh actually it's a big you know time and money thing to go so yeah yeah it is
yeah it was it was a bit of a pricey place america um but it was totally worthwhile i'm
i'm happy that i went um made some new friends went on some adventures so yeah very very worthwhile
um django con africa is happening next year and that's going to be cool so um we've just started
organizing it and there hasn't been one yet um so i think it's probably going to be in around
november next year not sure which country yet um but stay tuned it should be cool yes it was going
to be before the pandemic and then and then yeah and then and then the pandemic yeah yeah that's
really exciting all right well again thank you for thank you for coming for coming on we're
going to have links to everything in the show notes so everyone should check think check it
all out um uh we are at jango chat.com chat jango on twitter i guess if that's still around are we
on are we on the are we on the freddy version yeah yeah we are we well i guess i don't know
we'll find out we may or may not be on the very verse as well folks we will be we will be i'm
i'm personally done with twitter so uh we're gonna move over there so uh okay anyways jango
chat.com. Thanks everyone. See you next time.