This week we welcome Cameron Simpson as our PyDev of the Week. Cameron is the co-author of PEP 418 – Add monotonic time, performance counter, and process time functions and the author of PEP 499 – python -m foo should bind sys.modules[‘foo’] in addition to sys.modules[‘__main__’]. He is also a core Python developer and enthusiast. You can check out some of his projects on bitbucket. Let’s take a few moments to get to know him better!
Can you tell us a little about yourself? (hobbies, education, etc):
I’ve been a programming nerd since I was about 15, and I’ve got a BSc in Computer Science. I’m a somewhat lapsed climber and biker; I still have a motorcycle and try to use it but circumstances interfere; I’m trying to resume some indoor climbing too. I’m spending a fair amount of time on a small farm, and teleworking from there part of the time; I’ve been fortunate to find work where that is possible.
Why did you start using Python?
In 2004, I’d been intending to learn Python for a while—maybe over a year—but kept putting it off because of my huge personal Perl library that caused me to resist change... a personal library means you’ve got this kit of things that make the specific things you tend to do easier.
I think in 2004 I decided to dig myself out of this hole by reimplementing core stuff from my perl lib in Python so that I could write Python scripts to work with my existing data. Also that year a friend was dealing with a stripped down Jython platform in WebSphere, so there was some Pythoning there too, implementing some stuff.
From that point on things snowballed as my core working Python stuff grew and Python was clearly a better language.
What other programming languages do you know and which is your favorite?
Python is my present favorite and has been for some years. It has a nice balance of power and clarity, and I continue to like the design decisions that go into it.
The languages I use regularly and fluently include Python, the Bourne shell, sed and awk and their friends. I like to use the “smallest” tools for a task that succinctly express a solution, so I tend to switch up from things like sed to shell to Python, or a mix.
What projects are you working on now?
Several, mostly to scratch personal itches; you can see almost all of it at bitbucket; it looks like all Python but almost my entire bin directory scripts are there too. In terms of “projects”: myke, my make replacement; vt, a content addressed storage system (after the style of https://en.wikipedia.org/wiki/Venti but not the same) with a FUSE filesystem layer on top and ways to connect storage pools together; yet another MP4 parser, partly to aid inspecting and controlling media metadata and partly intended as a proof of concept for the format specific blockifier side of the storage system; tools for accessing my PVR’s recordings; mailfiler, my mail filing tool; maildb and nodedb, ah doc node/attribute storage, usually based off shared CSV files; the scripts and library files underpinning these; later, which I use instead of the futures library. I’m trying to get more of the library modules into PyPI.
Which Python libraries are your favorite (core or 3rd party)?
I think BeautifulSoup is an amazing tool. I love the threading facilities in Python’s stdlib. When I use it, I think SQLAlchemy is a lovely way to interact with SQL (I avoid the ORM side).
What is your take on the current market for Python programmers?
Regrettably, I don’t have strong opinions here. I’m enough of a generalist to not need to seek specific “python programming” niches (though last time around, that is somewhat what I was seeking). Of course, the flip side to being a generalist is that I can apply Python to many needs, giving me an excuse to use it!
Is there anything else you’d like to say?
Like others, I think the Python community is great. I mostly interact with it via python-list, and I’m constantly heartened by the effort people put into staying constructive instead of descending into conflict as is too easy. In few other fora are people as willing to apologize for ill-thought opinions or behavior, as earnest in their attempts to justify their positions with evidence, reason and experience, and as prepared to accept that others’ experiences and needs are different from their own.
Thanks for doing the interview!