🧮 Is new math in Go's future? Plus boot.dev update with Lane Wagner

Jonathan Hall:

This show is supported by you, our listener. Stick around till after the news to hear a little bit more about that. This is Cup of Go for 02/28/2025. Keep up to date with the important happenings in the Go community in about fifteen minutes per week. I'm Jonathan Hall.

Lane Wagner:

And I'm not Shay. I'm Lane.

Jonathan Hall:

Hi, Lane.

Lane Wagner:

How's it going?

Jonathan Hall:

Good. How are you?

Lane Wagner:

Doing great. Glad to be here. Glad to be a guest host. Weird. Yes.

Lane Wagner:

But, you know, we're doing it.

Jonathan Hall:

Yeah. Yeah. So you've been on the show before. It's been a a while. Close to two years, I think.

Lane Wagner:

Yeah. Probably coming up on two years. That's kinda crazy.

Jonathan Hall:

You're on episode number 16, May 15 20 20 three. Almost two years.

Lane Wagner:

That's early. Yeah. That's awesome.

Jonathan Hall:

Yeah. Well, thanks for stepping in. Shai is middle of traveling. I don't know if he's in the air right now, but he's, migrating to The United States, this week. So too busy for him to to be with us today.

Jonathan Hall:

So thanks for stepping in.

Lane Wagner:

Yeah. Happy to do it.

Jonathan Hall:

Let's dive into some news. We have a few quick updates. I'm not gonna go into a lot of detail because we talked about these already. The big one you've all been waiting for, of course, is why did you upgrade your crypto packages on Monday? We talked about last week that a preannouncement had come out, but we didn't know what was in it.

Jonathan Hall:

We know what's in it now. Both the golang.org/x/crypto and golang.org/x/oauth 2 packages had security releases on Monday. DOS is basically for crypto. It's related to SSH file transfers. If certain authentication packets aren't sent properly or quickly enough, it can leave the the connection open, I guess, indefinitely, which you probably don't want, so this fixes that.

Jonathan Hall:

And for OAuth, it was something with JWS tokens, to be malformed and consume extra memory. So if you use either of those packages, upgrade.

Lane Wagner:

I use those packages. Time to up time to up.

Jonathan Hall:

Did you update on Monday?

Lane Wagner:

No. I need to update now.

Jonathan Hall:

You need to update now. Pause pause the show. Go update.

Lane Wagner:

I'm, I'm I'm messaging my team right now.

Jonathan Hall:

Alright. The other update, for this week is, last week, we talked about the proposal for Net HTTP content negotiation. It was likely accept. Apparently, nobody who listened went in and threw rocks at them hard enough to get them to unaccept it because it's been accepted now. So if if you hate this proposal, sorry you had your chance.

Jonathan Hall:

It'll be probably in 1.25. So I'm actually pretty excited about that. Let me pass over to you, Lane. I think you have a conference to tell us about. I'm I'm just trying to check my notes here.

Lane Wagner:

Yeah. Yeah. Gopher camp in The Czech Republic. Let me pull it up so I don't screw anything up. But, yeah, Gopher camp, April twenty fifth twenty twenty five in oh, man.

Lane Wagner:

I don't that's an abbreviation. Is that Borneo?

Jonathan Hall:

I don't know how you pronounce it.

Lane Wagner:

No. That's absolutely cool.

Jonathan Hall:

The full name.

Lane Wagner:

There's no vowel at the start. Yeah.

Jonathan Hall:

Yeah. It must not be in English. So weird.

Lane Wagner:

Yeah. Weird that the whole world doesn't run on English, I suppose. Yeah. The Czech Republic, fifty six days from now. So if you're if you're around the area or even if you're not, check it out.

Lane Wagner:

Go for Camp 2025.

Jonathan Hall:

I was in The Czech Republic very briefly. It was a beautiful place. I wasn't in Brno, I think, is how you say it. I wasn't there. But it's a nice country.

Jonathan Hall:

So if if I were still in Europe, I would I would probably try to go, but I'm not.

Lane Wagner:

Yeah. Not Borneo. That's an island. Alright. I was way off.

Jonathan Hall:

And I think their CFP is still open. So if you are in the area and want to speak there, you have until I don't know when you have until. There's no deadline listed here.

Lane Wagner:

Yeah. The become a speaker button is still open as of time of recording, but I don't see a date at which it closes. So if you wanna speak, maybe just check it out as as quick as you can.

Jonathan Hall:

Yes. Yes. Yeah. I don't know when the CFP closes, but it's open right now. So or or call for speakers, call for whatever it is.

Jonathan Hall:

Go submit your your talk. And we also have a new blog post from the official Go team about this is an interesting one because it's gotten a lot of attention. We talked about it without really going into any details on the show. But one of the biggest performance improvements in Go 1.24 had to do with how maps work. Do you understand what's going on here, Lane?

Jonathan Hall:

Can you enlighten me a little bit about this new Swiss tables?

Lane Wagner:

I have approximate knowledge of many things. Take whatever I say here with a huge grain of salt. I've just done some brushing up on Swift tables, specifically for this, so we'll see if I can do any sort of justice. I'm sure we're gonna link down to the actual article, right, on go.dev

Jonathan Hall:

Yes.

Lane Wagner:

For those of you that want the correct interpretation. But so maps are, like, crazy tricky, is if you've ever taken an algorithms class, like, hash maps are, like, the simplest thing in the world to use, which is why we use them all the time. They're great and they're fast, key value pairs. And and you look under the hood and the implementation is like, oh, yeah. Actually, it makes sense that that would be really hard because You've got to, like, dynamically grow an array in memory.

Lane Wagner:

You have to always have your lookups work. Right? What happens? You can't just, like, map to an index directly. You need to map to an index and then have some sort of algorithm that that hops to, like, other indexes just in case that one's full.

Lane Wagner:

So actually very complex under the hood. Swiss tables, my understanding after kind of reading through this a little bit, is that the big difference is that they include a little bit of metadata, a little bit of additional metadata within the hash map data structure, and they break down the backing array into sections. And there's, like, that little bit of metadata on each section. And to get crazy hand wavy about it, by adding that bit of metadata, you get performance improvements, you get speed improvements. I think it takes just a tiny bit of extra memory because now you're storing the metadata, but the actual lookups and insertions see some noticeable performance improvement.

Jonathan Hall:

Cool. Metadata for the win. Do you have any idea why it's called Swiss tables? I mean, is it because Swiss make good watches, or is it related to cheese, or or did a Swiss guy invent this?

Lane Wagner:

I would imagine it's a Swiss guy. Let's let's look it up. Gipity is gonna

Jonathan Hall:

tell me, and with very approximate accuracy Yes.

Lane Wagner:

Why why they're called Swiss tables. Accuracy Yes. Why they're called Swiss tables. To evoke the reputation of Swiss engineering. What?

Jonathan Hall:

Okay. So it's closer to the watchmaking, I guess, and

Lane Wagner:

Yeah. Known for their, their clever engineering, I suppose.

Jonathan Hall:

So, Google's AI thinks that it's because they are, based on a design that originated in Switzerland. I don't I don't know if I believe that.

Lane Wagner:

Also sounds like it could be approximately correct.

Jonathan Hall:

Yeah. Could be. We don't know. If you know if you know why Sys tables are called that, let us know, on our Slack channel. We'd love to know that little piece of trivia for next, Go trivia night.

Lane Wagner:

I mean, performance improvements in Maps could be pretty huge. I mean, again, like, we use Maps all the time. So

Jonathan Hall:

Exactly. Yeah.

Lane Wagner:

Pretty exciting. Yep.

Jonathan Hall:

Cool. Well, I wanna pull up, and talk about a blog post, that comes from Snyk. But they have a a blog post. It's a couple weeks old, but it's still relevant. It's it's more just a general informational one.

Jonathan Hall:

It's about an example of or examples of SQL injection. This is something I think people hear about all the time. And if you're new to programming, not just Go. If you're new to programming, you might not really know what all the fuss is about. You know, what what is SQL injection?

