PyDev of the Week: James Murphy

This week we welcome James Murphy as our PyDev of the Week! James is the founder of mCoding and also has a popular Python tutorial channel on YouTube. You can also see what James is up to over on GitHub.

Let’s spend some time getting to know James better!

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

I’m a mathematician and programmer at heart. I did my B.S. in Computational Finance and M.S. in mathematics at Carnegie Mellon University. For my M.S. thesis, I studied a one-dimensional model of a physical system that releases more energy the hotter it gets, calculating at what point a runaway explosion effect occurs.

I decided I loved doing math too much to stop there, so I continued on to UT Austin where I did my Ph.D. in mathematics. My research was in probability, focusing primarily on random networks in a sub-field called stochastic geometry. You can see a sample video from my thesis defense of what one of these random networks, called a Doeblin Tree, looks like.

After my PhD, I moved to Chicago to be a quantitative researcher for a trading company, where I worked on their S&P500 team.

Eventually, I decided that I wanted to take on a more entrepreneurial challenge and start my own business! I founded mCoding, where I do teaching, training, contracting, and consulting. At some point, I decided to start putting up some free sample videos so customers could see my teaching/training style, and that’s how the mCoding YouTube channel [2] got started. I never expected that random strangers on the internet would actually like them, but now I have a dedicated and growing audience!

As far as hobbies go, I spend most of my time either reading math papers, programming, playing my Les Paul, or just walking around outside. Sometimes I wonder what my winding number around my neighborhood is. Probably over 1000 (oriented clockwise)!

Why did you start using Python?

In undergrad at Carnegie Mellon, I asked my friend what his favorite programming language was. He told me he used Python “for everything”. At the time I was surprised because I thought Python was just a niche language, not ready for mainstream use. I tried it and not having to write type names combined with the ease of writing generators completely hooked me. I started using it for everything too!

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

The primary languages that I use for real work are Python and C/C++, but I’ve dabbled in many others. I use Bash/shell scripting for sysadmin stuff, LaTeX for writing math papers, Mathematica for doing simulations (before I learned Python), PHP/Perl/HTML/JS for web development (again, mostly before I learned Python), and a bit of R for hypothesis testing. My first language was Java, but I haven’t touched it in a long time (I think they were just introducing lambdas when I stopped). Looking forward, the most likely language I’ll learn next is probably Rust. My favorite is still Python. 🙂

What projects are you working on now?

I noticed that the way I edit videos is very algorithmic, so I thought, why not write some code to edit the videos for me? The project is in its infancy right now, it’s basically a dumb jump-cutter that cuts out long portions of silence, but it would save me a lot of time if I can get it working with intelligently deciding what speech to include/exclude! Another fun one is writing some code to automate YouTube actions and analytics using the YouTube APIs. For instance, I can keep all of my video descriptions up to date with all my latest links in a flash!

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

Here’s my chance! My favorite and the two most underrated core libraries in Python are itertools and functools. I have those docs permanently open in my browser because I use them constantly. For 3rd party I’d have to go with pandas, mainstream, I know.

I see you teach about programming. What do you find are the hardest topics to teach new students?

I find that the most difficult topic to teach to a new student is how to break down a problem into parts and work as if some of those parts are already completed. Faced with a monstrous task of, let’s say, making tic-tac-toe, new students see what they have and what the end product needs to be, but many struggle on how connect the two. I could give starter code with everything already broken down to the function level with type hints and doc strings pre-made, but this really just avoids the issue. Eventually students need to learn to decide which functions and classes to make on their own and how to organize an entire project, but teaching how to do this is always difficult because there are an infinity of ways to code the same thing, none of which is necessarily the “best” or “most correct” way.

Is there anything else you’d like to say?

Thanks for reading! If you haven’t already, check out my YouTube channel, mCoding !

Thanks for doing the interview, James!