WEBVTT

00:00:00.001 --> 00:00:04.000
Are you new to open source? Maybe you've been using it for a long time and never got around

00:00:04.000 --> 00:00:08.140
to contributing to it? Wondering how to get started? In this episode, you'll meet Anthony

00:00:08.140 --> 00:00:13.020
Shaw, Dan Bader, and Ronald Maravanica. All of these guys have been successful open source

00:00:13.020 --> 00:00:18.600
developers. I speak with them about how to find a welcoming project and what you need to know to

00:00:18.600 --> 00:00:23.460
get started. We also cover what open source project maintainers can do to help attract

00:00:23.460 --> 00:00:31.400
new and experienced contributors. This is Talk Python To Me, episode 132, recorded July 27th, 2017.

00:00:31.400 --> 00:00:50.740
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem,

00:00:50.740 --> 00:00:55.480
and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm at

00:00:55.480 --> 00:01:01.020
mkennedy. Keep up with the show and listen to past episodes at talkpython.fm and follow the show on

00:01:01.020 --> 00:01:07.380
Twitter via at Talk Python. This episode is brought to you by Linode and Talk Python Training. Be sure to

00:01:07.380 --> 00:01:11.680
check out what the offers are for both of these segments. It really helps support the show.

00:01:11.680 --> 00:01:15.620
Hey, everyone. Before we get to the interview, I just want to share a little bit of the backstory

00:01:15.620 --> 00:01:21.720
with you real quick here. So right before the show started, something happened in Zimbabwe that made

00:01:21.720 --> 00:01:27.980
this really difficult for Ronald to be on the show. There was a citywide power outage where he lives.

00:01:27.980 --> 00:01:32.220
Unfortunately, that's something that happens every now and then. And right before we started recording,

00:01:32.220 --> 00:01:39.160
he had to scramble to find a place where he could just get in touch with us and get online. His audio

00:01:39.160 --> 00:01:43.180
might not be as good as he had planned. And I just want to let you know so you don't think,

00:01:43.360 --> 00:01:48.560
know, he didn't set up for this. Like he made heroic efforts to get onto the show. And I just want to say

00:01:48.560 --> 00:01:53.460
thank you, a special thank you to Ronald for that. And also, if you're thinking about the challenges of

00:01:53.460 --> 00:01:59.580
being a software developer sitting in the US or Europe or somewhere like that, where the power is on 99.99%

00:01:59.580 --> 00:02:05.240
of the time, and it's all a matter of just the code, think about battling things like power outages just

00:02:05.240 --> 00:02:10.880
to contribute to open source. Once again, Ronald, thanks for being on the show along with Dan and Anthony.

00:02:11.180 --> 00:02:15.660
And I want to make sure you guys got the backstory because we lose Ronald for a moment as he has to

00:02:16.380 --> 00:02:22.640
work around to find this some way to be on the show. Dan, Anthony, Ronald, welcome to Talk Python.

00:02:22.640 --> 00:02:24.580
Thanks. Thank you so much.

00:02:24.580 --> 00:02:25.580
Hi, Mike.

00:02:25.580 --> 00:02:30.060
Hey, everyone. It's great to have you here. It's going to be an adventure. We have, you know,

00:02:30.060 --> 00:02:35.880
three of you on the call. So we'll try to do our best to not step on each other's toes. But I'm really

00:02:35.880 --> 00:02:41.400
looking forward to our conversation about contributing to open source. And we want to take this

00:02:41.400 --> 00:02:46.720
from basically two perspectives. We're going to spend the first half of the show on how do you get started

00:02:46.720 --> 00:02:54.600
as a new person or a relatively new person to open source? How do you, how do you find a project? How do you

00:02:54.600 --> 00:02:59.600
just what are the steps of getting started at all? All right, when are you ready? Things like that. And the second

00:02:59.600 --> 00:03:05.320
half is about running an open source project and getting contributors and welcoming new people to your project.

00:03:05.480 --> 00:03:15.000
So that's sort of the roadmap for our project. But let's start with your story. Anthony, we'll go with you first. How do you get into programming in Python?

00:03:15.000 --> 00:03:25.320
Yeah, programming was probably pretty early on. I think I was 13 when I started coding for the first time. Python was definitely a lot more recently. It's three years ago now. I think it was.

00:03:25.800 --> 00:03:45.480
And I was actually working on an open source project called Lib Cloud. And I've been working on that ever since. And I wanted to make a contribution to the project, realized it was in a language that I didn't know how to write. So I sat down over what was a long weekend and basically took a few courses and learned Python, which was a great experience, really easy to learn.

00:03:45.480 --> 00:03:49.800
That has taken it to a whole nother level. Like I want to contribute to this project. I don't know this technology.

00:03:49.800 --> 00:03:53.980
I wouldn't I wouldn't I wouldn't generally recommend that path.

00:03:53.980 --> 00:03:57.280
That's awesome. It works well for you. OK, Ronald, how about you?

00:03:57.280 --> 00:04:09.740
Titan for me started is something which was very new. At that point, I was an intern and engineering intern at one of the international companies here called Unilever.

00:04:10.440 --> 00:04:18.860
When I was there, there was a project of people having problems with capturing downtime and stuff like that.

00:04:18.860 --> 00:04:24.500
So when I looked around, the only language that could fix that was Python.

00:04:24.500 --> 00:04:29.180
And it meant that I had to be involved in programming.

00:04:29.860 --> 00:04:41.420
So I looked around and then there was a scholarship where people were being taught Python for free by Equinite Wireless, which is a mobile company.

00:04:41.420 --> 00:04:47.500
Yeah. And six months later, I joined in the program.

00:04:47.500 --> 00:04:51.040
And that's how I started coding with Python since then.

00:04:51.540 --> 00:04:59.460
Right now, I'm a bit mixing the two, the engineering aspect and the developer aspect.

00:04:59.460 --> 00:05:03.540
But yeah, pretty much that's how I started with Python.

00:05:03.540 --> 00:05:05.560
Oh, yeah, that sounds sounds really cool.

00:05:05.560 --> 00:05:09.760
So doing networking type stuff, you're like, I got to talk to these devices.

00:05:09.760 --> 00:05:12.880
Maybe something more than bash is required or something.

00:05:12.880 --> 00:05:15.040
Cool. Dan, how about you?

00:05:15.040 --> 00:05:18.960
Hey, so I got into Python on a ski trip.

00:05:19.280 --> 00:05:22.560
I was going to university for computer science at the time.

00:05:22.560 --> 00:05:26.100
And a group of friends were going on the ski trip.

00:05:26.100 --> 00:05:28.180
And obviously, we were all a bunch of nerds.

00:05:28.180 --> 00:05:29.780
We didn't have any computers with us.

00:05:29.780 --> 00:05:35.860
But one of my friends, he brought this tiny little book like Learn Python in 20 days or something.

00:05:35.860 --> 00:05:38.700
Those ones that make all these promises that never really work out.

00:05:38.700 --> 00:05:41.240
Learn Python on your ski vacation.

00:05:41.240 --> 00:05:43.120
Yeah, exactly.

00:05:43.120 --> 00:05:46.100
And I just, you know, I've been programming for a while.

00:05:46.100 --> 00:05:49.200
And I just fell in love with this language.

00:05:49.200 --> 00:05:55.240
And funny enough, you know, the same friend also later on introduced me to who is now my wife.

00:05:55.240 --> 00:05:58.440
So, you know, this is quite the impact.

00:05:58.440 --> 00:06:00.220
It was a heck of a trip.

00:06:00.220 --> 00:06:01.240
Not on the same trip, though.

00:06:01.240 --> 00:06:03.100
But, you know, Python and got married.

00:06:03.100 --> 00:06:03.880
So, yeah.

00:06:03.880 --> 00:06:05.300
Got a lot of mileage out of that.

00:06:05.300 --> 00:06:05.880
Yeah, yeah.

00:06:05.880 --> 00:06:06.700
That's very cool.

00:06:06.700 --> 00:06:07.900
All right, guys.

00:06:07.920 --> 00:06:10.260
So, let's start on the very beginning.

00:06:10.260 --> 00:06:14.260
Just how do we get started contributing to open source?

00:06:14.260 --> 00:06:17.440
So, let's maybe start at a high level.

00:06:17.440 --> 00:06:22.960
Start from why maybe do you want to get involved in open source at all?

00:06:22.960 --> 00:06:24.760
Anthony, you want to take that to the first one?

00:06:24.760 --> 00:06:25.840
Yeah, yeah, sure.

00:06:25.840 --> 00:06:30.380
So, I guess how many of you out there actually use open source software?

00:06:30.380 --> 00:06:32.420
Well, everybody, I'd hope.

00:06:32.420 --> 00:06:34.320
I mean, Python itself is open source.

00:06:34.320 --> 00:06:37.140
All the packages that you use day-to-day are open source.

00:06:37.140 --> 00:06:39.980
And someone's got to maintain those projects.

00:06:39.980 --> 00:06:42.160
So, I don't think it's an obligation.

00:06:42.760 --> 00:06:47.540
But I think everyone really should think about the software that they're using, the software

00:06:47.540 --> 00:06:51.020
that they use every day, and actually think about giving something back.

00:06:51.020 --> 00:06:55.300
So, you know, maybe that's contributing a bug fix or doing some documentation.

00:06:55.300 --> 00:06:59.340
There's various different ways you can contribute to open source projects.

00:06:59.340 --> 00:07:04.380
But most of the projects on PyPI, for example, are all open source.

00:07:04.380 --> 00:07:09.460
So, yeah, I really think people should get into it as a way of helping improve the whole Python

00:07:09.460 --> 00:07:09.960
ecosystem.

00:07:10.440 --> 00:07:16.760
It's an interesting thought that you really, you don't exactly owe it, but you almost do.

00:07:16.760 --> 00:07:22.540
Like, you owe it to yourself to be a little more committed to the tools that run your life

00:07:22.540 --> 00:07:24.460
as a developer, right?

00:07:24.460 --> 00:07:25.560
Or someone in software.

00:07:25.560 --> 00:07:29.740
Like, if you were that involved to work with software every single day, a particular piece

00:07:29.740 --> 00:07:32.740
of software, maybe you should help a little.

00:07:32.740 --> 00:07:37.820
Just so much so that you, like, actually learn a little bit how it works and have a little

00:07:37.820 --> 00:07:38.900
bit more control over it.

00:07:39.200 --> 00:07:39.360
Yeah.

00:07:39.360 --> 00:07:44.300
And if you use a project in particular to a sort of very advanced level, I think at some

00:07:44.300 --> 00:07:48.140
point you're going to be frustrated with things which are missing or don't work properly.

00:07:48.140 --> 00:07:51.280
And contributing back to the project is a great way to fix it.

00:07:51.280 --> 00:07:52.020
Yeah, for sure.

00:07:52.020 --> 00:07:53.200
Ronald, how about you?

00:07:53.200 --> 00:07:56.160
What do you think some of the benefits of getting involved in open source are?

00:07:56.160 --> 00:08:01.700
Taking from, I would say, the African side of things.

00:08:01.800 --> 00:08:03.840
Yeah, just so everyone knows, you're in Zimbabwe, right?

00:08:03.840 --> 00:08:05.760
Yeah, I'm in Zimbabwe.

00:08:05.760 --> 00:08:06.400
Okay, great.

00:08:06.400 --> 00:08:08.020
So, I'd love to hear that perspective.

00:08:08.020 --> 00:08:08.260
Yeah.

00:08:08.260 --> 00:08:08.820
Yeah.

00:08:09.060 --> 00:08:17.760
So, most of the software that we use on this side, they come from other countries like

00:08:17.760 --> 00:08:20.620
India and the UK.

00:08:21.000 --> 00:08:29.920
So, what happens is companies pay a lot of money to use those softwares every month.

00:08:30.560 --> 00:08:36.260
And in here, we got experienced developers that can actually build those softwares.

00:08:36.260 --> 00:08:40.960
But there's this notion here that foreign is always best.

00:08:40.960 --> 00:08:50.140
So, to me, I got into open source trying to, like, show these guys that these softwares that

00:08:50.140 --> 00:08:52.840
you're buying, we are contributing to those softwares.

00:08:53.220 --> 00:09:01.140
So, that way, people can now try to look at you with the other eye that, wow, this guy

00:09:01.140 --> 00:09:02.080
is actually serious.

00:09:02.080 --> 00:09:08.800
Because the notion has been there for a long time that foreign is always best.

00:09:08.800 --> 00:09:18.920
But I believe that software should be meant for Africans, by Africans, if you know what I