Jonathan Hall:

This blog post will will clear that up for you and, with examples in Go, and and how to fix it, which is maybe the most important thing. Once you know what the problem is, knowing how to fix it is is valuable too. Have you ever run into real life SQL injection before?

Lane Wagner:

I've ran into real life code that was vulnerable to SQL injection. I've never had an exploit on, like, my production database.

Jonathan Hall:

Yeah.

Lane Wagner:

Yeah. I've never had, like, a little Bobby Tables. If you're new to SQL injection, you know, Google little little Bobby Tables x k c d. Never had that. But I have had instances where, like, this isn't SQL injection, but it's, I guess, related.

Lane Wagner:

You know, like, we didn't put limits on, like, a text column in Postgres, and then someone just, like, Zalgo fonted the database. And so you've got, like, you know, a row with a gigabyte of Zalgo font in it. And that's not a lot of fun to

Jonathan Hall:

Yeah. You

Lane Wagner:

know, kind of brings down the ability to render a page. But no. Direct SQL injection stuff where they're actually modifying the query itself.

Jonathan Hall:

Yeah. I don't think I've had experienced the exploit either. I've definitely run into code very recently even where, you know, it's it was possible to exploit, but I haven't seen it exploited. I've definitely seen HTML injection in the real world where someone inserts some HTML into a field and we render it and then the whole page is bogus as a result. Yep.

Jonathan Hall:

So, I I suppose I should have to clarify this at the top for anybody who is new to this. The idea of SQL injection is if you don't escape or properly handle your query parameters, if you take user input, that says, for example, semicolon drop table users, the query, when it's executed, might actually drop that table because it would generate an improper query that doesn't do what you expect. So don't let that happen. Read this article if you're scratching your head and be safer after that.

Lane Wagner:

Yeah. There's a reason we don't just give our users access to the SQL engine for our database.

Jonathan Hall:

That that's right. We already talked about some proposals, but I think you found one, that upcoming that's worth talking about. Tell me about math stats.

Lane Wagner:

Yeah. So there's a new proposal for the math stats package to add things like median, mode, variance. It's GitHub issues 69264 on the Go repo. Yeah. Pretty interesting.

Lane Wagner:

I mean, adding very basic statistical, functionality to the math package. One thing that immediately stands out to me is, like, okay. I look at this. I'm like, I would use it. Mean, median, mode, variance set.

Lane Wagner:

Who wouldn't use this? Seems pretty obvious to me. It's a slice API. Right? You could hand in slice of floats, get back a new float.

Lane Wagner:

Ian Lance Taylor, his response was kind of interesting. He said in the the general math package aims to provide the functions that are in the c plus plus standard library. I didn't know that.

Jonathan Hall:

I didn't know that.

Lane Wagner:

Yeah. It sounds like the Go team wants to keep the scope of the math package coupled to c plus plus, which is kind of, like, I I wonder why that that that doesn't seem obvious to me, like, that the c c plus plus is, like, achieved, you know, perfection in the math package. But I I mean, there there might be good reason for it. So I wonder if there's, you know, they're considering adding it somewhere else, aside from the the direct math package. But that is, interesting to know that's how they think about that.

Jonathan Hall:

That is interesting. Yeah. I wonder if if if that's the only package that's designed that way or if there are other packages that are intended to to mimic the c plus plus standard library or some other standard library. Is there a Python inspired, block package somewhere?

Lane Wagner:

Yeah. I mean I mean, on that note, like so one of the reasons Python is so popular amongst, like, data analysts, data scientists is because of the rich, math support. But that's usually not in the Python standard library. That's like NumPy, SciPy. I wonder if the Go team has, like, a a similar philosophy where it's like, okay, maybe, you know, we're expecting other, like, extended packages to handle, like, statistical stuff.

Jonathan Hall:

Yeah. You know, one thing that frustrates me, and this is there are other libraries that do this, but I wish there was a a precise way to handle large decimal numbers in Go, particularly with, like, currency, addition and and and subtraction, stuff like that. You know, using a float is what most people reach for, but it's dangerous because it's not precise. So you end up using these weird, awkward

