Dave Cheney is a prolific programmer, top Go Contributor, blogger (his blog on Go dave.cheney.net is very famous) and now an author as well. He is a speaker and also organizes events around the world.

Interview…

Hello, Everyone. Welcome to MappingTheJourney. “Self-education is, I firmly believe, the only kind of education there is”. Said by the Great American Writer “Isaac Asimov”. Today we are speaking to a person who also believes in the same. David Cheney, If you are a self-taught programmer with no formal computers degree, listen to this show and learn how David Cheney became a household name in the Go-Community.

Pramod: Dave your blog on Go, “Dave.Cheney.net,” is very well known. It has the title

“The Acme of Foolishness” how did you come up with this tagline, and what it means to you.

Dave: That line actually comes from one of my favorite movies. One of the Coen brothers movies, “O Brother, Where Art Thou?” and the line which George Clooney said he is trying to buy hairnet. He says I supposed it would be an act of foolishness to expect that you could buy hairnet in this town. Well, something like that. I think the important point I want to convey with that is that I don’t take myself particularly seriously and I don’t expect other people to take me seriously either. I like making fun of myself.

Pramod: Not take you seriously, well people have taken you seriously today, at-least in the Go Community. You are very successful in the computer industry today. And Dave If I am right, you dropped out of university, also w/o much formal computer education.

Dave: Okay. So I would have to challenge the notion that I’m successful. I dabble in a lot of things, and so that can mean that I maybe I’m somewhat more visible maybe I’m better at self-promotion, but I don’t necessarily think that I’m particularly successful. There are certainly many people within Go community who are far more focused and achieved far more than I do. So I certainly don’t want to climb any credit here.

Yes, to tell a little bit of story. In Australia, you do 12 years of lower school and high school education, and then you can go to the University. And at the time like this is the mid-90s it wasn’t expected, I believe in the way that it is expected that pretty much anybody who wants a white collar job would go to the University these days.

In some ways, I think that again I just got lucky. I went to the university I started the first year of an undergraduate computer science degree because I was interested in computing, that’s what I wanted. It was a very general degree I felt that I was learning also not learning because it was very general degree. It had mathematics, physics and only one computer science subject which was not really interesting to me. I was extremely lucky that I dropped out University next year and I was able to get a job. Melbourne University took a chance on me they hired me in an entry level position. That’s how I got my start.

Pramod: Amazing. I think today it’s hard to get a job as a full-time programmer or a software engineer without a degree in computers. Then you got hired with law school as a System Administrator.

Dave: I started much more humble than that. The first job I had was basic IT support for the graduate students and the academics in the law of faculty of staff 80. Over the next couple of years, I worked my way up to what was called the network administrator as well as doing IT support. I was there until the Year2K. I remember coming in very hung over on 1st January 2000 and find nothing was broken, It was all a bit of an Anticlimax.

Pramod: You worked as system administrator for a long time. Were you programming as well? When or how did the shift come from administrator to being a programmer?

Dave: It was something that I kept my hand in because I felt it was useful to be better at my job as a system administrator. There was a big difference between in saying Tomcat out of memory or whatever output was presented on the screen, flip it as an issue and handing it over to developers. There is a big difference between doing that and actually knowing a bit of Java, knowing idioms of Java, knowing how the JVM works under the hood.

Instead do some programming, give better outputs, maybe even better at your job by fixing the simple things rather than handing every issue off back to triage for the development team. So that was when I worked at Malgal, I dabbled a little bit in Perl, not a great deal. I also worked in Atlassian in 2008, if the code was not written in Java we did not care about it. Taught myself Java, did a bunch of programming on holy projects, mainly to understand better what technology the applications that I was supposed to support was written in.

Pramod: Go first stable release was in 2012, you had already started contributing. When and where did you learn about Go?

Dave: So I came across that in about 2001 or so, between October and November 2009. It was just like a random blog post that showed up in my access reader, which was the original presentation by Rob Pike, public release of go. And at the time, obviously, I’ve been doing a bunch of programming in Java, and Java is what it is. It’s a very large ecosystem, and I had been playing a bit with the D language. I don’t know if you’ve ever heard of that because D is an interesting language, it was almost ahead of Go in terms of its design ideas. Faster in terms of compilation speed in terms of writing, safer, and produced a single binary. And being a system administrator that was very attractive.

