Cup o' Go

No episode this week, as Shay's celebrating Rosh Hashana and John's moving countries. So enjoy this replay of our interview with John Arundel from episode 21 of the show!

Creators & Guests

Host
Jonathan Hall
Freelance Gopher, Continuous Delivery consultant, and host of the Boldly Go YouTube channel.
Host
Shay Nehmad
Engineering Enablement Architect @ Orca
Editor
Filippo Valvassori Bolgè
Sound Designer / Audio Editor based in Milan

What is Cup o' Go?

Stay up to date with the Go community in about 15 minutes per week

Shay Nehmad:

Good morning, everyone. This is Shay with a quick, midweek update. So don't worry, nothing critical happened in the Go world, but this week it's Rosh Hashanah. Happy New Year everybody, and we'll probably take this week's episode off. So to not leave you hanging, here's a re release of, an old interview we already did.

Shay Nehmad:

Hope you enjoy it.

Jonathan Hall:

Hey, Shay. I'm trying to write the the show notes for this episode, but I can't find the password. Do you have the password for the website?

Shay Nehmad:

Try a.

Jonathan Hall:

Okay.

Shay Nehmad:

Try No.

Jonathan Hall:

That didn't work. B. B. No. I don't think it's long enough.

Shay Nehmad:

Try c.

Jonathan Hall:

C. No.

Shay Nehmad:

If only someone here on the call was an expert in fuzzing. Oh, hi, John.

John Arundel:

Hello. I I'm not an expert in fuzzing, but maybe I can help you find one.

Jonathan Hall:

I think you're more of an expert than shy, so that's probably all we need to be.

John Arundel:

And then I've written a fuzz test. So Oh. Yeah. So I

Jonathan Hall:

make the

John Arundel:

best decision.

Jonathan Hall:

That's 100% more than I've written. An infinite percent more than I've written. So, John, tell us who you are and a little bit about what you do.

John Arundel:

I'm John Arendel. I'm a a writer of books, including Go books. And I also teach Go. I also write Go programs. But I don't get paid for that.

Shay Nehmad:

Oh. If you remember, a few shows ago, you mentioned and recommended John's articles about fast testing, which you're writing right now. Right? You have, like, 2 out of, 4, if I remember correctly.

John Arundel:

Yeah. You were more than kind about the articles, which was really just,

Shay Nehmad:

you know,

John Arundel:

one of these things where you think this is a super neat feature of Go that not many people seem to know about. I must tell the world. Mhmm.

Shay Nehmad:

And we're already at 3 out of 4, and I'm really, really excited about number 4. The first one was random testing, and then fuzz test, and then writing a Go fast target, and finally, it's about finding bugs.

John Arundel:

Well, don't build it up too much. It's not that exciting. It is it's slightly exciting.

Shay Nehmad:

It's worth reading. It's worth reading. I don't wanna outlive it too much. So if you're a long time listener, you maybe remember we mentioned, these articles, and here we have the writer. So welcome, John.

John Arundel:

Thank you. That's so kind. And I don't want to, you know, make too much of it. I didn't invent fuzzing or implement it in Go or anything like that. But I found out about it and I feel I have a mission to tell the world about neat stuff.

Jonathan Hall:

That's cool. I'm curious. You said that you teach Go. Do you do that online or in person or self paced courses? How do you teach Go?

John Arundel:

Yeah. Private lessons online, and I also have a course.

Jonathan Hall:

Okay.

Shay Nehmad:

Do you work with companies? Let's say I wanna take my r and d group and, you know, let's say move them from Python to Go.

John Arundel:

Yeah. Absolutely. I'd be all over that.

Shay Nehmad:

Nice. I wanted to ask you about the name of your site. So, obviously, if you wanna read, John's articles or check out his books or any of these kind of things, reach out to him. I think your main site is bitfieldconsulting.com. Right?

John Arundel:

That's the one.

Shay Nehmad:

That's a really good name. Like, it sticks in my head, but what's the story behind it? Bitfield Consulting. So the consulting part is easy.

John Arundel:

Yeah. I I used to be a consultant for a while, and I I wanted a name that was something consulting, you know, to get that across. And I could have used my name, but that's kind of boring. So thought it'd be nice if it was a computery word, but also kinda sounds like a name. Right?

John Arundel:

It could be mister Bitfield.

Jonathan Hall:

Oh, man.

John Arundel:

You never know. I mean, that would be a neat name if you're a IT consultant.

Shay Nehmad:

Mister it sounds sort of like a James Bond, mister Bitfield.

John Arundel:

Yeah. Tragically, I found out somebody else had the same idea before me and they got the bitfield.com domain. So shame about that. But I'm sure their services are equally good.

Shay Nehmad:

One thing I wanted to ask before we dive deep into, you know, how you teach Go and what experiences you've had there is one more thing about the site. You have a ton of really, really, cool icons. Who's doing the the art?

John Arundel:

Oh, it's, there's a really nice repo of Go for Clip art by an article, Marie Lettr, I think is the name. You you'll find that if you Google for Go for clip art or something like that. It's really, really high res PNG images and SVGs. So I see a few people using those in the community, but I'm really keen on them, and they make me look great. You know, I I had no input whatsoever into the design of those images, but they're beautiful.

Jonathan Hall:

Oh, there's even a Star Trek one. That fits the theme of my, my clip art.

John Arundel:

I like that. Yeah. And it does sorry. It it does sort of fit, you know, the idea that I'd like to put across that sort of, you know, some of this material that I'm writing about is a little bit dry maybe, but we can try and make it fun. I mean, I think that's that's the best way to learn, isn't it?

John Arundel:

We learn the easiest when stuff is interesting and fun.

Shay Nehmad:

I wanna, you know, start leading you down a a track of questions about what's it like teaching Go. But let's start really at the top. Let's say I wanna learn, Go. Most people come to you, I assume, are not complete juniors. Right?

Shay Nehmad:

Most people you work with already have experience in software development. Right?

John Arundel:

Oh, I think it's a mix. I mean, some people have lots of experience in other languages maybe, but just not in Go. Some people have lots of experience in Go, but they still feel like there's more to learn. Sure we all feel like that. And other people just have no experience of any kind of programming at all, but think it's fun and want to try it.

John Arundel:

So that's great. I like those people the best.

Shay Nehmad:

We've talked a lot about whether Go should be the first language someone learns or always the second language. And we've had various opinions on it. We've had, Matt from, boot. Dev, who's also teaching Go, but doing it really in an online course with like game y sort of thing, hold the opinion that Go shouldn't be the first language, I think. And we've had some people on our Slack, I think it's one of the first conversations we had, who were like, Go is such a good language.

Shay Nehmad:

It's very simple. It's very easy to read. It should be people's first language so they don't learn bad habits that they need to unlearn when they go into Go. And I'm really curious about your opinion on this, sort of idea.

John Arundel:

That's such a great question. I think I like the implied idea in the question that whether or not it's the first language you learn, Go should not be the last language. There is a lot of value in knowing more than one language. Right? I mean, that's valuable in itself no matter what that set of languages is.

Shay Nehmad:

Mhmm.

John Arundel:

Although, you know, I think I've given this advice sometimes to people who say, you know, what are the 10 languages that I should learn? They say, well, it's it's nice to have some experience, some exposure to lots of different popular languages. But it's also worth diving deep, I think, into 1 really deeply, isn't it? Or or 2 if you can, but most of us are busy people, so it's hard enough just to do a deep dive into 1. Mhmm.

John Arundel:

But it's it's only when you get to know some language really well you sort of break through into being able to do good stuff with it. I think so anyway.

Shay Nehmad:

It's also very circumferential. Right? Like, if you have a friend that's your gateway into programming and that friend knows, I don't know, Python really well or PHP really well. It doesn't matter what language you wanna learn. You should probably learn this language because, you know, the friend, I don't know, your roommate or whatever, they can help you.

John Arundel:

Yeah. Exactly. And I think it's also about what kind of mind you have, isn't it? You know, some languages are better suited to certain minds than others. I know people who are highly intelligent, but just for whatever reason, Go doesn't seem to suit them, doesn't think the way they do, you know.

John Arundel:

Mhmm. So they're not productive with it. So that's fine. They they should use the language that they like.

Shay Nehmad:

Yeah. Go definitely has, needs to click before you start, really working with it.

John Arundel:

Yeah. I think that's right. And you can correct me on this, but I sort of get the impression from people I talk to and certainly from myself that most people's first glimpse of Go, their opinion is probably not that favorite, especially if they're used to other languages. Like, when I when I first saw it, it looked always wanna look at some code, don't you, rather than read the publicity stuff. And I looked at the code, and I thought, oh, that's ugly.

