Podcast 272: Pull requests are welcome

What gives you that special feeling: a nice, sharp recursive function or a deep, winding ternary statement? Paul and Sara debate the finer points of feeling smugly satisfied with your own code.

Article hero image

Well intentioned contributors keep poking you for an update. Little do they know you've left the world of software behind for the joys of carpentry. Plus, a CS course on soft skills so that you can learn to code and get people to enjoy working with you.

"Sorry I missed your comment of many months ago. I no longer build software; I now make furniture out of wood." Life is lived in stages.

Most people are working remotely these days, but offices may return, and even if they don't, these skills could come in handy. Teamwork, persuasion, communication, and leadership, just a few of the things you can learn in this Technion course.

Big thanks to TwilioQuest, which has gotten Ben, the worst coder in the world, practicing his Javascript skills again.

What gives you that special feeling: a nice, sharp recursive function or a deep, winding ternary statement? Paul and Sara debate the finer points of feeling smugly satisfied with your own code.


Paul Ford Oh, people get upset about chickens. Park Slope, there's a community garden. And people were really upset about there being too many chickens and to which, I always like to refer to that as 'hen-trification'.


Ben Popper Nothing's more important than great customer experiences. But sometimes services get disrupted. Resolve issues faster and spend more time innovating. Automate, collaborate and improve with Adaptive Incident Management. Learn why millions trust xMatters to keep their digital services running at xmatters.com/resolve.

BP Good morning, everybody! Welcome to the Stack Overflow Podcast. Hi, Paul. Hi, Sara.

SC Good morning!

PF Oh, hi there!

SC Good morning, Ben. Did something happen to your eye?

BP Well, two things you should know when you acquire a goat. One, it's ideal to get them without horns and two, once a butter, always a butter. Hard to unlearn that. And so we got two goats that were free. Why were they free? Well, they had horns and they were butter.

SC Ohhh.

BP So after learning that and feeling like they weren't safe around our kids, we decided to give them away and somebody else came to take them. And as I was loading--

SC You passed it on to the next person?

BP One of the goats onto the truck, to pass on the pain, I was buttered in the eye with a horn. Luckily missed the eyeball. But I got a pretty sweet shiner.

SC Wow.

BP So those goats are out of my life, but they left me with a nice goodbye.

PF Well, that wasn't really how I expected today's podcast to start. [Ben laughs] You got to be careful with goats, developers all around the world, everybody.

BP Yeah, be careful.

SC Be careful with goats. I don't really have that risk in my Brooklyn apartment.

BP No, that's true.

SC Paul, I imagine you don't either. Though, I don't know, you could live one of those, like fancy apartments to have like a farm on it.

PF Yeah, that's right, the farm apartments. Those are great. [Ben & Paul laugh] You plant the wildflowers on your deck, and then they get a little out of control. And you need to get a deck goat. [Sara laughs] That's how we do in New York City. Alright, so Ben, you were hit by a goat. Sara, I was not hit by a goat. What about you?

SC Same.

PF Okay.


SC Same, my weekend was goat free.

PF So, what's happening on Stack?

BP I wanted to pass along a little link, because it reminded me of a topic we've talked about a few times, which is that when you put a project out there, Paul, you've had this experience with some of your stuff, or you're working in open source, sometimes you create something great, but then with that comes the burden of having to support it. And sometimes that little tiny thing you built is like becomes one of the pillars, you know, holding up the modern internet or whatever. So there was a great GitHub comment that I wanted to share with everybody, which kind of, I don't know, I felt like it hit that note, and also mixed in some of what we've all been going through, it says, ''Sorry, I missed your comment of many months ago, I no longer build software, I now make furniture out of wood.'' [Ben chuckles]

PF Yeahhh!

BP ''The hours are long, the pay sucks. And there's always the opportunity to remove my finger with a table saw. But nobody asked me if I can add an RSS feed to a DBMS. So there's that.'' [Ben laughs]