But I was somewhat frustrated that while they had these great ideas, what was being pushed by Walter Bright the author, the community around that were rapidly trying to build a standard library using Java as a model, like the whole long immutable collection factory name. With that at the background I came across Rob Pike’s presentation and the ideas of simplicity, and cutting back to what is important really spoke to me at that time and from then on I was hooked. I checked out the project, ran it on my laptop. I noticed that it had version of compiler ran on ARM system and at the time I had one of those at home, which you could hack and get access to the Linux operating system under that which ran on, and so I tried to get Go running on that, ran into a few problems, sent back a few patches and that was really how I got started contributing to Go.

Pramod: Fantastic. So you did speak of a simple language and problems around Java. What were some of the features or aspects of Go that you were initially impressed with?

Dave: The things which everyone talks about and I am no different is the single static binary. I think, and you have to put this in the context that this is a little bit before containers came on the scene since when languages like Python and Ruby are the king of the heap, and they come with enormous sets of dependencies which have to be installed on the system.

In a prior job I’ve managed a Ruby on Rails site and getting all dependencies there, or like stop the application in the middle of was a black art. From the basis of somebody whose role was to take somebody else’s code run it on this machine, if it stops, run somewhere else. The appeal of a programming language produces a single self-contained binary at the time is all the Go did, there was no dynamic linking, there was no plugin. That spoke to me very very clear because, from an operations point of view, that is precisely what we want.

The story about concurrency we know now, looking back concurrency is a key feature of a language but it’s pretty much table stake now. If your language doesn’t have a strong story for concurrency then you’re wearing last year’s fashion. It’s just something that if you write application software today it needs to be able to do more than one thing at a time, and it needs to be able to do it really easily, so Go is well positioned there.

In an easier way you now no longer own your rubber, you rent it from somebody else so it comes back to haunt you on a monthly basis when you’re paying much larger Amazon bills than you perhaps could if you’re using a language that was more efficient. This is not unique to my position.This is what we hear every single time, every single person gets up and gets a general Go Instruction speech because we think that they are fundamentally important properties.

Pramod: Great. I love the concurrency model of Go. Listeners if you fear threads or parallelism check out concurrency in Go. It’s really simple. You started as an IT admin and then you transitioned into system administrator and then you started programming. So programming in Go is one thing but to think and design a language, when did the transition happen.

Dave: To be a language developer? I’m really just a contributor. I’ve been along for a long time, and I know a lot of the history, and I know where a lot of the bodies are buried, but very much I’m just an enthusiastic contributor. I contribute as anyone would, giving my opinion on GitHub issues and things like that. But certainly the owners of the language are people like Ross Cox, Rob Pike, and Ian Tyler they’re very much where the buck stops.

Pramod: When you started contributing, were your commits just accepted. Did you face any setbacks or how did it all start?

Dave: I recognized that one of the reasons I was so passionate about Go, in the beginning, is that I recognized that this is an opportunity to contribute on the ground floor like Go just starting out was an entirely new project.

The way I could explain it is that. Could any of us honestly contribute in a meaningful way to the JDK or the JVM? I know there is OpenJDK, I know things are fixed in working groups but I feel pretty confident in making a statement but no actually you can’t contribute in a meaningful way.

And so I recognized that this doesn’t come along every week or every year I think. I was lucky to have a lot of free time that I can contribute to at the beginning and all the way and opportunities all the way through. To have an impact, to hang my name on something and say I’m proud of what I contributed.

Pramod: Nice you grab the opportunity and started contributing. During this time, was there a tech Guru, who inspired or you admired?