John Arundel:

Don't like that. Yeah. Which is weird because I like c, an old school c programmer from the old days, and it it really does look a lot like c. And I think that was my problem with it. In the in the meantime, you know, it had affairs with Ruby and Python and other beautiful languages.

John Arundel:

Something absolutely gorgeous about Ruby, perhaps you'll agree if you've used it in that. You can sort of shape it to be whatever language you want.

Jonathan Hall:

I haven't used Ruby extensively, so no, I don't know that.

John Arundel:

Well, whatever way of writing programs appeals to you, you know, object oriented, imperative, modular, whatever, you can do that in Ruby, you know. It's so protein, you can kinda do anything with it. Go is definitely not like that, right? We can all agree.

Jonathan Hall:

It's very opinionated. That's right.

John Arundel:

Yeah. That's but the thing is it has all the right opinions.

Shay Nehmad:

I think that when you first look at Go, it really depends what's your entry point. If you're looking at Go from a curious perspective, you just wanna learn something cool, I think it's not as attractive as other options today. Like when you start learning Go, a lot of Go people are about fundamentals. You don't have to import a ton of libraries. The all the standard tutorials are not about frameworks and libraries, and, you know, getting huge projects off the ground with tons of, files and decisions already made for you.

Shay Nehmad:

It's all about the language is very lean. It's very simple. If, you know, if you want to sort or you get the maximum or minimum of a slice, write it yourself. Here's the for keyword, right? And only now we're adding the sort into the standard library.

Shay Nehmad:

By comparison, if you're starting to learn, I know, Astro or React or like any of these, super heavy Next, like, or Nuxt or any of these super heavy JavaScript frameworks right now and the CSS you do with Bootstrap or Tailwind or any of these frameworks, etcetera, etcetera, it feels like you're getting a lot done and you're learning a lot really fast. But I think that, I don't know, 2 months in, it reverses. So if you're entering to Go is your company's writing Go or you're doing a Go course, I think these people tend to stick and like Go a lot more. Whereas people who start with React and Nux and all these frameworks end up stuck with them or even not liking them very much but still having to do them and them remaining popular. It's one of the reasons they'll continue doing it.

John Arundel:

Very true. Very true. And I've actually had this experience, you know, training a group of corporate developers. You know, the message from the boss is, company switching to Go. Can you please help train our devs?

John Arundel:

Certainly. No problem. So I was sort of introducing myself to the group. I would go around and ask people who they are. I say, you know, why are you interested in learning Go?

John Arundel:

And the answer was, I'm not. It turned out none of them wanted to learn Go at all. They all thought it was awful and Mhmm. Didn't enjoy the prospect at all. But it it was like, I'll be fired.

John Arundel:

So I suppose, you know.

Shay Nehmad:

Why do you wanna learn Go? I like eating.

John Arundel:

Yeah. I was kind of thinking to myself, boy, tough room. Yeah. But there it is. But whether it should be the first language that you learn, to get back to your question, I I'm not sure.

John Arundel:

I mean, Jonathan can maybe weigh in on this as well because he produced some fantastic content introducing Go to beginners. And it's a tough language to teach. Right? I mean, there's there's some really brain bustingly puzzling things about it. I mean, sometimes I ask new students, what are the things that you feel least confident about in Go?

John Arundel:

And you know exactly what they're gonna say. Right? Sort of

Jonathan Hall:

I can imagine. Yeah.

John Arundel:

Pointers is gonna come up.

Jonathan Hall:

Mhmm.

John Arundel:

Certainly concurrency. And even things like structs and methods and so forth can, like these are fundamental, but if they're not present in the language that you come from, if you're if you're not used to programming, it's it's really hard. Right? It's tough to put yourself in the mindset of someone who doesn't know that stuff, But that's exactly what teaching is, I suppose. Mhmm.

Jonathan Hall:

I'm curious, John. How did you get introduced into Go, and how long ago was that? What was that story like?

John Arundel:

Oh, that's a good one. I think, you know, I've been programming basically forever, but a lot longer than many of your listeners have been alive, I'm sure. And

Shay Nehmad:

And some of the interviewers as well. Yeah.

John Arundel:

When Go was announced, I looked at it, thought that looks ugly, and it's from Google, so no thanks. Yeah. And, you know, that's that's my usual hot take on most new languages. It's probably equally bad, you know, clearly that was a wrong take. And I'm sure I'm wrong about lots of other things, but it it hasn't come back to bite me, so but I was working as a consultant with a company who switched to Go, a few years ago.

