This week we welcome Oliver Schoenborn as our PyDev of the Week. He is the author of the PyPubSub project, a version of which is included with wxPython. He has been an active contributor on the wxPython mailing list where I have always appreciated his insights. You might find his Dr. Dobbs article interesting as well, even though it’s a bit old. Let’s spend a few moments getting to know him better!
Can you tell us a little about yourself (hobbies, education, etc):
I’m a Senior Consultant at CAE Inc in Ottawa, where I engineer simulation systems for a variety of applications.
I started programming on an Apple IIe in 1982 when I was 13 years old. I bought it used, with my own money that I had saved for a few years for “some day when I would want something really big”. I discovered Assembly programming on that machine, with peeks and pokes and interrupts and registers, and was hooked. I moved on to Basic and Pascal and Prolog. I created my first simulation in my last year of high-school for a programming course project. Discovering C++ in the mid-90’s was a revelation, I found the object-oriented approach so intuitive, and I’m still a stickler for clean interfaces and refactoring. During my high-school years I thought that Physics was my passion and I received my Physics PhD in 1998 from University of Toronto, but I came to realize that programming was my real passion and have made that the focus of my professional career.
I haven’t worked in Physics since my degree, but during my PhD I developed many valuable skills such as problem solving, bug finding, testing, approximations, process modeling, and Unix development. As such, I have been fortunate to work on some very fun and challenging industrial projects, including: crane operation trainer in a fully immersive virtual environment (with a real crane cab and controls, and surround display etc);a Search and Rescue trainer which allows an instructor to challenge a student to spot and alert against threats on a military aircraft; an Avionics maintenance trainer that allows a classroom of students to each troubleshoot defects on a modern aircraft using virtual tools and virtual cockpit and work areas and a Human Resources planner that allows an Operational Research department to conduct “what-if” analyses of 100,000 employees evolving over the span of 20-30 years in the future.
Other than an obsession for programming, I love snowboarding, and playing the harmonica (blues and folk, although I don’t have much time anymore to learn anything new). If you are middle-aged and want to learn how to snowboard without breaking your rear-end, let me know and I’ll share the tricks that allowed me to enjoy this wonderful sport.
Why did you start using Python?
Oddly, I started using Python because in 2001 a project I was assigned to required Windows GUI programming, which I had never done. Since learning MFC did not interest me, I looked at a few options in C++, and came across the wxPython library, a Python API to the C++ wxWidgets library. I immediately fell in love with Python, and discovered that I could use SWIG to integrate Fortran and C++ backends into a Python + wxPython application, thus I could get my cake and eat it too.
What other programming languages do you know and which is your favorite?
My favorite all-purpose language is Python: the syntax is so intuitive and clean, I find I have to do very little translation to go from design and algorithm in my head into code on the screen. For tasks where speed is not the main factor, it is the perfect language.
When speed is essential, my favorite language is C++. Although, I would love to find a language that has a simple and clean syntax like Python but is as close to the metal and supports OO and generics like C++. Ideally, the language would also support type inference and function annotation, and produce equally fast code.
When application scripting is required, my favorite is Lua: designed from A to Z to be embedded in a host application via C/C++, it is simple yet so versatile (but please don’t try to use it to write a whole application).
My favourite tool to integrate all these languages is SWIG: it takes care of generating all the boiler-plate code necessary to integrate different programming languages.
What projects are you working on now?
In the little spare time that I have as a father of two active kids, I try to keep up with technology and also update PyPubSub. I would love to get involved in a cloud-based project, maybe an educational game or a mobile app, or perhaps a hardware-based app like a security system. But this would almost certainly have to be through my work due to time constraints.
At work, I am currently leading the development of a human-resources simulation GUI tool in PyQt 5.3 and Python 3.4. The tool supports Python scripts written by the user, integrates the Python debugger to enable the user to debug their scripts as they are being run in the GUI and supports multi-processor-based simulations of the user’s HR model on 24 core machines. In future, it will also support an HPC cluster of machines.
Which Python libraries are your favorite (core or 3rd party)?
For desktop GUI, I’m in love with PyQt. For web apps, I really like Flask and AngularJS and emberjs. One I have not used in a while is rpyc, a powerful remote-python-call library that can be used for distributed Python computing. I used it 2007-2009 for a distributed simulation management tool that I developed for a client.
Some core modules I find really increase productivity are subprocess, re, urllib2, timing, datetime, threading, functools, and textwrap, although I always look in the core libs first. A really powerful but unfortunately not very well documented module is bdb, which allows an end-user to step through Python scripts, manage breakpoints, introspect local variables, etc. For applications that support scripting, this is amazing.
Where do you see Python going as a programming language?
Although I don’t spend much time thinking about this, it is fun to ponder for a moment. I would guess that the need for speed, beyond the speed-ups provided by faster hardware, will pressure the language designers to find ways to make it faster, although this will almost certainly come at the cost of decreased dynamism and clarity. Multithreading will continue to be limited by the GIL, so true parallel execution will continue to evolve via the multiprocessing package and third-party cluster/cloud abstraction packages. Maintainability and robustness will continue to be important as building large Python applications continues to gain in popularity, such that “intent” based programming, likely based upon code annotations, will continue to develop. Backwards compatibility will tend to make such extensions more verbose than necessary, such that another Python 3k transition (this time to Python 4k) may be necessary in less than 10 years.
What is your take on the current market for Python programmers?
Python is often mentioned in software engineering job ads but my impression is that it is often used merely as a scripting language. The language itself, the set of libraries available for it, the library management, documentation and testing tools available for it, and its ability to integrate with C++, make it a very strong contender for full-fledged applications. But at least in Canada, it can be a challenge to find Python application programmers. Or perhaps they are all very busy working!!!
Is there anything else you’d like to say?
StackOverflow, Google search, and Open Source, are godsends. Python annotations are great, especially the way they were made optional. PyCharm is the most awesome Python IDE I have ever used (and I have used many).
Thanks for doing the interview!