00:09:18.920 --> 00:09:19.080
mean.

00:09:19.080 --> 00:09:27.300
So, basically, at the African side, the Zimbabwean side, that's why people should contribute into

00:09:27.300 --> 00:09:27.840
open source.

00:09:27.840 --> 00:09:29.980
I think that's a really interesting point.

00:09:29.980 --> 00:09:37.360
I think open source has this ability to basically make this software something that everybody can

00:09:37.360 --> 00:09:37.660
use.

00:09:37.660 --> 00:09:40.980
It's not, like, half a million dollar Oracle installation.

00:09:40.980 --> 00:09:46.280
It's something that you can go to the internet and you can get and you can get the source code

00:09:46.280 --> 00:09:47.740
and adapt it to whatever you need.

00:09:47.740 --> 00:09:53.700
And so, I think it's really interesting to think about how that works in places like Africa

00:09:53.700 --> 00:09:58.160
where it's not a little bit of money to buy some software.

00:09:58.160 --> 00:10:02.880
Like, because of the currency, this other software is extremely expensive.

00:10:02.880 --> 00:10:07.340
And this is also a way to, like, empower people there to say, like, we are building this software

00:10:07.340 --> 00:10:11.080
and if we need to or want to, we can fork it and make it our own, right?

00:10:11.080 --> 00:10:12.660
Yeah, that's exactly it.

00:10:12.660 --> 00:10:19.780
Get to that stage where we can build off software that can be, as Africans, build software that

00:10:19.780 --> 00:10:23.500
can be used worldwide and people are comfortable with them.

00:10:24.200 --> 00:10:49.560
So, there's a big push for tech startups in Africa.

00:10:49.560 --> 00:10:52.400
How do you think open source is affecting that?

00:10:52.400 --> 00:10:57.160
Do you think this is pretty much uniformly used within the tech startups around there and it

00:10:57.160 --> 00:10:59.900
makes it more possible for that whole thing to work?

00:10:59.900 --> 00:11:00.200
Okay.

00:11:00.380 --> 00:11:08.940
So, here the situation is different because, like I said before, the economic situation here is very harsh

00:11:08.940 --> 00:11:18.580
and people literally don't have time to do something that is not feeding their families, you know.

00:11:18.580 --> 00:11:31.320
So, for someone to contribute into open source and they are not being paid for anything for it, to them it's like they'll be wasting time.

00:11:31.320 --> 00:11:35.680
Of which, that's not the case.

00:11:35.680 --> 00:11:54.080
So, for tech startups, I think open source is helpful to, like, getting the experience and trying to get that quality that will meet the global standards.

00:11:54.080 --> 00:11:59.300
So, this is how open source now is affecting the tech startups.

00:11:59.300 --> 00:12:06.720
And now I have a little bit of some guys who I have joined into the open source community.

00:12:06.720 --> 00:12:11.380
And you can see from their project that things are moving forward.

00:12:11.380 --> 00:12:18.640
Because when you are in open source, you definitely need a lot of help from a lot of people, right?

00:12:19.060 --> 00:12:25.840
So, along the way, you get the experience and you get where you are messing things up, you know.

00:12:25.840 --> 00:12:32.420
So, to me, I think that's how open source can contribute to tech startups.

00:12:32.420 --> 00:12:33.020
Sure.

00:12:33.020 --> 00:12:33.440
Okay.

00:12:33.440 --> 00:12:34.040
Very cool.

00:12:34.040 --> 00:12:35.720
Let's see.

00:12:35.720 --> 00:12:38.200
Dan, I'll ask this question to you.

00:12:38.200 --> 00:12:45.280
I think one of the biggest challenges for people getting started in programming, or maybe they've been programming for a while,

00:12:45.360 --> 00:12:52.700
but in a more constrained environment, you know, standard corporate America, or something like this.

00:12:52.700 --> 00:12:56.760
They don't necessarily feel like they're open source developers, right?

00:12:56.760 --> 00:13:05.580
This imposter syndrome is a pretty real thing, especially for people learning a new technology or learning a programming language for the first time.

00:13:05.580 --> 00:13:07.220
What do you think about this imposter stuff?

00:13:07.220 --> 00:13:09.420
Well, first of all, I think it exists.

00:13:09.420 --> 00:13:16.200
And I think you're touching on a really important problem that's holding people back from contributing to open source.

00:13:16.200 --> 00:13:22.840
And, you know, either because they want to give back to society or because they just want to work on something cool.

00:13:22.840 --> 00:13:30.520
And, well, I guess the idea of this imposter syndrome, or what imposter syndrome is, is that, well, like you said, you don't feel worthy.

00:13:30.920 --> 00:13:33.620
And you're scared to put yourself out there.

00:13:33.620 --> 00:13:46.380
And this is exactly how I felt when I published my first open source project, you know, that I started and pushed it to GitHub and then actually posted the link to Reddit and Hacker News.

00:13:46.380 --> 00:13:52.180
And I was just sitting there, you know, I remember going to bed because I was in a different time zone.

00:13:52.300 --> 00:13:58.460
I remember going to bed and just like almost like lying there and shaking and like just in anticipation what would happen, you know.

00:13:58.460 --> 00:14:01.700
And I got up the next morning, checked my email.

00:14:01.700 --> 00:14:06.540
And it was almost like, you know, at the time I perceived it as my worst case scenario.

00:14:06.540 --> 00:14:10.300
You know, I had some like really experienced people shoot me down.

00:14:10.300 --> 00:14:13.300
And someone said, you know, this should have never been written.

00:14:13.300 --> 00:14:15.200
And like, who would use something like that?

00:14:15.200 --> 00:14:18.220
And I was like, oh, my God, like, sorry, guys.

00:14:18.220 --> 00:14:19.600
Like, what did I do here?

00:14:19.600 --> 00:14:25.440
And, you know, now looking back, I obviously have a way different experience or like a way different perspective.

00:14:25.440 --> 00:14:27.000
And I'm glad that I went through this.

00:14:27.000 --> 00:14:28.880
But, you know, the struggle is real.

00:14:28.880 --> 00:14:29.920
Like, absolutely.

00:14:29.920 --> 00:14:30.520
Yeah.

00:14:30.520 --> 00:14:37.800
Well, I also feel like part of the problem is when people are new, they look at the things that they know that are major.

00:14:37.800 --> 00:14:49.180
And you probably start using Django or Python or, you know, something really big and mature that there's no like low hanging fruit left.

00:14:49.180 --> 00:14:51.040
It is like all hard work.

00:14:51.040 --> 00:14:54.740
And like every little change has to be considered over all these use cases.

00:14:54.740 --> 00:14:57.360
And so it looks really, really hard.

00:14:57.360 --> 00:15:01.860
But there's thousands of projects out there that could use a little help, even with things like documentation or something.

00:15:01.860 --> 00:15:02.120
Right.

00:15:02.120 --> 00:15:02.440
Yeah.

00:15:02.440 --> 00:15:02.800
Yeah.

00:15:02.800 --> 00:15:03.540
No, I totally agree.

00:15:03.540 --> 00:15:09.280
I mean, what we're seeing there is like the equivalent of, you know, Elon Musk building his rocket ship.

00:15:09.700 --> 00:15:15.460
Or, you know, like we're seeing like the super fancy like cruise ship or the latest like BMW car and whatnot.

00:15:15.720 --> 00:15:26.300
And of course, like you can't compete with that because that stuff, you know, the Linux kernel was built on probably like millions of hours of work by hundreds of thousands of different people.

00:15:26.300 --> 00:15:27.360
It's highly polished.

00:15:27.360 --> 00:15:27.680
Yeah.

00:15:27.680 --> 00:15:31.580
And it's highly polished, you know, and it's the barrier to entry there is so high.

00:15:31.580 --> 00:15:36.240
But really what you should be aiming for is like the equivalent of building your own bicycle.

00:15:36.240 --> 00:15:36.720
Right.

00:15:36.720 --> 00:15:38.620
And then riding that around town.

00:15:38.620 --> 00:15:42.340
And like maybe you get like one or two other people are like, oh, yeah, that's a nice bike.

00:15:42.340 --> 00:15:43.240
Can I ride that?

00:15:43.240 --> 00:15:43.820
That's a good point.

00:15:43.820 --> 00:15:45.220
Oh, I saw your bike had a flat.

00:15:45.220 --> 00:15:46.920
So I fixed its flat tire.

00:15:46.920 --> 00:15:47.620
Yeah.

00:15:47.620 --> 00:15:47.940
Yeah.

00:15:47.940 --> 00:15:48.320
Yeah.

00:15:49.180 --> 00:15:49.540
Awesome.

00:15:49.540 --> 00:15:49.800
Yeah.

00:15:49.800 --> 00:15:53.720
So I'll put in the show notes something by Adriana Friend.

00:15:53.720 --> 00:16:03.120
She put a has a basically an imposter syndrome disclaimer, which is a markdown file you can include in your GitHub project that says, no, no, I really want you even if you're new.

00:16:03.120 --> 00:16:04.860
And here's the way in which I can help you.

00:16:04.860 --> 00:16:07.260
And we're going to switch to that just a second.

00:16:07.260 --> 00:16:14.360
But Anthony, let me ask you, what do you do you think you need to know Git or like how you talked about learning technology?

00:16:14.360 --> 00:16:15.880
Like maybe you have to learn how to do Git.

00:16:15.880 --> 00:16:16.940
Maybe you have to learn Git flow.

00:16:16.940 --> 00:16:18.520
You have to learn what GitHub is like.

00:16:18.660 --> 00:16:19.780
How do you get started in all that?

00:16:19.780 --> 00:16:21.960
Yeah, there's some great videos out there already.

00:16:21.960 --> 00:16:36.100
There's one that Scott Hanselman put together about getting involved in open source that talks about the workflow to create an account on GitHub, for example, how to raise a pull request and kind of some of the basics, the basic steps you would take.

00:16:36.100 --> 00:16:47.020
I'd say that you definitely need to know a basic level of Git because most of the projects, pretty much all of the projects that you'll come across will be based on Git for their source control.

00:16:47.200 --> 00:16:51.280
So I think if you don't know that already, I would go and learn a very basic level.

00:16:51.280 --> 00:16:55.020
Don't get into any of the advanced features and functionality of Git yet.

00:16:55.020 --> 00:16:56.180
That's definitely a minefield.

00:16:56.180 --> 00:16:59.680
But once you've kind of learned that, then, yeah, pick something simple.

00:17:00.220 --> 00:17:03.500
And the other thing I recommend people do is create a sandbox project first.

00:17:03.500 --> 00:17:08.340
So once you've created a GitHub account, then just create a project that's got nothing useful in it.

00:17:08.340 --> 00:17:16.340
You know, just add some files, make some changes, do some commits and use it kind of like as a bit of a sandbox to learn how to use Git and be familiar with it.

00:17:16.600 --> 00:17:19.640
And also raise a pull request against your own project, which you can do.

00:17:19.640 --> 00:17:27.040
And that gives you a good place to practice, I guess, and experiment with things without having to do it in your life.

00:17:27.040 --> 00:17:27.360
Yeah.

00:17:27.360 --> 00:17:32.640
Or make that part of your contribution, which then you have two different things you're trying to learn at the same time.

00:17:32.640 --> 00:17:33.340
Yeah.

00:17:33.340 --> 00:17:35.460
And there's a bunch of nice GUIs as well.

00:17:35.580 --> 00:17:38.620
Like, it doesn't have to be all CLI, command line driven stuff.

00:17:38.620 --> 00:17:43.620
It could be, you know, source tree or the GitHub tools or things like that.

00:17:43.620 --> 00:17:44.820
So that's nice.

00:17:44.820 --> 00:17:45.020
Yeah.

00:17:45.020 --> 00:17:47.300
There's maybe one great tool to throw in the mixture.

00:17:47.300 --> 00:17:48.560
It's called GitUp.

00:17:48.560 --> 00:17:49.640
GitUp.

00:17:49.640 --> 00:17:52.420
Personally, I feel like it doesn't get the recognition at this source.

00:17:52.420 --> 00:17:53.940
I think it's a great UI.

00:17:53.940 --> 00:17:55.860
It's a free open source tool.

00:17:55.860 --> 00:17:58.000
I think it's available for Windows and Mac.

00:17:58.000 --> 00:17:58.800
Maybe just Mac.

00:17:58.800 --> 00:18:00.160
But still a great tool.

00:18:00.160 --> 00:18:00.480
Yeah.

00:18:00.480 --> 00:18:00.740
Nice.

