You often hear that we need to teach computer science as a foundational skill.
Why? Well, I'm not actually sure many of the leaders pushing this forward have great answers
other than jobs. But it is fundamentally important that we do teach programming as a core skill.
The reason, I believe, is that whatever your specialty, be that biology, psychology,
geo-surveys, whatever, basic programming will supercharge that skill. And that's why I'm
excited to introduce you to Software Carpentry and Jonah Duckles. They are bringing these skills
and more to scientists and educators throughout the globe. This is Talk Python to Me, recorded
December 6, 2016.
Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the
ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter
where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm
and follow the show on Twitter via at talkpython. This episode has been sponsored by Rollbar and
MongoDB. I want to say a special thank you to MongoDB University for joining Talk Python to me as a
sponsor. Thank both of them for supporting the show by checking out what they have to offer during their
segments. Jonah, welcome to Talk Python.
Thanks for having me.
Yeah, it's great to have you here. I'm super excited to talk about Software Carpentry and
bringing programming skills to more than just programmers, researchers, scientists, and so on.
It's going to be fun.
Yeah, no, I'm excited, Michael. Thank you for reaching out. And I'm excited to share what Software
Carpentry is up to and how we can build new communities that support researchers all over the world.
It's super cool what you're talking about and what you're doing. Before we get into that,
though, let's talk about you. What's your story? How do you get into programming in Python?
I've been using Linux and Unix since, I don't know, probably my freshman year of high school.
And then I've always kind of dabbled in open source software and tools and did a master's in landscape
ecology, really kind of learning GIS skills and learning how to apply GIS skills towards remote
sensing problems. And I started using ArcGIS in grad school. And they had this sort of Python
ArcGIS scripting object. And it was a really kind of powerful tool for me to use. But I
quickly hit up against the limits of how that scripting object worked and really just kind
of dived into Python and the open source geospatial world around Python and really developed my skills
in graduate school around kind of applying Python towards geospatial analysis problems.
So that was really the motivating factor.
Yeah, that's really interesting. Geospatial stuff is, it's fascinating. There's so much data these
days, right?
Yeah, no. And I went on from graduate school, and I was actually doing agricultural intelligence work,
taking imagery coming from, you know, freely available imagery coming down from satellites like Landsat and
Modus, and writing Python scripts, and R scripts, and Bash scripts, whatever we could cobble together to kind
of do analysis of tabular data and what we saw from remote sensing data. And really, my chops in terms of
an applied programmer were developed in that job postgraduate school, where we were kind of on
deadlines trying to meet reporting deadlines and things. And that's really where I became more of the
language and trying to understand the nuances of Python and the power in the community around Python and the tools
that were developed there. So, yeah.
Oh, yeah, that's, that's really cool. Taking the satellite data. I think we're going to see a lot of that, especially
with the Internet of Things stuff, right? The ability to take geospatial data, maybe some small bits of monitoring
here and there, or even control systems. It's going to be fun to see how that goes in all sorts of areas.
Yeah, and that's, that's really a huge area that my organization, Software Carpentry, can help people with, is to begin to understand how to kind of eat the elephant and build software tools that can take huge streams of data coming from disparate sources and start thinking about how you might build software, how you might take just enough skills as a software engineer, and apply them to your research problem.
So you can start to build the tools that you need to answer the research questions that you have. And we're seeing this in so many different research communities all over the world.
Yeah, so that gets us a little bit to Software Carpentry and what Software Carpentry is, right? So that, why don't we talk a little bit about what Software Carpentry is in this project that you guys have going at software-carpentry.org?
Yeah. Software Carpentry was really founded way back in 1997 by Greg Wilson when he was a newly minted PhD in computer science, and he showed up at Los Alamos National Lab as a postdoctoral researcher.
And researchers were lined up at Los Alamos National Lab as a postdoctoral researcher.
And he was inundated and overwhelmed and realized that these researchers had really a lot of motivation and a lot of excitement to become better programmers, but really didn't have any resources or tools to help them on their way.
And so Software Carpentry was born of that kind of need of these researchers kind of expressing a need for research skills.
And the first iteration of it was a five-day workshop to teach you all the things.
And that went well for a lot of people, but also by the end of the third day, people were kind of passing out in their chairs and unable to retain any more information.
And the brain was full.
It was really overwhelming for the participants.
And so in about 2012, via some work from some people around the Software Carpentry community, particularly some people in Wisconsin as part of the Hacker Within project, started saying,
how can we reboot this and how can we create a really compelling two-day workshop where we train instructors on good adult teaching pedagogy?
And how do we take really high-quality lessons and how do we deliver them with trained instructors, impactful, engaging, and exciting workshops?
And so that's really the work of what we do now is we curate these lessons.
They're open source, CC by Creative Commons Attribution License.
We have a community of instructors around the world that are trained.
About 900 people have gone through our training so far and become certified instructors.
And we're really about capacity building at research organizations to build teams of instructors who talk about how they teach
and try to push the envelope to always improve how they're teaching and to develop new lessons
and really push the skills that researchers are demanding in data-driven research.
So a lot of this is the tools of software engineering, how to build software.
But, you know, we started a very basic, basic, basic level because researchers really need that foundational explanation of how these things fit together.
That's really great.
I feel like certainly when you're in research, knowing some programming is really, really empowering.
And, you know, I used to work at a place with a bunch of cognitive science PhDs.
And not everybody there had some level of programming, but many of the people, the professors and so on, would do really advanced work.
Maybe it was in MATLAB or something.
And we'd have to take their MATLAB algorithms and convert them to real programming languages.
But, you know, it made what they did more or less possible.
So I think, you know, there's this whole learn to code.
And right now we're recording during the hour of code week, which is, you know, pretty interesting.
So all these people in the world are learning to code.
And I think the biggest takeaway or the biggest benefit that seems to get lost is this ability to do even a little bit of programming can superpower whatever your specialty is.
So, you know, if you're a psychologist, you can analyze data like nobody's business compared to, like, people who can't, right?
Other PhDs or whatever who can't.
Similarly in biology or agriculture, like even for farmers, right?
So I think this is really great.
What kind of stuff do you guys cover?
I know we'll go into more detail later, but, like, what are the general areas that you teach?
What do people learn when they come work with you guys?
What are your classes on?
We're basically – so we talk about kind of having a flagship workshop.
And this is our base lessons.
And the target audience originally for this was scientists who were coding, but were coding poorly.
But as it turns out, there's actually a huge community.
There's sort of two communities that come to our classes.
It's about 60-40 split.
About 60% of people coming to our workshops say they have not coded, but they know that they have a research problem that code could help them be more productive and be more efficient at what they do.
And about 40% come and they say, I've been coding as a practicing scientist for a long time, but nobody stopped and taught me how I should be doing it.
And that's why I'm here.
And so the reality – you know, you talk about this researcher who's got this really complex MATLAB code.
The reality is that there's no intentional time spent for a lot of researchers, for a lot of scientists, to say this is how you build software.
This is how you build programs.
They're just thrown in and told to sink or swim as part of the kind of academic process.
And so our goal with our sort of flagship two-day workshop is to really kind of give you a rope to help pull yourself out of the water or to help you kind of build a mental model for – there's this ecosystem of open source tools that are out there.
They can fit together in ways that you can build.
It's almost like learning that here's a bucket of Legos.
Let's put the things together.
And so what we teach in this foundational workshop is the Unix shell and how to repeat tasks in the Unix shell.
And we'll go into more depth about the specifics of these things.
But basically how to be more efficient at repeating tasks in the Unix shell.
And then how to abstract ad hoc shell commands into a script that you can save and then call again and again.
So those are the two major goals of that lesson.
It takes about a half day.
The Python lesson takes about another half day, sometimes another full day, two half days.
And we're not teaching you all the data types in Python.
We're basically trying to teach you that Python is a nice high-level language.
It's a good glue to a lot of tools that are out there.
And it's a great way to start thinking about how to build software that tackles your research challenge.
And so we're really trying to teach them.
A lot of researchers, and I know a lot of listeners to this podcast might be surprised by this, but a lot of researchers are never told that there's these things called functions that you can wrap code with.
Right?
Where you can make a thing that's callable in other places.
Right?
So a lot of researchers write very procedural code.
And we teach them about functions and that functions are callable.
Functions should be small.
And we teach them some of these kind of aspirational things.
We kind of build an ideal for them so that they're thinking their mental model as they're building software and they're eating that elephant around their research problem allows them to think about, okay, maybe this function that's going across three pages in my editor now, maybe I could break that into four or five functions.
Right?
So we're trying to inspire those kinds of ways of thinking while we're also trying to translate skills to them.
One of the things that seems to me that is the kind of overarching theme there is writing software that doesn't just solve a problem but becomes reusable.
Right?
And so like what I saw a lot of the times would be there would be some kind of code written by let's just, you know, take my cognitive science folks as an example.
They'd write code that did amazing stuff but it would, you know, have all sorts of hard coded specific things for the exact problem they're trying to solve.
Like you said, it wasn't typically broken into a lot of functions.
There was not the concept of reusability or testability.
It was like, well, we, we, this is what it needs.
These are the steps.
And I made it do the steps.
Right?
And they might be really advanced but it's just, it's like moving from, from maybe there to, oh, here's a bunch of things I could put into a package that I could then open source and a thousand people could work on it, not just me.
Or here's the thing I could unit test.
Like, what is that?
Right, right, right.
Yeah, yeah, yeah.
Yeah.
And we, in our Unix shell lesson, we're trying to teach the Unix small tools philosophy a bit too.
And we hope that kind of rubs off in the other areas where, you know, we're teaching WC to word count lines, right?
And we teach them to read the man page of this thing called WC and find what the different flags do and make these magical space delimited incantations at the bash prompt.
And think about, they wrote one tool that just counts lines, words, and characters.
That's all it does, right?
And that's all it needs to do.
And that's enough.
And we can build something and we can write a script that has the abstraction layer appropriate for our research question that uses WC, that uses GRAP, that uses SORT, and plugs a few of these things together so that we can say, okay, we can now apply this to the data that's coming in from our sequencer, the data that's coming down from our satellite, the data that's coming in from our time series, from our sensor that we've put out there.
And so, you know, in that way, we're kind of, by thinking about those abstractions, we're hoping and helping to give them the superpowers they need, like you were saying, to give them those kind of abilities to ask more complicated research questions of the data that's all around them and all of that.
Yeah.
So, speaking of the data that's around them, you've got a nice breakdown of different areas of study, right? Astronomy, particle physics, biologies, and kind of what they might need to know and so on. You want to maybe talk about that a bit?
So, the astronomy community is really training their people to be prepared for this data-driven future. It's really kind of exciting and empowering to see, and we see participation in software carpentry from places like the Space Telescope Science Institute, the University of Washington, other astronomy communities at the University of Illinois.
Yeah, the stuff they do in astronomy is no longer just like people going out and grabbing a little light telescope and just staring at the sky and taking notes on a notepad. It's like a serious data-driven thing, right?
And there's tons of machine learning, and you almost have to be a data scientist to be an astronomer these days.
Yes, you do. And we've had a collaboration with some folks in Italy that are astronomers that actually want to formally train their PhDs in astronomy with data-driven data scientist skills so that they're marketable because they realize there's only so many jobs in astronomy.
That's a good point, too.
And that's a theme we're seeing in a lot of disciplines is people are saying, hey, there's this huge demand for data-driven skills. How can we take, you know, we know that we're not going to be able to meet, we're not going to be able to give jobs to all these people we're training. How can we make sure that their training is relevant to other areas as well?
That's a great aspect. Yeah, you were about to talk about particle physics.
Yeah, so the particle physics community, you know, everybody's heard of the Large Hadron Collider, you know, at CERN, and all of these kinds of activities that have gone on.
They have, for a long time, you know, I remember I did my undergraduate in physics, and I remember they were designing the sensors back when I started my bachelor's degree 20 years ago or so.
And now they have these huge data streams, and they've really built a system for the tiers that they use for the processing.
And that is really kind of built into their community and their training very well.
It's actually a good kind of example.
There aren't a tremendous amount of needs there because they've really, their data streams are so systematized and whatnot.
But there's always the need for people with new skills, building new tools, new analysis software.
And so we've seen some interest from the particle physics community in kind of preparing new graduate students to have those baseline skills that are necessary.
Moving on to biologists, biologists have sequencing data coming out their ears, noses, wherever they can find it.
And the rate at which sequencing data can be generated far surpasses, you know, what most grad labs' abilities are to process it.
And this is a, you know, sort of an acute need in biology to take people who have really good experimental design and lab skills and train them on data-driven research.
I thought there was a really hilarious tweet yesterday, which is that bioinformatics is just advanced bash, right?
So you're actually learning really advanced bash to kind of string together.
And that's one perspective, right?
To string together a lot of tools that other people have written.
But through Software Carpentry, what we want to do is we want to help people understand that they can build software that can meet their needs.
And they can build these kind of small tools that fit into the open source ecosystem.
And so about 50% of the people who attend our workshops, and there have been about 20,000 people who've attended our workshops, are biologists of some.
Wow, that's really interesting.
Yeah.
You know, I think, I wonder if partly that's because the astronomers and the particle physicists, like, from a very early place in their study, have to basically become programmers.
Or they just can't process it, right?
Believe this.
And then they go, what?
I can't do that with the skills I have.
And so they...
We did 10.
It took a year.
Well, 10, 20 years ago was, you know, a PhD, a postdoc, and some time as a faculty member.
So, and I might be exaggerating there on 10, but it's the rate at which they can get data is exponential at the moment.
And they have problems, never mind the fact that their people aren't trained in programming.
They just have computational limits to what they can accomplish, even if they could use the computing power available to them.
So there's really interesting questions in biology.
There's really interesting communities being developed.
We're working with groups all over the world that are really building networks of people that have the expertise spread across the network in order to answer the big research challenges they have.
One is this group in Europe, which is a group of 20 countries building infrastructure, bioinformatics infrastructure.
And they really see that as the sequencing facilities, the computational facilities, and the people.
And we're participating in how they build the network of people to be a support network that teaches each other the skills necessary and is agile and adaptable to those skills as they're changing.
Because for your listeners who are in the bioinformatics community, every time you turn around, there's a new hot tool that you should be using, and you should drop your whole previous workflow.
It's almost a joke in the community that that's how fast things are changing and moving.
Yeah, that sounds familiar, actually.
This portion of Talk Python to Me has been brought to you by Rollbar.
One of the frustrating things about being a developer is dealing with errors.
Relying on users to report errors, digging through log files trying to debug issues, or a million alerts just flooding your inbox and ruining your day.
With Rollbar's full-stack error monitoring, you'll get the context, insights, and control that you need to find and fix bugs faster.
It's easy to install.
You can start tracking production errors and deployments in eight minutes or even less.
Rollbar works with all the major languages and frameworks, including the Python ones, such as Django, Flask, Pyramid, as well as Ruby, JavaScript, Node, iOS, and Android.
You can integrate Rollbar into your existing workflow, send error alerts to Slack or HipChat, or even automatically create issues in Jira, Pivotal Tracker, and a whole bunch more.
Rollbar has put together a special offer for Talk Python to Me listeners.
Visit rollbar.com slash Talk Python to Me, sign up, and get the bootstrap plan free for 90 days.
That's 300,000 errors tracked all for free.
But, hey, just between you and me, I really hope you don't encounter that many errors.
Loved by developers at awesome companies like Heroku, Twilio, Kayak, Instacart, Zendesk, Twitch, and more.
Give Rollbar a try today.
Go to rollbar.com slash Talk Python to Me.
So another area of the people that you work with a lot are ecologists.
Yeah.
So ecologists, if you think about field biologists and ecologists, people who go out into the ecosystem and try and make observations, they have these fantastic abilities now to buy cameras, get microphones that sit out in the field and listen for days, weeks, months to the ecosystem, measuring time series of pretty much any parameter.
You can find a sensor that will measure that parameter and gather all that together.
And so they're really in this data-rich era where they have no problem acquiring data.
They really have a challenge when they sit down and they say, OK, I've made these observations across these different treatments over these different sites for this period of time, and I'd really like to build some insight from it.
They really don't have great communities around that in ecology teaching each other how to do this kind of analysis.
And so software carpentry has really been trying to help people think about how to build tools.
And one of the applications area in ecologies is really, you know, how do I build software that can help me smash all this data together and get some insight from it.
We don't have all the answers, but they, if you think about an ecologist or a field biologist, they're usually people who like to spend time out in the ecosystem.
They do a lot of field studies.
And now, same way as biologists are getting more data than they know what to do, ecologists are sitting there and they're getting data from different vendors.
Each vendor wants you to buy a $5,000 license key with a dongle that plugs into your laptop so you can actually process the data.
And I'm not even kidding.
That's what they want you to do.
No, I'm sure.
And you've got seven of these vendors for one site, one observation site, and you sit down and you go, okay, how do I start even eating this elephant?
And you really do need to build software that is special purpose for the experiment if you're going to do that right.
Right.
It sounds like an ecosystem or group that's really ripe for some solid open source stuff to come in and go, we don't need a dongle.
Let's do this.
Yep.
Yeah.
Yeah, yeah.
And there's so much vendor lock-in in that space.
It's completely nuts.
So there are ecologists that are really owning the process, trying to own their data better.
And that's really the kind of empowerment that learning software building skills gives you is you feel like you can tackle that challenge.
And you feel like you can own your data and your processing of your data.
You feel like you've become a creator and you can, I can change this.
I don't have to just take what they give me.
That's great.
So one final group that you mentioned may be worth covering is archivists and scanning manuscripts and digitizing the things, all the things.
You know, this is kind of broadly digital humanities.
This is one particular case of digital humanities where an expert on manuscripts, and if you want to be a student of manuscripts, you literally have to travel to the places, sometimes monasteries and libraries where these manuscripts are held.
And you have to petition for time to spend some number of days or hours analyzing this manuscript.
You can petition to take pictures of it, all different kinds of things.
This particular researcher that I did some work with back when I was working for a university said, what I'm going to do is I'm going to petition for that time, and I'm going to create a data set that everyone can benefit from.
And I'm just going to create this data set.
I don't have the tools to quite process it yet in every way I want to process it.
But I'm going to create this data set and hope that it becomes a model of a way that we can go digitize manuscripts and create data sets that kind of build a generation of digital archivists and manuscript experts.
And so he goes in with this camera rig that he's built, and he moves a point source light around, and he puts different patterns in order to see how the page is not necessarily flat.
And he can see kind of all the undulations in the surface model.
He can build kind of an elevation model of the manuscript itself.
Is that to try to flatten it to project it back?
No.
Well, it's not necessarily to flatten it.
It's just to understand when you're looking at it that it isn't flat.
Yeah, okay.
And as you're interpreting it, you know, there's all sorts of crazy things that happen on these manuscripts.
Like monks would carve their initials into the vellum.
So this is skin.
They'd carve their initials into the vellum in hopes that they would go to heaven because their initials were on, you know, page 23 of a particular manuscript.
And so finding those kind of scratchings on those inscriptions is really hard to do even when you're sitting in a room.
If you imagine you just walked into, you know, a dimly lit monastery with poor lighting and you're trying to see where this stuff is.
His data set he's created really makes it easier than it has ever been to look for this stuff.
Okay.
And so there's really interesting kind of follow-ons from this.
But all of humanities is doing the same thing as all these other disciplines did and saying, you know what?
We can collect data or we can gather data and put it in one place.
How do we begin to ask, you know, really interesting research questions of it?
And how can we build our own tools and how can we empower our next generation of researchers to be prepared to build tools that help us understand this stuff better?
Yeah.
That definitely gives us a good sense of, like, how the different disciplines might benefit from what you guys are teaching.
And certainly the general reusable software story is super cool.
So what are – you mentioned tools.
What are some of the right tools to be working with?
Like, people – you know, how often have there been, like, research mistakes or false results based on using the wrong tools or messing this up?
Yeah.
I mean, that stuff happens all the time.
There's this recent – I can't remember exactly what journal it came out in.
But there was this recent study that said 20% of gene expression data sets in major peer-reviewed papers had errors in them introduced by cutting and pasting gene names into Excel.
And if you've ever seen gene names, they have these crazy names that have numbers and letters.
And some of them look like dates.
And if you've ever cut and pasted data into Excel, you know that Excel kind of just starts making up data types as it sees data.
And so there have been actual problems in gene analysis based on these gene naming errors.
By cutting and pasting vectors of gene names into Excel, you mangle your gene vectors, and they don't mean what you think they mean anymore.
And then you draw upon those and you make conclusions from those false gene names because Excel mangled them as you pasted them.
Yeah, that sounds painful.
Yeah.
That's kind of a model of how we're not always using the right tools, right?
So the tools that we're using are the tools that we kind of grew up with in graduate school.
And, you know, it's this sort of self-perpetuating system where the professors learned to do their bioinformatics analysis in Excel maybe or in other tools,
and they're teaching the next generation to do it in that same way.
And so our sort of approach is not to say, okay, you should never use Excel or you shouldn't use this tool or you shouldn't use that tool.
But what is a set of skills and tools that we can teach you that we can really empower you to own as a part of your process so that you are a more effective and impactful researcher?
And the three broad themes of that are how do you repeat tasks?
And we say, you know, how do you iterate over directories full of files?
That's a pretty common thing that if you have that superpower, you're able to increase your research throughput.
How can you share your code and methods with other researchers?
And how can you – we don't go all the way into unit testing, but how can you have some level of assertion that the function you wrote does the things you think it does, right?
And that is an important concept.
That's almost an ethical concept, right?
So to be a responsible researcher, you have to understand that your code is doing what you think it's doing and how can you begin to ask that question of your code.
Sure.
And code as part of your research project, as part of your paper and your conclusions is becoming more of a thing, right?
Like there's places you can submit your code to to guarantee that it hasn't changed from when you wrote the paper and all sorts of stuff like that, right?
And making sure it works is just part of that, I think.
Yeah, and there's huge problems there.
I mean, things like containers purport to make some of this easier, things like Docker containers, where if you start thinking – and I spent some time working for an academic library.
And if you start thinking about, okay, the library has to archive this project, and it's using, let's say, Python 2.7.
It should be using Python 3, but it's not.
It's still using Python 2.7.
And a whole chain of dependencies with custom compiled Fortran, right?
And you say, okay, we're going to archive this paper, and you don't archive that runtime environment in some way.
And then 20 years from now, you want to run Python 2.7 with all that huge dependency tree, and you want to get the same result.
How do you even do that, right?
That's not a problem we're trying to solve with our workshops yet at the moment, but that's a conversation that's happening in the broader scientific community of how do we articulate what we did in the process of running this code in ways that we can reproduce it at a later date.
Yeah, that's a really interesting problem.
I mean, it's one thing to say reproduce it across different systems or whatever.
It's another to say reproduce it 20, 50, 100 years from now.
Yep, yep.
And should we even be trying to do that, right?
So, you know, if you think about libraries, libraries are these hard drives if you want to use kind of the computationally inclined method.
And a file begins at one cover and ends at another cover, right?
And they put them on shelves, which are, you know, volumes within your hard drive or whatever.
So, right, it's a format they've settled upon.
Some of them, when you open them up, they have really big glossy pages that spill out that you can fold out or whatever, right?
But there's this sort of constraint that a library says we will archive these things called books and we will put them on shelves.
We're still having that conversation of what the digital asset is that we will archive and put on the shelf, right?
And it's got to be simple, like a book.
It starts at this cover.
It ends at that cover.
And the problem is everything between the covers is so damn complicated nobody can figure out what we're going to put on the shelf.
Well, it goes 001, 110, 001.
But other than that, we really don't agree on that.
Right.
Yeah, I think, I feel like partly the problem is the world is just changing so fast digitally right now.
And I feel like as we go farther in the future, there will be some stability, some underlying stability.
I don't think the change will stop and the innovation will stop.
But I think there will be some things like, okay, this has been around for 50 years and is continuing to work.
Like, we can probably go with this for, like, things that have to be ultra stable.
That's a lot about what the technical bits of these researchers need and what you teach and so on.
But one of the really important parts is not just to teach classes to people, but actually to build a community, right?
Do you want to talk about that a bit?
Yeah.
So, we train our instructors in our community.
They come to a workshop and they teach our learners, the people coming to get these skills.
And we collaborate on open source lessons online.
And so, those kind of three constituencies, the people who work on lessons, the instructors in our community, and the learners in our community, are all really how we start to build community so that we can have, first and foremost, an impactful workshop that shows off really high-quality teaching.
And then builds a support structure and community, a community of practices, as it were, at the institution, at the organization, so that you can sustain this kind of future learning, more development of the lessons that are needed, more talking about how to be an impactful instructor.
And turning instructors into instructors, turning learners into instructors, and really giving people avenues to enter and contribute in many different ways.
And so, the ways we do that are we invite people who have technical skills but do not have our instructor certification to become helpers at our workshops.
And a helper is really just someone that helps scale the instructor.
Remember, we're doing – we're really doing hands-on workshops here.
We're doing type-along pedagogy.
We're at the Unix shell.
Everybody's got a shell prompt open, and they're typing along, and they're going through the pain that is understanding that a space-delimited bash shell environment or a Python environment that gets really picky if you don't put the tabs in the right place.
It throws you the screen of error messages that are – if you've never seen them before or if you have seen them before but never stopped to kind of interpret them or look at them, you can use help and you can use guidance to this.
And our helpers are really in the room to help our learners go through that process of learning about what an error message means, trying to look critically at the incantation they typed and figure out what might be wrong with it.
Programming is one of those things where you basically have to do it to learn.
Like, you can watch and watch and watch, and you can get more ready to try.
But until you've actually tried and worked through some kind of problem, you're not there.
So I think it's great that you're doing the hands-on stuff.
And so these guys basically look over the shoulders of anyone and see how they're going, walk around the room, something like that.
Right, exactly.
And that's their role in the workshop.
But what's also happening when they're in the workshop is they're seeing an instructor who's engaged and having a good time teaching.
And our helpers are typically people who have a little bit of these technical skills.
And we try to request that our helpers consider becoming instructors and going through our instructor training process.
And so that's kind of the entry method for a lot of people to become instructors in our community is to first become a helper.
A lot of our learners, too, see this as a way that they can spread these skills to their research lab or to their particular research community that they go to a national conference.
And they aspire to become helpers and then instructors as well.
And so we have with these kind of different avenues of onboarding into our community, we have really built a vibrant community that really gives everybody a role in making those workshops really impactful, really fun, really exciting.
And we invite people to contribute, you know, via Git and GitHub to our lessons online, which are all Creative Commons Attribution.
We have a course out of about 10 lessons.
And we're having kind of a lot of time.
And we're having kind of an ongoing community conversation about what lessons are the appropriate ones in our community to be included in our community.
What should have their own sort of branding and spin off.
We've had a recent group called Library Carpentry, which has really created a stack of carpentry skills that aren't programming but are appropriate for a librarian doing the work of a 21st century data-driven librarian.
And they've really built a vibrant community around that set of lessons.
But they share the same kind of inviting structure of offering workshops to learners, training people as instructors.
And we've agreed to do that in the same way.
And so that kind of gives you a sense of overall our community is really a place to share skills and how you teach and have conversations about how you teach skills workshops.
Yeah, that sounds really, really great.
Like not everybody from some research group can go.
Maybe the principal researcher and maybe one or two other people go and they can take that skill back.
And because the materials are Creative Commons, they could actually go and do like a little workshop for their people or something like that, right?
Yeah, yeah.
And we have professors all over the world who use our workshop lessons as the foundation for the first week or two of skills that they want their students to have in their semester-long courses
before they dive into kind of a deep dive of particular application of those skills.
Oh, right.
Okay, sure.
So if you're going to teach a class on astronomy, maybe you'll use that to like bootstrap it a little bit.
Exactly.
Yeah.
Hey, everyone.
Let me take just a quick moment and tell you about a new sponsor of the show, MongoDB University.
MongoDB is one of the fastest growing job skills on the market.
Long ago when I was getting into MongoDB, I took one of their free courses on Mongo University.
It was a great way to get up and running with my first app.
MongoDB University offers free seven-week courses on MongoDB designed to teach you everything you need to know about how to build a MongoDB-based app.
This course will cover basic installation, JSON, schema design, querying, inserting data, indexing, and working with the Python driver, of course.
After completing this course, you should have a good understanding how applications are built on top of MongoDB using Python.
Plus, you'll have a great foundation for preparing for the MongoDB developer certification exam.
I hope you can join me as a MongoDB University alumnus.
Sign up for the free seven-week course at talkpython.fm/Mongo.
We feel strongly that lessons that are taught by many people are much better than lessons that are taught by a single person.
And there's this famous adage that no battle plan survives first contact with the enemy.
The teaching sort of corollary to that is no lesson plan survives first contact with the student.
And so having lessons that have been taught by many people to many students and are continuously improved through an open contribution model, an open source model, are better lessons than if you sat down and you said, I'm going to teach you Shell today.
And these are the things you should know about the Shell.
And so over time, we've built this set of core lessons that have been taught a lot.
People have had conversations about them.
They're not perfect, as anyone who's contributed to open source knows.
Just because a project has a lot of excitement around it and a lot of people contributing to it doesn't mean that everything about it is perfect, right?
There's always things that crop up because of the nature of multi-party contribution systems.
But overall, there is a deep conversation happening about what should be there and what shouldn't be there and what the ideals are of that community and what they're trying to advance by that project.
And our lessons embody that.
Yeah, that's cool.
And you guys have like a retrospective or something after a bunch of people teach one week or something like this, yeah?
Yeah, we have these debriefing sessions where everyone in the world who's taught a workshop in the last week or so will come to an online video call and talk about what worked for them, what didn't work for them.
Maybe it was their first time teaching Git.
They had taught Python before, but they'd never taught Git.
And they say, you know, I just failed spectacularly when I was trying to tell people how to resolve conflicts, right?
I can't even resolve my own conflicts in Git very well.
And it drives me.
Well, I'm still confused about remaze.
Right.
Well, our lesson doesn't get into rebase, but, you know, maybe our advanced lesson will one day.
That'll come up eventually.
Yeah.
Nice.
One thing I'd like to bring it back to you is just a concrete example of all of this.
I recently had Jake Vanderplass from University of Washington and the eScience Research Institute up there.
And he's the astrophysicist.
That was episode 81.
And you guys are actually doing a lot of work with them up there.
I think they're doing some really cool stuff with merging academics and science along with real data science and programming.
At the University of Washington, yeah, with the eScience Center, we've trained a ton of instructors up there.
They've actually been – I've been in this job a little over a year now.
And when I first arrived, they were so enthusiastic and excited to get more of their people trained as instructors because it's really great for their careers being affiliated with the eScience Center, teaching workshops to people.
They've really created this buzz on their campus about eScience being for everyone in all disciplines.
They're running quarterly workshops.
They have something like 25 instructors on campus now so they can run workshops whenever they want to.
And they've really got their postdocs and affiliated graduate students that are affiliated with the eScience Center excited about the community building and how, in the process of you teaching other people the skills that you have as a data-driven researcher,
you get better at your own skills.
And so that has been a really neat, evolving story.
They're always pushing into new research communities.
We're always hearing that they've got instructors coming from different disciplines.
And they're really building kind of this neat center on campus, which is the literal place you come to to ask questions about data-driven research and skills that you need to tackle research problems.
And software carpentry has become kind of the entryway into that conversation to say, hey, we've got this workshop.
It's a way to begin to learn these skills.
And, oh, we've got these other programs and structures as well that can support you.
Yeah, that sounds really cool.
I think that whole eScience Institute sounds great.
Like I said, I wish that it was around when I was in grad school.
But, you know, it's a different time.
So this all sounds good.
What do people want to get involved?
Like what do they do?
We have a couple of ways to get involved.
Software-carpentry.org slash join is a website that has a couple of links on it about how to join our mailing list, how to get on our newsletter release, what are going on in terms of our community events and calendars.
We typically have a monthly community call that people can attend.
And that's a way to really become a volunteer and a contributor to the community.
We also have a partnership program or a membership program where your organization, if you are at an organization that would like to bring software carpentry, instructor training, and capacity building services to your organization, you can become a member organization.
What's an example of a member organization?
Is that a university or what is that?
Yeah, so it can be everything from a research lab to a university.
For example, the eScience Institute is a member organization of Software Carpentry.
And what we do with them is we make sure they get a consistent amount of instructor training every year.
We give them a seat on what we call our advisory council, which is a body that helps to set the direction of where our priorities are in terms of lesson development, how we run the community, how we handle things like what our code of conduct is.
And how we spread and how we spread and how we spread and how we spread and where we spread it to.
So we really give people a seat at the community steering wheel through the advisory council.
Oh, yeah. Excellent.
Yeah. So partner organizations range everything from this pan-European collective of 20 countries trying to enhance bioinformatics infrastructure for all of Europe at that scale, like a multinational scale, all the way down to one particular researcher's graduate lab who wants every one of his graduate students or her graduate students to go through software carpentry training.
Wants every one of them by the time they finish their PhD to be an instructor in our community.
And so broad scale.
But the really common thread is that they want to build capacity around these kind of data driven research skills.
Sounds great.
So where are you guys going?
What's the future for software carpentry look like?
Yeah. Right now we're kind of in a mode where we're trying to plant new instructional communities all over the world.
We're trying to spread into developing world countries.
We're trying to figure out how our business model works in those places.
Right now our business model is really these paying partner organizations and helping to bring workshops to organizations.
So we're in this kind of expansion of instructional community.
We want to train as many instructors as we can around the world.
To do that, we've got to build these memberships and partnerships in order to support our organization to do that.
Long term, you know, as we have these vibrant instructional communities around the world,
we really want to support the growth of the lessons that people need.
So I kind of have this dream of a big chart on the wall where you walk into graduate school and you look on the wall and it's seven or eight workshops,
you know, with a dotted line through them that tell you start here and over here,
you'll have some machine learning and data visualization skills.
Right. Or if you're, you know, you want to go into a different discipline,
you really want to get into all the tooling and continuous integration and all of those kinds of things.
You really want to get smart on the software engineering tools side of things, follow this dotted line.
You know, that's going to take a long time.
But the first thing we need to do is get more people in the community talking about these lessons that we have,
creating the lessons that we don't have and creating that conversation.
And then we can kind of step into this rapid expansion of the number of lessons we have.
And so that's kind of the goal at the moment.
Our overall goal is really to, you know, we're a nonprofit.
Our success are kind of basically in our formation statement.
We've said once everybody has all these skills, we should cease to exist.
Right.
We're a long, long way away from that.
We aspire to a world where we're not needed.
Exactly.
Yeah.
So that's our long term goal is to go out of existence.
That being said, there's a lot of work to do between here and there.
And yeah.
That's a great, great goal.
You said you guys are a nonprofit, but you still got to make money to support some of your efforts and so on.
What's the business model look like?
You talked about the member organizations.
They're somehow involved, right?
Yeah.
So member organizations pay us an annual fee.
And they're typically universities, national labs, research networks.
And they pay this annual fee to both get instructor training and to help kind of steer the community and the resources we have as a community.
So some things we do are, for example, every workshop we run has an assessment survey.
And that assessment survey is a pre-workshop and post-workshop assessment that can help you understand kind of the boost that the workshop had on the workshop attendees.
So these are all things that if you were someone sitting at an organization trying to build a training arm of your organization, it would be very expensive for you to build.
But we try to spread that across the member organizations with a modest annual fee.
And we build in those kinds of services and structures into our lessons, into the lessons that we support.
And so that's one part of our revenue model.
The other part is when we bring workshops to new communities, we charge a fee to help get our instructors there.
We don't pay for the travel, but we do the coordination to bring instructors to your particular site.
So, for example, if you, you know, so the Department of Physics and then an astronomer said,
I'd really like to have a software carpentry workshop in the spring of 2017.
They would contact us.
We would find some instructors that were appropriate for teaching the skills that they wanted, the lessons that they wanted for that constituency.
And they would pay us a finder's fee and kind of a workshop fee.
And they would pay the travel for those instructors.
All of our instructors volunteer.
These volunteer instructors really get a tremendous benefit.
We have, maybe we can link in the show notes, there's an impact of instructor report,
which is 40 pages of qualitatively coded responses of our 265 respondents at the time about a year ago,
telling us really how being an instructor in the community has boosted their career, has boosted their science,
has boosted their technical capabilities.
And it really is a virtuous cycle.
Yeah, that's cool.
It definitely would make you stand out from all the other graduating scientists to say,
Oh, yeah, and I teach this to all around the world, all these people.
Like, it's, you know, I've done a lot of training in the software developer space in person and virtual and whatnot.
But it makes a huge difference.
The connections you build from meeting all the students, the experience you build,
the depth of knowledge you get compared to just knowing how to do something with code or the tools,
but understanding them, things like that.
It's great.
Now, I saw on your site that you do have some videos that people can go watch.
That's not the main thing you guys do.
It's not like video training.
These are mostly live, right?
Live videos are really demonstrations of some of our senior instructors,
pedagogical classroom management kinds of practices.
Yes, they are teaching the topics and the skills.
And yes, they are exhaustive in the sense that the videos are the full workshop or full modules of the workshop.
But we really feel strongly that the live instruction and the live experience,
plus having helpers available to help you in the room.
We use a system of sticky notes where you put a green sticky note on your laptop screen,
on the backside of your screen.
If you've solved the problem we've asked you to solve and it's working,
and you put a red sticky note up if you haven't been able to solve it or you have a question.
And our helpers that are in the room, we have one helper for every 10 people in the room,
are really going around the room and helping you with your problems as they arise.
That's really clever.
I've done a lot of the workshop stuff that you're talking about,
but we never had sticky notes.
That's a great idea.
That's something that we've been doing for quite some time.
And we've even had some people create a third sticky note, a blue one,
which is speed up or slow down.
I think it's slow down, right?
So you're talking too fast or you're teaching too fast.
And so if you look out in the room of 40 people and 10 people have a blue one up,
you know, to kind of pace it down a little bit, kinds of things.
So yeah, it's a great system.
We're really trying to have a lot of fun as an instructor
and share our passion for these tools, really to share our experience of how
maybe we learned about me as a graduate student.
I can remember having a stack of Landsat files, satellite image files,
and needing to do a particular Unix command line tool applied to it.
And, you know, when you write that for loop that gets you to iterate over it
and you can go have a coffee and it runs for three more days
and then gets all that work done, you're like,
oh my God, how do people do it without this?
And so we...
They just can't solve those problems, basically, right?
That's too much.
Right, right.
So when you can share that passion and enthusiasm
about how you solved some particular problem,
for me, that is really what's so exciting about teaching.
I came up as an instructor in the community.
I taught something like 11 workshops in two years
as an instructor in the community.
And really, it's just a lot of fun.
And you give back, you build up people,
you're impacting and empowering them to do really awesome research.
Wow, that's awesome.
Well, I think we might be getting to the end of the show.
We're more or less out of time, but it sounds like such a cool project.
And the fact that the content is open source, I think it's really great.
So nice work.
Yeah.
Before we hit the road, let me ask you two final questions.
Of course, I always ask my guests.
Uh-huh.
There are now over 90,000 PyPI packages out there.
A crazy number, right?
It just keeps growing.
So what are some of your favorites that you think people should know about?
These days, I do a lot of preparing documents, like legal agreements and things like that.
So in order to do that, I use cookie cutter a whole heck of a lot,
and Jinja templates to fill in documents.
All right.
So that's interesting.
I know about cookie cutter, it's like templates for building projects,
like you can build a Django project or some other type of project.
You can pre-bake that in a cookie cutter.
How does that work with documents?
For every agreement that I create, and maybe this isn't the right way to do it,
but this is the way I do it.
I create a little bit of a YAML slug that is all the things I want to fill in to that document.
And then cookie cutter kind of places everything in the right directory for that agreement.
Every agreement is a little bit different.
I have to create a new directory with the template every time,
because the template isn't necessarily the same for every single agreement.
The template can kind of change a little bit.
But the hard part, the arduous part, if I did this manually, was to fill in all those fields.
And so cookie cutter kind of drops everything in place.
It drops the markdown template, which I use pandoc to walk into an ODT or a docx or a PDF,
whatever people want.
And so cookie cutter for me is the way that when I have a new partnership or a new membership,
I'm going to sign, I say cookie cutter, the name of the organization,
or cookie cutter, the name of the cookie cutter directory.
And it kind of prompts me to fill in all those YAML fields.
Oh, that's really, really, really cool.
All right.
And for editing, if you're going to write some Python code or any code, really,
what editor do you open up?
I'm a VI kind of guy.
I've never, you know, achieved VI ninja skills with commands, you know,
four or five letters long or anything like that.
But things like magic, like delete inside quotations or parentheses are just like magical to me.
And I've learned a couple of things that help me move around more efficiently in VI
than I can anywhere else.
And it's on every freaking system anywhere, no matter if your terminal emulator is working
right or not.
It just works.
So back in the dark ages of telnetting into systems that you didn't even know what the system
was, VI would be there to hold under your pillow at night.
So I've just always gone for that.
That's cool.
And a lot of the popular editors that are not VI, many of them have VI bindings as well.
So you can carry it along even if you go somewhere else.
You can read your Gmail with J and K to scroll up and down, you know, just to feel like you're at home.
That's right.
I think I was just doing that like right before we started talking today.
Awesome.
All right.
So final call to action.
People want to get involved.
Like they want to learn more.
What's the story?
You can subscribe to our newsletter.
It's a monthly newsletter at the moment.
It may be slightly more periodic in the future.
You also in our join page linked to before we have a pretty active discuss mailing list for
people who are interested in kind of pedagogical discussions and how to teach programming skills.
You can host a workshop at your organization and you can go to our website and find how to
host a workshop.
And you can also take the next step, which is to really get your organization to become a
member organization and build a community of instructors at your local organization.
Feel free to reach out to me directly on Twitter or email.
And I'll put those links in the, you know, like your contact info and stuff in the show notes.
That's really cool.
Okay.
Excellent.
Awesome.
Well, I'm really glad to see what you guys are doing to create more creators, fewer consumers
in the world of science and software.
So nice work.
Very cool stuff.
Well, thank you, Michael, for the time.
And I'm excited to contribute.
I know this, this shows a little bit off the beaten path in terms of talking tools and
Python systems, but this is an important kind of foundation that can grow the community
of contributors to other Python projects and other parts of the Python ecosystem.
So I'm excited to have had the time to have this conversation with you.
Yeah.
Well, it was great to have you here.
Thank you, Jonah, and see you later.
All right.
Cheers.
This has been another episode of Talk Python to Me.
Today's guest has been Jonah Duckles.
And this episode has been sponsored by Rollbar and MongoDB University.
Thank you both for supporting the show.
Rollbar takes the pain out of errors.
They give you the context and insight you need to quickly locate and fix errors that might
have gone unnoticed until your users complain, of course.
As Talk Python to Me listeners, track a ridiculous number of errors for free at rollbar.com slash
talkpythontome.
Get the skills you need to build your Python apps on top of the most successful and in-demand
document database at MongoDB University.
Take a free class by visiting talkpython.fm/Mongo.
Are you or a colleague trying to learn Python?
Have you tried books and videos that just left you bored by covering topics point by point?
Well, check out my online course, Python Jumpstart by Building 10 Apps at talkpython.fm slash
course to experience a more engaging way to learn Python.
And if you're looking for something a little more advanced, try my Write Pythonic Code course
at talkpython.fm/pythonic.
Be sure to subscribe to the show.
Open your favorite podcatcher and search for Python.
We should be right at the top.
You can also find the iTunes feed at /itunes, Google Play feed at /play, and
direct RSS feed at /rss on talkpython.fm.
Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.
Corey just recently started selling his tracks on iTunes, so I recommend you check it out at
talkpython.fm/music.
You can browse his tracks he has for sale on iTunes and listen to the full-length version
of the theme song.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Smix, let's get out of here.
Bye.
I'm first.
developers, developers, developers.
.