John Arundel:

And they were and I was thinking to myself, you know, with one eye on the business, sort of thinking, well, if they're all doing go and I don't know anything about go, I'm not gonna be relevant. So they might think, why are we still paying this guy? You know, what's he for? So I thought I better learn something, you know, get get myself a book and read over the weekend. And consultants are always good at mugging stuff up quickly so they can sound authoritative about it.

Jonathan Hall:

Right. Right.

John Arundel:

And, I never stop. Okay.

Shay Nehmad:

So that

John Arundel:

you know, and I had a really tough time. I don't know whether you did when you first tried to write co programs, but I think most people find it.

Jonathan Hall:

I certainly had a hard time with certain aspects of it for sure. Yeah. I mean, I came from Pearl primarily. And so, you know, the idea of I was using the empty interface everywhere because I didn't know how to think in the right terms, you know, in Go Go Away. Because in Perl, everything's a manageable type.

Jonathan Hall:

It's just a thing.

John Arundel:

I want dynamic typing. Yeah. Let's just make everything empty interface. That'll make my programs much clearer.

Jonathan Hall:

Yeah. I'm glad I don't do that anymore, but that was one of the first mistakes. And then trying to to wrap my head around the idea of, composition instead of inheritance took a while. And and I see that all the time. Anybody who's learned classical object oriented programming, regardless of the language, they have that problem with Go all the time.

John Arundel:

Yeah. For sure.

Shay Nehmad:

I came in from the other side. I started working with Go as a team leader. And in the army, you know, you're talking about consultants needing to sound authoritative. Imagine getting a a team of 10 developers that you you're commanding. You haven't used Go before.

Shay Nehmad:

You haven't written a web server before and now you're commanding the team.

John Arundel:

Right.

Shay Nehmad:

That was rough. I was, like, trying to understand, what I was reading and making decisions. Luckily, the team itself, they were super gracious about it and they taught me everything I needed to know really fast. So my experience with Go was of an initial embarrassment. I came from a, like, CC plus plus background.

Shay Nehmad:

So Struct, I I read that Struct, I was, oh, okay, I'm home. But then I'm like, where's the implements and where's the templating and where are all my features? I need my language to be smarter than me. Why is the language so simple? What are we wasting our time on if we're not trying to figure out the preprocessing macros and templating?

John Arundel:

Yeah.

Shay Nehmad:

And I figured that it's just like writing code, like business logic and then making value and stuff like that.

John Arundel:

Exactly. I mean, I think maybe it's a big advantage in some sense if you're not sort of a computer science professor and you know all about the theory of programming language design and so forth. Because if you did, you'd you'd be upset with Go thinking, where is everything? Right? That's all the good stuff we've been writing papers about for the last 30 years.

John Arundel:

They seem to have left it out. Maybe they just didn't read the literature. Yeah.

Shay Nehmad:

I highly doubt they didn't. They did read it

John Arundel:

and they didn't like it. So they said, we're not having that.

Jonathan Hall:

So you you said that you used to be a consultant. I guess that's in the past now. Is teaching and writing about Go your full time job at this point? Yeah.

John Arundel:

Well, I think I found that the most the part of the consulting that I always enjoyed most I mean, I'm the kind of guy who likes to fix problems. I'm sure. We all are. That's how we got into this. And I found the most enjoyable part of the consulting was sort of teaching people how to fix stuff themselves.

John Arundel:

I mean, I can parachute in and fix your survey, you know, but the more interesting thing for me is how do I make it so they don't need to call me back the next time it crashes. Maybe not a great maybe explains why I wasn't a huge success as a consultant because I never got any repeat business. I taught everybody how to fix their own problems and build a self healing system, and they never needed me. But that's fine. And I found, yeah, the fun bit for me is teaching people about neat stuff and seeing them get it, and the light bulb go on, and they get excited.

John Arundel:

And they're like, wow, I can do a load of cool stuff. I love that. So I decided I'm just gonna do that. Cool.

Jonathan Hall:

And I guess it's working well for you. So that nice to have a success story.

John Arundel:

Yeah. I still really enjoy it. It's so much fun. You know? I I realized after a while, there's only so much you know, there's only one of me.

John Arundel:

I can't sort of can't teach everybody. So if I want to reach more people, I'd better write a book. So that's why I did that.