00:18:00.740 --> 00:18:01.060
Awesome.

00:18:01.060 --> 00:18:02.420
All right, Ronald.

00:18:02.420 --> 00:18:09.040
You talked about contributing to open source and some of the challenges people in Africa are facing.

00:18:09.040 --> 00:18:16.000
This kind of gives you a chance to equally show up in the international tech world, if you will.

00:18:16.000 --> 00:18:21.180
If you have a popular project or you make a big contribution, that can really make a big difference.

00:18:21.180 --> 00:18:25.180
How do you see, do you think contributing to open source will help you get a job there?

00:18:25.180 --> 00:18:28.320
Or is it just better for learning and then you've got to do something else?

00:18:28.320 --> 00:18:29.760
What do you see from your perspective?

00:18:29.760 --> 00:18:30.200
Okay.

00:18:30.200 --> 00:18:38.820
So one of the people that really encouraged me to get into open source is Mike Place.

00:18:38.820 --> 00:18:41.180
He works for SoftTech.

00:18:41.180 --> 00:18:48.600
And SoftTech, their business model is around open source software.

00:18:49.400 --> 00:18:57.520
So when he came here for our mentorship week, December 5th, mentorship week, we were just talking to each other.

00:18:57.520 --> 00:19:05.340
And he showed me all these emails of companies asking him if he wants a job.

00:19:05.340 --> 00:19:11.400
And these were like huge companies, you know, like Amazon, really huge companies.

00:19:11.800 --> 00:19:19.840
And what they would say is that they saw his GitHub account and they liked what he did.

00:19:19.840 --> 00:19:28.820
So despite the fact that open source, you can do it to get your skills to that level.

00:19:29.040 --> 00:19:35.960
I'm also doing it so that in the near future, I can get a good job.

00:19:35.960 --> 00:19:44.160
Honestly, I don't believe in moving in from the continent, going to other continents.

00:19:44.160 --> 00:19:48.380
Personal life, it's not fair for the people that live in that country.

00:19:48.560 --> 00:19:53.500
So open source is a way that you can stay in your country, but still do your project.

00:19:53.500 --> 00:19:57.160
And most of the time, the job you get, it will be a remote job.

00:19:57.160 --> 00:20:01.160
You don't require to relocate or stuff like that.

00:20:01.160 --> 00:20:01.400
Yeah.

00:20:01.400 --> 00:20:04.500
Open source definitely leads to more remote work.

00:20:04.500 --> 00:20:06.340
Just the nature of it.

00:20:06.340 --> 00:20:10.240
People are more willing to accept that rather than a standard developer job or something.

00:20:10.240 --> 00:20:10.460
Yeah.

00:20:10.540 --> 00:20:10.720
Yeah.

00:20:10.720 --> 00:20:11.720
Yeah, definitely.

00:20:11.720 --> 00:20:18.740
So to me, it's about getting the experience and also trying to get noticed out there.

00:20:18.740 --> 00:20:19.040
Okay.

00:20:19.040 --> 00:20:20.080
That makes a lot of sense.

00:20:20.080 --> 00:20:24.460
This portion of Talk Python To Me is brought to you by Linode.

00:20:24.460 --> 00:20:28.500
Are you looking for bulletproof hosting that's fast, simple, and incredibly affordable?

00:20:28.500 --> 00:20:34.660
Look past that bookstore and check out Linode at talkpython.fm/Linode, L-I-N-O-D-E.

00:20:34.660 --> 00:20:39.000
Plans start at just $5 a month for a dedicated server with a gig of RAM.

00:20:39.460 --> 00:20:41.200
They have 10 data centers across the globe.

00:20:41.200 --> 00:20:43.940
So no matter where you are, there's a data center near you.

00:20:43.940 --> 00:20:48.000
Whether you want to run your Python web app, host a private Git server, or a file server,

00:20:48.000 --> 00:20:53.060
you'll get native SSDs on all machines, a newly upgraded 200 gigabit network,

00:20:53.060 --> 00:20:57.300
and 24-7 friendly support, even on holidays, and a seven-day money-back guarantee.

00:20:57.300 --> 00:21:00.740
Want a dedicated server for free for the next four months?

00:21:00.740 --> 00:21:05.100
Use the coupon code python17 at talkpython.fm/Linode.

00:21:05.900 --> 00:21:11.060
Dan, I know you're asked frequently through your Pythonista cafe, through other things

00:21:11.060 --> 00:21:14.020
that you're doing, how do I get started in Python?

00:21:14.020 --> 00:21:18.000
How do I make my first big step so that I can get noticed and get a job?

00:21:18.000 --> 00:21:21.000
And you and I both answer these questions fairly often.

00:21:21.000 --> 00:21:21.680
What do you think?

00:21:21.680 --> 00:21:27.160
In my last position, the last job that I had, I spent time every week reviewing resumes and

00:21:27.160 --> 00:21:30.300
doing phone screenings and just interviewing engineers.

00:21:30.300 --> 00:21:37.380
And I would say that having a solid open source portfolio or just anything up there, it's

00:21:37.380 --> 00:21:39.020
definitely a credibility indicator.

00:21:39.020 --> 00:21:44.840
But I don't think it will ever fully tip the scales.

00:21:44.840 --> 00:21:49.460
I think rarely will people get hired purely based on their open source contributions.

00:21:50.260 --> 00:21:54.440
I mean, I'm sure you're always going to have the top 1% of people.

00:21:54.440 --> 00:22:00.720
If Linus Torwells is looking for a new job, well, I'm sure he's not going to have to look

00:22:00.720 --> 00:22:02.240
for a long time.

00:22:02.240 --> 00:22:04.020
But the average person...

00:22:04.020 --> 00:22:04.880
Yeah, I think it's similar.

00:22:04.880 --> 00:22:12.080
If you create something major like Django, Flask, or I mean, if there are like SQLAlchemy,

00:22:12.240 --> 00:22:17.840
for example, like Michael Bay, Bayer doesn't probably need to go and look for a job if

00:22:17.840 --> 00:22:18.660
he doesn't want to, right?

00:22:18.660 --> 00:22:20.760
You could lever those types of things.

00:22:20.760 --> 00:22:26.740
But, you know, fixing, adding a minor feature to even a popular project is not enough alone,

00:22:26.740 --> 00:22:27.240
probably, right?

00:22:27.240 --> 00:22:29.180
But it's one of the building blocks, maybe.

00:22:29.180 --> 00:22:29.860
Yeah, exactly.

00:22:29.860 --> 00:22:33.600
Like, it's not going to be enough alone, but it's still going to be helpful.

00:22:33.600 --> 00:22:34.720
And it's going to be...

00:22:34.720 --> 00:22:36.780
It's more of a long-term play, I think.

00:22:37.380 --> 00:22:38.180
You know, I get...

00:22:38.180 --> 00:22:42.900
Almost every week, I get a question of like, okay, how can I get more stars or likes on

00:22:42.900 --> 00:22:43.760
my GitHub project?

00:22:43.760 --> 00:22:45.500
And how can I do...

00:22:45.500 --> 00:22:49.460
Like, how can I promote this so that it will lead to me getting a job?

00:22:49.460 --> 00:22:54.200
And I think that is probably not the optimal way to go about it.

00:22:54.200 --> 00:22:58.980
I think, you know, what's probably vastly going to increase your chances is just to apply to

00:22:58.980 --> 00:23:00.280
like five jobs every day.

00:23:00.280 --> 00:23:04.160
You know, like, I would rather spend my time with like almost this prospecting work and reaching

00:23:04.160 --> 00:23:07.020
out to people and building relationships and meeting people for coffee.

00:23:07.020 --> 00:23:11.740
rather than thinking like, oh, how can I get 50 more likes on my open source project?

00:23:11.740 --> 00:23:15.480
But I can totally see where that motivation comes from, right?

00:23:15.480 --> 00:23:19.800
Because I feel like when you're from the outside looking in, it can seem like, oh, you know,

00:23:19.800 --> 00:23:24.900
obviously, this person got a job because they have a well-liked or popular open source project.

00:23:24.900 --> 00:23:31.720
But I would see it as a decent signal, but it's not going to be the only thing that's going

00:23:31.720 --> 00:23:32.640
to make you successful.

00:23:33.000 --> 00:23:33.120
Sure.

00:23:33.120 --> 00:23:34.240
Like social proof.

00:23:34.240 --> 00:23:35.980
Like, I applied to a job.

00:23:35.980 --> 00:23:41.560
And when they go to look at my resume and think about what I've done, like, here is proof that

00:23:41.560 --> 00:23:43.440
I actually have done the things I said I've done.

00:23:43.440 --> 00:23:45.240
You can check out the quality and so on.

00:23:45.240 --> 00:23:45.460
Yeah.

00:23:45.460 --> 00:23:45.860
Yeah.

00:23:45.860 --> 00:23:47.300
And it can also backfire, right?

00:23:47.300 --> 00:23:51.740
Like, if you, you know, I've reviewed a bunch of resumes where people, they just had

00:23:51.740 --> 00:23:55.780
forked another project and then put their name in as the author.

00:23:55.780 --> 00:23:58.660
And you could actually see that in the commit history.

00:23:58.660 --> 00:24:02.960
And so that is not a positive signal that you want to give off, right?

00:24:02.960 --> 00:24:04.300
And so, yeah.

00:24:04.300 --> 00:24:05.960
So you've got to balance it with that.

00:24:05.960 --> 00:24:08.520
But in general, I would say, yeah, it's, you know, it's great work.

00:24:08.520 --> 00:24:09.200
It's very rewarding.

00:24:09.200 --> 00:24:12.480
And it can help you find the job of your dreams for sure.

00:24:12.480 --> 00:24:17.500
It's definitely a way that you can get experience in some part of technology where you can't

00:24:17.500 --> 00:24:18.600
immediately find a job.

00:24:18.600 --> 00:24:21.260
But then after you can say, yes, I have experience in this thing.

00:24:21.260 --> 00:24:27.180
So, Anthony, you are in a place where you maybe review some resumes and think about giving

00:24:27.180 --> 00:24:27.780
people jobs.

00:24:27.780 --> 00:24:29.220
What do you think about this kind of briefly?

00:24:29.220 --> 00:24:33.920
Yeah, I've probably interviewed about 300 developers in my lifetime.

00:24:33.920 --> 00:24:39.220
Yeah, I'd say if they include a GitHub profile on their CV, then I'll definitely have a look

00:24:39.220 --> 00:24:39.540
at it.

00:24:39.540 --> 00:24:42.280
And I'll see what kind of projects they work on.

00:24:42.280 --> 00:24:44.660
And look at some of their code styles and stuff like that.

00:24:44.660 --> 00:24:46.400
But that's not a requirement.

00:24:46.400 --> 00:24:49.080
I mean, that will come up in developer interviews anyway.

00:24:49.080 --> 00:24:53.380
We'll talk about, you know, how you break down problems and how you address things.

00:24:53.380 --> 00:25:00.260
But it is good to see people actually, what it tells me more is not that they contribute

00:25:00.260 --> 00:25:00.940
to projects.

00:25:00.940 --> 00:25:04.340
It's that they have a passion outside of their work.

00:25:04.340 --> 00:25:04.740
Yeah.

00:25:04.740 --> 00:25:09.480
So if someone really cares about, I mean, I was interviewing C# developers.

00:25:09.800 --> 00:25:14.920
If someone's really passionate about C#.net or the technology that they work in, they

00:25:14.920 --> 00:25:19.120
will probably have lots of pet projects on the side or maybe just one or two.

00:25:19.120 --> 00:25:21.700
And they probably have other things they want to tinker with.

00:25:21.700 --> 00:25:26.580
And that tells me more about what they're going to be like at work, because if they really care

00:25:26.580 --> 00:25:29.320
about their profession, then they're going to be a great developer.

00:25:29.320 --> 00:25:29.840
Right.

00:25:29.960 --> 00:25:32.480
So I think that's more about what it's about for me.

00:25:32.480 --> 00:25:32.860
Yeah.

00:25:32.860 --> 00:25:36.840
And it's like a signal that this person is something of a self-starter, self-learner and passionate.

00:25:36.840 --> 00:25:38.120
I think that's a huge signal.

00:25:38.120 --> 00:25:41.420
Maybe this is a good point to talk about the website you shared with us a little bit ago.

00:25:41.420 --> 00:25:42.860
Firstpr.me.

00:25:42.860 --> 00:25:44.400
Yeah.

00:25:44.400 --> 00:25:45.120
Yeah.