SC That's great. And this is for the Docker CLI, it's not like a project no one's heard of.

BP So I think this is just such a wonderful, I guess part of being a developer in 2020. In the open source world, or in the you know, the world of sort of like projects that you share with the public, you come to this point where you're sort of want to throw your hands up and just move into the woods.

SC The experience that I have, this is different from your experience, Paul, is that someone does a pull request on the repository that I built six years ago. And I'm kind of like, ''oh, no.''

PF Oh, yeah, yeah, that happens.

SC Where I'm just kind of like, ''I really appreciate you doing that. But I don't have time for this.''

PF Well, I don't even know who that person was anymore. Right? Like I've gone through full cellular regeneration in that amount of time. [Ben chuckles] Yeah, I mean, look, this is the great complexity of open source is that it's kind of a cultural artefact instead of a commercial artefact. So like, if there isn't an economic incentive that's really clear and really aligned, where you're like, ''Alright, we pay people to do this.'' How do you motivate them to continue? And most people think that just being yelled out online should be appropriate motivation, but it's not it actually turns out it's not. It actually turns out it's not.

SC It turns out it's not. Yeah.


PF Turns out people want to live their lives. I mean, I would say I've read 500 emails in to mailing lists, which are like, well, I realized I have children and a family and those things-- [Ben laughs]

SC I'm not gonna do that, yeah.

PF They say ''I love you'' instead of repeatedly saying ''Any progress on this? Any progress on this?'' [Ben & Sara laugh]

SC ''Can we get an update?''

PF Yeah, it is true. Like your children never turned to you and say, ''What's the blocker here?'' [Ben laughs] Right? So.

SC My favorite response always, to date, and always will be, is ''pull requests are welcome.''

PF Oh, yeah. Right. Yeah.

SC ''Pull Requests are welcome.'' I say that sometimes when people give me personal like criticisms. I'm like ''pull requests are welcome'' [Sara laughs]

PF Can you imagine? Sara, I mean, first of all, like, what is the infrastructure? How would the Sara pull request even go? Like, what would the format be?

SC I don't know. I guess you'd have to like pay for therapy. Maybe? [Ben laughs]

PF Yeah, I think that's right. It's just like, we'd like this behavior and what what was expected? What happened? [Paul, Sara, Ben laugh] The human bug report is amazing. ''I was expecting you to make dinner because you said you had dinner however, you didn't make dinner.''

SC ''What I experienced was hunger.''

PF Yeah. What was it? Yeah, exactly ''what is our plan to mitigate this in the future?''

SC Well pull requests are welcome.

BP Is there an option when you're when you're like, either create a repository or project to step down? Like I know you guys are talking about, sometimes there's a blog post, I'm not doing this anymore. Sometimes there's an email thread. ''Hey, just so you know.'' But like, you're saying, you've kind of created this public artefact, you've said, in a sense, like, you know, you can come in and give me feedback or make requests for work. Is there the option to step down and say, like, this needs a new leader, within like, an actual GitHub project?

PF It's the problem, like, where, who are you stepping down to? Right.

SC It happens.

PF Yeah, I mean, you can happen, you basically say no, and I mean, look, the dream was that the fork mechanism, and GitHub would allow people to kind of take code and run with it. But humans remain human. So there's a kind of territorial imperative for people who do you know, it's like, well, you know, they're sort of like aggressive forks, where it's like, I don't agree with the path. So I'm gonna take it and now now you have an actual kind of fork in the road situation, then they're kind of well, meaning ones where they're gonna issue a pull request. But the reality is just it's kind of a lot of thankless work. And so everybody who's like, feels that these people should be doing better. It's very rare that you see someone who runs a project, criticize someone else on their flameout. Like, they're just like, ''Yeah, I know how that happens!''


