In dev.life, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.
Today’s guest is Dusty Phillips, Software Engineer at Facebook. A long-time Arch Linux contributor, Dusty is the author of ‘Python 3 Object-Oriented Programming‘ and ‘Creating Apps In Kivy‘. He also wrote ‘Hacking Happy‘, which explains psychological techniques through the use of programming and systems administration concepts, so that you can optimize for happiness in your work and personal life.
Location: Seattle, WA, US
Current Role: Software Engineer at Facebook
How did you get into software development?
My parents got an i386 with Windows 3.1.1 when I was 8 or 9. Dad told us it was for “doing productive things” and “making money”, not playing games. Perhaps because of this, I’ve never played games seriously, but we all partook of the default games that came with the machine. Minesweeper and Solitaire were there, of course, but we also played Tetris and a few others.
That machine had QBasic preinstalled, and at some point, we discovered that we could load nibbles.bas and gorilla.bas. I know now that these games were designed to illustrate the possibilities of the Basic programming language. At the time I only knew we had access to two new games that we didn’t know about.
One day, I accidentally deleted the first character of a line. Worse, when I went to exit QBasic, it asked if I wanted to save my changes. I didn’t understand what I’d changed, but you should always save your changes, right? Otherwise, the file won’t stay up to date. The game no longer ran, but at least it told me what line was broken. I replaced the missing apostrophe with a comma (which looks about the same), but it didn’t fix the problem, it only changed the error message. I didn’t know about documentation and I didn’t have the Internet, so I was on my own. Eventually, I figured out what key to press to insert the same character that was first on nearby lines. The program worked and I was able to make snakes eat numbers again.
I knew then that I wanted to code, but I didn’t start studying it until I took a ‘Computer Science’ course in grade 9. It was QBasic again; later I graduated to Visual Basic in grade 12.
While I studied coding in high school and university, I consider myself largely self-taught. My local library had a book on programming for Commodore64 in their dialect of BASIC. I spent a lot of time translating the programs into QBasic, mostly by trial and error. My learning accelerated in my 16th year when we got the Internet.
Tell us a little about your current role
I work on the team that tracks all the data centers, racks, servers, and components at Facebook. I spend a lot of time in detailed code review, helping my teammates improve their Python skills. I also spend a ton of time writing new code. However, the largest percentage of each day is spent thinking about how I’m going to write that code!
Outside of work, I’m taking a rest between projects right now. I spent the last year on the second edition of my book, ‘Python 3 Object-oriented programming‘. I had to restructure two of the chapters to make them flow more clearly, but the most interesting part was adding a new chapter on concurrency. Concurrency doesn’t have a lot to do with OOP, but I wanted to study asyncio, so I threw it in as a bonus.
I also have a handful of mobile applications that I’d like to develop. I’ll probably be using Kivy to make sure I’m up-to-date for a future second edition of ‘Creating Apps In Kivy‘. But I’d also like to experiment with React Native.
When are you at your happiest whilst coding?
I like making code beautiful. Performance matters and code has to do what it’s supposed to do, but for me, the fun part is finding the most elegant way to solve a problem. I am most frustrated when I have to create a kludge to make something work, either because I can’t find a way to do it cleanly, or because I don’t have time to do it right.
I don’t often get bored while coding; if I find a task repetitive or boring, I generally take the time to build a tool that does that task or a more generic library that automates it. Building the tool is, of course, not boring.
What is your dev environment?
I run Fedora (relatively unmodified) on ThinkPads. I’ve been using Sublime for quite a while, but recently switched back to Vim because I do a ton of work on remote machines. I only need a few Vim plugins (supertab, syntastic, and airline are the must-haves) to make it do exactly what I want. The absolute killer app for me is FZF (fuzzy finder), which works with Vim and on the command line to quickly find files, folders, and tags I need to access. I prefer git for version control, zsh as my shell and tmux for terminal job management.
I have a convertible desk at work and switch between sitting and standing every half hour or so. I wear earplugs with noise canceling headphones connected to myNoise to minimize distractions.
What are your favorite books or resources about development?
I’m currently working my way through ‘The Art Of Computer Programming‘, and I’m really impressed with how accessible Knuth’s writing is, considering how intimidating the content is.
I think the most influential book in my history was Bruce Eckel’s ‘Thinking In Java‘, second edition. It was the first book I read that had a friendly, rather than academic, attitude toward the reader. More importantly, it had a small footnote that suggested Python’s exception handling was better than Java’s checked exceptions. That got me started on Python and I haven’t looked back.
Another foundational article in my early Python development was David Goodger’s ‘Code Like a Pythonista‘. I read it once a month for at least a year before I finally found I didn’t learn anything new from it. It’s hopelessly out of date now, but I’ve put some work towards a “Code Like a Python3sta” sequel.
What technologies are you currently trying out or want an excuse to try?
I’m currently studying the Nim programming language. Not for any particular reason; it just looks interesting. It’s the only whitespace-aware compiled language I know of. It’s rare for me to come across problems that I can’t solve in Python 3, but when I do, I think Nim is a good solution.
I haven’t worked with them much, but I’m super excited about React and ECMAscript 6. I have hopes that the latter will reverse many of the bad coding trends we’ve seen over the past two decades.
When not coding, what do you like to do?
I live in Washington State, so hiking is pretty high on the list. Unfortunately, it’s also high on everybody else’s list, so the trails can get pretty crowded!
I love writing; I already have two new tech books bouncing erratically around the interior walls of my head. If I had more free time, I’d probably also write fiction.
I tend towards any hobby that allows me to be creative or productive, and away from activities that are largely consumptive. I’ve taken up sketching again since I finished editing my book. I haven’t had access to tools since moving into a city apartment, but I also enjoy woodworking. I’ve started knitting and will probably do a lot of that through the winter months. It’s pretty challenging and a lot of fun. I especially enjoy designing my own patterns, which can result in hilarity since I only know enough about the subject to hurt myself.
I’m co-founder and co-organizer of the Puget Sound Programming Python user group. I try to regularly attend weekly hacknights and our monthly meetups as well as coming up with new plans to help local Pythonistas engage and connect
with each other.
What advice would you give to a younger version of yourself starting out in development?
It’s not development related, but if I could go back in time, the first thing I would do is convince myself to get treated for depression and anxiety at a much younger age. I could have accomplished so much more and enjoyed so many more moments in my life if I’d faced that sooner.
I wish David Burns had written ‘Feeling Good Together‘ 10 years earlier and that someone had recommended I read it, instead of Carnegie’s ‘How To Win Friends And Influence People’. Basically, I wish someone had taught me how to be a decent human being: more polite, less defensive, more confident, less anxious, more encouraging, less creepy.
From a development perspective, I’d tell myself to be a lot more conscious about technical opinions. Apply the robustness principle: “Be conservative in what you send, be liberal in what you accept.” Basically, don’t be too vocal about your opinions, I assure you that you’ll change your mind. But also, listen to the opinions of others and consider the useful information that is in the ones you disagree with.
Write code you don’t know how to write, tackle problems you don’t know how to solve. More importantly, learn things you don’t want to learn. If it looks boring or if it looks too hard, study it. Do things before you don’t know how to.
Thanks to Dusty for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.
Recent dev.life Interviews
Mary Rose Cook