Avdi Grimm – A Happy Hacker
Every week a group of Ruby Enthusiasts get together in a Virtual Roundtable and explore/discuss/argue some aspect of the Ruby language or the Ruby community. They allow the rest of us to listen in on their discussion by way of The Ruby Rogues podcast. The podcast can be accessed on iTunes or on the website and offers a ‘fly on the wall’ view of a great bunch of technology savvy people sharing their ideas and opinions.
In this series of articles I will share the results of my interviews with each member of this special group.
Avdi Grimm is a Hacker, an Author, a Podcaster, a Screencaster, an AirShip Entrepreneur.
Thom: But as with anything like this, the very first question that comes to mind is, tell us a little bit about yourself.
Avdi: First and foremost I’m a dad and a husband. As some folks know, we have five children. My first programming job was when, I was 18. I got a job with a defense contractor working mostly on Air Traffic Control systems. Although some of my early work I did some industrial automation and such.
Thom: That’s pretty cool stuff, and that was with Java?
Avdi: Actually, most of that early work was C++ and C, there was some assembly in there. Very little of the higher-level languages at that point, although later on in that job I did work with both Java and C#. That was mostly doing things like building testing tools; tools that didn’t actually run on the hardware. A lot of the work that I did was middleware, so I did stuff like implementing networking protocols.
Thom: That sounds cool.
Avdi: And when you’re trying to pass packets around really fast and you need to talk to the operating system, networking APIs, C++ or C is often a good choice, especially back then. Java and stuff like that were really kind of immature for that type of work.
A lot of the work that I did on middleware used the ACE libraries and these are the libraries that Doug Schmidt created and he probably still has them up – you know he’s one of the patterns pioneers, particularly one of the concurrency patterns pioneers – and ACE is the framework where things like the Reactor Pattern first appeared. So some of the earliest work in what we now call Evented Programming, where you take the operating system primitives, like Select or other kind of asynchronous primitives, and you wrap that in nice, higher-level
OO abstractions like a Reactor or a Proactor, or a Future.
Thom: Right. Tell me about the transition then, from something like that to Ruby. Was it like the story most of us tell; Rails and the Web drew you to Ruby? Or because you were doing testing and other control systems, perhaps you went straight to the Ruby language?
Avdi: It’s always been about a combination of pragmatism and curiosity for me. Very early on in that job, partly just as a matter of interest and curiosity, I did a lot of reading up on the existing scripting languages that were out there. Obviously, Python was already moderately well established. Perl was quite well established. And that’s actually one of the first scripting languages I learned – Perl – because the task at hand, where I decided it was time to learn Perl was. We had these huge mini-Gigabyte dumps of a particular low-level serial protocol and we needed to analyze them. There was documentation for the protocol, but we knew that the documentation was at least partially wrong. So we needed to analyze these huge dumps of actual network traffic to find out what the packets really looked like as opposed to what the documentation claimed they looked like.
I decided everybody used stuff like C and C++ for everything there, but being the young punk that I was, I decided that I could probably be a lot more productive if I wrote analysis tools with a higher level language like Perl.
Thom: Right, that’s what Perl’s designed to do.
Avdi: Right. It’s the Swiss Army Chainsaw for ripping through data.
Avdi: I had known about it and I decided at that point, “Okay, I’m going to learn this.” I got the Camel book and I just poured over it for days on end, and I wrote some pretty useful software in Perl. I was just really interested in all the scripting languages and kept learning about them.
At one point in 2001, I kicked off a little personal project where I learned Ruby and Python concurrently and did some of the same examples in each one. At the end of that I was just really, really impressed with Ruby.
So I started writing little things that would help me get my job done a bit faster in Ruby. Since a lot of the workstations there were Windows workstations, I messed around with automating Excel using Ruby instead of using VBA. Even back then, the Ruby Windows distributions came with the Win32 OLE library. I also did some stuff involving preprocessing and munging binary images which were going to be burnt onto PROMs – which is what you had before embedded systems had flash memory.
Thom: That sounds like fun stuff.
Avdi: Yes, so I was basically writing these programs to preprocess binary images and I was doing that in Ruby.
Thom: It’s the true spirit of hacking. Personally, I appreciate your little sign-off on your Ruby Tapas because I’ve always been an old-schooler that argues the huge difference between Hacking and Cracking. Having gone through a career in telecommunications, the whole idea of cracking is very familiar to me. The general public tends to have the concept that
Hackers are bad. I make the distinction that a
hacker is just someone who’s infinitely curious and continually disassembling and deconstructing things in an effort to better understand them.
Thom: In contrast, a
Cracker is a person nefariously trying to steal from others. What you describe there sounds like the true spirit of hacking.
Avdi: As long as I’ve known about it, I’ve identified very strongly with the
Hacker ethos. In that classical sense. Once I discovered the kind of UNIX hacker history, I just dug into it and started using Linux for my primary operating system.
Obviously I didn’t come up with the sign off “Happy Hacking,” that’s something that Free Software Foundation people have been saying for years and I’m sure others as well. I like that it’s about hacking, because I think that’s not a dirty word, like you said, but I also like that it’s about joy, because I think one of the things I most want to project in a lot of the stuff that I put out – particularly Ruby Tapas – is the joy of coding. One of the things that drew me to Ruby in the first place is the fact that it is a language that was deliberately created to be optimized for programmer happiness as opposed to various other more academic optimizations.
Thom: That’s a fine way to put it. I agree.
Avdi: Well, and that’s what Matz has said about it and that was his intent and it really shows through in the language. I think it has already shown through in the community and still does to this day.
Thom: So you took us there; How did Ruby Tapas emerge? I am certain there’s an interesting story behind that.
Avdi: I’ve been trying to figure that out lately. *chuckle*
It was an idea that came to me, I think over a year before I actually managed to launch it. But thinking back now, I can’t actually remember what was that crystallizing moment when I realized, “What if I did really short videos about Ruby?” I had been thinking about screencasting for a long time and I’ve been dabbling in releasing little, incredibly poor quality screencasts on my blog from time to time when there was something that felt it would be hard to demonstrate using just text.
But part of the idea of doing a service was just sheer economic business pragmatism. I am a sole earner for our whole family and I’d been consulting for a while and I’d been augmenting our income with some of the books that I’d released and that was a nice source of secondary income. But it was also kind of tough sometimes when I would have a couple of consulting clients and also be trying to keep up with book writing and then sometimes with consulting. The difficulty in managing all that; sometimes it pours and then sometimes it’s dry.
I had been looking for a way to come up with more of a smooth, even source of income while still doing the stuff that I love. I love coding, but I also love writing about code and the screencasts are really just an extension of writing about code. They’re kind of an excuse to write all the blog posts that I never got around to writing.
At some point it occurred to me that a lot of screencasts seemed like it’s hard to find time for them. So I thought that I’d try my hand at really short ones and see if I could cram just one piece of knowledge into a single short screencast at a time.
Thom: I think that is your “Secret Sauce”, the magic formula. I feel the same way. Five minutes is not only easily digestible, more importantly, I’m less likely to procrastinate watching it. I will devote the time if I know that it’s finite and I know what it is, I will spend the time to go through it.
Avdi: I’m in a very lucky situation. It’s kind of a positive reinforcement system now where I get to see a lot of feedback from the community, both as a Ruby Rogue and speaker and screencaster, et cetera. I get to see a lot of people talking about different techniques and different features of the language. People send stuff my way, I get emails with suggestions for topics or people tweet at me asking about a particular thing.
I benefit a lot from the community and I try to share the things that people send my way.
Thom: Terrific. I need to guide the conversation now to the Ruby Rogues. We’ve read from other Rogues on this, but from you, how did you discover them or how did they discover you? How did you become a Ruby Rogue?
Avdi: Ruby Rogue is the podcast I always wanted to create but I never did. Instead, Chuck and James got to it before me.
I love the panel format on podcasts, I’d listened to CNET’s Buzz Out Loud for years. There’s a Java podcast which – what am I doing listening to a Java podcast?! – but it’s actually a bunch of really smart people, in a panel format, and it is a lot of fun. So I always thought it would be cool to have a podcast like that for Ruby and then I got really excited when I saw that Chuck and James and some others had started to put one together. I listened to it and then I guess they knew about me through my blogging and books and stuff. One day they were missing a panelist and kind of at the last minute said, “Hey, do you want to join us?” and I was like, “Heck, yes!”
Basically the same thing happened again a couple of weeks later; missing a panelist, they didn’t have one of the regulars and they invited me on again. After that, I was incredibly lucky to be invited to stay.
Thom: You’re very busy, obviously with Ruby Tapas, I’m sure. I know from experience that developing something like that takes four or five times the amount of time of the final product, and that’s not counting any of the missteps or re-do or anything you have to do in post-production.
Avdi: A single five-minute video I would say takes somewhere between four and eight hours to put together. When you consider coming up with the idea, honing the code for it, then writing out the script, then recording the screen for the different parts of the screencast, doing the voiceover, and then editing. When you put all that together.
Thom: Yes, you’re building a curriculum for each one and it’s a complete module in itself.
Thom: Do you have any idea of perhaps packaging them into little groups and selling them in a different way as bundles of some sort?
Avdi: I think about stuff like that, but it’s not something I’m going to be doing any time soon. But yeah, I think probably eventually I’ll do something along those lines.
Thom: For clarification, Ruby Tapas is a subscription service where you get access to all of them, historically, right?
Avdi: That is correct.
Thom: It includes the source code and I notice there’s been some active discussions in the comments also, which I think is a great adjunct. When somebody smarter than me makes a comment about something that you brought up and then there’s a little interchange there, I always learn something. It’s a brilliant formula.
Avdi: Thanks, it’s been working out really well.
Thom: Do you have ideas of extending it to maybe other things? Other than just Ruby?
Avdi: Well, I’ll say this much. I reserved CodeTapas.com on the same day that I reserved RubyTapas.com.
Thom: Ah, very interesting.
Thom: The last thing I wanted to ask you about is recently I saw that you generated a kind of…
Avdi: A meme, almost.
Thom: Yes, a meme. Which was a result of your talk at the Ancient City Ruby here in Florida. But tell that story for me, please.
Avdi: I spent the latter half of 2012 as a consulting pair-programmer. I came to the end of my current consulting jobs and rather than looking for a new regular consulting jobs, I started taking appointments for pair-programming. People would sign up with me and pair-program with me for two hours at a time on whatever they wanted. A lot of these were paid, because this was my job, but I also tried to make time for a free one every week, those were always on Open Source software.
It was a tremendous experience. I’d been a fan of pair-programming for a long time anyway, but it really just kind of cemented in my mind the value of pairing. Not just pairing, but pairing diversely. I learned a tremendous amount, I like to think that all the people I paired with learned something and certainly I got a lot of very nice comments from them.
One of my favorites was always when people would end the session with, “Wow, I actually understand my own code a lot better now.” It cemented in my mind how valuable it is, first of all, to practice programming socially. A lot of the people I worked with didn’t have opportunities to pair program or to program with others in any form, or didn’t have a lot of opportunities for that, maybe they were just isolated somehow, they were not in some tech hub and they didn’t have a lot of programmers around or they were the only programmer on their team or something like that.
I could see the value that they were getting from it. Thinking about it, I realized that I really wanted to encourage more programmers to not just pair-program within their own companies, but to pair up diversely; to go out and seek other programmers to pair with on different projects, on their own projects, on other projects, or on Open Source projects, and learn.
For me it’s all about diversity. We know that Biological communities are strengthened by genetic diversity, and I feel like in a very similar way, our community is strengthened by mimetic diversity; a diversity of ideas. There are so many good parts to having somebody else’s perspective. You find new ways to solve problems, you find new ways to think about problems, and there’s this whole psychological aspect to it where working with a lot of other programmers, it just gives you a more three-dimensional and a more positive feeling for the other people working in your field. You realize they’re all human, they are neither gods nor devils, and sometimes I see kind of little explosion of cynicism. Maybe I spend too much time on Twitter, but I see little outbreaks of cynicism in the community and I feel like if people spent less time sort of tweeting at each other grumpily and more time pairing up – working together, hearing each other’s voices, maybe seeing each other on video, or if they are able to, in person — they would be happier programmers. And they would have better feelings for the rest of the community and just generally have a better time. It’s all about happy hacking.
That was basically the idea and I decided to kind of kick off a personal campaign to get programmers to pair up with each other more and I launched that at Ancient City Ruby with my talk there. I launched a tiny website in conjunction with that, PairProgramWith.me, which had, at the time of launch, nothing other than a badge that you could download that said, “Pair with Me” to stick on your website.
The idea is that I’m not really trying to solve a technical problem here. The main thing I’m trying to solve is a social problem where I think that people feel like they can’t ask. I think most programmers, if they thought about it for a little while, they could think of someone they’d love to pair-program with. But it’s just like asking, “Hey, can I pair program with you,” out of the blue is not a thing in our community and I want to make it a thing.
Thom: Well, thanks. Avdi, can we pair-program sometime in the near future?
Avdi: Sure. That would be great.
Avdi Grimm is quite a prominent figure in the Ruby (and Rails) community. You can find him: