This week we welcome Andrew Godwin () as our PyDev of the Week! Andrew is a core developer of the popular Python web framework, Django. Andrew maintains a blog of his adventures but if you're more interested in his code, then you'll want to check out his Github profile. You can also check out some of his projects here. Let's take a few moments to get to know Andrew better!
Can you tell us a little about yourself (hobbies, education, etc):
Well, I grew up in suburban South London, and initially started programming on my mum's Palm IIIx in BASIC when I was bored during holidays and longer trips, along with trying out my hand at HTML at the local library. Eventually this turned into me doing Computer Science at Oxford (I almost went for physics, but changed my mind as I wanted an easier life), where I learnt a decent amount of theory that I almost never use in practice, and instead draw on my time writing open source software since I was about 15 and what it's taught me about maintainability, software architecture and the importance of helping other people.
Hobby-wise, I probably have too many; the one I spend most time on apart from programming (both open-source and noodling away on the occasional game) is probably flying (as in, piloting light aircraft) and then traveling (as in, flying on other people's aircraft). On the side, I also do electronics, 3D printing/making things, riding my motorbike, archery, photography, cinematography, baking, and when the season is right, snowsports. I'm also on a rough quest to visit every state and territory of the US as well as all 59 of the National Parks, so I have my work cut out.
Why did you start using Python?
I think it was about 2005 and I was looking for an alternative to PHP, having used it for a number of years and finding its organisational features and security features lacking (one of the open source projects I was working on back then, ByteHoard, had several security issues caused by some less-helpful features of the language not combining well with my own lack of experience). I searched around for what other web programming languages were around and stumbled upon a TurboGears tutorial, and liked the look of Python so I tried it out. I wrote in TurboGears for a year or two until I spent a summer working with Simon Willison, who taught me Django and then I've been working with Python pretty much ever since.
What other programming languages do you know and which is your favorite?
I only know a few other languages to what I call a "dangerous" level - Java, C#, Arduino C, JavaScript, PHP, and Go. Of the non-Python languages, I'd say C# is probably my favourite, because it's the other end of the spectrum; strongly typed, interfaces and generics everywhere, but it does it quite a bit better than Java and has some built-in features like LINQ that remind me of Python's best bits.
I've dabbled in a few more, and of those, VHDL maybe has to be the most confusing. It's a Hardware Description Language - the language you use to program FPGAs, among other things - and because it translates into circuits, what looks like procedural code with if statements actually all executes perfectly in parallel, and assignments don't take effect until the next clock cycle. It's fun to make stuff in though, as the end result runs ridiculously fast.
What projects are you working on now?
My main project time goes into doing ongoing development and maintenance on Django Channels (http://channels.readthedocs.io), the project I run for doing message-passing asynchrony and WebSockets. I have a collection of other projects that involve Python in some way; right now, I'm working on my San Francisco version of my 3D LIDAR based map, which I previously did a London version of (http://www.aeracode.org/2016/5/16/hello-london-rising/), a tool for managing my possessions spread across two continents, and a long-term backup solution for all of my files and project code that will hopefully be able to persist things for multiple decades.
A python-adjacent project I'm also working on is starting on making videos about technology and similar subjects (http://www.youtube.com/c/andrewgodwin); I started out with an Arduino tutorial, but I have half a video filmed for my 3D mapping project, and I'm planning to then try to take some of the important parts of my talks and get them down in a more remote-watching-friendly format than a recording of a talk.
Which Python libraries are your favorite (core or 3rd party)?
Of the core libraries, I cannot get along without the collections library, deques especially. I've lost count of how many times I've turned to it for a sensible datastructure.
Of third-party libraries, I think my current favourites are Twisted, attrs, and of course, requests. Twisted is still my go-to library for networking; their collection of protocols especially makes it nice to throw things together quickly for almost anything on the internet, plus they're still adding features (and changing as Python does) at an impressive pace for the maturity of the project. Attrs was only introduced to me in the last six months, but it provides what is basically a better version of namedtuples that extends to being able to build normal classes without repetitive constructors. Requests is just such an embedded part of using the Web from Python now that I find it hard to remember how to use urllib.
Where do you see Python going as a programming language?
If you had asked me ten years ago I wouldn't have said it would end up as the second-most popular language in the world (according to some counts, anyway), but here we are. I think it's still got a strong future; certainly it is not the young, popular language any more, but I think it hasn't been that for some time and it's still approachable and bringing new developers on board.
I also think the Python community, and especially the Django community, helps a lot in this regard. There's plenty of languages out there, but there's something to be said for a welcoming, supportive group of people, and we have that in spades with Python. It's important that we don't lose sight of the beginners, and the other parts of Python we don't interact with much - for me, as a web/backend developer, I don't appreciate the scientific Python community nearly as much as I should, for example.
What is your take on the current market for Python programmers?
I can't really speak very well to this, as via a series of fortunate events I have not found myself on the open job market for many years now, but based on what I've seen of trying to hire, it still seems to very much be an employee's market for Python programmers, both on the smaller company side and increasingly on the big/corporate company side.
Is there anything else you’d like to say?
Just because it's not said enough, if there's an open source project you like and use, take a moment to send a message to the maintainers and say how useful it's been. About 99% of all the communication open source maintainers basically is about bugs and issues, so the small amount of happy stories we hear are really the thing that keeps us going. And if a project is asking for donations, just think about how long it would have taken you to do the same thing yourself, and if you have the money to spare, consider giving them some.Â