David A. Black is by any measure an accomplished Rubyist. He is the author of The Well-Grounded Rubyist and an internationally-known software developer, speaker, and event organizer. He is a Ruby standard library contributor and one of the founders of Ruby Central, Inc. At 2U, I’ve been lucky enough to have the opportunity to work with David and to call him my pair. I recently sat down with him to learn more about his background, his contributions to the Ruby community, and to learn some little known facts about him.
I was looking at the computer section at the old bookstore Borders, in early November 2000. The Pickaxe Book — Programming Ruby by Dave Thomas and Andy Hunt — had just come out. I saw it on the shelf and was curious what this “Ruby” thing was. I took it off the shelf, opened it up, and fell in love.
The Pickaxe was the first English-language book on Ruby (there were already many books in Japanese), and the Ruby community outside of Japan was small enough that it was possible to get to know people easily through the English-language mailing lists and forums — on which, I should add, many Japanese Rubyists, including Matz, participated regularly. Remember, this was before Ruby on Rails; the world had not yet come knocking on our door! Though I’d like to think that the community has continued to be welcoming to new Rubyists.
It sounds corny but my favorite “feature” is the community. I’m less entwined in it than I used to be, but over the years it has been a great source of support, friendship, and inspiration. As for language features, it’s hard to identify favorites but I’ve always been fascinated by the power of Ruby objects, exemplified by the singleton class: every object (with a few exceptions) derives its capabilities from its class and module ancestry, but can also be decorated with behaviors unique to it. There’s something profound about that to me. I’ll leave it at that.
I’ll tell you my favorite. Back in 1995 I wrote an article for Linux Journal. A year or two later they sent me a copy of the Japanese version of the journal, with my article in it. Now flash forward maybe five or six years. I’m at a conference chatting with Matz, whom I had know for a few years by then. “Did you write an article about HyperNews for Linux Journal?” he asked me. “Yes.” “I thought so,” he said. “I translated it into Japanese.”
So our paths crossed in the publication sphere several years before we actually met!
The third edition is due out from Manning Publications in July, and I’m very excited about it! I have a co-author this time around, my good friend Joe Leo. Joe is the founder and president of Def Method, and he’s working on bringing the book up to date with Ruby 2.5. We’re looking forward to a new wave of readership — it’s great to think that this book, with an almost nine-year track record already, will keep bringing new Rubyists into the fold.
The book is part of MEAP (Manning Early Access Program), which means that you can see chapters in advance and offer feedback.
It was kind of a perfect storm of reasons, though a good kind of storm. I’d been programming as a hobby, at least off and on, since the age of thirteen. It had become more of a semi-professional pursuit after I’d discovered Ruby: I was already writing book chapters and organizing conferences in the Ruby world by 2001, and in 2005 I got the contract with Manning Publications for my first Ruby book, Ruby for Rails. Speaking of Rails — the fact that Rails had been released in 2004 changed the Ruby landscape in many ways, among them that it was possible by 2005 to feel pretty confident about making a living with Ruby. I had a year-long sabbatical coming up in the Fall of that year, and it was by far the best time to make the break since I wasn’t scheduled to teach for a whole year anyway. So over the summer I made the decision. It was a pretty major decision; I’d been teaching college for thirteen years, and had tenure. But the lure of Ruby was strong!
The funny thing is that for the first several years after I left teaching, I made almost my entire living through training. Once a teacher, always a teacher, I guess.
Long story short: it’s a great approach to producing good code, but I stop short of believing that it’s the only way to produce good code. Deeply-focused solo programming, along with code review (always!), can result in excellent code; and sometimes it opens up possibilities that pairing wouldn’t have led to. My brain works differently when I’m soloing, and I don’t consider the existence of pair programming to be a reason to shut down those parts of my brain permanently.
I’ll probably get in trouble for saying this, but I’ve always thought of myself as a believer in test-centered development more than test-driven development, at least if test-driven is understood to mean strictly test-first. I want complete and thorough test coverage, but I do not necessarily believe that every line of code you write has to have a failing test around it before you write it. If you get ahead of the tests, you need to catch up sooner rather than later. But sometimes, and again it may just be how my brain works, I need at least something skeletal to flesh out before I can start writing tests.
Strict test-first development can, however, clear the cobwebs in a very powerful way. And the “ping-pong” style of pairing (you write a test, I make it pass; I write the next test, etc.) is perhaps my favorite pair-programming mode.
Mind you, there are also times when writing a whole suite of tests before you write any code makes sense. Hal Fulton and I did that when we wrote scanf for Ruby, which was a private code project that became part of the Ruby standard library. Just try writing scanf in any language without plenty of tests up front and you’ll get a feeling for why!
Not directly — but my teaching experience certainly helped when I started training programmers. My background as an academic also means that I came to this new career with significant writing experience, including one single-authored book as well as numerous scholarly articles and book chapters. And at 2U, where I’m deeply immersed in the engineering of online education, my background as a professor adds another dimension of interest to the work.
The really uncanny thing is that Joe Leo, the co-author of the third edition of The Well-Grounded Rubyist, has an M.A. in Cinema Studies from NYU — the same department in which I got my Ph.D. We didn’t know each other in school; I was well before his time!
There are a number of things, but I’ll focus on one. I read and hear a lot about ageism in the industry. I have been lucky; I started making my living in programming and training in my mid-forties, but have had no problems with age prejudice. But I’ve seen enough evidence to know that it’s a very real problem. I’ve never been secretive about my age — my day and year of birth are on LinkedIn — and I can only hope that the fact that hiring me has, apparently, not caused any companies to fail might serve as an example to other companies in the future.
There are many I admire, for sure. For some reason the first person who comes to mind in response to this question is the late, great Jim Weirich. He was an inspiration, one of the most generous people with time and expertise I’ve ever met. He’s remembered of course for Rake, but he was also a vital part of the fabric of the Ruby world from 2000 until his untimely death in 2014.
I’ll let my answer to this question stand as a tribute to Jim. I miss him very much.
I don’t make a big secret of it, but a lot of people probably don’t know that I am a professionally-trained cellist. After high school I lived in Scotland for two years, studying cello. And, oddly enough, after playing very little for a number of years I’m now getting back into it. Stay tuned!
Senior, Lead, or Principal developer in NYC? Stride is hiring! Want to level up your tech team? See how we do it! www.stridenyc.com