PyDev of the Week: Daniel Greenfeld

Today we welcome Daniel Greenfeld (@pydanny) as our PyDev of the Week! He is the co-author of Two Scoops of Django. I have followed his blog for quite some time and it’s well worth reading. If you’re interested in what Mr. Greenfeld codes, you should check out his Github profile. Now let’s spend some time getting to know our fellow Pythoneer!

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

I live in Southern California, am married to the wonderful Audrey Roy Greenfeld (@audreyr), and work for Eventbrite. My educational background is in liberal arts, which thanks to my career in software I’ve forgotten most of what I learned. The exception being a modest amount of creative writing.

I started programming when I was twelve years old. My father bought us an Apple ][+. I eagerly learned how to write games using AppleBasic. I started with simple text based games, then moved onto implementing graphics and what my teenaged mind called ‘artificial intelligence’. My most popular game was a text-based Star Trek thing, which many years later I duplicated in Python after a 45-minute cowboy coding session. You can try it out at https://pypi.python.org/pypi/python-wars-solo.

In the past few years I’ve had the opportunity to travel extensively both domestically and internationally for professional reasons. It’s been incredible going to new places, meeting new people, creating many friendships, and building an understanding of the greater world. On the other hand, I regret never having much of a chance of exploring most of the places I visited. It is something I would like to fix someday. Nevertheless, I’m terribly grateful to have been invited to places all over the world.

My hobbies including cooking, reading, and writing. I also do Capoeira, the Brazilian martial-art that combines elements of dance, acrobatics, and music.

Career-wise, my trade since about 1995 has been software engineer/coder/developer/hacker working mostly with open source technology. As there is no consensus for the title of writing software, I’ve gone ahead and listed them in my order of preference. Here’s why I listed them the way I did:

  1. Engineer is a great term, but some people take exception to it. I’m not sure why as the definition of Engineer matches what we do. From Wikipedia: ‘Engineering (from Latin ingenium, meaning “cleverness” and ingeniare, meaning “to contrive, devise”) is the application of scientific, economic, social, and practical knowledge in order to invent, design, build, maintain, research, and improve structures, machines, devices, systems, materials and processes.’

  2. Coder is a great term, because I think it’s the most straight-forward title of them all. There is no ambiguity with ‘coder’. However, it lacks the gravitas of ‘engineer’.

  3. Developer sounds great to people building websites. Unfortunately, outside the tech world, ‘developer’ means someone who gets stuff built on land. Now it sounds really silly to me.

  4. Hacker is a term that used to work, but the root of that ‘word’ has been co-opted too many times. There are ‘life-hacks’, ‘growth-hacks’, ‘money-hacks’, ‘fitness-hacks’, ‘diet-hacks’, ‘construction-hacks’, and much more. In the old days those used to be called, ‘advice on living’, ‘marketing’, ‘investment advice’, ‘tips for fitness’, ‘nutrition’, and ‘basic construction techniques’. No longer can I use the word ‘hack’ or any of its derivatives in conjunction with software with a straight face, so I try to avoid the term.

For what it’s worth, my actual title at Eventbrite is ‘Senior Software Engineer’.

Finally, I co-wrote with Audrey Roy Greenfeld the book Two Scoops of Django. We’ve given out tens of thousands of copies of our ebook and and hundreds of copies of the print edition, focusing on those coders who could not otherwise afford it. The number of people around the world who contact us to say our book helped enable them to improve themselves enough to make a difference in their lives astonishes me to this day.

Why did you start using Python?

A bit over ten years ago I had become extremely frustrating writing code in other programming languages (Java, ColdFusion, Foxpro, etc). I know now that my frustration with Java was probably due to working in the J2EE environment. It had gotten so bad that I started considering other career paths.

Fortunately, I landed a job at NASA HQ. I started there on January 3, 2005 as a sub-sub-sub contractor (Diversiphon=>Spherion=>SAIC=>NASA) making a tiny fragment of what the US taxpayer paid for my services. In my first year I was introduced to Python by Chris Shenton. Immediately I was hooked. I was impressed by how easy it was to learn, what it did out of the box, and most importantly, the dynamic typing. To this day, the typing of Python remains one of my favorite features of the language.

By early 2006 I managed to use Python professionally in a serious project at NASA. There was an Active Directory implementation with a self-signed SSH certificate that multiple projects needed to pull data from. The Java libraries of the day couldn’t handle it, but python-ldap could. I wrote a REST/JSON webservice that allowed other projects to easily fetch the Active Directory data. It sounds trivial now, but back in the day a Python REST/JSON service was insanely cutting edge compared to the JAVA/SOAP services that used to rule the world.

After that first project, I knew I had to switch languages. There were a number of setbacks on the way, so that didn’t happen for another year. Fortunately, by mid-2007 we had formed a Python/Zope team at NASA HQ and I was locked in for good.

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

Besides Python, the only other language I use professionally is JavaScript. Like many, there are parts of it I like, and parts of it I hate. My feelings on the subject of JavaScript are identical to what every other person who doesn’t use JavaScript as their primary language thinks.

While I have no substantial projects in Haskell, my toying with it in the past year improved how I write my python code. Specifically, I’ve gotten better at placing business logic into smaller, more atomic functions that are more easily tested.

I’ve also toyed with Go in the past year, but not as much as Haskell.

Finally, I’m intrigued by Apple’s Swift. I like the idea of it, even if it is used for a closed-source platform. It’s on my list of things to learn in 2015.

What projects are you working on now?

I’m working on a couple of secret side-projects with my wife, Audrey Roy Greenfeld.

Primary this fiction book I’m about to self-publish for the Amazon Kindle. In fact, the joke behind my 2014 April Fool’s Day blog post was that it wasn’t a joke. I had hoped to get it out last month, but had to delay it for a while for family-based reasons. Never launch anything if you don’t have the time to do it right!

For open source, I have a lot of projects that I maintain or co-maintain. Alas, I don’t have enough free time to dedicate to work on them. For about half I’ve managed to land good, consistent co-maintainers, but for the others it’s just me and I lag behind. This has caused some problems in the past few months. I’m not very happy with things, but I don’t have an alternative at this time. I just don’t have the luxury of lots of free unpaid time to work on open source. For what it’s worth, I feel crowdsourcing isn’t the answer, as getting money that way eats up a lot of time and isn’t always successful.

To put it bluntly, I’m rather jealous of David Cramer, as he and his business partner have made the Sentry project into an effort that pays for its own development.

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

Recently my thoughts on favorite libraries has been focused on those that help beginners. I’m not talking about tutorials, but rather the tools that make it possible to expedite the ability for a nascent coder to become productive.

I love working on cookiecutter, which my wife started in 2013. What it does is generate projects from templates, and works everywhere. By ‘everywhere’, I mean it works across many versions of Python, on Linux, Mac OS X, and Windows, and is extremely unicode friendly. The Windows issue is a huge win, because this means it’s makes it possible for beginners on that operating system to create installable Python packages or deployable Django or Flask projects trivially. This is possible thanks to the heroic efforts of Audrey Roy Greenfeld, Michael Joseph, and Paul Moore.

Speaking of Windows users, I find Conda fascinating. While I’m a pip/virtualenv/virtualenvwrapper fan, that set of tools really raises the barrier of entry for those not on POSIX based systems. Sure, for people on modern laptops things like Docker make it easy to get started, but for beginners with older devices it’s a chokepoint. This applies to even for non-scientific python libraries. The installation issue is one of the primary reasons why I stopped teaching basic
tutorials. Trying to get them working correctly on everyone’s machines at the beginning of an effort would suck the enthusiasm out of me. There was always at least one unlucky person who couldn’t get things working. As someone who started on Python using a second-hand Windows laptop the advent of Conda is what I’ve wanted to see for years.

I’m also impressed by iPython Notebook. After talking to Fernando Perez at Python Brazil 2014 I now understand how it’s so much more than a handy python tool. It’s a game changer in the control and dissemination of human knowledge, and not just for programming. I find that inspiring, and if I ever write a non-web Python book I’ll use iPython Notebook as an integral part of the material.

Besides those three, I love anything new that I spot on the Python Package Index. See new packages or old ones updated is like receiving daily gift boxes.

Is there anything else you’d like to say?

Yes! I really like your book, Python 101! It’s one of the ones I’m recommending to new Python coders!

Thanks so much!

The Last 10 PyDevs of the Week

1 thought on “PyDev of the Week: Daniel Greenfeld”

Comments are closed.