SC ''I get it.'' Yeah, yeah, yeah. I think the handoff happens, I think fairly, not often. But I've seen the handoff happen a bunch. The nightmare of the handoff, is, you hand it off to someone and they do something unscrupulous, which can happen and when you are at the point where you want to hand off a project, right, like you kind of don't care. At that point, I think it's really hard to really vet people. And the ideal scenario is, there's someone that's been collaborating with you on the project for a while that you trust. But there's also other scenarios where it's like, I need someone to take this over and the person jumps in. And then I think we all remember the NPM nightmare where there was a library, I forget that which library it was at the top of my head, but there was a library that got handed off to someone else. And they just, you know, and innocently added some Bitcoin mining to it.

PF Yep. Look, the Stack Overflow is an organization built on free software. And paid software uses a lot of .net. And it brings a lot of stuff into the commons on its own in a community driven way. Like it's culture, it's a mess. It's, it's people. Here's what gets tricky, right is if you want the software that you run to work like a business, you actually have pretty good choices, you can go to Microsoft, you can go to Apple, and you can use Xcode, and you can use our developer ecosystem and really stay locked in and then only kind of bring in the open source stuff that has been vetted and has support behind it. And there's a ton, there's Postgres, and there's Docker like, but here's Docker CLI. So now you get like one step forward, and you're like, Oh, yeah, Homebrew is another great example, on the Mac, like, who supports and cares for Homebrew which it lets you install all that stuff. So you want that little bit extra, that's gonna make your life easier and a lot better, and suddenly you are really, you're off the map a little bit, and you're in the world of open source. And I think it's just very hard for humans with their brains to go like, ''Oh, this over here is essentially a commune.'' It's the coffee shop where you have to, like you pay in eggs.


BP So I'm just gonna say, Sara, maybe I like this idea, Paul, just bear with me. What if when your project got to a certain scale, you created an incentive mechanism that was like, Listen, you know, I don't have a ton of time for this. But it'd be sort of like the Stack Overflow bounty. If you have a pull request that's really important to you, you know, put $5 in the tip jar, and then I will prioritize it or whatever.

SC Yeah, GitHub does sponsorships now, which I think has been really helpful. There's a lot of people that make a decent amount off GitHub sponsorships. I think, to your idea, I think the tough thing is to build in your average feature, what is that, like? 40 hours of a developer's time, right. And, and what do developers charge an hour? And how much are you willing to pay for it? You know, like, it's your $5, it's gonna take about 10 minutes.

PF The other thing too, is it really feels to me like, like, Postlight, my company, we sponsor a thing called PostGraphfile, because it's this big API layer on top of Postgres, that lets you have API's in graph qL really quickly, and we use it and it's great. And I, it feels like it's easier to sponsor kind of platform level stuff than simple tools. Like Docker CLI, like it just wouldn't occur to me in the same way. Because it doesn't feel like it's sort of foundational, even though it might be really, really important to throw that some money, like maybe I'll throw it a tip. But it wouldn't be like, ''Oh, I better invest in this because it's infrastructure'' in quite the same way. So I think there's like different different ways you look at stuff.

BP So I just wanted to give a shout out to Twilio. They made like a little old school adventure game that teaches you coding, you are on a spaceship, and then you enter a VR pod and like go on different little adventures and you can learn Python, you can learn JavaScript. So I've been having some fun with that trying to teach myself some some coding basics.


PF Well, I mean, but Ben, it raises the question, maybe this is all a game. Maybe this podcast is just in game content for some horrible version of Grand Theft Auto. [Sara laughs]

SC The worst!

PF Yeah but right now somebody is just driving around San Los Gatos.

SC Listening to this podcast.

PF Yeah and they have to go pitch their startup. And they're just like, ''I better listen to Stack Overflow,'' and Stack Overflow, also, it's just in game content, this whole thing. Their real programming language is outside of the simulation with names like 'has grusp' and 'plus B' but the fake programming languages that we made up like JavaScript and Ruby, because who would ever I mean, it's such a funny thing like JavaScript is hilarious. No one would use that for real.