00:25:45.120 --> 00:25:45.300
Yeah.

00:25:45.300 --> 00:25:45.440
Sure.

00:25:45.440 --> 00:25:46.380
So I found this one.

00:25:46.380 --> 00:25:47.480
Yeah.

00:25:47.480 --> 00:25:50.500
This is a part of First Timers website.

00:25:50.500 --> 00:25:52.520
So there's a couple of really cool links you can look at.

00:25:52.780 --> 00:25:54.800
One is firstpr.me.

00:25:54.800 --> 00:25:58.660
And you can type in someone's GitHub username and it will show you the first pull request

00:25:58.660 --> 00:25:59.340
that they raised.

00:25:59.340 --> 00:26:00.920
So yeah, we had a look.

00:26:00.920 --> 00:26:02.380
Mike, yours was in C#.

00:26:02.380 --> 00:26:03.160
It was.

00:26:03.160 --> 00:26:03.480
Yeah.

00:26:03.480 --> 00:26:05.880
Something with MongoDB.

00:26:05.880 --> 00:26:06.480
Yeah.

00:26:06.480 --> 00:26:06.800
Yeah.

00:26:06.800 --> 00:26:07.960
MongoDB link queries.

00:26:07.960 --> 00:26:09.480
Dan, I was pretty impressed.

00:26:09.480 --> 00:26:13.000
Yours was Python 3 support for a project called PipRot.

00:26:13.000 --> 00:26:20.560
And yeah, mine was the learning Python over a long weekend contribution.

00:26:21.740 --> 00:26:23.140
Yeah, that's really cool.

00:26:23.140 --> 00:26:26.500
And yeah, you can actually, you put in a name there and then there's a link to say,

00:26:26.500 --> 00:26:31.900
show me every pull request that this person has ever made in GitHub, which is a pretty

00:26:31.900 --> 00:26:34.340
good research if you're looking to work with someone.

00:26:34.340 --> 00:26:34.880
Yeah, definitely.

00:26:34.880 --> 00:26:35.780
Yeah.

00:26:35.780 --> 00:26:39.840
There's some other great ways as well to do some background research on people and look

00:26:39.840 --> 00:26:41.020
at what their contributions are.

00:26:41.020 --> 00:26:42.200
It's not just about code commits.

00:26:42.200 --> 00:26:43.360
It's a lot more than that.

00:26:43.360 --> 00:26:43.920
For sure.

00:26:43.920 --> 00:26:44.280
All right.

00:26:44.280 --> 00:26:49.740
So that's a ton of information on like why getting started is good, what it can give you,

00:26:49.740 --> 00:26:51.000
maybe what it won't give you.

00:26:51.360 --> 00:26:52.260
Things like that.

00:26:52.260 --> 00:26:59.720
Now, Dan, I know you've done a lot of work trying to help people basically evaluate open

00:26:59.720 --> 00:27:00.380
source projects.

00:27:00.380 --> 00:27:04.000
And you did some of this around the concept of like packages.

00:27:04.000 --> 00:27:09.200
Like so at PyPI, we have, gosh, I haven't looked for a while, well over 100,000 packages.

00:27:09.600 --> 00:27:13.900
Virtually every one of those is open source and is a thing you could contribute to.

00:27:13.900 --> 00:27:20.260
But, you know, how do I go to find something like that would be good for me if I was looking

00:27:20.260 --> 00:27:21.820
for this, especially if I was somewhat new.

00:27:21.820 --> 00:27:22.400
Yeah.

00:27:22.720 --> 00:27:23.860
That's a huge problem, right?

00:27:23.860 --> 00:27:25.120
Because there's so much stuff.

00:27:25.120 --> 00:27:27.620
It's like a whole forest of packages.

00:27:27.620 --> 00:27:31.420
How do you find the one tree that is just perfect for you?

00:27:31.640 --> 00:27:34.560
It's not too tall and too hard, but it's also not like a weed.

00:27:34.560 --> 00:27:39.060
You want to make your bed out of or whatever.

00:27:39.060 --> 00:27:43.920
And because it's a big liability issue as well, right?

00:27:43.920 --> 00:27:49.260
If you pick the wrong project there, potentially if you're working for a company and that becomes

00:27:49.260 --> 00:27:54.360
part of the code base you're working on, you may have to support this for several years in

00:27:54.360 --> 00:27:55.080
the worst case.

00:27:55.080 --> 00:27:56.200
So, yeah.

00:27:56.200 --> 00:28:01.500
So I've just, you know, just been thinking about the process that I used, that I used,

00:28:01.500 --> 00:28:07.840
that I evolved over time, how to go from, you know, I have a need for like some problem

00:28:07.840 --> 00:28:08.420
that I'm facing.

00:28:08.420 --> 00:28:13.000
Let's say I'm working on, you know, a Django app and I want to add, you know, some special

00:28:13.000 --> 00:28:14.080
form validation or whatever.

00:28:14.080 --> 00:28:21.160
How do I go from having identified this problem to actually finding a good package that I could

00:28:21.160 --> 00:28:22.940
pull in and it would solve my problem?

00:28:22.940 --> 00:28:24.380
I don't have to write it myself.

00:28:24.380 --> 00:28:25.640
I don't have to reinvent the wheel.

00:28:25.640 --> 00:28:30.520
And I think it comes down, you know, from a high level perspective, it comes down to coming

00:28:30.520 --> 00:28:35.940
up with a pool of candidates there, like candidate packages that sort of kind of do what would

00:28:35.940 --> 00:28:36.980
help you, what you're looking for.

00:28:36.980 --> 00:28:40.800
Before you go on, I think one of the things that you touched on there that's interesting is

00:28:40.800 --> 00:28:42.620
it will do what you need to do.

00:28:42.780 --> 00:28:48.080
Like, so I wouldn't necessarily think just randomly hunting GitHub for projects and then

00:28:48.080 --> 00:28:49.960
trying to contribute to them necessarily makes sense.

00:28:49.960 --> 00:28:56.020
But if it's something that you can use, that you can basically, because you need that experience

00:28:56.020 --> 00:29:01.280
of consuming and using the software to even be reasonably able to contribute to it, I think.

00:29:01.280 --> 00:29:01.980
Yeah, absolutely.

00:29:01.980 --> 00:29:05.960
I think it's not, like open source isn't a silver bullet, right?

00:29:05.960 --> 00:29:11.960
Where you can just go in and it's like going to a candy store and like whatever you get

00:29:11.960 --> 00:29:13.380
there will be great for you.

00:29:13.380 --> 00:29:15.220
I mean, it's, well, not even in a candy store.

00:29:15.220 --> 00:29:15.900
It's like that, right?

00:29:15.900 --> 00:29:16.520
It feels great.

00:29:16.520 --> 00:29:20.900
But then, you know, a day later, you're going to pay the price for that.

00:29:20.900 --> 00:29:22.880
Oh my God, all these horrible analogies.

00:29:23.340 --> 00:29:27.480
But yeah, no, it really, I think it really, it really comes down, like really identifying

00:29:27.480 --> 00:29:31.260
this need and also having the knowledge to know what you're really looking for, because

00:29:31.260 --> 00:29:34.800
otherwise it's just impossible to find a good solution.

00:29:34.800 --> 00:29:36.000
Yeah, for sure.

00:29:36.000 --> 00:29:36.840
Okay.

00:29:36.860 --> 00:29:41.420
So you talked about checking the package popularity as one of the things.

00:29:41.420 --> 00:29:41.740
Yeah.

00:29:41.740 --> 00:29:42.060
Yeah.

00:29:42.060 --> 00:29:46.460
And I think it all comes, for me, all comes down to these, having these heuristics because

00:29:46.460 --> 00:29:47.620
there's so many packages there.

00:29:47.620 --> 00:29:53.940
You got to have some heuristics to just cut that list down to size so that you can ideally

00:29:53.940 --> 00:29:55.420
select something that works for you.

00:29:55.420 --> 00:29:58.920
And I think there's a good way to do that is, for example, to go through a curated list.

00:29:58.920 --> 00:30:03.740
For example, there's awesome, awesome Python at awesome-python.com.

00:30:03.740 --> 00:30:04.240
Yeah.

00:30:04.240 --> 00:30:08.660
And they have a curated list of packages and that's also an open source project where

00:30:08.660 --> 00:30:11.240
people can add new projects that they liked.

00:30:11.240 --> 00:30:14.840
And it's sort of a filtered view of everything that's out there.

00:30:14.840 --> 00:30:17.200
But obviously it's not going to cover everything.

00:30:17.200 --> 00:30:18.960
So this is also not a panacea, right?

00:30:18.960 --> 00:30:23.620
So you got to do some legwork and look at Stack Overflow and maybe see if you can find some

00:30:23.620 --> 00:30:28.100
Reddit comments on a particular package just to get a feel for the quality of it.

00:30:28.100 --> 00:30:29.000
Yep, absolutely.

00:30:29.000 --> 00:30:33.820
I think the project homepage and the readme, those kind of play similar roles.

00:30:34.080 --> 00:30:41.120
Those give big indicators of does the person who created this project really care about it?

00:30:41.120 --> 00:30:45.080
So is it worth my time to contribute?

00:30:45.080 --> 00:30:49.440
You only want to contribute to a project where the maintainer actually cares about the thing.

00:30:49.440 --> 00:30:49.680
Yeah.

00:30:49.680 --> 00:30:53.700
Or where you're confident actually becoming the maintainer yourself, right?

00:30:53.700 --> 00:30:54.160
Yeah.

00:30:54.240 --> 00:30:58.200
That's why I always want to spot check the source code and think about it.

00:30:58.200 --> 00:31:01.820
Would I feel comfortable making changes to this project myself?

00:31:01.820 --> 00:31:04.960
Would my team feel comfortable making changes to this project?

00:31:04.960 --> 00:31:10.520
Because otherwise you have, it's almost like you're pulling in this binary blob that no one really

00:31:10.520 --> 00:31:11.440
understands, right?

00:31:11.460 --> 00:31:12.460
And it is Python source code.

00:31:12.460 --> 00:31:17.460
But if it's a really complicated project, then that could really derail things.

00:31:17.460 --> 00:31:22.040
And you might be better off going with a different solution or coming up with a custom solution.

00:31:22.040 --> 00:31:27.260
So I think it's always, it's all about these trade-offs and really scrutinizing what you're

00:31:27.260 --> 00:31:29.940
bringing in into your system there.

00:31:29.940 --> 00:31:30.240
Sure.

00:31:30.240 --> 00:31:30.720
Absolutely.

00:31:31.520 --> 00:31:37.480
Ronald, what do you use as a way to find projects that you can contribute to?

00:31:37.480 --> 00:31:40.800
It was really hard to get into open source.

00:31:40.800 --> 00:31:46.400
I asked around on social media because I just wanted to get involved in open source.

00:31:46.400 --> 00:31:50.960
Most people recommended OpenShift as one of the projects.

00:31:50.960 --> 00:31:59.440
So I went there and to be honest with you, I understood nothing about everything.

00:31:59.440 --> 00:32:01.220
Yeah, that's a big project, right?

00:32:01.220 --> 00:32:02.220
Yeah.

00:32:02.220 --> 00:32:03.220
Yeah.

00:32:03.220 --> 00:32:03.220
Yeah.

00:32:03.220 --> 00:32:04.220
Yeah.

00:32:04.220 --> 00:32:08.980
And people were saying this is the easiest project to start on and stuff like that.

00:32:08.980 --> 00:32:16.820
So I backed up a little bit and tried to start with local projects.

00:32:16.820 --> 00:32:27.940
So for example, I started with contributing for the Taikon Zimbabwe website and the Thai ladies

00:32:27.940 --> 00:32:30.520
website, stuff like that, the symbol stuff.

00:32:30.520 --> 00:32:31.080
Yeah.

00:32:31.080 --> 00:32:32.880
So that makes a lot of sense to start there.

00:32:32.880 --> 00:32:33.240
Yeah.

00:32:33.240 --> 00:32:41.560
So still now I'm trying to get into bigger projects, but the choices like how to choose

00:32:41.560 --> 00:32:46.800
the best project, which is too young, which is not too deep.

00:32:46.800 --> 00:32:48.600
It's a little bit hard.

00:32:48.600 --> 00:32:52.100
It's still very hard for me to find out that.

00:32:52.280 --> 00:32:52.400
Yeah.

00:32:52.400 --> 00:32:53.420
It is a challenge.

00:32:53.420 --> 00:32:59.600
One thing I'll throw in there is I mentioned Adriana Lowe's imposter syndrome disclaimer.