Dave: The answer to that question is quite broad. Like obviously, I take a lot of inspiration from Rob Pike, as I see him as being at the right place at the right time. I think he was well positioned within Google with the resources to say look, let’s make a new language. There are many other new languages started every year. That seems a little bit of renaissance at the moment. Then we went through a dull patch five, six years ago, Google gave him the resources. Google does contribute an enormous amount to the Go project by hiring world class engineers like Robert Griesemer, Ross Cox, Ian Tyler and all the rest of the Go team. So we are very lucky there. I would say I’m very influenced by Rob. I see him as the driving force behind this drive towards simplicity.

But the Guru’s that I admire that might not be the right way to describe them are thinkers and writers who are overlooked now, just because you can’t find their talks on YouTube. it’s kind of in the 90’s where it only went into books. Like for example Trygve Reenskaug wrote about MVC a pattern we bang on about every single day, but he’s never given any talks about it, it’s only valuable in a book that he wrote in the mid-90s. To take your question around with a little bit that the heroes that I admire are people who are talking about these ideas which we think we are inventing from scratch in 20 sometimes 30 decades ago.

Pramod: That’s a great response. Many fantastic Contributions were made by the engineers during early days of computing, which we follow till date. After you made the first step towards coding and contributing to Go, how and why did you make a choice to try and become a tech-guru one yourself.,with blogging, talks or organizing events.

Dave: In 2012 I joined canonical, and that was a fully remote position. Everything is done online, we contribute online, we have hangouts, and we talked on IRC. Because we talked on IRC, it was very easy to moonlight in the Go channel, and that was very like just before Go 1.1 still, very early days and what I found is that I cannot be answering the same question over and over again.

So two things, if you find you’re answering the same question over and over again that’s a really good sign there’s a problem in your product, and you should fix the user experience, that takes time. So in the meantime I thought, I’m an engineer I know how to solve this problem without having to explain the same thing every time to a new person. I’ll just write them once, and then I can send a link that was how I started blogging.

A lot of what I write about is driven by seeing people being confused by things or something that needs to be explained better. A lot of what I write about is inspired by other interactions with other Go programmers. Again because canonical remote we would fly about three or four times a year either to do a sprint or something like that. So I had opportunities to start going to other meet ups, very early formative Go meet ups and at the time Andrew Gerrand one of the early Go contributors at Google. I forget specific whether he was running the meetup or I forget how the very first Go meet up happened. But after that one I wrote to him, I said to him can we have another Go meet up and he’s like, do you want to do that, go for it, I’ll find the space, so in that segment, I became the meetup organizer for Sydney.

One of the things about, when you’re a meetup organizer, I know from the other meet ups I’m involved in that repetition is critical. You have to be on this, and you have to be once a month or once every two weeks. If you’re sporadic then you’ll never build a community, you basically have to commit and then generally it ends up with you having to do talks because you can’t find somebody else with short notice.

So that was how I got my start in relearning how to do public speaking and relearning how to write instructing arguments. All these things that I thought as a kid in high school being interested in computers, I would never have to know these things, relearn the basics of public speaking that kind of thing. I was invited after the first Gopher Con by Sylvain Zimmer who runs dotGo in Paris, would you come and give a talk, and it took me a couple of weeks to consider then I decided I’ll give this a go, I’ll try, and it didn’t suck. So I wanted to try giving a talk somewhere else, so that’s how I got started in public speaking.

Pramod: Thanks for your blogs it’s been helping many developers around the world and your talks are very interesting too. For any programmer to start contributing to GoLang, what are some the things he should consider and where does he start?

Dave: The first thing I’d say and specifically not to Go, each open source project has their own style. Sometimes these styles are softly different sometimes they are radically different. To give an example in the Linux kernel, you don’t discuss what you’re going to do up front, you just throw a patch on the mailing list, and then you put on your flame suit and then you defend it.

In Go, we do it exactly the opposite in fact to the point that you shouldn’t start writing code before you browse an issue you’ve discussed.

A. it is actually a bug,

B. Should this be fixed and

C. How should it be fixed?

