Office hours this week. Please submit questions for the next weekly Office Hours (Thursday the 8th). I hope to see you there!
Grokking Simplicity has passed 14k copies sold! That’s not bad for a programming book. If you want a copy, please buy it on Amazon because it helps boost the rank and help others find it. Leaving a review will help, too, because it will help people make the decision to buy or not. And if you’re subscribed to O’Reilly’s service, you can find Grokking Simplicity there.
I am rebuilding my Introduction to Clojure course—the one that started it all—to be better in all dimensions. I’m very close to finishing the first part of the course, and I’ll start making it available when the first part is done. Everyone who has the current version will get the new version for free.
I’ll be leading a discussion about Gemba at Bridges Summit, which is an online workshop for people interested in steering software engineering practices in industry. Be there and we can chat.
The following essay is about a conference I attended last week, but also about the human-centered conference I’ll be speaking at in September: Heart of Clojure.
The human side of software
Usually, I like the hallway track, but at the conference I attended last week, I decided to watch the talks. I was at Madison Ruby because it’s local. When I ran Clojure Sync in 2018, I tried to convince local programmers to attend because it’s the cheapest conference you’ll ever find. You don’t need to pay for travel or lodging. The reasoning I used to sell my conference rubbed back onto me, and I bought a ticket.
Attending a conference in your own town is not quite the same as flying somewhere. One of the magical things about attending a conference is that you’re in a bubble, protected from your real life—and so is everyone else. People around you have nothing better to do than to chat for hours. You’re magically out of your element with like-minded people. But, being a local, life at home continued. I still had to leave a little early to pick up my daughter from summer camp. And I biked home at lunch to walk the dog. So some of the magic was missing. It gave me a feeling of being slightly outside the bubble, occasionally popping in.
But I was going to explain why I watched the talks instead of doing the hallway track like I normally do. I’ve never been to a Ruby conference. And I’ve never programmed much Ruby. I’ve watched selected talks online from Ruby conferences over the years. There are some great ones. It was the couple of talks I attended early on that convinced me: I wanted to submerge myself in the vibes of the community, and the talks established those vibes. I’m so glad I sat in the theater and soaked it in.
What really stood out was the focus on the human side. Yes, there were some super technical talks about optimizing database performance, etc. But most talks were about people. Programmers are people, and we should care for them. Our customers are people, and we should serve them. Our companies are made of people, and we want working there to feel good. People are affected by the choices we make, so we should be thoughtful of the lives our software touches. The importance of people was a clear value in that community.
It got me thinking about the values in the Clojure community. What would an interloper take from our talks? I made this list:
Big ideas — find good ideas, in old papers or in other fields, and code them
Pragmatic elegance — solve real problems using simple, powerful tools
These are some of the things I love about the Clojure community. But I think we could use a little injection of human-centered values. That’s why I’m very excited to attend Heart of Clojure. I know this sounds kind of like an ad, but I really want the people who value an infusion of people-centric values to attend. Arne and his team are putting together a wonderful event to celebrate the human side of programming. Please make it if you can. He’s also given me (and all the speakers) a magical link that gives you 10% off the ticket price. Use it soon because the number of discounts is limited.
I am now committing to incorporate more human-centric values into my work, my products, and my media. I hope my work oozes with it. Be sure to say hi when you see me, in person or online!
Back in 2013, PyCon was local to me so I dropped $300 to attend and drove down to Santa Clara each day to Learn Me Some Python -- and spend each whole day around Python people, so it was a bit of hallway track interaction but mostly talks.
The overwhelming feeling I got about the Python community was that they are nice people and very welcoming, especially to Python n00bs like me. The talks got me quite excited about Python 3.x and I came away thinking it might be a good system scripting language to complement our Clojure-based applications... But after all the 3.x hype at the conference and promises that it would replace 2.7 everywhere "very soon", I quickly ran into the reality that 2.7 was baked into all the O/S that I needed to interact with and trying to build anything with 3.x was going to be a giant pain at that point. So, we continued to use a mix of bash and Clojure for system scripting (and over time moved more and more to Clojure). A decade later, 3.x is finally becoming the default everywhere but I no longer feel a need to use something other than Clojure for what I originally thought I might use Python for.
I learned Ruby via Washington University's "Programming Languages" course which I took online, and I enjoyed the course enough to volunteer as a Community TA for several more runs. It taught Standard ML (statically typed, functional), Racket (dynamically typed, functional), and Ruby (dynamically typed, OOP) to show the three non-mainstream options and how each quadrant affected how you solve problems. I liked SML a lot (I had used it briefly at university, during my PhD work), I quite liked Racket, but I really disliked Ruby. I didn't like its syntax, and I didn't like that you couldn't easily tell what a piece of code did because all the classes are open and can be dynamically modified at runtime by any other piece of code: there was no locality of effect.
I've heard that the Ruby community folks are very nice tho' and it's a fairly human-centric tech world.