PyDev of the Week: Luke Plant

This week we welcome Luke Plant as our PyDev of the Week. Luke is one of the core developers of Django, a very popular Python web framework. Luke writes a blog with many articles about Django. If you’d like to see some of Luke’s contributions, then you will want to wander over to his Github profile soon. Let’s take a few minutes to get to know Luke better!

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

I grew up in England, and currently live in Turkey with my wife and son, and a second on the way! [He means a second child, not a second wife – The Wife]. At the moment my dominating ‘hobby’ is learning Turkish, which is pretty tough work, but very rewarding too. I also enjoy playing the guitar (though not to any high standard!).

Regarding learning to program, I’ve been mainly self-taught: as a kid it was the 8-bit, 64K Oric Atmos that my dad bought (which was brilliant – there was an invaluable Advanced Users Manual that told you pretty much everything about it, including a complete ROM disassembly listing), then later messing around with VBA and Microsoft Office. My dad’s interest in messing around with computers meant that we were one of the first families I knew to be regularly using email and the web.

I went to university to study Physics/Natural Sciences, but in my first week there, my career in science was derailed when a friend decided to install Linux on my Windows machine before I even knew what he was doing. Thankfully he left Windows on there too, rather than just wiping my hard drive! But that introduced me to the Open Source world, which re-kindled my previous interest in programming, and both the fun and the philosophy behind Open Source programming have been a major influence on me since. Thankfully, although I was studying science not programming, I was able to do a fair number of programming related projects – one of which I recently had fun re-implementing using IPython Notebook.

Why did you start using Python?

I think I started getting into it partly due to having nothing to do at work! A number of years after university, I had started a new job, but a recruitment timing error meant I had nothing to do for the first few months. I think it was at this point that I started playing with Python. Shortly after, I was motivated by the need to replace a ropey PHP website with something better, and then discovered Django (which had only just been open sourced, around summer 2005). This was probably my first serious Python project, but it’s still going well. Wanting to contribute to Django itself meant I had to learn even more. I was around at just the right time – when the project was much smaller and more fluid – and managed to get on the core Django team with a fraction of the effort that other more worthy developers since then have needed!

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

Historically in order – BASIC, 6502 Assembly, VBA, C, smatterings of C++, Perl, PHP, Javascript, Python, Haskell. However, of these I really wouldn’t be competent in any but Python and Javascript these days. I’m grateful that I get to use a lot of Python, which I enjoy. I also really enjoy Haskell and similar languages, but generally have only used them on an experimental level.

What projects are you working on now?

Mainly I work on a Django project for my client Wolf & Badger, and maintain some other Django projects including CCIW and These inevitably mean I’ve created, contributed to, or maintain various other Python/Django projects e.g. django-functest and django-paypal.

Which Python libraries are your favorite (core or 3rd party)?

I think this is a hard question to answer well – the best libraries and tools are often ones that you barely notice, but are just always there, doing what they should be doing. There are others which stand out by their excellence. There are probably many I’m not aware of, but some of the ones I am aware of using a lot, or am very impressed by, are:

Another I’ve just started to use is hypothesis, which seems to be very nicely designed, and I imagine I’ll use a lot more in the future. Of course there is Django as well, but I kind of take it for granted, and its also fair to say that despite a fairly progressive deprecation policy, our backwards compatibility attitude means there is quite a lot in there which isn’t the nicest code any more. It’s doing OK for its age I guess!

Where do you see Python going as a programming language?

It seems the story on async programming is getting better and better, which can only be good if it saves us from Node! I expect there to be a lot of growth in that area. There also seems to be a move towards static/gradual typing. I’m skeptical about the kind of improvements this brings – it will likely be primarily performance hints for numerically intensive code. Personally I’m more interested in the other benefits that a strong static type system can bring, and you can’t get those just by adding some type hints. Also, a major part of the character of Python is that it is very approachable for scientists and others who are not primarily programmers. I think that limits the amount that Python can evolve. On the other hand, the popularity of Python in areas like data science, astronomy, biology etc. will hopefully encourage growth in directions that are compatible with Python’s core strengths.

What is your take on the current market for Python programmers?

From my limited perspective, I think the Python job market is in good shape, especially in terms of opportunities that pay well and are projects you would enjoy working on. With the explosion of the role of data science, and Python’s great placement for that, I think the future is fairly bright on that front for Python programmers.

Is there anything else you’d like to say?

Reflecting on some of my answers above reminds me of a great article I read on the key role of luck in getting on in life. Although as a Christian I don’t technically believe in luck, I’ve definitely been very lucky, and I think it’s a really important thing to remember.