Then you get to write code. What I’m trying to illustrate is the first part of contributing starts with listening and observing how people interact. I’m sure Python do things differently, I’m sure Ruby do things differently, but very much the goal is to talk about the problem then fix the problem, don’t do it the other way around. This is a sign that I see a lot in pretty much all open-source contributions. People were just flinging up a pool requests over the fence. Honestly, I would say that just leaves the hard feelings a lot of times or maintainers were like you did it wrong or now I don’t want that contribution, well I did all these work. If you talk out what you want to do first maybe, we can save you the time of not going down the wrong way. My first thing is to listen.

The second one is that the contribution process is getting a lot better. The Go team ran two contribution workshops, and I’m trying to talk them into taking this presentation on the road to help people get through the kind of mechanics of first commit, being corporate sponsors to open source projects there is contributing license agreement, that’s unfortunately required, that is a process that is just annoying and you have to go through.

So we had that fifty people in the room at every table with someone like me sitting with a hat on who could help you navigate through the ugly UI mess of the Google CLA signing thing. Once it’s done, you are done. You never have to get through that again. I can link you to the website materials, take you through submitting your first commit and go through the review process, running the CI tool to get them in and finally having it submitted.

The Go contribution process is slightly different from the usual GitHub work flow they use a different set of tools because we really care about our code review. The Go tree, if you look at it, doesn’t look like linux kernel, It just has this single trunk. We don’t have the forests of pull requests and merges and rubbish like that. It’s very simple to follow. You can always bisect right down to which change it was. So we would care a lot about the change, the formatting the change, we care obviously about the CI structure, we care about the changes descriptive what it does which is actually just fine. Are you fixing something, why are you fixing it, was it broken, those kinds of things.

The last one is probably the most difficult one which is when many new contributors say look, I want to help with Go, but I don’t know what to do. I can only answer that from my point of view, which is, fix the things that annoy you and this comes from like my very early discussion about extrinsic versus intrinsic motivation. Are you going to care about something that somebody else told you to fix or you’re going to care more about a problem that affects you?

Again I want to point out this is my opinion I don’t represent anybody else in it but I see a lot of people want to land a commit on the Go repository, mainly for status and that’s fine, but an important thing to understand and again this is a community by community thing is that the standard library, I think the Python people put it very well, they say the standard library of Python is where packages go to die. Maybe people don’t support me in saying that in the Go standard library. But you must be very clear that the barrier for entry is unfavorably high. Like we don’t want to change things in the standard library, we don’t want to have a big standard library. We don’t want to beat Python with 3 HTTP libraries.

The goal is not to make it a kitchen sink. So contributing to Go is actually contributing to projects that are built on top of the library. Kubernetes, Cockroach DB, EDCD, Docker all these projects mainly in the operation space that is building on top of Go. That’s where the real action is, that’s where you could have some the most impact. Having said that if you find bugs and limitations in Go, by all means, we want to have those contributions but it comes back to what I said that you should fix things you care about not someone else told you to.

Pramod: Yes those are wonderful tips. Definitely lot of listeners will take a thing or two. You are an author now, you have a book coming up with O’Reilly, “Practical Go”

Dave: Yeah, the idea of practical Go if anything was if you’re familiar with Scott Meyers, Effective C++ book, it is not how to learn C++ but how to be effective in it. How to write good Go, may be we call idiomatic Go. But I like the idea of practical Go.

Pramod: Question from “Reddit”. You are known for your simplicity. Is simplicity a part of your way of life or only when you talk about Go?

Dave: Very interesting question. The more as I consider my career as a software developer also as a system administrator, a lot of this is come out of thinking about what I could talk about at talks and things like that and the more that I research into the writings of other software, people who are talking about the design of software we had in 10, 20, 30 years ago.

This crystal clear narrative in simplicity, like Dicer, Fred Brooks, and Denis Richie every single person who we respect as a software luminary, unequivocally says simplicity is the goal in terms of writing software that can be managed and maintained and grow just by being kept under control, but it must be simple.

So very much, I don’t know if I could say a way of life, you know I’m just a messy nerd like the rest of us. But in terms of what I think is important in software written in collaboration with other software developers, software that is written as a product that must change because that is the goal of commercial software, to be responsive to the requirements of our users. It must be kept simple. Complexity is not a goal.Rich Hickey’s talk simplicity made easy says everything that I want to say much better than I ever could. His explanation the difference between finding it simple and finding it easy really resonates with me strongly. In as much as I represent someone who cares about a way of designing and writing programs, simplicity is extremely important to me.

