059: Is Go over with John Arundel

Dom:

Hello there. It's been a it's been a while, to be frank. I'm very happy to receive John Arundel. So, John, a a friend of the podcast, I I would say that you are you are now number one returning guest so far. So thank you very much for that.

John:

You're very welcome. Thanks for having me back.

Dom:

I think it will be it will be a nice one. So I know that you that you are working on a a new version of of one of your books. So if you want to to start with that, I mean I mean, we we had some discussion about books and AI in in in the past weeks and and whatnot. So, I mean, it's it's always interesting to to hear what what you have to say about that.

John:

Yeah. Of course. Well, I mean, you know, as you'd expect from the fact that I'm all over the media, I've got a new book to promote. So always relentless in self promotion, but you have to be, don't you? No one else is gonna promote me.

John:

So here I am. And thanks very much for facilitating that. So, yeah, some of you listeners might have read a book that I wrote called For the Love of Go. I know you have. Yep.

John:

And, I wrote that several years ago. It was the first Go book that I wrote and self published. And it was pretty bad. Like, the first first time we have a go at anything, it's probably not as good as it could be. And this was definitely true of that.

John:

It was alright, but when I revisited it and thought, they give it a little bit of a polish and an update, I started reading through it thinking, well, this isn't this is not great. First first started, I'd started off trying to introduce people to TDD or guided by tests. It's how I like to phrase it. So start off by having them write a test in Go before they've even written anything in Go, which I think on reflection was probably a mistake. Forgivable mistake maybe, but still didn't work that well because tests in Go are sort of slightly complicated, aren't they?

John:

I mean, you've got to write a function and it's gotta be in a package and it has to take the magical testing t parameter and all sorts of things. So that's a bit too much to load onto people on page one, don't you

Dom:

think? Right.

John:

So if and also, I chose a really bad example, which was the calculator app. So this is, you know, this is the example you see everywhere for TDD, isn't it?

Dom:

Yeah.

John:

But that's bad that's bad already because people have already seen it, so it's boring. Plus, it's awful because it it introduces you to math and floating point. Can you think of anything worse for beginning programmers? Like, yeah, let's grapple with floating point. Why not?

John:

That that would be straightforward. Nothing complicated about that. So I thought I need to chop out all of that stuff. And I thought where it actually started to get good was a little way into the book where it starts talking about happy fun books, my imaginary bookstore, where we need to keep track of all the interesting books that we sell, and we need to have a catalog, and we need to be able to sell them and edit the book details and so forth. This is a nice little thing to have a a write an app about in Go.

John:

So this is good. Let's lean into that. But I need to introduce a few things before we can even do that. Right? You know, before you can even say, here's a book catalog or something.

John:

It's like, we actually need to talk about what is even a function or what is even a package. Right?

Dom:

Mhmm.

John:

You know? I I realized I I thought I was starting right at the beginning, but it turns out I needed to start way before that actually. I'm sure you found the same thing that when you try to teach something to someone, you realize there's a whole bunch of implicit knowledge that we have that we just don't even know we have. Right?

Dom:

Yeah. Yeah. That that's a tough one. For for me, I I I chose to specifically says that, you know, if you if you're going to read my book, and and and it was, like, six, seven years ago, if you're going to read this book, ensure that you know what, you know, what the typical web response and request is. So at least I I've put the bar there.

Dom:

So if if if the reader never built a website or a web application in their life, the the book is is just not for them. So because for me, it it was it was difficult to to exactly exactly like you said, how can you know where to put that bar? Because there will there will always be people that that needs to, you know, to to start before that bar or if I

John:

can Yeah. Say that makes perfect sense because every book has to start somewhere. And if you wanna write an advanced book, you can't really start by teaching people, you know, you can't start by teaching someone English, for example. You're gonna sort of just you know, there there have to be some prerequisites. But I thought, let's see how, you know, how much we can do to really tackle people who are totally new to programming.

John:

And the one complaint everybody has about programming books is that they just assume too much prior knowledge. Right?

Dom:

Mhmm.

John:

So I thought, let let's try not to do that. I've lots of experience of teaching people programming and go and know the sort of things that they tend not to be familiar with. So I thought, let's let's talk about those. Let's say what even is a function and why would you have one? What does it look like?

John:

What does it mean to call a function? What is data? What is a data type? What are values? You know?

John:

Yeah. This be very very basic things for some people listening, but for other people listening, they might be like, yeah, what is data? People keep saying that word, but I have no idea what they mean. I really appreciate someone actually kindly and gently explaining it without patronizing me. That's what I've tried to do.

John:

But a funny thing happened writing this book, and I really let you know this is turning into a whole new book. This is not an update to for the for the love of Go now. This is something else. And as I was writing it, I'm writing the book app, and I say, let's be able to edit things like the number of copies. Let's be able to list all the books.

John:

You know? Let's look up a particular book by ID. Oh, we need to introduce the idea of IDs. Yeah. You know, what are IDs and why do you need them?

John:

This kind of thing. So what what I found was really nice is that all of these useful concepts just fall out naturally from trying to write some real program. You know how it is when people try to write explanatory books. They have a big list of concepts that they wanna get across. I wanna talk about go routines.

John:

I wanna talk about strings.

Dom:

Yeah.

John:

And they think, what program could I make up that makes you need to use that thing so that we can talk about it? And this is really difficult, isn't it? Choosing good examples is just the hardest thing. I felt really bad for my friend John Bodner when he was writing Learning Go, and I helped him out a bit with some proofreading. And, he was saying that, you know, you've got to mention everything that's in Go.

John:

That's what the book's about. Yeah. And that's actually a lot. Go is a pretty small language, relatively speaking, but relatively is doing a lot of work there. Still a lot to talk about.

John:

And he he he he has to think of an example for every single thing you can imagine in the Go spec, you know. That's tough. Yeah. I made my life easy. I just said, let's just have one program.

John:

And, you know, whatever comes up in that program, fine. We'll talk about it. But we won't ham handedly introduce stuff just so that we can talk about that concept. Because if you don't need it in real programs, who cares? Right?

John:

Yeah. No point talking about it just because it exists.

Dom:

That's interesting. I mean, it's and and also well, I I don't know, but let's speculate a little bit here. There might be more programmers that are that are starting up that that were not by trade or that just just because they they now can build some things with with the AI and whatnot. So they they there might be a lot of people that need to understand the basics these days. I'm I'm talking about maybe power user here in in companies that now can probably be a are able to build internal tools in in their own company.

Dom:

So, I mean, this this is a lot of people we are talking about.

John:

Absolutely right. So I'm certainly not saying you shouldn't learn about things. I'm just saying, it's actually turns out to be really helpful if they just kind of emerge organically while you're trying to solve some user problem, you know, thinking about it from that direction, thinking, we wanna write a program that actually does something in the real world. Mhmm. If that means we need to learn about computer science concepts, great.

John:

But that's not necessarily why we're here. We just wanna get something done. Go is very pragmatic in that way, isn't it? So I think it fits. But I started to get myself into deeper water.

John:

I realized things are getting a bit difficult here because I kind of want to make the book catalog. I want to write methods on the catalog, so therefore now that needs to become an object, so we need to talk about that. Now I need pointer methods. So, woah, scratch. We need to talk about pointers.

John:

Okay. Deep breath. You know? So here we go. I So tackle this.

John:

I find this useful because, of course, people need to know about pointers.

Dom:

Right.

John:

So it's good that they came up. And then I thought, gosh, you know, actually, I want to do a little API server so that people can request booking information over HTTP and things like this. So now, of course, we're dealing with concurrency because servers are concurrent. They just are. So we need to talk about concurrency.

John:

And I thought, gosh, you know, we have we have data races here because we have HTTP clients making multiple requests concurrently altering this book catalog and other people are requesting them. This is gonna go wrong. So we need to think about we need to say what is a data race, you know. We need to explain that what is a mutex and how would you use a mutex to prevent this sort of stuff. And I thought, is this getting too computer science y?

John:

You know, because this is a beginner's book. And I'm talking about all this distributed system stuff and getting a bit worried. But I thought, no, it's emerging naturally. Let's let's just cling on to that idea. Like, we're not introducing these for the fun of talking about them, although it is fun.

John:

But people if people write Go programs, they're probably gonna write servers and clients, aren't they? And so they're gonna deal with concurrency and so they have data races. What do you think? Should we just not mention this stuff or, you know I think we have to talk about it. Right?

Dom:

Yeah. I believe so. At some point, you yeah. They they will encounter that for sure. My my friend was was showing me a a a c program the other day, you know, speaking of of Pointer.

Dom:

Go has made them so how can I say that? Approachable, if I if I can say that, compare compare to a little bit of c I I was looking at. But even even though c was was looking pretty pretty straightforward, I was I had I I hadn't seen c in a long time. It it was a it was a it was an app to play to play music on a on a board. So he want he wants to build himself a an m p three player, if you if you will, but for not for m p three, but whatever.

Dom:

I mean and and and, you know, you you you have to read. You you have to you have to decode the the sample and and play the sample and and things like that, the the sound sample. There there's a lot of pointer involved, and I I was I was thinking to myself, wow. Cool. Really, really made made that very simple.

John:

Yeah. And it's a sort of a gateway drug into all these important concepts, isn't it? Because, you know, stuff lives in memory. You you can't avoid that. So if you have memory, you have memory addresses equals pointers.

John:

Now you have problems with pointers. Yeah. So you need you know, you can't understand a pointer if you don't know what memory is and if you, you know, can't understand what memory is unless you know something about how computers work. That's okay. I love learning about that stuff.

John:

I'm sure all your listeners do too. It is fun and important to know, and it's the type of stuff that people generally don't learn in any formal way. It's that they just kinda pick up what they need to know on the street or behind the bike sheds.

Dom:

Right.

John:

Which is fine, but I thought it's nice to actually be able to talk about it and say, let's just surface what this stuff is actually about. So I really enjoyed writing that part. And I found by the time I sort of got to the natural end of the book, you know, we've basically entered the exciting dangerous world of distributed systems where nothing works properly, everything can go wrong, we have data races everywhere. We need to understand about why concurrent programs go wrong, which they do all the time, and all that stuff. So, you know, this book sort of expanded in both directions.

John:

It went way added a whole load of stuff to the beginning to explain lots of fundamental things, which actually I'd skipped over before. And then it ended up taking me much deeper into the world of CS concepts and modern distributed systems and things than I expected it to. So that was weird. That's why I ended up calling it the deeper love of Go. So I just thought, by the time you get to the end of this, actually, you know, you've gone way beyond what most introductory programming books teach you about.

Dom:

Nice. Yeah. That that seems to be pretty complete. I mean, well, yeah, the this distributed system is is kind of a a beast in itself, so I'm I'm surprised that you were able to, you know, to pack that into the into the book itself. It's it's pretty good.

John:

Yeah. Well, I don't know a huge amount about it myself. But, I mean, this is one of the things about writing, isn't it? So that it forces you to go and read up on it thinking, I don't wanna make an idiot of myself here. You can judge whether or not I've succeeded.

Dom:

Yeah. I'm sure I'm sure it's good. I mean, you you you have always such a good review everywhere.

John:

Well, I did hear one lovely thing which someone said, which was that they they were new to programming, and they bought about 10 or a dozen introductory programming books and got stuck on all of them a few pages in. And when they read my book, they said, actually, it unlocked something. You know? I actually thought, wow. I'm understanding this.

John:

This is great. So they they felt, you know, energized and empowered and will now go and learn those of stuff themselves, which is great.

Dom:

Yeah.

John:

Really pleased to hear that.

Dom:

Yeah. Yeah. I I I think it's your it's your your tone and the way that you explain things. You know? It's it's the the pace, if I if I can say.

Dom:

