This week we welcome Mark Haase as our PyDev of the Week. Mark is the author of PEP 505 – None-aware operators. You can check out what projects Mark is interested in over on GitHub. He also has a programming blog that covers various programming topics. Let’s take some time getting to know Mark better!
Can you tell us a little about yourself (hobbies, education, etc.):
As a child, I always loved building things, like Legos. I sketched designs for other projects that I daydreamed about building — a hang glider! — but, as a kid, I was obviously limited in terms of skills, tools, and resources. Nobody was going to hand me an arc-welder, after all.
I started programming when I was about 12 or 13. I learned BASIC first, then Java a couple years later. Programming didn’t have the same limitations as physical things. I didn’t need a whole workshop with tools and materials, just a computer and a compiler. I minored in Comp Sci in college (a mistake, in retrospect, I should have majored in it!) and managed to find a job as a programmer when I graduated. It’s been my career for 10 years now.
Why did you start using Python?
I started working with a roommate on a pet project and he encouraged me to try Python. After several years working with some other, not-to-be-named web development languages, Python was a relief. It felt sensible. It felt like it had been carefully designed. It felt productive — ideas could be turned into code easily. Python made programming fun again!
I switched jobs soon after that and had several new coworkers who liked Python, and Python has been a major part of my work ever since. As I learned more and more about Python, I became totally fascinated with the design and features of the language and — equally important — the culture and mindset that surrounds it.
What other programming languages do you know and which is your favorite?
What projects are you working on now?
I work with a company called Hyperion Gray on a DARPA (a progenitor of the internet) research & development contract. We have a wide range of research, but my personal focus is combining web crawling and machine learning: building crawlers that are more intelligent about what links to follow, more resilient in the face of errors (crawling loops, soft 404s, etc.), and extracting the important content on each page. We love working with DARPA, and we are able to open source the majority of our work.
Which Python libraries are your favorite (core or 3rd party)?
Flask is the first major package I started using. I shopped around a bit and settled on Flask because it wasn’t monolithic and the documentation was fantastic. I’ve never regretted the choice: the more I learned about Flask, the more I enjoyed it. I’ve continued to use it on new projects over the last 5 years and it still feels like a “just right” tool.
Requests is another phenomenal library, because it wraps a chaotic and difficult core API with one of the most brilliant APIs I’ve ever seen: simple enough to memorize the basics but powerful enough to not limit what you can do with it.
There is also a cluster of numerical and scientific computing packages (NumPy, SciPy, etc.) that are making Python an important language to know for a wide range of data science applications. I can combine the productivity of working in a high-level language like Python with the performance characteristics of low-level, highly tuned code.
Where do you see Python going as a programming language?
I’ve always thought of Python as a glue language. In the web development world, performance critical code is handled by databases, web servers, message queues, etc. You can write your business logic in Python and pass data back and forth between those highly optimized, highly tuned components. I wouldn’t write a database server in Python, and I wouldn’t write my business logic in C++. Those are different tools that complement, not compete.
That same approach is taking Python into new areas. High-performance machine learning and deep learning are going to be hugely important in the future of computing, and Python — a notoriously “slow” language — is a reasonable language for building deep learning systems. Why? Because the performance critical code is optimized, vectorized, and tuned in low-level libraries like NumPy and Theano. A small amount of Python code can produce simple and amazing machine learning systems. This is a great example: http://neuralnetworksanddeeplearning.com/
I personally don’t feel a need to learn specialized, domain-specific programming languages, like Octave for linear algebra, or R for statistics. Python can do all these things. At work, we even create presentations in IPython notebooks!
What is your take on the current market for Python programmers?
I don’t know! The last time I applied for a job was about 5 years ago, which is also roughly the time when I started learning Python. Anecdotally, it seems like job listings are always dominated by whatever flavor-of-the-month technology is hot at the time. If I was looking for a job, I would feel more confident applying to any job with my 5 years of Python experience than with 6 months of ____. Python is so versatile (see my previous answer) that I assume Python will continue to be highly relevant in the coming years.
Thanks so much for doing the interview!