I am an experienced speaker, having given more than 60 different talks over the years, at over 200 conferences and events, especially during my stint as a featured speaker on the No Fluff, Just Stuff symposium tour from 2002–2005.
I have given well-received keynote addresses at:
- Esri Developer Summit 2019
- O’Reilly Software Architecture Conference 2019
- O’Reilly Software Architecture Conference 2015
- Big Ruby 2014
- Rocky Mountain Ruby Conference 2013
- QCon San Franciso 2012
- RailsConf 2011
- ERubyCon 2007
Quite a few of my recent talks have been recorded and are available to watch online.
Software Engineering (and a bit of Craftsmanship)
- Real Software Engineering (2010–2017)
- I think this is my best talk. In it, I explain why I think software development really is an engineering discipline (even though formal software engineering methods have mostly failed) and provide a way of viewing current accepted software development techniques in an engineering context. Some software engineering professors show this talk to their students. I’ve given it at several conferences, and there are multiple videos available—each with slightly different material, as I’ve continued to learn and refine my thinking on this topic over the years. (I’ve listed them in order of my own preference; the version from Software Art Thou? is my personal favorite.)
- Craft, Engineering, and the Essence of Programming (2011)
- A talk related to Real Software Engineering, focusing more on the relationship between engineering and craftsmanship, given as a keynote at RailsConf.
- Craft and Software Engineering (2011)
- Another take on craft and engineering, given at QCon London.
How Programmers Think and Learn
- Roaming Free: The Power of Reading Outside Your Field (2019)
- In this keynote address at the O’Reilly Software Architecture Conference, I gave twelve examples where software developers have imported useful ideas from other fields of expertise, and challenged the audience to each read two serious non-fiction books unrelated to programming in the next year. (I also blogged a list of all the books and resources mentioned in the talk.) Video coming soon.
- Befriending the Turtles (2012–2013)
- A talk about why and how to understand the inner workings of the programming tools you use. I gave this talk at Nordic Ruby, and again as a keynote at Rocky Mountain Ruby Conference.
- Grasping Complexity with Both Hands (2012)
- I’m proud of this talk from the Golden Gate Ruby Conference, about good ways of thinking about and dealing with complexity in programs. I’ve written and spoken a great deal over the years about simplicity and how important it is to strive for simplicity, but sometimes complexity is real and unavoidable, and we need to have good conceptual tools for tackling it. This talk was very well received, and led to a fun appearance on Ruby Rogues.
- Misunderstanding (2011)
- A talk about how to reason well from weak evidence, given that it is rarely cost-effective (and often not even possible) to do “real science” or very thorough investigation of alternatives. This is, in some ways, a precursor to the “Grasping Complexity” talk. This was the fifth year in a row (and the last) that I spoke at Lone Star Ruby Conference.
- Programming Intuition (2009)
- A Lone Star Ruby Conference talk about techniques for harnessing our intuition—our pre-conscious thought processes—to help us be better programmers. I’ve had a long interest in this topic, ranging from an “Improving Your Code Sense” tutorial with Dave Thomas at SD West in 2002, to a joint Ruby Rogues appearance with Sam Livingston-Gray in 2014.
- Tactical Design (2008)
- A talk about three simple principles that can be applied tactically,
very locally, in programming that will improve the design of systems
even at larger scales.
This talk was inspired by seeing Eric Evans give a “Strategic Design” talk at JAOO. I love Eric’s work and I learned a lot from the talk … but at the same time, I was thinking about my “programming intuition” material and reflecting on the fact that most programmers tend to think about lines of code and methods, whereas most of our design principles are about larger-scale constructs like classes and modules. That makes those principles difficult for many programmers to apply. Evans’ strategic design principles were also primarily aimed at large-scale programming constructs. That’s fine for very experienced programmers and architects, but I started wondering if there were smaller-scale, tactical principles that could be applied locally and yet have larger emergent effects. The result was this talk, given at The Server Side Symposium and Lone Star Ruby Conference.
- Cló: The Algorithms of TEX in Clojure (2014)
- My talk for Clojure/conj, describing a project to reimplement the TEX typesetting system in a modern, functional style in Clojure.
- Clojure and the Web (2011)
- A talk at QCon London explaining how to build web applications in Clojure. (This is quite outdated now.)
- The Beauty of Ruby (2006)
- A popular talk from JAOO in Aarhus, Denmark. It is a very subjective discussion of what Rubyists like about Ruby.
- The State of the DSL Art in Ruby (2008–2009)
- This is a talk about how programmers build embedded domain-specific languages in Ruby, a language that’s especially well suited for the embedded DSL approach. That idea has fallen out of favor these days (for both good and bad reasons) but I think the talk remains interesting for its exploration of how Ruby style evolved during the years when Rubyists were trying to understanding how best to use their young language. Given at •RailsConf* and QCon London.
- A Clear-Eyed Look at Distributed Teams (2017)
- A joint talk with my friend and colleague Maria Gutierrez at RailsConf 2017, covering our real-world experiences managing large distributed teams. Maria and I are enthusiastic fans of distributed teams, but we aren’t naive about the tradeoffs. In this talk, we bluntly address the costs and challenges of distributed teams, while also explaining the benefits that both companies and employees gain from a distributed team strategy.
- Working Effectively on a Distributed Team (2014)
- My keynote for Big Ruby, describing our experiences with a large, widely distributed engineering team at LivingSocial. A highlight: three members of my team joined in via Google Hangout (the way we typically had meetings at LS) to handle audience questions.
- Why “Enterprise Tools” Are Bad for the Enterprise (2009)
- This RubyConf talk explains why, in my view, commercial software development tools typically billed as “enterprise-class” are actually bad for the very enterprises they’re targeted at.