00:32:59.600 --> 00:33:06.580
I went and I took just that text, like a piece of text, the title of that, and I threw it into

00:33:06.580 --> 00:33:11.420
GitHub and I searched for projects that had adopted that disclaimer, which is like, hey,

00:33:11.420 --> 00:33:12.620
you're welcome to get started.

00:33:12.800 --> 00:33:17.580
So I thought that's, I found 23 projects so far that have that in there.

00:33:17.580 --> 00:33:20.920
So those are places where newcomers are welcome, I guess.

00:33:20.920 --> 00:33:26.280
Anthony, it's not just writing code necessarily that people can help with.

00:33:26.360 --> 00:33:32.000
There's documentation, there's examples, there's evaluating issues and PRs, like a first pass

00:33:32.000 --> 00:33:33.800
to see if they make sense, things like that, right?

00:33:33.800 --> 00:33:34.500
Yeah, yeah, sure.

00:33:34.500 --> 00:33:38.280
So I think the kind of case that you're talking about is quite typical.

00:33:38.280 --> 00:33:41.660
It's the sort of Goldilocks and the GitHub projects.

00:33:41.660 --> 00:33:45.660
Like you're trying to find one that's not too big and too complicated, that's not too small

00:33:45.660 --> 00:33:48.940
and doesn't get maintained and maybe find something in the middle.

00:33:48.940 --> 00:33:54.220
And I think people have this expectation that their first open source contribution would be

00:33:54.220 --> 00:33:58.180
like this killer PR where they like, you know, improve.

00:33:58.180 --> 00:34:03.100
Oh, I fixed this bug or, you know, I've added 20% performance improvement.

00:34:03.100 --> 00:34:08.680
And it's, and really as a project maintainer as well, whilst I would love those pull requests,

00:34:08.680 --> 00:34:10.900
there's a lot of other stuff that we do need.

00:34:10.900 --> 00:34:15.340
And it's contributions to an open source project and not just about code.

00:34:15.340 --> 00:34:18.540
So this is simple stuff like code reviews.

00:34:18.540 --> 00:34:22.040
Like you don't have to be a maintainer of the project to do code reviews.

00:34:22.040 --> 00:34:27.740
So if you see a fairly popular open source project and, you know, you're pretty good at

00:34:27.740 --> 00:34:31.820
reviewing, reviewing other people's code, maybe you do that as part of your job, then

00:34:31.820 --> 00:34:35.740
there's nothing stopping you going in someone else's project and doing code reviews.

00:34:35.740 --> 00:34:40.740
Obviously you have to understand their style guidelines, you know, what the rules are for

00:34:40.740 --> 00:34:42.800
that particular project and what their preference is.

00:34:42.800 --> 00:34:47.840
But, you know, code reviews, I'd love more people to, to do code reviews on projects that

00:34:47.840 --> 00:34:48.400
I work on.

00:34:49.180 --> 00:34:50.840
Documentation is also a really popular one.

00:34:50.840 --> 00:34:55.980
So quite recently I contributed some to the Beware project.

00:34:55.980 --> 00:34:59.560
Russell Keith-Magee, he's been a guest in a past episode.

00:34:59.560 --> 00:34:59.800
Yeah.

00:34:59.800 --> 00:35:00.780
And he's very welcoming.

00:35:00.780 --> 00:35:03.540
That project is very welcoming to newcomers as well, by the way.

00:35:03.540 --> 00:35:04.160
Yeah, definitely.

00:35:04.160 --> 00:35:07.540
And my first contribution was to write a blog article about how to use it.

00:35:07.540 --> 00:35:11.240
And then whilst doing that, I think I learned more about the project and how it worked.

00:35:11.240 --> 00:35:17.100
And then my other contributions were all documentation because that was kind of the gap that I saw

00:35:17.100 --> 00:35:21.100
at the time was that, you know, for me to get up and started with the project, there were

00:35:21.100 --> 00:35:22.460
a few things which weren't super clear.

00:35:22.460 --> 00:35:26.800
So taking that learning and sharing that back with the project.

00:35:26.920 --> 00:35:34.540
This is really about where you want to be an experienced user of the project in order to make valuable

00:35:34.540 --> 00:35:35.120
contributions.

00:35:35.120 --> 00:35:39.880
So to start off with, those contributions could be testing and documentation.

00:35:39.880 --> 00:35:47.240
And I don't think people should be making drastic code changes to a project if they can't at least

00:35:47.240 --> 00:35:51.820
document the thing they're changing or they can't write a test to prove that it already works.

00:35:51.820 --> 00:35:56.800
So, yeah, especially for big, complicated projects, you know, you might find that maintainers are

00:35:56.800 --> 00:36:01.600
not going to be very comfortable with someone coming in to a project and making some drastic

00:36:01.600 --> 00:36:05.900
changes because you've got, you don't know what other expectations there might be for the

00:36:05.900 --> 00:36:06.380
users.

00:36:06.380 --> 00:36:08.760
So, yeah, documentation and the tests are really great.

00:36:08.760 --> 00:36:11.800
And also contributions, more softer contributions.

00:36:11.800 --> 00:36:16.220
So this could just be presenting at your local Python meetup about a project.

00:36:16.220 --> 00:36:20.780
This could be, you know, blogging about it, tweeting about it, sharing it on social media,

00:36:20.780 --> 00:36:23.960
like as well as a maintainer of projects.

00:36:23.960 --> 00:36:28.480
Like I really value those contributions because those are people helping out with the whole

00:36:28.480 --> 00:36:28.940
community.

00:36:28.940 --> 00:36:30.720
They're not just helping out on the code base.

00:36:30.720 --> 00:36:33.760
And sometimes that's actually most of the work.

00:36:33.760 --> 00:36:37.960
This portion of Talk Python is brought to you by us.

00:36:37.960 --> 00:36:42.120
As many of you know, I have a growing set of courses to help you go from Python beginner

00:36:42.120 --> 00:36:43.880
to novice to Python expert.

00:36:43.880 --> 00:36:45.900
And there are many more courses in the works.

00:36:45.900 --> 00:36:50.160
So please consider Talk Python training for you and your team's training needs.

00:36:50.320 --> 00:36:54.720
If you're just getting started, I've built a course to teach you Python the way professional

00:36:54.720 --> 00:36:56.580
developers learn by building applications.

00:36:56.580 --> 00:37:01.660
Check out my Python jumpstart by building 10 apps at talkpython.fm/course.

00:37:01.660 --> 00:37:04.780
Are you looking to start adding services to your app?

00:37:04.780 --> 00:37:07.940
Try my brand new consuming HTTP services in Python.

00:37:07.940 --> 00:37:13.380
You'll learn to work with RESTful HTTP services as well as SOAP, JSON, and XML data formats.

00:37:13.380 --> 00:37:15.240
Do you want to launch an online business?

00:37:15.600 --> 00:37:19.440
Well, Matt Makai and I built an entrepreneur's playbook with Python for Entrepreneurs.

00:37:19.440 --> 00:37:24.300
This 16-hour course will teach you everything you need to launch your web-based business with

00:37:24.300 --> 00:37:24.680
Python.

00:37:24.680 --> 00:37:28.220
And finally, there's a couple of new course announcements coming really soon.

00:37:28.220 --> 00:37:32.740
So if you don't already have an account, be sure to create one at training.talkpython.fm

00:37:32.740 --> 00:37:33.680
to get notified.

00:37:34.080 --> 00:37:37.460
And for all of you who have bought my courses, thank you so much.

00:37:37.460 --> 00:37:39.400
It really, really helps support the show.

00:37:40.220 --> 00:37:44.460
One of the issues, I guess I didn't bring this up in the finding the right project, but one

00:37:44.460 --> 00:37:49.960
of the things that I look at, it's not a deal killer if it's in a bad state, but something

00:37:49.960 --> 00:37:55.680
I think is a really strong signal of the health of an open source project is how many open PRs

00:37:55.680 --> 00:38:00.140
are there and how many open issues are there, especially unaddressed?

00:38:00.140 --> 00:38:04.840
Like how many people have tried to contribute a feature to this and it wasn't even responded

00:38:04.840 --> 00:38:05.100
to?

00:38:05.100 --> 00:38:09.440
How many people have filed an issue and tried to ask for an improvement and it wasn't even

00:38:09.440 --> 00:38:10.400
responded to?

00:38:10.400 --> 00:38:11.700
I don't know.

00:38:11.700 --> 00:38:12.820
How do you feel about that?

00:38:12.820 --> 00:38:17.600
Yeah, there's a few projects that I work on where I've tried to fix things in the past

00:38:17.600 --> 00:38:23.220
and the maintainers have maybe written the project as part of their day jobs and then they've

00:38:23.220 --> 00:38:26.100
moved companies or they're just not interested in maintaining it.

00:38:26.100 --> 00:38:30.720
And the solution was actually to raise an issue saying, this is a notice for anyone else.

00:38:30.720 --> 00:38:32.560
I'm taking this party somewhere else.

00:38:32.560 --> 00:38:37.440
And then basically just maintaining a fork and publishing a separate package on PyPI.

00:38:37.440 --> 00:38:42.380
So that's actually kind of taking it on really and forking a project.

00:38:42.380 --> 00:38:48.840
And open source is, if you go and look at the Linux distro graph, it's a sort of history

00:38:48.840 --> 00:38:50.140
of Linux distributions.

00:38:50.140 --> 00:38:54.640
Now you can see how they've gone the same way in OSS.

00:38:54.640 --> 00:38:55.980
Yeah, it's pretty interesting.

00:38:55.980 --> 00:39:01.420
It's kind of like the nuclear option, but sometimes it has to be done if it really is abandoned.

00:39:01.560 --> 00:39:03.920
Yeah, give them a chance, give them an opportunity.

00:39:03.920 --> 00:39:09.580
But if you're still using software and you need things fixed and you need bugs updated or you

00:39:09.580 --> 00:39:14.560
need it to work with Python 3, for example, then absolutely I'd encourage building a fork,

00:39:14.560 --> 00:39:18.500
but then also maintaining a fork and publishing it as well so other people can access it.

00:39:18.500 --> 00:39:18.740
Yeah.

00:39:18.740 --> 00:39:24.080
Ronald, what advice do you have for like, are there things that you do that you found that

00:39:24.080 --> 00:39:29.580
like when you're filing a new issue or issuing a PR to an open source project that you do

00:39:29.580 --> 00:39:34.600
that make it more likely to be accepted or received well by the person running the project?

00:39:34.600 --> 00:39:43.440
One of the things that I do is I don't want people to suspect what my PR will solve.

00:39:44.300 --> 00:39:50.780
So on the comment, I will state exactly what the PR is doing.

00:39:50.780 --> 00:39:58.660
This way, it's easier for the maintainer to either accept or reject your pull request.

00:39:58.660 --> 00:40:05.000
It's actually a very easy way for dealing with small projects.

00:40:05.000 --> 00:40:11.000
When they get to bigger projects, maintainers may not read those comments, you know.

00:40:11.180 --> 00:40:16.360
So it just depends with the type of project that you're involved in.

00:40:16.360 --> 00:40:16.640
Yeah.

00:40:16.640 --> 00:40:23.360
I guess having a really clear, well thought out, well structured message or comment associated

00:40:23.360 --> 00:40:27.560
with the PR or the issue or whatever, it makes it seem like you're serious and it makes it

00:40:27.560 --> 00:40:29.240
easier to understand what's going on.

00:40:29.240 --> 00:40:34.440
Like some people just throw out like a sentence or some like very small thing and, you know,

00:40:34.440 --> 00:40:36.380
how serious do you want to take that work, right?

00:40:36.380 --> 00:40:37.020
Yeah.

00:40:37.020 --> 00:40:37.380
Yeah.

00:40:37.380 --> 00:40:38.080
That's it.

00:40:38.080 --> 00:40:38.780
Sure.

00:40:39.880 --> 00:40:40.740
Dan, how about you?

00:40:40.740 --> 00:40:45.460
When you're evaluating a PR or issues or things like that, what do you look for?

00:40:45.460 --> 00:40:51.180
I think for me, you know, when I became a maintainer of an open source project and I started getting

00:40:51.180 --> 00:40:57.000
PRs, for me, the key realization was at some point, hey, this is really more, this is a social

00:40:57.000 --> 00:41:05.120
project and not so much, not only a technical project, you know, where we're just looking for

00:41:05.120 --> 00:41:06.620
technical solutions for things.

00:41:06.840 --> 00:41:12.540
And I think it is really important, like whether you're running a project, an open source project,