Jonathan Hall:

And now you have many of them.

Shay Nehmad:

Yeah. You did that 7 times. Yeah.

John Arundel:

But this it it actually works really well because as you know when you've tried to teach go to people or help them solve problems, you sort of need to find the right way of phrasing something, don't you? Like, with each individual person, there's some kind of idea or form of words that just helps them get it. You probably won't find that straight away. You might need to try a few different ways. I mean, I've tried a zillion ways of explaining pointers, and I still think I can explain it very well.

John Arundel:

But I'm getting I'm still, you know, working with students helps me refine that stuff. And I I see what works and what doesn't work and figure out the right order to introduce these concepts, like, you know, what do you need to understand before you go into the next thing and so on. On. And then Yep. You know, that that can go in the books.

John Arundel:

So in the books, it just looks as though I got it right first time and, like, here's the logical way to understand Go. But and also the process of doing that, you know how it is if you ever write and publish something. You don't wanna look like an idiot. So you do your research. You read up on this stuff.

John Arundel:

You check out the facts. And I learn a ton of stuff Of course. Doing that. Back when I was a consultant, I wanted to learn about puppets, you know. So the way to do this is I'll write a book on puppets, and then I'll have to learn something, won't I?

John Arundel:

And it worked with Go as well.

Jonathan Hall:

That's one of the reasons we started this podcast is to help each of us individually keep up to date with what's happening at Go. So forces us to learn about the Go news so that we can tell the audience what the Go news is. Yeah.

Shay Nehmad:

And we've had, another author on the show, Adelina Simeon. She she wrote the TDD book.

John Arundel:

Yeah. That was wonderful.

Shay Nehmad:

And and she said exactly the same. She like, she was like, I started, writing it. I learned so much about testing, so much more than I thought, I I was able to share. So it's definitely the best way to learn is to teach. That's really cool.

Shay Nehmad:

I think you you really highlight that, that programming is fun. That was exactly my next thing. I I wanted to ask you, you mentioned in a few places, prominent places, that you think programming is fun and people should have fun. Well, I I totally agree with you. Many times, especially, you know, working corporate or or big organizations or stuff like that, that's not the focus point.

Shay Nehmad:

Like if you would ask 50 vprnds right now especially, you know, not when the interest is 0%, but, when the economy look what it looks like, what do they care about in their, employees right now, I think they would say velocity, quality, and I think they would get to, you know, them showering before them having fun.

John Arundel:

Yeah. That's a good point. Yeah. It's a I'm

Shay Nehmad:

wondering why it's so highlighted for you.

John Arundel:

Well, I know it sounds like one of these motherhood and apple pie things. Like, who doesn't think programming is fun? But as you say, VPs don't. And and, unfortunately, a lot of working programmers that

Jonathan Hall:

I meet

John Arundel:

don't feel it's fun. That's partly because perhaps when I was a little kid, you know, I would play with computers and write programs in basic and things like that and just never stopped doing that, really. So it started as fun for me and, thankfully, has never stopped me. But there's a lot of people, I think they just see it as, you know, it's a it's a decent career, well paid, right sort of set of skills to learn, isn't it? And they they go into it, but perhaps to be careful what I say, perhaps they spend their whole life sort of programming TypeScript frameworks and things.

John Arundel:

And there's there's not a whole lot of fun for them, so they just think, ah, this profession kind of sucks. You know? I think that's such a shame. And, also, I've noticed the students I have who make the quickest progress and become the best software developers are the ones who are having fun. The more fun they're having, the better programs they're writing, and the more programs they write, so the better they get at it.

John Arundel:

I mean, if something's not fun, you're not gonna do it.

Jonathan Hall:

Fair point.

John Arundel:

So that's why I Totally. That's why I sort of play that up in a sort of, hey, you want to remind people, hey, you know, yeah, we it's nice to get a check, but, you know, we're basically doing this because it's enjoyable. If we didn't enjoy it, that would be a real shame because you're gonna spend your life doing this stuff. So if it's not fun, I'd like and the the other the other reason to say it is, you know, perhaps some people are thinking, John must be dumb because, you know, it's not always fun programming. What if you've got some really awful bug or have some horrendous code base with no tests and you have to fix something?

John Arundel:

What about that, John? How are you gonna make that fun? You know, let's see what you got. My answer to that is sort of, well, you make a good point, imaginary interlocutor. But but my question would be, how do we get into that situation in the 1st place?