I don't know if we can say pace when we are reading, but but, yeah, I think for for me, when I read read a couple of your of your things, I I said, well, this this is this is just this is just easily understandable. What what happens to your Rust side quest? I I don't know. But where where are you with that?

John:

Has the side quest taken over and become the main quest? Yeah.

Dom:

Exactly.

John:

But this this is a good point because, you know, if I am good at teaching things like Go, it's because I know exactly what it's like to feel stuck.

Dom:

Mhmm.

John:

To feel dumb because you're not managing to understand something somehow, and you're just sitting there feeling bad thinking, is it just me? Am I uniquely dumb? I'm the only person in the world who doesn't get this. Right? Everybody else just seems so happy about it.

John:

So I know exactly what that feels like. And I think that sort of makes me know what to say or how how not to, you know it's no good just saying to people, just think a bit harder. That doesn't help. Yeah. You you have to just patiently and gently find different ways to explain it, different analogies, different pictures, different ideas.

John:

Sooner or later, you'll find the thing that unlocks it for them. And then, of course, everything's very trivial. Once you understand it, it's like, of course, that's obvious. How could you not know that? So I've I recently had that experience with Rust, so definitely feeling very dumb.

John:

I'm sure literally everybody in the entire world has tried to learn Rust, has felt this at some point Yeah. If not every point. Because Rust is a lot as we've said previously. But, you know, you don't have to be a genius to understand it any more than you do with Go or anything else. Just patience and not not expecting yourself to be brilliant right away.

John:

Right? Yeah. Everything takes time.

Dom:

Yes. Sure. But you you also need to to have the the proper the the proper use case for for the language. That that that's to me and may maybe it's my excuse. But whenever I I start doing Rust, I I I just it's just not what I I I it it it's not the type of program that that I need to build at the moment.

Dom:

Yeah. So I I would love to system programming is is pretty interesting to me. But, yeah, you you you know, the amount of of energy that you you need to invest, and you still need to to have some money at at some point, so you need to work Yeah. As well. You're totally right.

Dom:

Yeah. It's it's a tough one. But Go, I mean, you mentioned something. So you you mentioned is is Go is over. So that's I I I thought you were you were mentioning that because of your Rust experience now.

Dom:

I'm I'm I'm curious to to to hear what, you know, what is there exactly in the in that that piece.

John:

Yeah. Breaking news, people. Go is over. You heard it here first. No.

John:

So, you know, I I think we said last time, didn't we, that a few years ago, I noticed that, you know, sales of my Go books are falling off slightly, new inquiries about Go mentoring starting to diminish a little bit. Still pretty strong, but, you know, not not as high as it had been a couple of years ago. And I thought, gosh. You know, this is silly of me because I've been through this cycle so many times with different tech. But, you know, things things just go through a life cycle, don't they?

John:

Everything something is new, and then it's exciting and cool, and then it's stable and mature, and then it's boring and old fashioned, and then it's just something that keeps expensive consultants in business. And then at some point, it's kind of over because people just stop thinking about it. And practically everything I've ever learned has been through that cycle and has now disappeared. So, of course, for stuff that you're doing just for fun or recreationally, it really doesn't matter. Even if you're the only person in the world using that language or whatever, totally fine.

John:

But if it's something that you're trying to make a business out of or make a career out of, you do need to kind of pay attention to this, don't don't you? I think you'd you need to sort of keep one eye open just thinking I'm riding the wave right now and everything's great, but what happens when this is over? What's my next thing? You You need know? You need to kind of start ramping up a little bit before that because what you don't wanna do is have the wave recede and leave you lying on the beach thinking, I've got nothing.

John:

Yeah. You know, should I start with rust? Okay. Now I need several years to get good at rust. So that's, you know so I thought maybe this will be the next big thing.

John:

Let's have a look into it. So I start learning Rust. Several years later, here I am still a beginner. And I I suspect we all are on some level, but that's okay. And in fact, I and I was thinking at the time, you know, is this the sign that interest is in Go is declining?

John:

And maybe I'm not seeing quite so many articles on Hacker News or on Reddit and places like this. Perhaps it's not got as much mind share as it used to have. But then it kinda bounced back a little bit, do you think? What have you seen?

Dom:

Yes. Yeah. I've I personally, I've I've seen a a little bit of spike lately. Let's say in the last six six months, maybe. I don't know.

John:

Do you think it's people trying Rust? Think, this is awful. Let's go back to Go.

Dom:

No. I don't think so. I I think it's it's it's mostly it's mostly dot net people, JavaScript people. So people that want to probably get something a little bit more stable and calm. This this this is what I'm I'm reading, and I I I was not seeing that much before, but but yeah.

Dom:

Now I don't know. It's it seems like and and there there's this this surge of AI tool that that appears. I don't know if you saw, but on the Go Reddit, they had to create this this sticky sticky thread to prevent people from, you know, flooding the the homepage and and whatnot with with, you know, small CLI that, oh, look. I I built CLI to do x. But, you know, in fact, they they they they were just they they they were they were just built from from the AI.

Dom:

And and I know because I I I was starting to comment on those at first because, you know, I I like to be active on on Reddit. Yeah. And I was like, oh, you know, you don't have any test, and and you you you know, the code is X y and z. And the person just deleted their their post, and they reposted five minutes after. And a couple of days after, I I've seen someone replying on on a thread that they they said something like, well, I would I would comment, but I comment on your other post that you just deleted.

Dom:

So I was like, well, there's a problem. So the the Reddit the people that manage the the the go Reddit, they they saw that and they create that. So was that the the spike that I was seeing? You know? Was was that just because now people are creating everything easily with with vibe coding and and the the AI in general?

Dom:

Because I've I've tested that myself because I was starting to I will be frank. I was start starting to to fear a little bit. You know, you you see the the phrase, well, if you if you don't embark into the train, well, you might have difficulties later and things like that. But I I so I I tried it myself. And it's true.

Dom:

It's true that you can now build things. So was that was that the spike that I've seen? You know, it's just some AI that was creating some CLI because it's it's it's pretty pretty nice to create CLI in Go because you can you can deploy them in in all sorts of OS and things like that by default. Yeah. So I I'm I'm not sure to to to I'm not sure I'm I'm able to answer your question.

Dom:

I thought I I've seen some spike, but I'm not sure it's legitimate.

John:

Yeah. I don't know. I mean, I think you're right. I think that's part of it. Certainly, AI means it's there's a there's a I mean, anybody could learn to programming.

John:

Anybody could learn to program, but in practice, everybody does not. There's some barrier that not everybody can get over just to taking your first steps. Right? Just writing your first hello world or even installing Go or something. And I think AI is getting a lot of people over that barrier.

John:

You know, it's making it way easier for them to just build something and post it to Reddit. I don't know why people really want to do that, but they do. And this this is causing a problem for Reddit moderators and a few other people. I mean, maybe you and me too. I mean, you're a wonderful educator as people who have your GoCourse will know.

John:

And it's great that you take the time to help people out and give code review and feedback and things on social media, but it must be a bit annoying for you when you realize you're actually helping Claude.

Dom:

Oh,

John:

yeah. I mean, he doesn't need anyone's help. Right?

Dom:

Yeah. But I I I think it's a little bit more than just jumping. It's it's how can I say that? So there's people that are now creating project and product that probably shouldn't have. So now now it's it's kind of instead of having one or two really decent choice, you have 30, but, you know, 22 of them will will close on in the next two weeks.

Dom:

So it's it's it's not just, you know, small CLI that are posted on Reddit. This this is also why I'm not I'm not really going to social media anymore. And it's it's even making me asking about my consulting. Yeah. Yeah.

Dom:

The mediocrity now is is accepted everywhere, and I have so much difficulties with that.

John:

AI Don't you think if there's more bad software, people will need consultants more? I mean, I hope so.

Dom:

Well, the the thing that I've seen so far is that the the bar to accept a delivery deliverable is very low. And the quicker you can do that and you can do that with AI, that's not a problem. It it just add to work. But when when when I have tested that so I have I've tested Cloud Code, which is a terminal based thing that you just you basically, you you dress out your problem and and it it goes it's an agentic thing. So it's a little bit like a cursor in in the other one that GitHub bought or Microsoft bought.

John:

I don't I don't go. I don't I wish they hadn't chosen the name agents. I mean, that just makes me think of The Matrix. Because they're the bad guys, aren't they?

Dom:

Well, to I I cannot I cannot use that. And I I and this is where I explained my mediocrity word that I use. So it it it I'm sorry, but it's not good code. And I would not want to be in a team that produce that kind of code. I don't want to maintain I don't want to maintain code that that they, you know, generates because it it mostly not good.

Dom:

And I I understand. And I'm coming from a a a person or in an industry that build software as a service and with the mantra or or the the mentality of, well, just build it, and you will you will learn about your problem. You will learn about use case of your users and once you start getting customers and and whatnot. But I'm sorry, but what what what is currently being built with what we have at the moment is not something that I want to be part of. I I I have a huge difficulties embarking into this, to be frank.

Dom:

Mhmm. Even so that we are starting a a service business. I'm I'm I'm taking a little bit step down from my main output as a business will not be code, but it will be straight up service built on top of a of of a software that I'm building. But but, yeah, it it it really broke something for me.

John:

That's a shame. Yeah. I totally understand what you're saying. And I think maybe everybody's grappling with this and it's just how you choose to decide you're going to feel about it. And I think I've decided that I'm going

Dom:

to feel

John:

optimistic, reasoning this is going to bring lots of people into the world of programming, which is a fun world. And, that if that means more people learning, that maybe means more demand for my books or mentoring or whatever. But even if not, right, that's okay. You know? I'll get by.

John:

I I just think it's kinda nice if it's introducing a whole new generation of people to getting into this, which maybe they wouldn't have got into if it wasn't for this. But I don't know.

Dom:

Well, I'm I'm not against that. It's just that I would I would still like to know that we do enforce some kind of quality because at the end of the day, the software that we are building sometimes is crucial or is important, and I I would not want to to see my my, you know, my bank institution losing my money because because the AI did something and things and I know I'm exaggerating here. I'm just saying that we don't really know, and and the way that that the the general reactions or at least what I'm seeing is is a little bit scary to me.

John:

Yeah. Yeah. I feel that way too. I mean, this we should certainly acknowledge, you know, it's not like software used to be perfect when it was written by humans, and now it sucks because it was written by Claude. It it probably sucks about the same amount.

John:

Software has always been terrible. It's just suddenly there's a great deal more of it, it's far cheaper to crank it out, isn't it? Because, you know, like to your point about reviewing code in Teams, is bad software produced by AI any worse than bad software produced by humans? No. It's just much cheaper.

Dom:

Well, it's much cheaper, but the amount of thing that that that the AI is is outputting is overwhelming. So now you don't even you don't even want to do any kind of review because in instead of reflecting and thinking about the problem and things like that, now you are receiving, like, a a gazillion of of PRs, and you don't even the the you know, the agentic model says that, well, you know, build build an agent to to now review the thing and now build build an agent to that will act like the the product manager and things. I I'm I'm just like, ugh. Really? Is is that is that where we are going with this?

John:

Yeah. I mean, you could say it sort of depends which part of the job you enjoy. You know, if you're working software engineer right now, you're probably spending a lot more of your time reviewing and fixing and re prompting AIs to say, no, go back and have another try. You know, I see what you're going for, but this program just doesn't work at all. Yeah.

John:

And maybe they would have done that previously with human juniors or something. And I think it's it's a lot easier to teach humans, isn't it? I mean, you keep telling Claude stuff and he just doesn't seem to get it somehow. Not sure what's wrong. But if, you know but the but if the part of the job that appealed to you was typing out functions and Go files and things, of course, now you won't get much of a chance to do that anymore, which is a shame.

John:

You probably your job is gonna be more about reviewing and fixing and guiding other people's code and cudging it into some sort of decent architecture. Some people enjoy that.

Dom:

Yeah. What what I enjoy you know, speaking speaking of junior, I I was I was enjoying hiring a junior, training a person in, you know, one, two, three years, and seeing seeing them, you know, explode and beat me at some point. That

John:

That is fun.

Dom:

That was what I will was liking. Now, you know, if juniors are to to start using the AI, I'm I'm they will they will learn. They will learn a couple of things here and there, but I don't know. The the training data is is not what we could say probably not the best thing to to to be trained on, and we we see we see that a lot. I I'm I'm not complaining.

Dom:

I'm I'm just a little bit concerned. And and to be frank, I think there's a little bit way too much noise versus the signal at the at this point. And and people, you know, I I I'm I can't wait for the the return of the the pendulum or the I don't know how to to say that in English, but you you what what you were saying, you know yeah. I I I'm a little bit yeah. I I I I'm not negative or anything, but it's for me at this at this moment with with the kind of discussion that I had with with some clients, I I I've seen clients having all AI now to do sales rep.

Dom:

You know, the the sales department is is really affect affected at the moment. And when I'm receiving a phone now, the first thing that I that I'm I'm wondering is that, you know, is is that a human? You know, am I am I I I don't know. I I it's not like I'm a I'm an old fart that that don't like technologies enhancement or advancing, but and things like that. But I'm I'm just a little bit concerned that with the state of the world at the moment, I don't think that we are ready for AI.

John:

Yes. Hard to talk about this stuff, really, isn't it, without sounding a bit like old man yells at cloud. Yeah. And I definitely relate to that. But I just think, you know, it's as you say, it's everything goes in circles, or if it's a pendulum, it's a simple harmonic oscillator.

John:

So things you know, where where we are now is a very weird and transitional time, and things are probably gonna shake out differently to what we imagine. Who knows what the landscape will look like Yeah. When it when it all lands right. This is a very strange time, but I I sort of feel like, you know, programming is not gonna go away as an activity. People are gonna continue to do it.

John:

Even if there was zero economic value to it, which I doubt. I think people would still do it because it's fun. Yeah. That's why I do it. So that's alright.

John:

And, you know, it's alright to do things just for fun. And maybe in your day job, you know, you'll be sort of architecting and prompting AIs to do the grunt work of actually building stuff. And then when you go home, you you build old fashioned organic handmade software from scratch, you know, because you enjoy the craft. I think that's okay.

Dom:

Oh, yeah. Oh, yeah. Probably. Probably. I mean, it's a yeah.

Dom:

For for people that want to do that. Yeah. Yeah. I guess it's fine.

John:

And and to return to our earlier point, I wonder if that software will be in Go or not. Because one thing I've seen is that, you know, Go seems to be well suited to being generated by the yard by AIs because it's a fairly syntactically simple language. Yeah. I I don't know about this really. I mean, I I've messed around with AI tools a little bit or things like, you know, just refactor this Go test or rewrite this Rust program or explain this compiler error and fix it.

John:

That kind of thing is helpful. Like, when you you run into something that you just don't even understand what the problem is, sometimes the AI can explain it to you, and you're like, oh, I get it now. You know? That is really helpful.

Dom:

Yeah. Oh, yeah. Totally. Yeah.

John:

So I wonder if and as you say, maybe this is partly to do with the fact that people are interested in Go again. But, you know, so I suppose my question to myself was have we reached peak Go? I'm not sure if that's true. Or even if it's a problem if we have. Right?

John:

I mean, we we know this is inevitable and there's generally a long phase in the life cycle of any technology where it's just, you know, people don't post on Hacker News about it anymore because it's just it's done. It works. They know how to use it. No one has strong opinions about it anymore because they're just like, we're so done with talking about that. And they wanna argue about the next thing, of course, don't they?

Dom:

Yeah. It's possible. It's possible. I'll although there's not as much job offering that I'm seeing that I was seeing previously, but, again, I'm I'm not so much on social networks anymore.

John:

Yeah. And job we'd have to recognize job offers are really lagging indicator, aren't they? I mean, companies are pretty conservative. I don't know anyone hiring Zig developers right now. You know?

John:

But I'm sure in a few years, they will be if Yeah. It reaches that stage that everybody thinks, wow. This is a real thing. It's not somebody's toy project anymore. This is actually happening.

John:

Go for a long time, Go was the new thing. You know? People considered it as a proposal. You know? It's like, yeah.

John:

I like your language. I see what you're trying to do. Here's 12 things you got wrong. You know, here's the 100 things you need to do to fix Go and make it a decent language that I would consider using. After a few years, those people just kinda found themselves by the side of the road.

John:

Everybody else had gone past on the Go bus, and they were looking after it thinking, hey, what about me? Yeah. And they're like, oh, well, you said Go wasn't for you unless it had, you know, x feature, so too bad. Sorry. You know, you said you wouldn't use a language without generics, so bad luck.

John:

Then they sneakily added generics to go. Those people must have been kicking themselves thinking if only I'd stuck with it. There you go. Yeah. But surely, you know, if if a language is not in the growth phase anymore, that's sort of okay.

John:

It doesn't mean that if you've invested years and years of your life in getting really good at Go, that that investment is suddenly worthless. I mean, it's it's very worthful. Right? You know?

Dom:

Oh, it is. It is.

John:

That has a lot of value. And will for years and years to come. I mean, can you imagine a time when there will be no running Go code anywhere in the world? I mean, not in my lifetime. Very little of that left perhaps, but, you know, you know what I mean?

John:

But certainly several decades we're talking here, like, you know, Go is just so embedded in the fabric of the cloud and Internet and everything else. It's it's gonna be with us, you know, until long after the apocalypse, probably. What what So that's why so so don't panic on that score, I

Dom:

guess, more or Sure. One one aspect I'm I'm wondering though is that, you know, Go has this strong, point for for itself that you are building a man maintainable program for for a longer time. And now outputting code is so is is getting so cheap that I'm wondering if, you know, if if new greenfield projects will will be built. Let's say let's say a a team decide to adopt the they will they will probably not write most of the code. So, I mean, I I'm I'm wondering if the the throwaway aspect of of the code that is generated now is is so high that, you know, it it does not cost much to Monday, you you tell it to build you x, and if if anything else, Wednesday, if if you if something is wrong, you just restart from scratch, and now you have a totally new project.

Dom:

So software maintenance will will change, in my opinion.

John:

Yeah. I'm sure that's true. And I wonder whether, you know, for for myself, being in a sort of a tiny cottage business making homemade Go books and teaching Go over Zoom, selfishly perhaps, you know, my concern was, am I gonna be out of business? Like, is people just not gonna be interested in learning Go anymore? And that doesn't seem to be true.

John:

I mean, I've got as much teaching work as I can reasonably fit in and, you know, my books still sell. Obviously, that's why I'm fabulously wealthy and living in a solid gold house. Like all self published tech

Dom:

Oh, yeah. True.

John:

But my my thinking was, you know, I think I'd like a little escape hatch into the future. I I like learning stuff anyway, as you know, and let's pick something that might be valuable in the future, looks increasingly like it might be. So that's why I got into Rust. And and I thought, you know, this is great because as we've discussed before, learning any other language can make you think differently about the way you write stuff in Go, which has gotta be useful. And Rust, particularly, I think because it's so focused on things like safety and preventing correctness problems and dealing with issues in concurrent programs, which everybody has.

John:

So this is this is super useful, and I thought every every other Go programmer will feel the same as me. Right? All I have to do is introduce them to Rust, and they'll be like, yeah. This is great. I'm gonna learn Rust alongside my Go knowledge.

John:

And between those two languages, I'm covering pretty much all the bases. Boy, was I wrong about that. No Go programmer wants to learn Rust because the two classes of reactions I get are, one, I don't feel I really understand Go yet. Last thing I wanna do is confuse myself by trying to learn another language at the same time, and I get that. Or people who feel they know Go really, really well, so they're just like, why do I need Rust then?

John:

Right. You know, I can do everything with Go. So I'm thinking, I really can't win with these people. But, you know, that's okay. I think some people feel they don't need to look at Rust, and it's totally fine.

John:

Go will be around forever, and that is true. Other people have tried to look at it or experimented a bit and thought, gosh, this is hard. I must have the wrong type of brain or there's something defective about my brain that means I can't understand it. All these angle brackets making my eyes go funny, and I get that too. And I've I've certainly felt it.

John:

Yeah. But I think of the people, you know, there's a a very small group of people who kind of have a working knowledge of both languages, and I think they're pretty well set up. Because we know Rust is growing hugely and everybody's very excited about it, and you see it all over. Socials, that's not surprising because big money is coming into it. You know?

John:

It's key to AWS and Microsoft and all of these big businesses, putting Rust into everything. Rust has been in the Linux kernel for a long time. It's now a core part of Windows. You know? It really is getting everywhere.

John:

So and there are lots and lots of Rust jobs, all senior. Yeah. Apparently, this is what the survey say is. I don't know how you get a job as a junior Rust programmer, but if you do, that's great. However, you know, I think we have to recognize people who've got limited size heads.

John:

You know, I certainly do. There's only room for so much stuff in there.

Dom:

Yeah.

John:

My dad used to say hated to learn somebody's phone number because if he did, he forgot another phone number that he knew. And I I feel the same about tech stuff. You know, if I learn some fact about Rust, I probably forgot something important about Go. Never mind. I can always relearn it.

Dom:

Well yeah. And and it it, yeah, it boils down to what I was saying at first as well. If you don't have a use case for Rust, it's you know, you you can learn it. But if you if you do not practice or you write you don't write it at some point in production environment and things like that. I mean, I I I think this might be where the the gap is for Go engineers.

Dom:

So maybe, you know, maybe they they they just don't see themselves transitioning to a RAS position or things like that. So, I mean, what Yeah. Yeah.

John:

That's totally fine. I mean, it's it's not gonna be for everybody. I think it's a bit like know, maybe it's a bit like sex or something. I mean, I can say that right. You know, this is a PG rated

Dom:

podcast. Yeah.

John:

You know, some people are not interested in sex. Other people say, yeah, it's great. You know, you should totally be doing it. And they're like, it's not for me. And that's fine.

John:

Right? You know? I mean, we we might feel they're missing out on something fun, but they're probably doing other fun stuff, you know, that we don't know about. So that's okay. Same with Rust, you know, not not exactly like sex.

John:

There are some important differences. But fun and interesting, but not for everybody. And I think if if something like that is for you, you'll probably find your way to it at some point. Right? You know, even if it's not you're not into it right now or it's not solving any problem you have or anything like that, maybe you'll find your way to it by a different route in the future or maybe you won't.

John:

It's all good.

Dom:

Oh, yeah. Totally. Totally. So have have you have you seen yourself going more toward Rust these days when you when you are needing to build something for yourself? Let's say I don't know.

Dom:

Let's say let's say you need a small tool internally or things like that. Let's let's pick, you know, one one that I I know that you built on top of my head is is something, I think, to calculate the your book sales or or things like that. So have you written that in Go, or it was in Rust?

John:

Yes. So I I did did write a little sales analyzer just to see how few books I really sell and the truth will horrify you. But, you know, that I I wrote that in Go and I thought, yeah, this is fine. And then when I was learning Rust, I thought, okay, this is a good real program that I actually need. It solves a real problem.

John:

Let's try doing this in Rust.

Dom:

Okay.

John:

See how painful the experience is. Was somewhat painful, you know, like, unnecessary dental surgery. But I I learned a lot from it, obviously, and, of course, that's why it's so useful. You can solve toy problem from tutorials all day long, and you don't really learn anything useful. Yeah.

John:

Because as soon as you try and write a real program, it all comes to pieces, doesn't it? You're like, I have no idea what to do. So it was good exercise for that reason. Unfortunately, the numbers came out as low from the Rust program as they did from the Go program. Can't blame Rust for that.

John:

But, yeah, for for for new programs that I'm writing now, I'm mostly writing them in Rust just because it's new to me, you know. Yeah. And it's fun. And I need to do some serious learning as well, so that helps. But I I most of my teaching work is Go, and so I'm always working on projects with students and, you know, helping write code with them and reviewing code and fixing code and tests and things.

John:

And that's still super fun. I really enjoy that. So I think I get my GoFix. You know?

Dom:

Yeah. Yeah. Oh, that's pretty it's pretty great. I'm I'm I'm more, like, interested in in I I've been following Rocklang for a long time, Richard Feldman, which which was using Elm. I I'm I'm more in that in that vein myself.

Dom:

Even even though Rust seems to be pretty nice in in terms of, you know, functional programming and things like that, with like I was saying earlier, with the kind of work that I do, which is mostly mostly always involving a web server and a browser, which which is sad, to be to be frank at the end of the day, I would really enjoy myself doing other other kind of program at some point. I think I think I've reached the right or I've I've earned the right to to, to to try and and and do something else, but, I mean, it's it's difficult.

John:

Yeah. I mean, almost all software is boring line of business applications, isn't it? CrowdApps Yeah. CRMs and things. But that's okay.

John:

You know? There's there's always interesting problems to solve within those because every business is uniquely dysfunctional, and so its software needs to match.

Dom:

Yeah. But I'm I'm I'm more I'm more complaining about having a browser in a in a web server. That that that is mostly

John:

Browsers are the worst.

Dom:

Yeah. So that that's mostly what I'm talking about. I I I would love to to go more low level and things like that. It's it's it's pretty it's pretty difficult, to be frank, when you have, like, I don't know, twenty five years of of web back end and front end experience. You cannot you cannot call yourself and say, oh, you know what?

Dom:

I I will build I will build the next driver in in the the link Linux kernel. No problem. Give me that. You know? Yeah.

Dom:

I can I cannot do that? So

John:

No. But, I mean, I'm always recommending to students, myself, you know, that to sort of try and write some kind of program that you never wrote before.

Dom:

Mhmm.

John:

You know, if you never wrote a game, you know, try doing that. If you never did some kind of concurrent server, write that. Or if you didn't do something in a functional style, try something like that. Just to give yourself a new challenge, and that certainly is powerful. But from a business's point of view, we've got to think about innovation tokens.

John:

Right? You know, this is a thing the useful way of thinking about your tech stack, isn't it? To say, you know, we need to mitigate risk a little bit. Like, we can try we can try some new things, but for the bulk of what we're doing, we probably have to go with stuff that's pretty well proven and everybody else is using it and, you know, nobody's gonna get fired for choosing Go at this point, which makes perfect sense. And probably not Rust either, but if you said, yeah, I wanna do this in Elm or Elixir or something or Zig maybe, Managers might think twice

Dom:

about it. Sure.

John:

Fair enough.

Dom:

I'm I'm I'm lucky enough to not be part of of those organizations. So, I mean, when I when I do a technical choice, it's it's mostly only for me or very small client of mine. So, I mean but it it might also explain a little bit is go is over. Maybe the fact that it's so niche in in the, you know, the back end server, the the cloud computing, and things like that.

John:

The It's a big niche.

Dom:

Well yeah. Yeah. I know. But, you know, companies that that had to to adopt it probably adopted it yet already. Yeah.

Dom:

So that might explain a little bit why we are not seeing most, you know, new thing. Because at the end of the day, know, most mostly mostly most program is already built, if I can say that. So, yeah, it's a it's a tough one.

John:

Yeah. I think that's right. And, you know, it's like any software. How often have you looked at some dependency that you were thinking about using? And you look at the GitHub and you say, oh, there's been no commits on this for three or four years.

John:

Mhmm. Does that mean it's abandoned? You know? Should I stay away from this because it's just not gonna get any maintenance anymore? Or is it just maybe that it's done?

John:

You know, maybe it's finished. It works. There are no commits needed. If you see 20 commits every day, that probably means it's either changing very rapidly, too rapidly for you to rely on it, or there are tons and tons of bugs that need fixing for some reason. So it's not clear cut, is it?

Dom:

Oh, yeah. Yeah. I I I don't understand why people have have difficulties accepting that a project or a library is is done, and it's it's it's safe, it's solid, and there there will only be, you know, security patches from now on. I'm I'm totally good with that, either way.

John:

Yeah. That that's Go, isn't it? Safe and solid. Yeah. And that's why you don't see people writing excited posts anymore on social media saying, hey, we rewrote our app in Go.

John:

You know? Because to your point, they've already done it a long time ago. And now they've moved on to something else or they're perfectly happy with Go. Either way, they're not going to blog about it. That's okay.

John:

And so we should be careful about this, shouldn't we? The the fact that we're not constantly hearing stuff about Go in the blogosphere doesn't mean that Go is declining or it's not a good choice or anything like that. Probably means the opposite, doesn't it?

Dom:

Right. Yeah.

John:

At some point, Go really will be over over, and it'll be like, you know, you'd be better advised to put your time into learning something else, but that's certainly not true today.

Dom:

When they launch

John:

Gosh gosh. I hope not because I just published a new book. Right? I desperately need people to still need to buy this.

Dom:

Yeah. Totally. When they launch, two dot zero, I think it will be the the end.

John:

Yeah. And that's a that's a really good point because, you know, we know there's not gonna be a go to. They've explicitly said that, and I don't think you know, they've been very careful not to make the mistake that a bunch of other languages made, you know, which was well, I used to work for a computer company, and they never talked about their upcoming product

Dom:

Right.

John:

Publicly, which I thought was weird because that's what we were working on. It's exciting. People want to know. And they said, look, it's very obvious. If you announce that you're launching a new computer next summer, who's gonna buy the current one?

John:

Nobody. Yeah. So I thought, gosh, that makes sense. And it's the same with Go, you know. If they said, we're gonna do a Go two at some point, everybody would be like, oh, well, we'll just wait for that.

John:

And, of course, that that then opens the floodgates for everybody to say, now I can get in that little change that I wanted. And, of course, there are a 100,000,000 of those little changes, and we'd end up with something which is nothing like Go. That's perfectly alright, you know. But there will be some language in the future informed by what everybody's learned from doing Go. It just won't be anything like Go.

John:

Yeah. And thank goodness because I I think it is done. I think the language is finished and I think it's really great. Not perfect

Dom:

Mhmm.

John:

But the desperately complicated and interlocking set of trade offs that they've made over the years, I think, is sort of quite close to optimal. How do you feel?

Dom:

Oh, yeah. Totally. Totally. I I I've I've done some Python recently. I've done I've done other languages, and and I'm I'm always like, oh gosh.

Dom:

This is so simple and go, oh, this is this is so quicker in Go. Every everything is is good enough to me, and and I can rely and trust the language totally. So that that is that is really what I I like about Go.

John:

Yeah. It's just like a piece of software if if you keep hacking on it and trying to polish and improve it. There comes a point where actually you just find you're making it slightly worse. Yeah. So I think Go has probably got to that point.

John:

They introduced generics, which is nice. I think we probably could have lived without it. I certainly could. Iterators is cool. Again, I could live without it.

John:

Yeah. But it's it's a nice thing to have, and they've been really clever and disciplined about the way they introduce these things without breaking everybody's existing programs, which they'd be very angry about. Yeah. And it's sort of in the spirit of the language. Very simple on the surface, very minimal stuff to learn strange and complicated interactions under the surface, but that's just how it goes.

John:

I think what if maybe the fact that some people feel a bit frustrated about Go is partly due to the fact that if that's the only language they know, they're stuck with it. Right? It's like marrying someone. You know, you might like all sorts of things about them, but there might be other things that you don't like. But it's a different proposition if you realize you're bonded to them for life.

Dom:

Yeah.

John:

And if you're just thinking, I'm stuck with Go until the end of my career. This is this is my life day in day out. You might get frustrated about things like, oh, no. I don't have proper enums. Yeah.

John:

But if you but if you do know another language, I think this releases some of that frustration, doesn't it? That you can sort of like if you do Rust, you're like, hey, we've got all the enums. You know? Lot lots of things wrong with Rust that are done better in Go and so forth, but that's perfectly okay because you can know two things. Let's celebrate that.

Dom:

I'm I'm wondering. I I I don't think that there is one language, programmers these day. I I I would be I would be extremely shocked to know that, to be frank. I think, and I don't have any any numbers to back me up on that, but I think that people know at least one other language.

John:

Oh, that's fair. But perhaps they don't get paid to write it.

Dom:

No. No. No. Probably not. But no.

Dom:

No. Yeah. Probably not. But I I think I think be be because it's easier to learn a new language these days with with AI. This this is a fact.

Dom:

You know, you can just ask, ask any AI, you know, can you translate that in in x language? And and it will do that for you. So you can you can still you can still manage to write some code yourself even though if you don't really know the language itself.

John:

That's true. Desperately important to buy books as well.

Dom:

Oh, yeah. Totally.

John:

Buy Let's not forget tons and sure. Yeah. And courses. But yeah. So, you know, I think from a business point of view, you obviously don't want a team where everybody's using their own different cool language that nobody else knows and nobody can work on anybody else's code.

John:

That's obviously crazy. But equally, if you bet your entire business and everybody you hire is just a monoglot in that one language, that's the danger of another kind, isn't it?

Dom:

Yeah. Yeah.

John:

And I think it's in probably 90% of cases, it makes sense to just use Go. That's never bad advice, is it? It's a sensible default choice. There are some things where Go just isn't such a good fit or have to use it in a different way or you need special experience to be able to make it work. Right?

John:

You know, I'm thinking about things like games or other high performance applications, things like aerospace, anywhere correctness is critical, medical applications, this kind of thing. People actually die if you get stuff wrong. You know, I wouldn't like people's lives to be depending on my Go programs. This would not be good. So this is where really where Rust scores.

John:

And if you have that choice available, you can say, great. Now we can choose the right thing for the right job. You know, my way of phrasing it is, Go is for low costs. Rust is for high stakes.

Dom:

Interesting.

John:

If you have those two choices, you're not doing badly, are you? Yeah. And then have something that you do on the weekends or in the evenings that you're like, nobody else in the world but me cares about this. But it's really fun and I wanna learn it, so that's great. People should always keep doing that, shouldn't they?

Dom:

Mhmm. Oh, yeah. Totally.

John:

And as you say, the barriers are a lot lower now because instead of having to embarrassingly ask your coworker, you know, what even is a pointer or something, you can ask AI and it won't judge you.

Dom:

No. For now.

John:

Maybe it is judging you, but it it doesn't say so. Yeah. So that's nice.

Dom:

Interesting. So cool. Cool, John. I think I think we we have covered a lot here. Is there is there anything that you want to like, a closing thoughts maybe?

John:

I think we covered everything in the entire world, didn't we?

Dom:

Yeah. Sure. We we weren't that bad. We are not AI, but very close.

John:

We almost left nothing for the next podcast. Almost. I'm sure you'll think of something.

Dom:

I hope. Alright. Thank you. Thank you so much for returning to to the podcast, and I encourage everyone to to look at John's material. It's it's really great.

John:

Well, thank you so much for having me.

Dom:

Alright. Bye.

Creators and Guests

Dominic St-Pierre
Host
Dominic St-Pierre
Go system builder - entrepreneur. I've been writing software systems since 2001. I love SaaS, building since 2008.
John Arundel
Guest
John Arundel
Go mentor and author, 'Explore Go: Cryptography' and other stories. Programming is fun, and you should have fun.
059: Is Go over with John Arundel
Broadcast by