Lane Wagner:

Have you used BigInts?

Jonathan Hall:

I've used that a little bit. I I'm using one called decimal right now, which uses BigInt in the background.

Lane Wagner:

I hate to on Go. Mhmm. But good lord, BigInt is awful to work with.

Jonathan Hall:

Yes. I understand.

Lane Wagner:

So we have a cryptography course on boot dev, and it use it has to use BigInt for some stuff. And just, you know, having to call, like, dot mol, dot div, dot, like, whatever, it's just so hard to read BigInt code because it doesn't operate. It doesn't use the normal operators out of the out of the box.

Jonathan Hall:

Yeah. So yeah. Anyway, there there I love Go, but there are things I don't like about it, and that's that's one of them. Speaking of how you, do things in Go, there's a topic on Reddit I thought it would be fun to talk about, before we close out the program. The title is how would you introduce Go routines and channels to someone new to Go?

Jonathan Hall:

And I bet you have some thoughts on this. I'm curious how you do that on on boot.dev's courses.

Lane Wagner:

Yeah. A lot of it depends on where they're coming from. So on boot dev, our students go through Python and then come into Go. So we can usually just kind of assume, like, a, you're familiar with Python.

Jonathan Hall:

Mhmm.

Lane Wagner:

And the good news about Python is that concurrency in Python is pretty rough. So we usually assume they don't know too much about concurrency and kind of just teach it from the ground up. Concurrency is a hard thing to learn. Mhmm. Go's concurrency primitives are not.

Lane Wagner:

Like, that's kind of where I would, I would start to think about it is, like, you know, if you're coming from, like, JavaScript's async await, you're pretty close to understanding how it works. Granted, of course, like, under the hood, like, JavaScript's single threaded, and so, you know, you don't have to worry about, like, mutexes and things like that. But, like, this idea of stuff happening at the same at the same time, you should already be familiar with. So, I guess, just, like, out the gate, I would say, it's it's hard to explain concurrency. You need visuals.

Lane Wagner:

You need to show how two things are happening at once. How if I wanna mutate memory, you know, I need to lock it, like, all that stuff. But once you understand that, I mean, understanding that putting go in front of a function runs it concurrently, that's very simple. And channels are like channels are like the simplest thing to understand. If you understand queue data structures and you understand concurrency, then you already understand channels.

Lane Wagner:

So that's how I would think about it. I wouldn't even think about, like, oh, Go channels are hard to learn. No. No. No.

Lane Wagner:

Like, learn concurrency, and and then and then you understand them.

Jonathan Hall:

I think there's a lot of, mystery around channels that it doesn't deserve. Like, I I think people feel like channels do something magical, but it's really just a data structure. Right? I mean, it's it's it's essentially an array with a built in push and pop that that's concurrency safe.

Lane Wagner:

Yeah. Concurrency safe queue. That's like it.

Jonathan Hall:

Yeah. It's it. Right? But, you know, I mean, you you see questions and and I've had the questions too. I'm not blaming anybody for having these questions because I had them too.

Jonathan Hall:

I I thought it was mysterious and and weird when I started from Indigo. So I completely identify with people asking the questions I'm about to mention, but questions like, what happens when a channel goes out of scope? The same thing that happens to anything else that goes out of scope. Right? It gets garbage collected.

Jonathan Hall:

Right? It's just it's just a data type, but it it doesn't feel like one because it it feels special, even though, you know, I I don't know. It's almost it's almost advanced level go to realize how unadvanced a channel really is.

Lane Wagner:

Yeah. I I do think that, like, understanding blocking Uh-huh. Is is maybe, you know, a little nuanced because you're used to your code just, like, just going. Right? Like, code goes.

Lane Wagner:

But blocking is I mean, there's other instances where you could block, like, with a time dot sleep or whatever. But, like, yeah, the fact that the way you write your Go code on the receiving side is usually like, okay, now sit and block and wait until,