BP Most of my cultural intake is the Joe Rogan podcast and Elon Musk's Twitter feed. So I have been convinced that we're living in a similuation on numerous occasions, I mean, it's, it's it's pretty much irrefutable. Once you run the math. [Ben laughs]

PF Frankly, when you look at this podcast, I think it's it's proven. It's totally proven. Alright, so good. So you're enjoying the Twilio.

BP I'm enjoying the Twilio game.

PF Is it actually teaching you some programming?

BP It is actually teaching me some programming.

SC Yeah. Would you feel like you've learned things?

BP You know what I think a lot of it is just like the muscle memory, where it's like, oh, you know, like, this is how I open my terminal and create a folder and then write to it. And like, this is where I would store files locally. And like, this is how node relates to Java Script. And like, a lot of it is just like, I have to learn these things 5, 6, 7 times over, and then I become a little bit more fluent in them.

SC Got it.

BP Cool. Alright, Paul, you dropped in a link here, you want to tell us what it's about and how it can teach us.

PF I just thought this was interesting. So communications of the ACM, the Association for Computing Machinery, which is, it's been around for a while. So it's not computers, it's Computing Machinery. Their official publication, there's a blog post teaching CS undergrads online to work with others effectively. And it's, so it's this professor Orit Hazzan who teaches a soft skills class, and just alone, like that's kind of interesting, like the computer science soft skills class as part of the curriculum. But then how do you do that in the age of Zoom, like here, we are now in the pandemic. And so it's just sort of what are the soft skills, teamwork, time management, preparation and presentations, persuasion, ability, communication, team leadership. And I'm like, yeah, those are great. That's really part of a computer science education. That's good. And it's probably very hard to teach those on Zoom. So it's about how you do that. And and I mean, it's nothing shocking. It's just like, all right, you use the breakout rooms and things like that.


SC One thing I really love that came from Jon Chan, who works on the public platform team here at Stack Overflow is he instead of soft skills, says professional skills.

PF Ohhhh that's totally good. That's really good.

SC Yeah, I think that's fairly accurate. I think that's what we're looking for from folks. And I really like that we're teaching people these skills purposefully. Because I think that that is a need in the industry that's been identified for a long time of, you know, the ability to work with others, especially others. Here's something I've seen often. And I wonder if the both of you seen. I've observed engineers, working with other engineers and learning how to do that. But I think the challenge that I see in many organizations is working across teams.

BP Yeah, we have this article that we've been working on with our Chief Product Officer Teresa Dietrich, which is about how she's hired hundreds of engineers over her 20 years in the industry, and how people can set themselves up for success now in this sort of economic time. And a lot of what she talks about is like, okay, there's specific technical knowledge that I'm going to look for for a job, do you have the like, skill set. But then the three other pillars are like your attitude, aptitude and your ability to show that, you know, you've made connections, and networked which is to say you have those people skills, professional skills, soft skills, right, that like, other people will speak up for you and say you were able to work cross functionally or with them on a team. So I think that definitely when it comes to getting hired, being able to demonstrate that you've done that somewhere else, even if it was like an open source thing, or internship doesn't have to be you had a, you know, high profile job, is really key.


PF It's hard to overestimate how rarely, like fundamental algorithms come up on a day to day basis when you're building a platform like they're there. Over the weekend, I decided I would build an anagram solver. And just because I don't know, because. And so I did it in Python. And it's wild, because you of course, you can just go download one of dozens of anagrams software, including one one was written by Julian Assange, like he wrote code before he ruined the world.

SC Fascinating.

PF Yeah, I mean, you know, open source goes all the way back.

SC Could be anyone.

PF Or didn't ruin the world, depends on your perspective, but so much is about how you talk to the computer. And then it's not just how you talk to people. It's like, do you understand their systems and their priorities and their motivation and it becomes critical at a certain point that you can have that empathy for the person from marketing or the person from the community team or whatever, right? Like it just the thing is, is I almost said it's hard to teach, but it's actually teachable.


