PyDev of the Week: John Sheehan

This week we welcome John Sheehan (@JennaSys) as our PyDev of the Week. John is the author of React to Python. You can see what John has been up via his website or on his Github profile.

Let’s spend some time getting to know John now!

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

I am a freelance software developer mostly focused on developing in-house applications for small/medium size businesses. In-between working for my own clients over the last 25 years, I also served as a project manager on a large multi-year enterprise Java project, and spent several years running operations for a local Makerspace.

I received my degree in Computer Science & Engineering from the University of Illinois at Chicago … a long time ago. From there, due to a random paperwork filing mistake that someone made, I immediately got a job in a mechanical engineering position that ultimately moved me out to California. While that job didn’t have anything to do with programming, it gave me several years of learning how every aspect of a medium-sized business worked. When I left there to start a freelance programming business, that experience proved to be invaluable as it allowed me to walk into almost any small business and fully understand their business workflows within a very short period of time. I was then able to effectively translate that understanding into software to help automate their processes. To that end, I attribute my success in developing software in my freelance business, to spending many years beforehand not developing software at all.

I’ve been an avid electronics enthusiast since I was a teen. That passion was revitalized in the mid 00’s when I stumbled upon Make! magazine and was introduced to the Atmel AVR family of microcontrollers. Since then, I’ve made a deep dive into the Raspberry Pi world (I’m the organizer for a Raspberry Pi meetup group), and have an affinity for Espressif ESP8266 modules that I program using MicroPython.

I’m also a lifelong musician (saxophone, guitar, flute, keyboards, harmonica), though that aspect of my life has been on the back-burner for the last few years.

Why did you start using Python?

When I started my freelance business, the internet was just getting off the ground, and desktop applications were the norm. Small businesses (my target market) were in the process of converting from paper to digital at the time, and RAD was the buzzword of the day. As such, I was doing mostly Visual Basic desktop application development. For better or worse, many of those applications I developed back then are still in use today. When Microsoft killed off VB in favor of C#, I went looking for a replacement, and Python was the closest fit for my needs. I’ve been using Python now for over a decade.

Oddly enough, my very first exposure to Python was an interpreter that was embedded in a Digi Zigbee-to-Ethernet gateway device. My first useful Python program was transforming data as it flowed through the gateway.

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

Python is definitely my favorite language at this point. It just fits how my brain works, it’s really versatile, and makes programming fun for me. Other languages that I have actual experience with beyond just “Hello World” would include (in order of when I learned them): Basic, C, Lisp, VB, VBA, C++, JavaScript, Java, (Python), Google Apps Script, and Scratch. Other languages currently on my radar to further look into including Kotlin, Rust, and possibly Dart because of the Flutter platform.

Most of my active language use is Python, though I’m still maintaining several VB/VBA applications, and use C for some embedded projects.

What projects are you working on now?

Most of the applications I’ve developed over the years have been in-house CRUD apps for the SMB market. The big problem I’ve been trying to solve is to find an affordable way to get my existing clients off of the desktop and on to the web for their in-house applications. The fact is that custom web applications are expensive, and small businesses have a hard time justifying that kind of cost, especially when they already have something in place that is meeting their basic needs.

It goes back to the Rapid Application Development tools of the late 90s, where you could churn out a fully-featured CRUD app in a few weeks instead of months, and feature updates could be done in hours instead of days. Some web development tools are now finally moving towards that again (and others away from it), but it’s not quite there yet.

One of the more interesting platforms I’ve seen lately is Anvil. They essentially made a VB style platform for web applications and use Python as the language “behind the forms”. I was just about to dive into that to see if it would fit the scope of what I wanted to accomplish when I discovered Transcrypt, and went down a path of developing React applications with Python instead.

I also have a few embedded development side projects going on. One is a Raspberry Pi based camera that allows the public to take pictures of themselves in front of a physical art display, that the Raspberry Pi then texts to them. I have it tied into AWS IoT for logging, metrics, monitoring, and admin tasks, and it’s written in Python.

All that said, the book I’ve been working on for the last 6 months has been taking up most of my time. I’m looking forward to getting it out and getting back to spending more time developing.

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

Transcrypt has been a game-changer for me. Using it with React, for the first time in a decade, front-end web development is actually enjoyable again.

Flask has been great to work with. I like its à la carte approach and use it mostly for REST APIs that access back-end SQL databases. But I will sometimes hand-code basic Jinja templates as well, which are usually just for internal dashboard or admin type applications.

Boto3 has been really useful for working with AWS, and Zappa has made deploying a Flask app as an AWS Lambda ridiculously easy. It’s great for admin dashboards.

How did your book, React to Python, come about?

I had been pair programming on a React based CRUD application with a colleague (using Kotlin & TypeScript), and I really liked the declarative functional paradigm that React provided. However, I’m not necessarily a big fan of JavaScript or TypeScript. But then, when I started playing around with Transcrypt and found out how well it worked with the React library, I decided to try converting a VB application at one of my clients to a web-based version using Python/Transcrypt/React/Material-UI. In doing this, through a bit of trial-and-error, I came up with a process that produced really clean Python code and resulted in a modern, decent looking, and performative web application. I was actually blown away by how well it worked out and how fun it actually was to implement. And I didn’t have to think in JavaScript to do it.

I wanted to share what I had learned, and started putting together a presentation on the approach I took for the Python meetup group I run. In working on an outline for it, I had so much information that I had to exclude from the presentation due to the time it would take to cover it all, that I decided to put it into book form.

I do still plan on putting together a presentation with the basics, and will likely be making a number of blog posts related to the topic once I get the book out.

What are some of the things you learned while authoring a book?

Ah, SO much. First, that there is no one way or right way to do it. I ended up using methods and tools that I swore I would not use when I first started. But then they actually worked out well for me after all. I used Google Docs for the initial manuscript, then converted each chapter to Markdown. From there, I use Pandoc to generate the PDF (via LaTex) for print, as well as the epub format (using CSS). It was a pain to set up initially, but the resulting workflow is actually pretty easy for me now.

Next, that when you finish writing the manuscript, if you are self-publishing, you’re literally only half done. Editing, code management, indexing, editing, layout, reviewing, and editing will take up just as much of your time as it did to write the book in the first place. And that second half of the process is a lot more tedious than the actual writing.

I had put together a number of training classes and presentations in the past, but this is my first book. After doing a ton of research on best practices, I still had several questions and doubts about my approach. The Authoring course by Matt Harrison really helped fill in many of the knowledge gaps I had, and the author interviews he did as part of that course were phenomenal in providing additional insight into the process.

So far, the process has been manageable, and I do have another book topic in queue. I’ll see how this first one does before committing to the next one though. It is a lot of work, and quite consuming – in terms of both time and brain energy.

Is there anything else you’d like to say?

I appreciate you providing this platform to share developer experiences. So much material out there is just about what’s the latest and greatest, but there are a lot of interesting things going on in the trenches solving problems in less visible niche areas.

I also want to thank the Python community in general. The welcoming vibe and willingness to share ideas and knowledge has been phenomenal over the last 10 years, and I hope that attitude continues to thrive as more people adopt the Python language.

Thanks for doing the interview, John!