John Arundel:

Right? Like, why why are we in this very no fun situation? Is it because we don't have tests or whatever? That's quite common, isn't it? And often the reason we don't have tests is we don't really have a very clear idea of what this program is supposed to do.

John Arundel:

Mhmm. That's more common than people might think, isn't it?

Shay Nehmad:

Or that the original, developers didn't have fun when they started. I think a a big part of having fun when programming is is enjoying your profession. Like feeling smart, solving problems, being proud of what you build. And it's something that gets lost when you use frameworks and work in a super large company and have deadlines and you develop software that's shipped immediately and not in a box with your name on it. But if you mess up, you just ship another thing tomorrow in a SaaS model and, you know, everybody's used to getting bugs all the time.

John Arundel:

Yeah. That's so true. I mean, we're all all working with constraints, aren't we? But the the thing is so so the thing, if if you come in with the attitude, like, this is I'm doing a fun creative thing, this is enjoyable, and I'm good at it, you can have fun within those constraints.

Jonathan Hall:

You know, you

John Arundel:

can still do a good job even if you feel you're being rushed or pressured or stressed or whatever. You can just say, well, let's push back on that for a moment and just say, given the time, scope, etcetera that I have, what's the best job I can do?

Jonathan Hall:

So, John, we've talked about beginning with Go. We talked about making Go fun, programming fun in general. What advice would you have to somebody who's maybe thinking about going this route? I mean, our listeners probably are trying Go, but some of them might not be enjoying it or they're struggling with it. What advice would you have for these people?

Jonathan Hall:

How can they maybe get over that hump?

John Arundel:

Oh, nice question. I think I'll tell them the same thing that I suggest to my students, which is the way best way to learn is by writing some programs. The best way to do that is have some program that you want or are interested in. Maybe it's some subject area that you think is cool, like cryptography or networking or databases or whatever, but you you can think of something that you could write in that space. Just try to do it.

John Arundel:

But, ideally, if it's some real program that you actually need in your daily life, maybe your personal life, work life, or whatever, this is the joy of computing, isn't it? That you can build programs to do things instead of you doing them. So if you can find something like that, that really helps because then it's not an exercise. You know, it's like if you're a musician, you know, it's like it's not not like practicing scales all day long. So you also need to play music.

John Arundel:

In fact, that's the best way.

Jonathan Hall:

Nice. Good advice.

Shay Nehmad:

Yeah. There are many interesting side projects that, people can take. I know that Jonathan and I often recommend, doing things that all 3 of us are doing on this, call, which is content creation, writing a blog. We really, really, really encourage you. If you if you listen to the other John's advice right now and you're wondering, what should I do?

Shay Nehmad:

I don't have any project immediately in mind. Grab a notebook. Think about it for a second. And if you can't come up with anything, just start writing blog posts about the libraries you've learned, follow-up on some links, talk to some people, and share the content with us.

John Arundel:

Yeah. That's such great advice. And also, you know, please don't wait until you feel like you're an expert in the subject before you're allowed to blog about it. I certainly have not. And if I Yeah.

John Arundel:

If I ever become an expert, I'll let you know. But please please learn in public because that is actually the most valuable kind of content for people who are learning. Just see what puzzles other people and how they solved it. Right?

Shay Nehmad:

Yeah. I think our listeners don't know, but probably Filippo knows. Filippo, our editor, knows it very well where we we'll have, like, a new library coming out or a new version of Go. And we manage these news in, like, we have a Trello board where we manage all the things and we assign that this one's, this news item Jonathan is doing, this news item I am doing. And usually it's the other way around.

Shay Nehmad:

Like if Jonathan brought something to the table that he knows about, then I'll have to present it because we the whole point of the show is us learning. Right? And sharing our learning with the community. And, you know, everything that Filippo has to edit out that's not like something is happening or we're, we're sneezing or something. It's like, okay, so this new version of the library came out and, oh, wait, I have no idea what it is.

Shay Nehmad:

Give me a second.

Jonathan Hall:

It's a lot

John Arundel:

of effort. Yep.

Shay Nehmad:

Yeah. So we added these parts out.

John Arundel:

It's reassuring, and I've also found when pairing with my students that usually they drive, you know, and I'll sort of keep it from the sidelines. But it's it's nice for me to drive sometimes because they see me making a ton of mistakes, You know, I I forget things in the standard library or or get compile errors or make typos and things. And I think they see that and feel a bit more relaxed because they're like, hey, that guy knows what he's doing and he's making mistakes. I'm operating at the same level as he is. That's terrific.

Jonathan Hall:

Yeah. Exactly. Yeah.

Shay Nehmad:

We all have only 24 hours and, you know, 10 10, fingers to click on the keyboard. All programmers. We we have the same constraints. Great. So coming to a close here, we usually have 2 questions that we ask every interviewee and we would love to pick your brains about it as well.

Shay Nehmad:

Let's say gun to your head, you have to remove a feature from Go. What would it be?

John Arundel:

Yeah. This is a nice one. I I carefully listened to all your previous episodes, so I wouldn't say anything that somebody else said. But Nice. I actually think I could probably dispense with quite a few things in Go.

John Arundel:

You you've probably seen it. Matt Ryan did a great talk on I think it was things I never use in Go. On YouTube. You can find it. And among those were at least 4 of the keywords and a few other things.

John Arundel:

And the thing is, Jonathan, when you're writing your excellent roundup of Go books, you talked about my friend John Bodner's excellent book, Learning Go. That is really terrific. In fact, I'm furious about it because it's the book I really wanted to write and he did it. So, but nonetheless and you said one thing he does is he covers everything. You know, it is comprehensive.

John Arundel:

If it's in Go, it's in that. And I I haven't done that with my books, and that's on purpose. Because I found if you try to teach people everything, they just don't take it in. Right? It's too much.

John Arundel:

So I politely don't mention things which, in fact, they won't really need to know about. Complex number types built into Go. You know, did you ever use these? I didn't. I mean, if you're a physicist, you probably do.

Shay Nehmad:

Yep. Yep. Never.

John Arundel:

But, I mean, need needless to say, I don't use Go to. There's not

Jonathan Hall:

Mhmm.

John Arundel:

Not much call for that. There are 1 or 2, times if you read the standard library code and the Go runtime code and the compiler, which I definitely recommend. I mean, this this is a fun recreation, as long as no one's gonna quiz you on it, you know. You just read it for enjoyment. You sometimes see Go to use, and then also the stuff and figure out, like, obviously, they know what they're doing.

John Arundel:

So is there a good reason for this? Oh, I guess there is, you know, because it's all good to break out of this loop, 3 nested loops or something like this. But, you know, we we probably shouldn't have Go to just in case someone uses it. Yeah. And I think something that causes no end of pain and confusion, at least for my students, is, the colon equals short declaration form.

John Arundel:

Right? You know, this even the Go designers themselves, I think, have said that was probably a mistake, but it just seemed like a good idea at the time. Because, you know, it can introduce shadowing and you can get this weird effect if you're assigning 2 variables like something and error. Maybe one of those is already defined but the other one isn't.

Shay Nehmad:

Yeah. I always thought about the the Walrus operator as more of a branding move than a computer science move. It's like the first thing you need to do usually in programming, you know, tutorials, it's hello world. Right? And then you put the hello in a in a variable and you print that, and then you're like, oh, Go has the waters operators.

Shay Nehmad:

Okay. That's how this language is different.

John Arundel:

Yeah. I mean, I absolutely love it because I would be super annoyed to have to write fast and such equals every time. You know? That's no fun.

Shay Nehmad:

Mhmm.

John Arundel:

But at the same time, it it just this happens a lot, doesn't it? That something that seems like a really nice free extra bonus feature just introduces confusion because now there's 2 ways to do it. People say, well, should I use colon equals, or should I use var or whatever? And now you have to know about that. And the other thing is anytime you get some really weird, really horrible bug in your Go program, it's probably either due to a channel, right, or a or a deadlock or it's some something to do with the Walrus operator having shadowed some other variable inside the loop or something.

Shay Nehmad:

Yep. When you defer a thing and you up you declared it in one way. We we covered something recently. I think it was time since. You shouldn't defer the time since things.

John Arundel:

Right.

Shay Nehmad:

It's, I think that the fact that, you get these bugs in Go is maybe more of a achievement of the language than a Yeah. I mean a drop because you wouldn't even get to these bugs so fast in, in, languages in in other languages, at least in my experience.

John Arundel:

Oh, definitely. I mean, you can make too much of this, can't you? You can say, oh, there's a there's a construct in Go that allows you to write bad programs. Shock horror. You know, thank goodness no other languages have those.