Jonathan Hall:

you

Lane Wagner:

know, something happens. That's, like, probably one thing that's that's maybe a little specific to learn. The other thing that I will call out is the idea of, like, sending on a closed channel.

Jonathan Hall:

Yeah.

Lane Wagner:

That can get really hairy really fast. And so there's, like, some good rules of thumb to make sure that that doesn't happen. But, man, if you have code written in such a way where, like, you know, you're closing the channel in one Go routine, then another Go routine is trying to send into it, Like, that can be a nightmare to get right.

Jonathan Hall:

Dealing with nil channels can also be challenging. I mean, it's it's not difficult, but you have to remember the details or look them up every time. I I really like what you said that concurrency is complicated, but it goes primitives or not, to paraphrase. It reminds me how easy it is to think you've written code that that looks right. It even appears to do the right thing, but you've missed race conditions or something like that because the primitives are so easy.

Jonathan Hall:

You can just you can just write code that looks like it's doing the right thing without realizing that an example I was dealing with this morning before before recorded was refactoring some code with with error handling within a go routine. But the error had been defined outside the go routine. So, it's the error is not necessarily safe to use. I had to redeclare it, of course, in that go routine or else it might be might be a data race and something else is, writing or reading the same error value. And that's a really easy thing to overlook because the code looks completely right.

Jonathan Hall:

There's an error defined there. There's a thing here. There's a goroutine. It does some things. If error do this thing without realizing that that error is actually defined outside that goroutine scope and, could be dangerous.

Jonathan Hall:

So

Lane Wagner:

I I will say just, like, maybe one little tip is I I think the atomic package is generally underused.

Jonathan Hall:

Oh, yeah.

Lane Wagner:

You can solve a lot of problems just using the atomic package that, like, you would otherwise have to introduce, like, a mutex for and

Jonathan Hall:

things like that. And it's become a lot more powerful in the last few versions with since, generic, related functions were added. Yeah. Cool. Well, I think that's I think that's the news for the week.

Jonathan Hall:

I'm gonna put you on the spot, Lane. If you have time and interest, would you stick around till after the the break and talk, give us an update about boot. Dev?

Lane Wagner:

Of course. Happy to.

Jonathan Hall:

Great. Wonderful. Well, stick around. We'll we'll have a little break here, and we'll be back in just a few minutes to talk about boot. Dev.

Jonathan Hall:

Thanks Thanks for listening this week. Without Shai, I don't know what our Patreon, looks like. I don't know if we have new members. If you're new, thanks for subscribing on Patreon. Stick around till next week.

Jonathan Hall:

We'll read out your name when Shai is back. I don't I just don't have access to Patreon. So, you know, that's that's Shai's department. Aside from Patreon, you can also support us just by sharing the show with a friend, with a colleague, with a coworker, with your pets, whoever, students that you're working with. I don't know.

Jonathan Hall:

You know, put a billboard in front of your house about the show. Whatever you wanna do to let people know the show exists. We don't advertise, so rely on word-of-mouth. You can also join us. We we we love chatting with our listeners.

Jonathan Hall:

We're on the Cup of Go Slack channel on the Go for Slack. That's cup dash o dash go, Bob Case. You can also email us at newscuppago. Dev. You can go to the website at cupago.dev and find these links I just mentioned, as well as link to our swag store where you can buy, PepaGo cups or t shirts and a few other goodies.

Jonathan Hall:

Leave a review if you would. Wherever you listen to your podcasts, leave a rating. Let us know that you like the show. I'm sure I'm forgetting something. Shy usually does a better job with these ad breaks.

Jonathan Hall:

Does does it seem like I forgot anything, Lane?

Lane Wagner:

I couldn't tell you if you did.

Jonathan Hall:

If you were listening, would you expect me to say something else now? Like and subscribe. Smash that like button. That's that sort of thing.

Lane Wagner:

Smash the like button. There you go. That's the one. Something didn't something felt off.

Jonathan Hall:

Yes. Alright. Well, stick around. Layne and I are gonna have a a short chat, about boot.dev. If you're not sure what boot dot dev is, definitely stick around.

Jonathan Hall:

It's a fun learning platform. We'll talk about that in just a moment. Well, Lane, thanks for sticking around. I have played with boot. Dev.

Jonathan Hall:

I think I live streamed a session on boot. Dev a couple a year ago maybe. It was a lot of fun. Sounds right. Yeah.

Jonathan Hall:

Would you tell us, for those who have no idea what it is and never heard the words boot and dev in the same sentence, what is boot dot dev?

Lane Wagner:

Yeah. It's a learning platform for back end developers. We teach, like, a full computer science, and back end development curriculum. Got 30 plus courses. It that particular learning track, the back end developer track, starts you in Python, teaches you some memory management in c, and then teaches you all the back end specific stuff in Go.

Lane Wagner:

So we have a lot of Go specific courses. Obviously, we teach the Go programming language, but then also HTTP clients, servers, cryptography, CICD, all that kind of stuff in Go because I love Go. And so we started there.

Jonathan Hall:

How many students do you have? Or is that number is that a number you're willing to share?

Lane Wagner:

Yeah. Happy to share. So last I checked a few weeks ago, about 500,000 registered and about 24,000 paying members.

Jonathan Hall:

Cool.

Lane Wagner:

And for that, like, just to understand that distinction, all the content on boot dev is free to read and watch. So Mhmm. Definitely can check it out. It's the interactive components of the site that are, for paid members after a certain, like, trial period of three chapters.

Jonathan Hall:

And the thing that's so that's unique about boot. Dev, at least from my perspective, isn't so much that it's a learning platform because there's there's lots of those out there. But the interaction has a sort of, fantasy Dungeons and Dragons sort of feel to it. Talk about that a little bit. What what what makes boot.

Jonathan Hall:

Dev unique unique in that regard?

Lane Wagner:

Yeah. That that is it's it's it's the game experience and just how kinda crazy hands on our courses are is is the differentiating factor, like I said. And and we have to have that because, like like I said, all the content's free. So if we didn't have that, we wouldn't have a, you know, we wouldn't have a business. But, yeah, we've got this, these various mechanics, things like, you know, a daily streak that you keep alive, quests.

Lane Wagner:

Right? Every day when you start, you choose a easy, medium, medium, or hard quest for the day. We got potions that give you, like, bonus XP when you pop them. We think about it as, like, a a more fun take on a Pomodoro timer.

Jonathan Hall:

Okay.

Lane Wagner:

You know, if you're into the idea of, like, setting a half hour or an hour long study session.

Jonathan Hall:

Uh-huh. We've

Lane Wagner:

got Boots, AI Bear Wizard. He uses the Socratic method to kinda help you through, your lessons. But, like, all that stuff is fun, and it's designed to help you stay engaged Mhmm. With your studies. The the thing that's most interesting from, like, to a more technical audience, in my opinion, is is the lengths we go through to make the lessons interactive because Yeah.

Lane Wagner:

It's it's not a consumption first platform. It's a doing first platform. So, like, I'll just use the example of our HTTP servers course, that's written in Go. You build a server on your local machine using the standard library. You build auth, you build, you build webhooks, kind of start start to finish, the whole thing.

Lane Wagner:

And we shipped a custom CLI tool that you run on your own machine that makes HTTP requests, like, locally against your server and actually runs checks against it. So, like

Jonathan Hall:

I remember that.

Lane Wagner:

That's been the real differentiator kind of aside from just, like, the, you know, fancy gamification skin on everything.

Jonathan Hall:

Yeah. So, I mean, I've heard people talk. I mean, I had a mentor that I was, working with for a while who I think he heard about me on your podcast and and then and then looked me up and and hired me as a mentor for a while. And, you know, he was talking about how how fun it was to play boot. Dev and, you know, the the the the fantasy element was was great.

Jonathan Hall:

But I I do remember when I did this livestream, I remember being impressed that I could, like, like, your you didn't just trust me to build a web server and validate that it was working right. You checked that the my web server did the right thing and it returned the correct response to the correct request. And so that that was impressive. And then I I know you have a lot of other courses, not just web servers, but correct me if I'm wrong, you talk about Kubernetes, talk about Docker. How do how do you interact with all of these things?

Jonathan Hall:

Is it the same? Do you have a CLI tool that talks to my local Kubernetes cluster? Or how do how do you validate that sort of stuff?

Lane Wagner:

Yeah. So there's there's there there's more than this, but the the core types of lessons on boot dev, there's really three. There's well, okay. Really, there's two. There's ones where you write code in the browser.

Lane Wagner:

So, So, like, the Go language course is in the browser. Mhmm. We don't see a reason to kick you out. But then the courses where you have to do, like, more complex, like, bigger project building, like the servers course, you do it all on your local machine, and then you install the boot dev CLI. And that CLI is incredibly flexible.

Lane Wagner:

It can make HTTP requests, validate responses, like what's in the headers, what's in the body, you know, that kind of stuff. It also can just run shell commands, and then check the output. So, like, another thing that we commonly will do is, like, you know, just pad a file and make sure that you created it properly, right, that you put the right stuff in there. So it's just a validation tool for like the state of your local machine is the way to think about it. And so all of the courses are broken down into pretty bite sized steps.

Lane Wagner:

And it leads to a really good experience because, like, yes, you're expected to do everything on your own. That's how you learn. But we can tell you, like, where you're starting to veer off course, Because there's nothing more frustrating in, like, a project based course than, like, missing step one than getting to step 10, and you're sitting there beating your head against the wall, like, not realizing that it was actually back in step one when you screwed up.

Jonathan Hall:

Yeah.

Lane Wagner:

That's causing all this pain. So that's been kind of the the secret sauce at least of that, of that interaction, the the the CLI that you install.

Jonathan Hall:

Cool. Cool. And if I'm not mistaken, you have courses written by a number of different people. You're not doing this by yourself. Is that correct?

Lane Wagner:

So we have a team. There's 10 of us, on the team. I've written the I've, like, authored the majority of the courses. The team helps maintain and update them. We update them a lot.

Lane Wagner:

I think we're on, like, student reported ticket, like, 16,000 right now that we've closed.

Jonathan Hall:

And so this is, like, bugs or or inconsistencies or something that they report?

Lane Wagner:

Occasionally, it's, like, bugs in the lesson. But more often than not, it's just like, hey. I wish this could be explained a little bit better. And so it's just, like, constant improvement of the material.

Jonathan Hall:

Okay.

Lane Wagner:

But we have worked with some outside authors, Primogen, TJ de Vries. So Prime did our Git courses. And, actually, this is gonna be most interesting probably to your audience. We are just finishing up the Primogen's new course on the HTTP protocol where you actually build Uh-huh. Essentially the Golang HTTP package, really an HTTP server from scratch using only the TCP package.

Jonathan Hall:

Uh-huh.

Lane Wagner:

It's like from TCP to HTTP, and that one's super fun. Just finished editing it. We're just getting the videos out now. So

Jonathan Hall:

Cool. Sounds exciting. Anything exciting in the pipeline that's worth talking about?

Lane Wagner:

That's the big one. I will say that this one's probably gonna feel like betrayal to this audience, but, like, the other big project that's going out after that HTTP protocol course is the back end curriculum. So the back end half of the curriculum, will all be available in TypeScript as well as Go. Okay. So you'll get to choose your adventure.

Jonathan Hall:

I was expecting you to say Rust.

Lane Wagner:

Yeah. Yeah. No. There's not not as much of a market for Rust. We found that a lot of our Go developers want to learn TypeScript usually so that they can be helpful on the front end side of the stack as well when they need to be.

Jonathan Hall:

Okay.

Lane Wagner:

And there's just, I mean, there's just demand for TypeScript. But obviously, Go Go is still our primary language. We ship all our new stuff in Go, but we're kind of porting everything over to TypeScript as well as this kind of secondary option.

Jonathan Hall:

So You said the back end half. Your other half meaning the the more, like, infrastructure stuff? You don't you don't do front end stuff. Right?

Lane Wagner:

Yeah. So the back end specific stuff. The first part of the learning path is basically computer science fundamentals. So Right. Algorithms, data structures, object oriented programming, functional programming, all that's done in Python.

Lane Wagner:

We will probably eventually port that to other languages. The thing is, it doesn't really matter what you learn your CS basics in as much other than, of course, there is the memory management course that's always in c. Mhmm. But it's it's the, like, career specific courses that you usually want to, like, use a specific language for Right. In our experience.

Lane Wagner:

So it's like you learn the basics in Python, that's fine. And then you learn your specific stuff for back end development in Go or in TypeScript or, like, we'll probably add more languages there first. I think it's just more useful.

Jonathan Hall:

Your your podcast is back end banter. Right? Correct.

Lane Wagner:

Yep. What are the

Jonathan Hall:

chances of adding front end related stuff to boot.dev? Is is there no chance at all? Or is that gonna happen someday?

Lane Wagner:

There definitely is a chance, but it's like the last thing on our priority list.

Jonathan Hall:

Okay.

Lane Wagner:

We'd rather hit DevOps first. We'd rather hit infrastructure stuff first. We'd rather hit, you know, even data science, AI, data analysis, data engineering. Like, I'm so much more interested in in building content around that than front end. There's good front end courses out there.

Lane Wagner:

Like, I I don't think it's a travesty, whereas I feel like, you know, there's not as many good back end

Jonathan Hall:

courses. Especially in the in the browser. You can get tons of good back end books, but if you want the same sort of experience, I I I certainly haven't seen them for back end code. Is there anything else that, I should have asked you about boot dot dev that I that or or back end bands or anything else that you have going on that I should have asked and I didn't?

Lane Wagner:

No. That's great. Check out the Backend Manser podcast. Check out Jonathan's episode. I believe it was episode four.

Lane Wagner:

It was, like, very early. Wow. And the Boot Dev YouTube channel, we publish our courses for free on the YouTube channel, like, total like, complete walkthroughs. So, again, like, if you're not interested in paid membership, which is totally okay. All our content's free, so feel free to check it out.

Jonathan Hall:

Well, you were the cohost today, and then I turned I I tricked you, did the and got you to be a an interviewee also, which means I get to ask you our our stumper question to all the interviewees we do. And I haven't prepared Lane for this at all. Usually, we give our interviewees a little heads up if this is gonna happen. So I we'll we'll see. Question is, who has been the most influential for you in learning Go?

Lane Wagner:

I'm gonna cheat and pick two. Okay. Number one credit goes to my professor in college, Russ Ross, who also happened to be the author of the Black Friday markdown package Okay. Which was really awesome, used by Hugo for many years, I think, before they switched to Goldmark. I can't remember.

Lane Wagner:

But, anyways, yeah. I I learned Go in college back in, like, 2014, '20 '15, which was awesome because it just wasn't that popular back then. That was the introduction. And then I would say the next next person is probably Dave Cheney just because I read so many of his blogs as I was learning Go, you know, seven or eight years ago. Yeah.

Lane Wagner:

And so those two.

Jonathan Hall:

Great. Awesome. Great answers. Well, thanks, Lane, for stepping in for Shai, and thanks for chatting with with me about boot. Dev.

Jonathan Hall:

It's been fun.

Lane Wagner:

Thanks for giving me the chance.

Jonathan Hall:

We'll have you back on the show in, I don't know, a couple years maybe.

Lane Wagner:

Sounds good. Every two years.

Jonathan Hall:

Alright. See you then.

Creators and Guests

Jonathan Hall
Host
Jonathan Hall
Freelance Gopher, Continuous Delivery consultant, and host of the Boldly Go YouTube channel.
Lane Wagner
Guest
Lane Wagner
Founder of https://boot.dev • Host of https://backendbanter.fm pod
🧮 Is new math in Go's future? Plus boot.dev update with Lane Wagner
Broadcast by