BP Alright, yeah, let's kick it over to the lifeboat. This is awarded two days ago to Miki: ''how to get color palette from image using opencv'' It says ''I'd like to extract the color palette of an image similar to this, I need to extract specific colors and then display the percentage of the area covered by that. How can I reduce the number of colors and get the color palette?'' Got a great answer here from Miki. The question is closed. But you know what? That doesn't mean the knowledge doesn't exist on Stack Overflow for you to enjoy.

PF It's nice to see people helping each other.

SC Yeah, that's great.

BP Alright. Anything else you want to chat about?

PF Let me shout out a couple Python libraries that were just, just were great this weekend.

SC Yeah!


PF Old favorite argparse, built in parsers command line arguments, APSW for talking to SQL lite, which is just where I dump all the garbage in my brain when I'm working. And then good old itertools, can't beat itertools and more itertools which get you to a power set. So you can look at every permutation which made it easier to find some anagrams. And lastly, let me just throw out Flask can't go without Flask in terms of setting up a teensy tiny website to mess with your stuff. And then you just going to like dump it all into the world Google Cloud Platform in like 15 minutes and have a working website in the world that costs about 12 cents a year.

BP Any anagrams that you found that you had? Hit me with some hard anagrams.

PF No, the problem is they all suck. [Ben laughs] They're not funny or interesting. But you know, I did learn a lot about recursive function. So that made me feel good.

BP Technically anagrams, but not interesting or funny.

PF Sara, let me ask you, is there anything like for me when I write a good tight recursive function that's, you know, that does what it's supposed to do, it's the only time I feel good about myself as a programmer, so like, I'm just like, ''Yep, that's right. That's how they do it at MIT'' Is there anything for you where you're like, ''yeah, that's that's how it's done.''

SC Yeah, I actually, that bubble was burst last week as well. I really love a really nice, long, sexy ternary statement.

PF Mmmmm, yeah, yeah, like big, deep ternaries where they kind of keep going?

SC Yeah, where it like takes up the entire line and you just sit there looking at it feeling really smug. And then someone in the, I'll have to shout her out because she's an amazing JavaScripter. Last week on Twitter was like, ''Hey, you know, ternary statements, no one else can read them, start doing regular statements.'' [Ben & Sara laugh] You know, it's right. And it makes me feel less smug and I really, I'm sad, you're ruining this for me.

BP I think that's okay.

PF Ternaries are absolutely like, it's like, it's like a code signalling tool for how smart you are. Right, like look, look at me. List comprehensions are the same in Python. And like, literally all the docs in Python kind of scream, like ''use a four loop.'' And it's like ''no, what am I, an animal? I'm a functional programmer. I'm not, I'm not imperative.'' That's literally we're all going like, and then you get older and you're like, ''yeah, use a four loop.''

BP That's okay. There can be stuff you do for yourself on your weekend projects that make you feel good and smart. And there can be stuff you do that works well with others that plays nice with others.


PF Then you come back to it like six months later, and you go, ''What?''

SC Yeah, and you can't even read it. [Ben laughs]

PF ''Who did this? Why?'' And then you feel really embarrassed. You're like, ''ohhhh''

SC ''Did I copy and paste this from somewhere? Where did I get this?''

PF ''Wonder where I could have copied and pasted this from?''

BP Hmmmm. Well, I appreciate it when you find something that gives you joy. And I want to say shout out to all the people who are building for themselves or building for others. Keep checking out the Stack Overflow Podcast. If you want to hear about certain things. Send us an email podcast@stackoverflow.com. I'm Ben Popper, Director of Content here and you can always find me on Twitter @BenPopper.

SC And I'm Sara Chipps. I'm the director of community here at Stack Overflow. You can find me on @SaraJo at GitHub. And check out my friend Jeffrey's Kickstarter. It's bitly.com/bookskickstarter.

PF Woo! And I'm Paul Ford, friend of Stack Overflow, and you can find me at my company Postlight.com. We're a strategy and services firm.


Login with your stackoverflow.com account to take part in the discussion.