According to his Linkedin Bio, today’s guest’s name is “Glyph Not Looking Don’t Contact Lefkowitz” and he created a powerful, event driven networking library called Twisted. In this episode, he tells us how he got started, what his most painfulre lessons have been, and how trying to measure the merit of a programmer is a fundamentally flawed exercise.
To learn more about the A* interviews or to find more episodes, look here.
For the impatient or textually inclined, here’s a summary of our conversation.
What are you working on right now? Why are you working on it?
- Working on “Mimic” for Rackspace.
- Mimic allows testing of cloud infrastructure provisioning.
- Saves you a lot of time and money confirming that your deployment will work as expected.
- Also working on Twisted, where he has created an “egalitarian process” that’s in charge of it. He still contributes when he can.
- The Twisted project was a really early innovator in being a heavily-process-driven, 100% code review, 100% test coverage, 100% docstring project (started back in 2004).
What are your main non-technical interests? Who’s your favorite musical artist?
- As per David Reid: “What’s your job? Programming. What’s your hobby? Programming. What do you do when you’re not programming? Think about programming”.
- Also computer art, video games, and science fiction.
- His favorite musicians (cut from video for time) are Chipzel, Big Giant Circles, Caspian, Rena Jones, Lindsey Sterling, Nine Inch Nails, Jonathan Coulton and Sir Frontalot.
How old were you when you started programming? What motivated you to start? How have your motivations changed since then?
- Very young. Father was a programmer who taught him a bit of APL. Wanted to be a writer and build a text-based RPG like Zork so he taught himself to program…slowly. Spent a couple years building elaborate Hypercard stacks. After a few years, learned about if-statements (and a year later about variables.)
- Eventually jumped in C++. Went to computer camp, learned Java and LISP, and filled his high school notebook margins with programs.
- Really loved the interactivity of games; realized that he has attention deficit disorder and computers were the only thing that could hold his attention.
What’s the most painful technical or career lesson you’ve had to learn? How did you learn it?
- Building a gmail-before gmail product called “Quotient” at a company called Divmod. All the changes they tried to make increased complexity and decreased maintainability, making things move slower and slower. So the most painful lesson was that if you don’t have a process in place that considers the “people factors” you’ll end up with an unmaintainable mess.
- You have to write stuff down, in a place that people will see it. And you need a process for testing and maintaining quality standards. Need to build that into your project early on.
- Read Extreme Programming Explained, Embrace Change
What is your favorite programming language? What is your favorite tool (e.g. emacs, Postgres)? Why?
- Favorite in terms of design – Smalltalk. Few moving pieces, hangs together conceptually. But it has no tools…strange technology from the future and can’t really practically do much with it.
- Python compromises with reality. But has commandline interactive interpreter. Has a simple C implementation people can hack on. Garbage collection semantics that sort of make sense. The community values readability and there is a great community.
- Favorite tool is pip. Let’s you do the most important thing, which is split up responsibility into different modules. Twisted’s test runner “Trial”. Tmux is great for managing terminal sessions.
How should we measure how “good” a technologist is? What are the key “virtues” of a technologist or of a solution?
- 10x is a toxic myth.
- We should stop trying to measure goodness because the idea of “merit” leads to bad things in the community.
- The only good metrics measure teams and they look at outcomes (how many features did you ship) rather than the product.
- When evaluating, worry about how people will fit into a team rather than how “good” they are.
*If there’s one defining characteristic, it’s a desire for consistent self-improvement.
How structured is your problem solving approach (e.g. do you use TDD? Do you always pseudocode before coding)? How much of your problem solving comes from intuition/flashes of insight vs. conscious thought?
- Used to be all about flashes on insight. Has ADHD “hyper focus”; can stay focused super hard on one task, until he loses it and then can’t focus. He’s a 10x programmer in a short window of time, then nothing for a long time.
- Then over-corrected to all 100% TDD all the time.
- Then heard a talk by John Cleese of Monty Python about scriptwriting and the idea of “closed vs open mode” – open is creative, flowing, no fear of failure. Closed is tight, structured, about getting things done. The split should be about 50/50.
- Don’t bash your head against problems. Try switching methods.
Any sites or projects you want to plug? (Feel free to plug your own business.)
If you could give one piece of advice to yourself at age 15, what would it be?
- Learn abstract programming concepts earlier.