Shay Nehmad:

Yeah. So you pretty much, covered the entire field for the rest of our interviews because you said everything in every single book, should stay. And other than these, tons of features, so all our next interviews, all they have to do is either agree or disagree

John Arundel:

with you.

Shay Nehmad:

But here's a more open ended one. If you could, copy feature from a different language, and put it into Go, what would the feature library, I don't know, community thing, whatever, what would that be?

John Arundel:

Yeah. That's a great question. You know, I I definitely think there's scope for multiple languages as we started out by saying, isn't there? Because some languages, the philosophy is let's put everything in and then people can just use the bits they like, c plus plus, other languages, or a small group of languages, but Go is one of them, isn't it? The designers evidently felt, let's take away everything we can until there's just enough left to be able to write useful programs.

John Arundel:

And if you need other constructs, you can build them in the language. So Lisp is the ultimate version of that, isn't it? It's basically nothing except brackets and, eval and apply. But Go is clearly, like, you know, they explicitly said they started with c and took out the bad bits, didn't they? I think that's that's great, and I love that philosophy.

John Arundel:

And I actually think it carries over into our programs as well. It's that Go, the language, is sort of sitting there looking at you saying, I'm really minimalist. Shouldn't your programs be the same? You know, stop building so much and over abstracting and all of this kind of thing. So I I love the fact that Go hasn't felt the need to include, you know, every neat idea from every other language.

John Arundel:

They stole a load of excellent ideas from other great languages, but they stole just the right ones with very good taste. All you can ask for. So I genuinely don't think there's anything that I would want to add to Go. I think I'm in the minority here. In fact, I'm sure I am.

John Arundel:

But every time the survey comes around and they said, what bugs are you the most that it's missing from Go? And I'm just like, I can't think of anything. You know, it's I I seem to be able to get by with Go as it is just fine and even generics. You know, it's kinda like, oh, sounds neat, but never felt the lack of it. But now they're here.

John Arundel:

Hey, let's use them to build neat stuff.

Jonathan Hall:

Yeah. Good answer. Nothing. Nice answer. Cool.

Jonathan Hall:

Well, John, it has been a pleasure having you on. I read your book, several months ago. It's nice to finally meet you. So thanks for coming on. Thanks for sharing your wisdom with our listeners.

Jonathan Hall:

How can people, just one last time, how can people reach out to you if they're interested in, in getting in contact?

John Arundel:

Just go to bitfield.bitfieldconsulting.com, and you'll find me.

Jonathan Hall:

Perfect.

John Arundel:

Thank you so much for having me.

Jonathan Hall:

Thank you.

John Arundel:

Thanks a lot. See you

Jonathan Hall:

all next time. A big thanks to John for coming on the show.

Shay Nehmad:

Thanks, John.

Jonathan Hall:

I first became aware of John when I was reviewing books for GoBeginners. I had scoured Amazon, and his books weren't there. And the reason is because they're self published. So one of my readers or or watchers, I published on YouTube and, on my blog pointed me to his book. So I checked out his books and they were great.

Jonathan Hall:

And and especially if you're beginner to programming in general, his book for Love

John Arundel:

A Go is a is

Jonathan Hall:

a great book, and he's a fun guy to talk to, very knowledgeable, and has some some great insights to share with us. So thanks, John, for coming on, and thanks for everything you're doing for the Go community in general, and just the programming community even in a larger sense. So really appreciate that. Thanks for taking the time to talk to us today.

Shay Nehmad:

Yeah. We need more friendly people like John in the in the industry. I really recommend checking out

Jonathan Hall:

his,

Shay Nehmad:

Twitter, his LinkedIn and whatever and specifically, you know, drop into bitfieldconsulting.com, grab an article and read it, they're all good. And I'm sitting on the edge of my seat here. Well, actually that's a lie. Jonathan knows that I have a standing desk so I'm standing. But but I'm standing on the on the tip of some of my toes here, waiting for his final, fuzzing vlog.

Shay Nehmad:

3 are already out, so if you haven't got on the high train yet, go read them. And if you, like Jonathan, haven't written a fuzz test yet, go or go write one, and then, you can join us for the final article which is coming soon.

Jonathan Hall:

Very good.

Shay Nehmad:

Thanks a lot, John.

Jonathan Hall:

Talk to you all next week. Have a great week.

Shay Nehmad:

Bye.