00:41:12.540 --> 00:41:16.080
or whether you're contributing to one, or maybe you want to get the foot in the door there,

00:41:16.080 --> 00:41:22.920
just to be very careful around the social dynamics there and basically just, you know, being friendly,

00:41:22.920 --> 00:41:25.320
like introduce yourself and just say hi.

00:41:25.480 --> 00:41:30.380
And instead of, you know, maybe just instead of throwing a bunch of code over the wall,

00:41:30.380 --> 00:41:35.020
actually try and understand to see where, which direction this project is going.

00:41:35.020 --> 00:41:35.340
Right.

00:41:35.340 --> 00:41:35.980
That's a good point.

00:41:35.980 --> 00:41:42.700
We talked about before we hit record, like how we've all submitted PRs and actually we had

00:41:42.700 --> 00:41:47.080
solved a problem, but it was actually taking the project in a direction that wasn't part

00:41:47.080 --> 00:41:47.540
of the roadmap.

00:41:47.540 --> 00:41:49.160
They weren't interested in going that way.

00:41:49.220 --> 00:41:52.980
And so we did all this work and threw it at them and they're like, you know, this is really

00:41:52.980 --> 00:41:56.560
cool, but it's, we're not going to take it because it's just not where we're trying to

00:41:56.560 --> 00:41:56.980
go with this.

00:41:56.980 --> 00:41:57.160
Right.

00:41:57.160 --> 00:41:57.460
Yeah.

00:41:57.460 --> 00:41:57.660
Yeah.

00:41:57.660 --> 00:41:59.720
And it feels bad on both, both sides.

00:41:59.720 --> 00:42:00.020
Right.

00:42:00.020 --> 00:42:04.540
Like as a contributor, it feels not that great if you're putting in all that work and you feel

00:42:04.540 --> 00:42:04.940
rejected.

00:42:04.940 --> 00:42:09.440
And as a maintainer, you feel horrible because you have to reject someone's potentially very

00:42:09.440 --> 00:42:10.100
good work.

00:42:10.220 --> 00:42:15.180
You know, we can see they invested a lot of time into this, but it just takes the project

00:42:15.180 --> 00:42:16.200
into a different direction.

00:42:16.200 --> 00:42:21.180
And what's also important to realize is that as a maintainer, you have a lot of responsibility

00:42:21.180 --> 00:42:24.100
to actually be able to maintain the project.

00:42:24.100 --> 00:42:29.040
If there's a new feature that you don't fully understand yourself, maybe that hasn't been

00:42:29.040 --> 00:42:30.520
requested by other people before.

00:42:30.520 --> 00:42:36.500
I'm always leaning towards not bringing that feature in because I want to be very careful

00:42:36.500 --> 00:42:39.100
that I actually know what's going on with the project.

00:42:39.280 --> 00:42:44.900
It's very easy to get a mixture of different code styles and just a mixture, like just,

00:42:44.900 --> 00:42:51.260
you know, architecturally to have a quickly very unmaintainable project or very unmaintainable

00:42:51.260 --> 00:42:51.820
code base.

00:42:51.820 --> 00:42:55.980
And it's just so much harder to go back and rewind and then say, oh, you know what?

00:42:55.980 --> 00:42:58.800
Now we're going to spend like some time on rebuilding this thing.

00:42:58.800 --> 00:43:05.060
And I feel like that's harder to do than just being very careful about what contributions you

00:43:05.060 --> 00:43:08.040
take on in which direction you grow the project.

00:43:08.040 --> 00:43:08.500
Sure.

00:43:08.680 --> 00:43:12.600
How do you feel about things like continuous integration, you know, Travis CI and that

00:43:12.600 --> 00:43:18.680
kind of stuff that sort of evaluates from a correctness standard, the PRs initially?

00:43:18.680 --> 00:43:18.920
Yeah.

00:43:18.920 --> 00:43:19.740
Yeah.

00:43:19.740 --> 00:43:21.200
Oh, it's great that you're bringing that up.

00:43:21.200 --> 00:43:25.660
I think it's these days it's table stakes for any open source project, right?

00:43:25.660 --> 00:43:26.920
It's so easy to set that up.

00:43:27.100 --> 00:43:33.420
If you just have a circle CI or Travis CI, they all have free plans for open source projects.

00:43:33.420 --> 00:43:38.100
So they're like free build server farms where you can build your project and then you get,

00:43:38.100 --> 00:43:42.160
you know, you get a notification via email and a comment on your pull requests.

00:43:42.540 --> 00:43:47.300
And you can set it up so that it runs a PEP 8 check or a linter check on your project and

00:43:47.300 --> 00:43:48.300
runs all of the tests.

00:43:48.300 --> 00:43:52.960
And that's going to make it easier also for you as the maintainer and also for a contributor

00:43:52.960 --> 00:43:55.560
just to cut down on some of that back and forth.

00:43:55.560 --> 00:43:57.640
You know, we're not following the code style here.

00:43:57.720 --> 00:43:59.840
Like it just reduces the code review time.

00:43:59.840 --> 00:44:04.440
I think any open source project should take advantage of that, that kind of technology.

00:44:04.440 --> 00:44:05.300
Yeah, I totally agree.

00:44:05.300 --> 00:44:09.680
I think one of the interesting things is you mentioned this is a social experience.

00:44:09.680 --> 00:44:17.660
There were some studies done that said people are less frustrated by getting this nitpicky

00:44:17.660 --> 00:44:22.740
feedback from a machine rather than from another person.

00:44:22.740 --> 00:44:25.900
So let it, let it say, no, your indentation is wrong.

00:44:25.900 --> 00:44:27.600
No, this doesn't have a doc string.

00:44:27.880 --> 00:44:33.540
Whatever, as like before the thing is accepted, just like I'll, I'll review it once you pass

00:44:33.540 --> 00:44:34.640
the continuous integration.

00:44:34.640 --> 00:44:35.020
Right.

00:44:35.020 --> 00:44:35.740
That's really nice.

00:44:35.740 --> 00:44:36.040
Yeah.

00:44:36.040 --> 00:44:36.320
Yeah.

00:44:36.320 --> 00:44:38.400
And then I'm a very nitpicky code reviewer.

00:44:38.400 --> 00:44:42.580
And, you know, when I, when I became a team lead, like one of the things that I realized

00:44:42.580 --> 00:44:45.940
very quickly is that you got to absolutely pick your battles, right?

00:44:45.940 --> 00:44:47.740
Because you're just going to be upsetting people.

00:44:47.740 --> 00:44:48.240
Yeah.

00:44:48.240 --> 00:44:53.640
So having a linter in place on your CI infrastructure, continuous integration infrastructure, it should

00:44:53.640 --> 00:44:56.560
take, it just takes away some of those, those discussions.

00:44:57.220 --> 00:44:57.360
Yeah.

00:44:57.360 --> 00:44:57.660
Yeah.

00:44:57.660 --> 00:44:59.380
Everybody got to make the test green.

00:44:59.380 --> 00:45:00.280
It's not my fault.

00:45:00.280 --> 00:45:01.000
The machine says.

00:45:01.000 --> 00:45:03.740
I can't, sorry.

00:45:03.740 --> 00:45:04.820
I can't do that, Dave.

00:45:04.820 --> 00:45:05.360
That's right.

00:45:05.360 --> 00:45:06.420
Sorry, Dave.

00:45:06.420 --> 00:45:11.640
Anthony, you know, another thing that's worth talking about when we're talking about running

00:45:11.640 --> 00:45:12.960
a project is, is burnout.

00:45:13.160 --> 00:45:17.060
So it's one thing to, you know, I talked about the, like the unanswered PRs, the unanswered

00:45:17.060 --> 00:45:17.820
issues and stuff.

00:45:17.820 --> 00:45:25.700
But the other, the dark side of that, if you will, is people expect that you maintain your

00:45:25.700 --> 00:45:30.640
projects at like often really unreasonable levels, right?

00:45:30.640 --> 00:45:31.660
Like you have this project.

00:45:31.660 --> 00:45:32.980
I filed a PR.

00:45:32.980 --> 00:45:34.300
Why isn't it here yet?

00:45:34.300 --> 00:45:36.460
You know, and people have jobs, they have lives, they're busy.

00:45:36.460 --> 00:45:38.340
There's burnout as a real issue here as well.

00:45:38.340 --> 00:45:38.560
Right.

00:45:38.880 --> 00:45:39.120
Hmm.

00:45:39.120 --> 00:45:40.000
Yeah, definitely.

00:45:40.000 --> 00:45:45.600
And a lot of people that contribute to open source do so in their spare time as well.

00:45:45.600 --> 00:45:52.460
So I think the expectations people have for maintainers, for reviewers is, is pretty high.

00:45:52.720 --> 00:45:54.540
And sometimes a little bit unreasonable.

00:45:54.540 --> 00:45:59.320
I mean, as part of my day job, I think I manage 26 people.

00:45:59.320 --> 00:46:02.020
You know, I've got a lot of things to do during the day.

00:46:02.020 --> 00:46:06.860
I've also got three children, you know, so I've got a family and a house to also maintain.

00:46:06.860 --> 00:46:10.320
These things kind of add up and it's important for me.

00:46:10.320 --> 00:46:15.820
I think for me, I kind of make sure that I'm realistic about setting expectations with people

00:46:15.820 --> 00:46:20.840
about how much I'm going to work on a project and actually not feeling guilty to say, you

00:46:20.840 --> 00:46:24.460
know what, I'm going to step back for a bit because, you know, I've got other things to

00:46:24.460 --> 00:46:25.000
focus on.

00:46:25.000 --> 00:46:30.680
I think I'd found in the past, especially focusing on really unhealthy things like your GitHub

00:46:30.680 --> 00:46:36.460
contribution graph, like how many recurring days you've done was called the running streak

00:46:36.460 --> 00:46:39.580
was like how many days in a row you've contributed to open source.

00:46:40.460 --> 00:46:44.560
And GitHub actually took this feature out because it was really encouraging the wrong

00:46:44.560 --> 00:46:45.040
behavior.

00:46:45.040 --> 00:46:51.140
Like for my contribution graph, really, I make sure that I've got a good, healthy number of

00:46:51.140 --> 00:46:55.740
days where I'm not contributing anything because I'm spending time away, you know, I'm spending

00:46:55.740 --> 00:46:58.800
time with my kids and actually trying to get that separation.

00:46:58.800 --> 00:47:05.000
Otherwise, people kind of feel obliged to constantly, you know, almost be on call for a project and

00:47:05.000 --> 00:47:09.660
remembering that, you know, this is your time, this is your contribution and there's no

00:47:09.660 --> 00:47:15.460
obligation and actually try and invest some of that time into getting other people to

00:47:15.460 --> 00:47:17.140
help out and getting other people to contribute.

00:47:17.140 --> 00:47:22.500
Because, you know, if you advertise a project more, if you try and delegate work better, then

00:47:22.500 --> 00:47:26.140
those kind of skills that you'll learn from open source will absolutely help you in your

00:47:26.140 --> 00:47:26.940
day-to-day job.

00:47:26.940 --> 00:47:32.040
Like that's a really typical problem that developers have, I think, because they kind of work their

00:47:32.040 --> 00:47:37.200
way up the ranks is that they, you know, get to be the technical specialist for a particular

00:47:37.200 --> 00:47:42.280
project or the principal, for example, and everyone comes to them with queries day and

00:47:42.280 --> 00:47:48.260
night and they burn themselves out because they don't learn how to delegate work.

00:47:48.260 --> 00:47:51.200
So, you know, that's a really, really critical skill.

00:47:51.200 --> 00:47:54.180
I think people have to learn and you can do that open source.

00:47:54.180 --> 00:47:55.640
You can do that during your day job.

00:47:55.740 --> 00:47:59.700
But if you work in technology, you're going to have to figure that out at some point because

00:47:59.700 --> 00:48:05.480
otherwise you're going to be the go-to person for that piece of technology and you're going

00:48:05.480 --> 00:48:08.060
to be supporting it for the next 35 years.

00:48:08.060 --> 00:48:09.520
And do you really want to do that?

00:48:09.520 --> 00:48:11.880
Yeah, that's a really good point.

00:48:12.340 --> 00:48:18.860
So maybe that's a great way to segue to our last topic, which is if you're running an open

00:48:18.860 --> 00:48:20.960
source project, how do you make it attractive?

00:48:20.960 --> 00:48:23.360
Like how do you, how do you attract people to it?

00:48:23.360 --> 00:48:25.300
Because then you'll get help, right?

