PyDev of the Week: Carlton Gibson

This week we welcome Carlton Gibson (@carltongibson) as our PyDev of the Week. Carlton is a core developer of the Django REST Framework and maintainer of Django Filter, Crispy Forms and more. Carlton is the co-host of the Django Talk podcast. You can see what Carlton is currently working on over on Github.

Let’s spend some time getting to know Carlton better!

Can you tell us a little about yourself (hobbies, education, etc):

I’m a father of four, so that’s my main hobby.

I practice Tai Chi. I like cooking. I read a lot. Music, languages, these kind of things.

My education, a long time ago now, I studied economics and philosophy, eventually doing a PhD in the philosophy of science.

Why did you start using Python?

I went to a conference back in the day called Future of Web Apps. I was using PHP at the time, and just getting into Objective-C for mobile app development, on what was then iPhoneOS.

Everyone was talking about the new thing “Django, Django, Django”, so it must have been around the 1.0. I got home, I Googled it. It said The Web Framework for Perfectionist with a Deadline. I’m like, “That’s me!”

So, it wasn’t just Django, it was Python. It was clean, powerful, expressive – from the language perspective these are the things I still appreciate today. You need to script something up and it ends up being 150 lines. It’s what using a computer should be all about.

How did you get involved with Django REST framework?

I was using Django to build APIs for mobile clients. One day Tom Christie posted on the mailing list saying he needed a bit of help with issues and questions on StackOverflow and so on. So, I started answering questions, and then helping out on the issue tracker, and then eventually Tom invited me as a collaborator. I remember the first time I got to press the merge button…

Why did you choose Django over the other Python web frameworks?

Given that I found Python with Django, I think the question here is, why do I still choose it?

Over the years I gave virtually every framework out there a run. Every time something new comes up I’ll give it a look, see what’s on offer. The reality, the frameworks are all solving the same problem in more or less the same way. I gave a talk on this at DjangoCon last year but, if you strip down Django to its core HTTP handling, there are only about 160 lines there: there’s no room for it to be doing anything too much, and it’s the same not much as everyone else.

So, whilst there are always lessons to learn and options, the choice for me is what am I most productive in?

Django has the batteries, for one: I don’t want to spend time looking for auth, or sessions or whatever. But beyond that it’s familiarity: it’s much quicker, more productive, for me to build out an application in Django than with any other option.

It’s a question of how quickly can I get to the point where I’m working on what makes this particular application unique? That’s much quicker with Django, than with any other option.

What other programming languages do you know and which is your favourite?

I try to at least experiment with the different languages as I come across them. There’s that whole line from The Pragmatic Programmer about learning a new language every year. But the big one is JavaScript, still. It’s the scripting language of the web. It’s essential.

The issue I have with is the tooling and framework churn. It’s all in the name of progress but, as a primarily backend focused developer, it’s too hard to keep up. As such I’m a big fan of Elm, which is a functional language that compiles down to JavaScript. It’s great for building richer applications, once you get into the territory of needed Vue or React or similar.

There’s a learning curve to the whole functional approach, and the first couple of hours with Elm are a bit Whoa, but I highly recommend it. There’s a joy when you’re working on a component and it compiles, and then it works perfectly first time. You have to try that. Refactoring, and the compiler error messages are divine.

What projects are you working on now?

Ah, I´ve got a backlog. The coronavirus pandemic, with the lockdown and the schools being closed, and so on, really knocked the wind from my sails this year. And I consider that we´ve been particularly fortunate.

The main thing is async coming to Django, with async views in Django 3.1. There’s a bit of work needed to get Channels ready for that over the next month or so: we’re not far off. It’s very much constrained by the time available but that’s my main focus.

Then, the last couple of years I’ve been thinking (and talking) about Contributing to Open Source, and Django in particular. I think it can be a really good learning opportunity, and great for your profile, and a chance to get into the community. On the flip side there’s a real danger of doing too much, and burn out, and there are issues with billion-dollar companies not giving anything back, but on balance I’m an optimist: I think open source is a good thing. I’d like to draw together all that stuff into something more concrete

Finally, I’m ticking away on the story about deployments. I think there’s a real gap between getting started, doing the Django tutorial say, and then the professional modern DevOps story, where it’s all about running containers on this or that orchestration platform. Yes, deployment is complex, but I think there´s a simpler story to be told, that’s more appropriate for a lot of use-cases. Once we get Django 3.1 out of the way, I want to start drawing my thoughts together there, beginning the latter half of the year.

Is there anything else you would like to say?

Only that I love the Django and Python communities—we have a real asset there. Django in particular has given me so much, and that I’m honoured to be able to work on it. These are exciting times for the framework and it’s just a real joy.

Thanks for having me.

Thanks for doing the interview, Carlton!