Pramod: You are a well-known speaker, brilliant coder, blogger, and author—what’s next?

Dave: The thing that I enjoy most about the opportunities that I have, to visit another country because I have to talk there and also to meet the passionate Go programmers. For example in a month or so I’m going to speak at Siberia which is a general developer conference. I want to go there because when I was in Paris last year for the dotGo, I met this huge lot of passionate Russian Go programmers. So I wanted to go to Russia and find out what is it that makes these people tick. That’s the same reason that drove me to visit Tokyo a couple of times to speak at their Go conference. I’ve been to China, I’ve been to India, I’ve been to Korea, and the reason I say these countries is because compared to the rest of the world, they are relatively close to Australia.

Very much my motivation is to go and meet other Go programmers because even though I’ve been doing most of the talking in this interview I think that you learn the most when you shut your mouth and listen to what other people have to say. So that’s my goal. I want to find out the ideas that other people have about programming because if you just listen to your own voice, you’ll never learn anything.

Pramod: Anything you would like to share with Go programmers around the world.

Dave: I’ll like to make a request to everybody listening to this. I’m going to speak directly to the Go programmers. If you’re passionate about another language, you can interpret my message for your own community, but I want Go programmers not just to write software but to write more in general. It’s super important to fill up the world with good advice about how you use Go, and that’s different from just a tweet. Tweets are helpful and things like that but real content. Your experiences using Go when it worked well for you like we always have some great wall posts or these lovely graphs at every new Go release we do, the garbage collection times dropped to a tenth of what they were. That’s great, that’s a fantastic experience we want great useful content that other people can link to justify using Go in their environment.

Hey look, it worked with Twitch maybe we should try it. Its super valuable for the growth of Go and similarly you should also tell us when things don’t go well. You should write about the problems that Go has, the way it fails to serve you. And this is something that Ross Cox was talking about in his Go support, he knows. So the way that he wanted to find what would be in Go2 is by looking at the ways that it fails to scale for programmers. The scale we can think about is in simplistic terms with computers and memory and things like that. You can also look at it in terms of Go is a language explicitly designed for large programming, but lots of its decisions are designed to facilitate the programmer sitting in a group of many rather than just the individual.

So if you have problems where Go has failed you like Dependency management is the super obvious example where it’s not doing a great job at the moment. Other examples of how Go is failing to live up to the promise that we hoped, please write about it because this is the kind of experience we should be honest with everybody like if you can link to successful articles. That’s great press, and we should be honest and also link up the problems in the places where Go did not live up to that. We should be honest about that too. This is especially important because this is kind of information that Ross is trying to collect for, he calls them experience the support of which directly drive how they’re thinking about a possible change to the language going forward. So yeah, my request to everybody, you should write, or you should blog more. It’s good for Go, it’s good for your own career, it’s good to build your own brand.

I know one says you should have a lovely GitHub profile with like lots of public commits, but I’d say this is at least as important. I’m probably going to say more important than having a bunch of random commits on open source project. I think it’s important to control your own brand so that when someone Googles your name, you get to control what they see about that being the top hit.

It’s a great thing. If you can, I would love it if you can write about Go and it’s especially my writing is quite polarizing to a lot of people and that’s fine, rather than abuse me tell me where I’m wrong. So many characters. So everybody listening please write more about Go, it’s best for everybody.

Pramod: Wonderful suggestions. Write General Code, blog or write about experiences with Go, involve with the community. Thank You, David Cheney, for all your contributions and taking time to be on the show.It was wonderful Talking to David Cheney.

Pramod: Lot of take aways from the Interview. No formal degree will not stop you from being a successful computer engineer. Even if you start late in your career as a programmer you can still be a contributor. Also Got suggestions on how to contribute to Go Lang. As David said grab the opportunity, blog and share your ideas with the world. I do not know my next week Guest, I will update the website soon. Take Care and have a fantastic rest of the week.