00:48:25.300 --> 00:48:30.480
You'll get people to come along and help with the code review, help adding new features, help

00:48:30.480 --> 00:48:32.060
write the documentation and so on.

00:48:32.540 --> 00:48:33.940
So, Ronald, let's start with you.

00:48:33.940 --> 00:48:39.220
What are some of the things you think people running projects can do to make their project

00:48:39.220 --> 00:48:42.940
attractive to folks like you who want to contribute to open source?

00:48:42.940 --> 00:48:43.600
Okay.

00:48:43.600 --> 00:48:49.440
So the first thing, it's little, but it's a big deal.

00:48:49.440 --> 00:48:53.220
The first thing for PRI did, it was accepted.

00:48:53.220 --> 00:49:00.180
But then I was new to open source, so I was not sure, was it accepted?

00:49:00.180 --> 00:49:01.400
Was it rejected?

00:49:01.960 --> 00:49:09.620
I wasn't sure where it was because I was trying to learn Git at the same time trying

00:49:09.620 --> 00:49:10.740
to contribute.

00:49:10.740 --> 00:49:19.440
So that small message just to say thank you or that small comment to say your code is okay

00:49:19.440 --> 00:49:20.720
but you have to fix your hand.

00:49:20.720 --> 00:49:22.360
It's really important.

00:49:22.360 --> 00:49:29.680
And that's one of the things that can attract people to your project because most of these

00:49:29.680 --> 00:49:33.620
projects, you get into them through referrals.

00:49:33.620 --> 00:49:34.500
Right?

00:49:34.500 --> 00:49:40.340
So if I enjoy the way I'm working with you on a project, definitely I'm going to reference

00:49:40.340 --> 00:49:41.920
the next person who's close.

00:49:42.800 --> 00:50:01.460
So I have this notion that the coding part of things is easy.

00:50:02.460 --> 00:50:08.880
But the project framework is the most hard part.

00:50:08.880 --> 00:50:15.240
So when you're trying to start your open source project, make sure there is a story behind

00:50:15.240 --> 00:50:16.320
your project.

00:50:16.320 --> 00:50:19.340
Like tell us your situation.

00:50:19.340 --> 00:50:20.980
Because countries are different.

00:50:20.980 --> 00:50:22.040
Cultures are different.

00:50:22.040 --> 00:50:22.340
Right?

00:50:22.440 --> 00:50:25.780
So try to explain your issue, what you're trying to solve.

00:50:25.780 --> 00:50:33.360
Then make clear frameworks of what you want things to be done.

00:50:33.360 --> 00:50:34.300
Right?

00:50:34.600 --> 00:50:41.820
And then from there, people can get there and they don't have to ask questions.

00:50:41.820 --> 00:50:48.120
Because when someone is getting into a new project, they are afraid of being embarrassed.

00:50:48.120 --> 00:50:50.740
So they don't want to ask questions.

00:50:51.000 --> 00:50:57.720
So try as much as possible to make sure that people don't ask questions, to make sure that

00:50:57.720 --> 00:51:00.840
people that want to contribute feel appreciated.

00:51:00.840 --> 00:51:08.520
Anthony said it a while ago that an open source contributor, you have put a lot of work into it.

00:51:08.520 --> 00:51:18.340
And it's hard to just know that your work has been rejected and there is no message for that thing.

00:51:18.340 --> 00:51:20.080
Something that's just sad.

00:51:20.080 --> 00:51:25.160
So firstly, for me, firstly, is that little message.

00:51:25.160 --> 00:51:33.800
Just communicate with your contributors, whether you accept or you don't accept their PRs.

00:51:33.800 --> 00:51:42.640
Yeah, I think this is important because, like I said, having the unaddressed issues, the empty PRs, that looks really bad for the project.

00:51:42.640 --> 00:51:48.960
Even if you have to reject them or close the issue, just having that communication there makes a big difference.

00:51:48.960 --> 00:51:50.580
Yeah, that's absolutely right.

00:51:50.580 --> 00:51:54.700
And then ensure that the frameworks are okay.

00:51:54.700 --> 00:52:00.260
Maybe it's just me, but to me, putting up those frameworks is the hard part.

00:52:00.260 --> 00:52:00.860
Right?

00:52:01.080 --> 00:52:04.640
So the coding part of it is really simple.

00:52:04.640 --> 00:52:09.700
Maybe you may differ in the direction that one person wants to go and the other wants to go.

00:52:09.700 --> 00:52:21.400
So if those things are clear and even putting a background information of your project, if it applies in that situation, it will be so helpful.

00:52:21.400 --> 00:52:28.100
So that's what I think people should do to attract more people on their project.

00:52:28.260 --> 00:52:28.940
Yeah, awesome.

00:52:28.940 --> 00:52:37.140
Certainly having that disclaimer I talked about before to say you're welcome or like the things like the Beware folks have, they have almost a mentorship program.

00:52:37.140 --> 00:52:40.360
So making it very clear that newcomers are welcome, I think, is a big deal.

00:52:40.360 --> 00:52:42.700
Dan, you spoke of continuous integration.

00:52:42.700 --> 00:52:47.120
That's probably another good signal that you care about your project.

00:52:47.120 --> 00:52:48.840
What else would you recommend there?

00:52:48.840 --> 00:52:54.740
So I think there are definitely some very actionable tactics that your listeners could apply.

00:52:54.740 --> 00:52:57.280
So I'm just going to throw out some of them.

00:52:57.280 --> 00:53:04.300
And this is not going to be, you know, this is going to not not going to solve everything and just make your project super popular.

00:53:04.620 --> 00:53:05.960
But I think it definitely helps.

00:53:05.960 --> 00:53:14.900
And so a couple of things you can do there is just having a really clear one sentence description of what your project is for, you know, what it what it does and for who.

00:53:14.900 --> 00:53:17.580
Like what's the benefit to your user?

00:53:17.780 --> 00:53:19.220
And you can actually put that on GitHub.

00:53:19.220 --> 00:53:26.360
You can put it in the they have like a I guess like a tagline or subheading setting all the way up there or put it like right on the readme.

00:53:26.360 --> 00:53:28.740
And I found that a lot of times that is missing.

00:53:28.740 --> 00:53:33.100
And sometimes, you know, I find something that I feel like this seems like it sort of relates what I'm trying to do.

00:53:33.100 --> 00:53:35.080
But what does it actually do?

00:53:35.080 --> 00:53:37.080
And I think that is really important.

00:53:37.080 --> 00:53:39.240
Just being very clear about it.

00:53:39.460 --> 00:53:43.580
And then maybe you want to have some code examples right below that so people can see how it works.

00:53:43.580 --> 00:53:50.200
You can put these little badges that you can integrate with your with your continuous integration setup.

00:53:50.200 --> 00:53:56.060
So, you know, you can show people what your test coverage is like, how the latest how is master building currently?

00:53:56.060 --> 00:53:58.360
You know, is it are all the test screen?

00:53:58.360 --> 00:54:00.560
Is there or is something failing there?

00:54:00.560 --> 00:54:02.260
What's the latest version on PyPI?

00:54:02.600 --> 00:54:10.160
And just sprinkle around some of these things that that make the project sound and seem appealing, look appealing.

00:54:10.160 --> 00:54:11.860
Yeah, that's all great advice.

00:54:11.860 --> 00:54:12.880
Anthony, how about you?

00:54:12.880 --> 00:54:13.300
Yeah.

00:54:13.300 --> 00:54:17.960
And if you don't know how to do some of those things, I really recommend using cookie cutter.

00:54:17.960 --> 00:54:29.700
And there's some great Python templates out there that kind of give you things like test coverage or the badges, like a nice readme file, some contribution templates and stuff like that.

00:54:29.840 --> 00:54:33.540
So, yeah, I normally use those as like to boilerplate my project.

00:54:33.540 --> 00:54:38.560
So at least for a new project, it looks like I've actually put time and effort into it.

00:54:38.560 --> 00:54:44.320
I think that's really important when people look at a project and they think where they want to contribute.

00:54:44.320 --> 00:54:49.600
It's they can see that you care about the project and the people who maintain it care about the project.

00:54:49.600 --> 00:54:56.840
So they think that their contribution is actually going to be valued because if it's just a whole bunch of code that you just dumped online and stuck in GitHub,

00:54:56.840 --> 00:55:02.500
then, you know, it's not as enticing because maybe it might get merged, maybe it won't.

00:55:02.500 --> 00:55:03.860
And everyone's pretty busy.

00:55:03.860 --> 00:55:11.120
So I think it's, yeah, dressing the project up nicely and actually putting the time and investment into right documentation,

00:55:11.120 --> 00:55:15.580
do proper test coverage, implement linters, stuff like that is really critical.

00:55:15.580 --> 00:55:21.720
That's a great recommendation with cookie cutter as well, because that's like it's already prepackaged the all that stuff.

00:55:21.720 --> 00:55:23.340
You got much of that stuff you got to do.

00:55:23.340 --> 00:55:24.020
Yeah, definitely.

00:55:24.220 --> 00:55:25.660
It takes takes ages otherwise.

00:55:25.660 --> 00:55:30.960
And but the thing I think the main thing for me is actually if you want people to contribute to your project,

00:55:30.960 --> 00:55:33.740
you users bring contributions.

00:55:33.740 --> 00:55:38.680
So it's actually the question you should ask first is, does my project have any users?

00:55:38.680 --> 00:55:46.580
And if the answer is no or not that many, then I would fix that first before you worry about why people aren't contributing to it.

00:55:46.580 --> 00:55:53.880
Because, you know, if no one's ever used it before, people don't just contribute code to something they've never used that typically they don't anyway.

00:55:53.880 --> 00:55:58.660
It's mostly going to be you're going to get some small subset of your users become contributors.

00:55:58.660 --> 00:55:59.120
Right.

00:55:59.180 --> 00:56:03.720
And so if you have a very small number at the top of that funnel, it's going to be really small at the bottom.

00:56:03.720 --> 00:56:04.420
Yeah, exactly.

00:56:04.420 --> 00:56:07.100
Unless it's been on Hacker News, in which case it's a different case.

00:56:07.700 --> 00:56:10.100
So, guys, did we just scare everyone off?

00:56:10.100 --> 00:56:15.000
I feel like we had this long list of like, oh, you got to do this and we got to do documentation and these badges.

00:56:15.000 --> 00:56:21.120
And I just wanted to say, you know, if you're interested at all in open source, just put something on GitHub.

00:56:21.120 --> 00:56:21.720
Anything.

00:56:22.120 --> 00:56:28.560
Even if it's like a script or something that you built where you think it adds value, please just do it.

00:56:28.560 --> 00:56:32.020
Because I think all of us, that's how we got started, right?

00:56:32.020 --> 00:56:36.340
Like we added and optimized this process over time and, you know, just get it out there.

00:56:36.340 --> 00:56:37.660
These are things you can add.

00:56:37.660 --> 00:56:41.460
These are things to enhance, not requirements to get started, right?

00:56:41.460 --> 00:56:41.840
Yeah.

00:56:41.840 --> 00:56:43.340
Yeah, definitely.

00:56:43.860 --> 00:56:55.820
So, yeah, in terms of getting users, I think it's – so if you've published your code to PyPI, if it's a package, I mean, if it's a web application or something, then maybe you don't want to do that.

00:56:55.820 --> 00:57:12.060
But, yeah, if it's a package you want to publish, then there's actually a Google BigQuery table where you can go and look at like analytics about your package, how many people have downloaded it, which versions they're using, and some like historic data from PyPI.

00:57:12.060 --> 00:57:19.540
So, like all the – I guess all the sort of back-end data they collect on pip downloads, you can actually go and query that, which is really cool.

00:57:19.540 --> 00:57:33.220
So, yeah, what I found with some of the projects I work on is focusing my efforts on projects that I know have a lot of users and then actually just trying to promote them a bit better and make sure that it's really obviously welcome for contributors.

00:57:33.220 --> 00:57:34.760
Yeah, that's definitely good advice.

00:57:34.960 --> 00:57:42.080
So, I don't remember who started this conversation, and I'm not entirely sure we should go down there, but I will.

00:57:42.080 --> 00:57:43.160
Dan, you said it.

00:57:43.160 --> 00:57:44.380
You should just throw your stuff on GitHub.

00:57:44.380 --> 00:57:46.980
What if I throw it on Bitbucket or somewhere else?

00:57:46.980 --> 00:57:49.840
What if I run my own Git server and I just throw it there?

00:57:49.840 --> 00:57:51.660
Or what if I like SVN?

00:57:51.660 --> 00:57:54.820
Are you ever thinking about bringing some of these companies on as sponsors?

00:57:54.820 --> 00:57:56.020
Go ahead, man.

00:57:56.020 --> 00:57:56.600
We're keeping it.

00:57:56.600 --> 00:57:58.300
The sponsors don't influence the content.

00:58:00.180 --> 00:58:01.040
No, just kidding.

00:58:01.040 --> 00:58:03.180
It's a really valid question, right?

00:58:03.180 --> 00:58:05.600
It's one that I've also received in the past.

00:58:05.600 --> 00:58:16.760
And there are different websites that kind of all follow the same, have the same purpose, like GitHub, Bitbucket, GitLab, where you can host your code and work with other people collaboratively, right?

00:58:16.760 --> 00:58:20.680
And I guess the question is, like, what is the best one or where should you put your code?

00:58:20.680 --> 00:58:23.380
I think, first of all, it's great that we have that choice.

00:58:24.020 --> 00:58:30.780
If I have to make that choice right now, I'm heavily invested into GitHub, just in terms of my code being there.

00:58:30.780 --> 00:58:33.760
And so I'm going to stick with GitHub.

00:58:33.760 --> 00:58:37.260
And it's probably what I would recommend to someone just starting out.

00:58:37.260 --> 00:58:39.540
But the other ones are great, too.

00:58:39.540 --> 00:58:42.340
I mean, in terms of the feature set, they're getting the job done.

00:58:42.340 --> 00:58:45.580
You know, so theoretically, you can go with whatever you like the best.

00:58:45.580 --> 00:58:52.000
I think GitHub will have an advantage in terms of that a lot of people are going to just go to GitHub and search for stuff.

00:58:52.000 --> 00:58:54.860
I think that is probably the biggest difference there.

00:58:54.860 --> 00:58:55.240
Sure.

00:58:55.240 --> 00:58:56.160
Anthony, what do you think?

00:58:56.160 --> 00:59:07.180
Yeah, I think if you're working on a project in the open, so an open source project, some of the code review features in both Bitbucket and GitLab are actually better than they have been at GitHub.

00:59:07.180 --> 00:59:10.640
So there's definitely some feature differences between the different platforms.

00:59:10.640 --> 00:59:17.960
But if you want to put a project out there and you just want it to be seen by as many people as possible and you want as many contributions as possible,

00:59:17.960 --> 00:59:22.960
I think you've really got to go with GitHub because that's where the vast majority of the users are.

00:59:22.960 --> 00:59:24.820
In the future, that might change.

00:59:24.820 --> 00:59:30.340
You know, and so it's important to make sure the skills that you're learning are portable, I guess, across different platforms.

00:59:30.340 --> 00:59:32.560
But for now, yeah, they've got most of the users.

00:59:32.560 --> 00:59:34.220
So it's just like social media tools.

00:59:34.220 --> 00:59:38.140
You know, this is, I guess, one of the reasons why some of them never took off.

00:59:38.140 --> 00:59:42.940
You know, if none of your friends are on there, then it's just you posting to them.

00:59:43.880 --> 00:59:45.640
You're posting to the database and it's not interesting.

00:59:45.640 --> 00:59:48.220
All right, Ronald, what do you think?

00:59:48.220 --> 00:59:50.380
You agree with this GitHub as a place to start?

00:59:50.380 --> 00:59:55.600
Yeah, I definitely think GitHub is a place to start.

00:59:55.600 --> 01:00:02.840
And especially here, for me, I knew GitHub through a Jungle Goals workshop.

01:00:02.840 --> 01:00:12.800
And these workshops have been running all of Africa and people are getting reach to GitHub.

01:00:13.660 --> 01:00:19.220
The other thing is that it's one of the most common personal tools.

01:00:19.220 --> 01:00:28.980
So it's easier for you to get help if you get stuck because there are a lot of people that are there who are willing to support you.

01:00:28.980 --> 01:00:36.460
But it has got a lot of commands and definitely to take time to learn.

01:00:36.460 --> 01:00:41.940
I've been using it for a while now, but I mean, again, I discover new things.

01:00:42.500 --> 01:00:44.400
Yeah, I'm still learning new stuff all the time.

01:00:44.400 --> 01:00:45.480
Yeah, yeah, yeah.

01:00:45.480 --> 01:00:49.500
So I think it's probably a good starting point.

01:00:49.500 --> 01:00:55.360
And also, you can go through it for the bigger project.

01:00:55.360 --> 01:00:55.780
For sure.

01:00:55.780 --> 01:00:56.600
Okay, excellent.

01:00:56.600 --> 01:01:01.380
Well, I think we should probably leave it there, guys.

01:01:01.380 --> 01:01:06.120
We're a little bit over time maybe, but I think we covered a lot of good stuff.

01:01:06.580 --> 01:01:11.480
So very, very quickly, I'm going to go around and ask you each two questions, but just super short answers.

01:01:11.480 --> 01:01:14.560
Favorite editor for writing Python code, Dan?

01:01:14.560 --> 01:01:15.280
Sublime Text.

01:01:15.280 --> 01:01:17.440
I think it's an awesome editor, super fast.

01:01:17.440 --> 01:01:20.100
Unfortunately, not open source, but I love it.

01:01:20.100 --> 01:01:20.560
Awesome.

01:01:20.560 --> 01:01:20.900
It's great.

01:01:20.900 --> 01:01:21.380
Yep.

01:01:21.380 --> 01:01:22.340
Ronald?

01:01:22.340 --> 01:01:23.000
Yeah.

01:01:23.320 --> 01:01:27.280
Sublime Text is good to me, and also not paid plus plus.

01:01:27.280 --> 01:01:28.420
It's also fine.

01:01:28.420 --> 01:01:28.840
For sure.

01:01:28.840 --> 01:01:29.140
Okay.

01:01:29.140 --> 01:01:29.580
Anthony?

01:01:29.580 --> 01:01:32.180
Yeah, recent change, but Visual Studio Code.

01:01:32.180 --> 01:01:33.320
Okay.

01:01:33.320 --> 01:01:35.720
You were doing Komodo or something before, right?

01:01:35.720 --> 01:01:36.160
Yeah, yeah.

01:01:36.160 --> 01:01:37.940
I've been on Komodo for a long time.

01:01:37.940 --> 01:01:42.700
Yeah, if anyone from Komodo wants to ask me why, then I'll happily give you a list of bugs

01:01:42.700 --> 01:01:43.440
that never got fixed.

01:01:43.440 --> 01:01:46.060
So, yeah, move to VS Code.

01:01:46.440 --> 01:01:46.780
Yeah, yeah.

01:01:46.780 --> 01:01:48.500
I use VS Code some as well.

01:01:48.500 --> 01:01:48.820
Cool.

01:01:48.820 --> 01:01:49.640
All right.

01:01:49.640 --> 01:01:52.040
Same rotation, PyPI package.

01:01:52.040 --> 01:01:53.580
Just give me the name, Dan.

01:01:53.580 --> 01:01:54.440
BPython.

01:01:54.440 --> 01:01:59.620
It's an alternative Python REPL, and it's just B, the letter B, plus Python.

01:01:59.620 --> 01:02:00.480
And it's awesome.

01:02:00.480 --> 01:02:01.000
I love it.

01:02:01.000 --> 01:02:01.300
Awesome.

01:02:01.300 --> 01:02:02.540
I'm all about the PT Python.

01:02:02.540 --> 01:02:03.180
Ronald?

01:02:03.180 --> 01:02:09.400
I like the mathematics part of things, so I'm saying probably NumPy or something like that.

01:02:09.400 --> 01:02:09.680
Sure.

01:02:09.680 --> 01:02:10.320
Okay, great.

01:02:10.320 --> 01:02:10.820
Anthony?

01:02:10.820 --> 01:02:13.580
Yeah, I'd have to be biased, but Apache Lib Cloud.

01:02:13.580 --> 01:02:15.580
So it's Apache Huff and Lib Cloud.

01:02:15.580 --> 01:02:19.520
Cloud, which is a cloud abstraction API for Python.

01:02:19.520 --> 01:02:19.980
All right.

01:02:19.980 --> 01:02:21.880
I hear they have some awesome contributors.

01:02:21.880 --> 01:02:22.340
That's cool.

01:02:22.340 --> 01:02:25.560
All right.

01:02:25.560 --> 01:02:29.060
Dan, do you want to give us the final call to action?

01:02:29.060 --> 01:02:29.860
People want to get started?

01:02:29.860 --> 01:02:30.400
What do they do?

01:02:30.400 --> 01:02:30.980
For sure.

01:02:30.980 --> 01:02:36.520
Okay, so if you want to get started, just put something on GitHub or one of these other wonderful

01:02:36.520 --> 01:02:37.520
sites that we talked about.

01:02:37.520 --> 01:02:44.000
And if you tweet your project at me, I'd be happy to share it on Twitter and help you promote it.

01:02:44.000 --> 01:02:44.820
Yeah, for us as well.

01:02:44.980 --> 01:02:48.800
I'm happy to retweet an announcement of projects or something like that.

01:02:48.800 --> 01:02:49.560
Yeah.

01:02:49.560 --> 01:02:49.840
All right.

01:02:49.840 --> 01:02:50.660
So just get out there.

01:02:50.660 --> 01:02:51.560
Create a project.

01:02:51.560 --> 01:02:54.400
Find something you care about and get started.

01:02:54.400 --> 01:03:00.380
Or if you're new to programming open source, go and find an existing project that you can

01:03:00.380 --> 01:03:00.860
contribute to.

01:03:00.860 --> 01:03:02.880
It'll be really rewarding.

01:03:02.880 --> 01:03:03.660
All right.

01:03:03.660 --> 01:03:07.260
Ronald, Anthony, Dan, thank you guys all for being on the show.

01:03:07.260 --> 01:03:07.980
It's been a lot of fun.

01:03:07.980 --> 01:03:08.680
Thanks, guys.

01:03:08.680 --> 01:03:09.740
Thanks for having us.

01:03:09.740 --> 01:03:10.440
Yeah, it was fun.

01:03:10.440 --> 01:03:11.640
Thank you so much for having us.

01:03:11.860 --> 01:03:12.100
Yep.

01:03:12.100 --> 01:03:12.380
You bet.

01:03:12.380 --> 01:03:12.560
Bye.

01:03:12.560 --> 01:03:13.720
Bye.

01:03:13.720 --> 01:03:16.820
This has been another episode of Talk Python To Me.

01:03:16.820 --> 01:03:21.800
Our guests today have been Anthony Shaw, Dan Bader, and Ronald Maravagnica.

01:03:21.800 --> 01:03:26.460
And this episode has been brought to you by Linode and us right here at Talk Python Training.

01:03:26.460 --> 01:03:30.400
Linode is bulletproof hosting for whatever you're building with Python.

01:03:30.760 --> 01:03:34.760
Get your four months free at talkpython.fm/Linode.

01:03:34.760 --> 01:03:37.260
Just use the code Python17.

01:03:37.260 --> 01:03:40.320
Are you or a colleague trying to learn Python?

01:03:40.320 --> 01:03:45.000
Have you tried books and videos that just left you bored by covering topics point by point?

01:03:45.000 --> 01:03:50.660
Well, check out my online course, Python Jumpstart by Building 10 Apps at talkpython.fm slash

01:03:50.660 --> 01:03:53.600
course to experience a more engaging way to learn Python.

01:03:54.100 --> 01:03:58.420
And if you're looking for something a little more advanced, try my WritePythonic code course

01:03:58.420 --> 01:04:00.960
at talkpython.fm/Pythonic.

01:04:00.960 --> 01:04:03.660
Be sure to subscribe to the show.

01:04:03.660 --> 01:04:05.880
Open your favorite podcatcher and search for Python.

01:04:05.880 --> 01:04:07.120
We should be right at the top.

01:04:07.120 --> 01:04:13.240
You can also find the iTunes feed at /itunes, Google Play feed at /play, and direct

01:04:13.240 --> 01:04:16.420
RSS feed at /rss on talkpython.fm.

01:04:16.420 --> 01:04:18.320
This is your host, Michael Kennedy.

01:04:18.320 --> 01:04:19.680
Thanks so much for listening.

01:04:19.680 --> 01:04:20.740
I really appreciate it.

01:04:20.740 --> 01:04:22.680
Now get out there and write some Python code.

01:04:22.680 --> 01:04:23.680
Bye.

01:04:23.680 --> 01:04:53.660
I'll see you next time.