๐ŸŽ„ An Adventful Sweet 16 for Go! ๐ŸŽ‚

Shay Nehmad:

This show is supported by you. Stick around till the ad break to hear more about that. This is Cup of Go for 11/21/2025. Keep up to date with the important happenings in the Go community in about fifteen minutes per week. I'm Shay Nehmad.

Jonathan Hall:

And I'm Jonathan Hall. Happy sixteenth birthday.

Shay Nehmad:

Jonathan, that's very nice of you. I know I look young since I started shaving, but I'm not 16. Go is. Old and decrepit decrepit at the age of 31.

Jonathan Hall:

Let's talk about who's old here. So Go Go is 16 years old, on November 10. It's been a couple weeks, week and a half. Hey, that's cool. This isn't the birthday, of course, of what Go was, like, conceived.

Jonathan Hall:

This is when version one was released public, I think. Is that right?

Shay Nehmad:

Yeah. It's, the open source release.

Jonathan Hall:

The open source release. Yes. Pretty cool.

Shay Nehmad:

The blog post goes into, you know, library improvements in the for the last, like, couple of versions, you know, talking about the development stack and looking ahead, I think it's the most important part. It's like, okay, Go has been going for sixteen years. What are we gonna do to make it better going forward? I love I love this stuff.

Jonathan Hall:

One thing we'll have to do is stop using an int four for our for our age, because now we have a five gig age. So Oh, no. We're we're good until Go turns 32 at least. Then we have to go up upgrade our integer again.

Shay Nehmad:

It'll probably be Go two by then, and then we can start, you know, counting from zero again. Maybe by then it'll be go to. No. But I I love the the forward looking mindset of the go team right now. It's like, we want deeper support for AI coding assistance.

Shay Nehmad:

We're gonna have a go fix command. We're gonna make Versus code go better. We're gonna make the the language server better. We're gonna make the garbage collector better. We're gonna keep up with hardware capabilities.

Shay Nehmad:

We're gonna improve the runtime libraries, especially for, like, multi big multicore hardware. It's like they know their audience so well. None of these things are like, we're gonna change the language and you're not gonna be able to maintain your software. It's all like your software is gonna stay great because of these improvements, which I really, really like.

Jonathan Hall:

Cut, I think we need to put, Tim Toolman Taylor, oh, oh, oh, oh, oh, grunt in here, when when Shay's talking about how everything's better. Who can't? I don't know.

Shay Nehmad:

So congrats, Go. Happy birthday. How long have you been I I don't I forget. I think we talked about this on the show, but out of the sixteen years Go has been, out, you've been a part of its life for?

Jonathan Hall:

I've been I started using Go. I think it was version 1.4, ten, eleven, twelve years ago, something like that. Of course, I was just dabbling early on. It wasn't until, you know, a couple years in that I started getting using it for serious projects. But, yeah, quite a while.

Shay Nehmad:

It's fun it's funny to think about this stuff, like, in retrospect saying, oh, sixteen years, that's a lot. But in programming language, age, that's not a ton. No. You know what I mean? I mean, Python is ancient.

Jonathan Hall:

What were you doing in 2009?

Shay Nehmad:

What was I doing in 2009? I was in the ninth grade.

Jonathan Hall:

Okay.

Shay Nehmad:

For me, it's really easy. Like, 2001, I was in the first grade. 2002, I was in the second grade. Very easy to calculate. I was just I was just starting to learn assembly and c sharp.

Shay Nehmad:

I already knew Visual Basic. That's what and HTML.

Jonathan Hall:

I was I was professionally programming in Perl in 2009.

Shay Nehmad:

Professionally in Perl? I don't think so. That

Jonathan Hall:

that to be a thing. That used to be a thing.

Shay Nehmad:

Well, congrats, Go, and look forward for the I guess 18 is not a very important age in, US because you can't start drinking, but we'll have to wait until 21 to really

Jonathan Hall:

can drive in most states, so I guess Go could start driving now.

Shay Nehmad:

Unironically, you have to assume that some of Waymo's code or, like, Tesla's code is is Go. Right?

Jonathan Hall:

Probably. Which which means it might

Shay Nehmad:

have been illegal driving.

Jonathan Hall:

You know? It was underage until now.

Shay Nehmad:

That's actually interesting. If we have anybody from the Waymo or, like, Uber or any of the other self driving what other self driving? Tesla.

Jonathan Hall:

Tesla.

Shay Nehmad:

Zoox, any of these. I'm, like, in the Bay Area. I see these things, like, all the time driving around me. I'm actually planning to take a Waymo later today, to celebrate my birthday. It it was October 19, and my wife got me tickets to an NBA game.

Shay Nehmad:

I'm gonna watch it today and I'm gonna take a self driving car to go there. And it might be written in Go. It's all coming together. Awesome. I wanted to update on the security release we talked about last time.

Shay Nehmad:

Oh, So now we have the issue and the change list, and it's very interesting. So in SSH it's also easy enough to explain on the show, which is a a not a standard combo. So do you know what OIDs are in SSH?

Jonathan Hall:

Not off the top of my head. That sounds familiar. I think I've mentioned one or two during configuration, maybe. But, no, I don't really know what they are.

Shay Nehmad:

So they're like object identifiers, which is like some sequence of numbers that will help you, you know, name an object. Uh-huh. And you can have a few of them in an SSH connection. It'd be like, oh, that's the status, that's the configuration. Like, you know, just IDs, which sounds pretty benign.

Shay Nehmad:

However, you can specify up to, like, f f f f o IDs in an packet. Like, there's no limit to how many OIDs you could specify, which causes a denial of service. Like, if you have an, SSA server and you tell it, oh, I'm just gonna bring you a ton of, OIDs right now. In a specific API, which is called GSS API, which is I I've never used myself, but I assume some, you know, SSH client I've used implemented it. It's like a common interface for different security protocols.

Shay Nehmad:

You could be like, oh, I'm gonna give you like a bajillion, object, objects right now, object identifiers. And the server would be like, okay, I'll just start allocating, and then DOS itself. And Jacob or Jacob Koelek, I hope I'm saying that correctly, I'm probably not, reported it. Really cool things. I I think it's an interesting find because it sounds obvious in hindsight, but these are the things that are exactly very hard to find.

Shay Nehmad:

So I don't know, super cool, a great find. And I like that it's easy enough to understand also that I can explain it. Because sometimes these security issues, man, they just go right over my head. Importantly, you can just, upgrade, you know, your version of Golang X crypto and you'll be safe from this. This is just a DOS, so not like, oh, it's not leaking your data to the NSA or whatever.

Shay Nehmad:

But still, if you have an SSA server, you don't want it to be DOS, right?

Jonathan Hall:

No. Probably not. Yeah.

Shay Nehmad:

Ahead and upgrade. Speaking of upgrades. Oh,

Jonathan Hall:

no. Apparently, Mac OS 12 has not been getting upgrade security updates since July 2024. Did you know that?

Shay Nehmad:

No. I always get the latest and greatest Mac from my workplace. Oh, yeah. And everything is so slow because My my Mac is best the hardware gets better, someone's like, oh, I'll just make my thing Electron.

Jonathan Hall:

So, yeah, I don't even know what version of macOS is new these days. What version what's the newest version?

Shay Nehmad:

Wait. I'm clicking the about this Mac button. Tahoe 26.1. 26? At the time of this recording.

Jonathan Hall:

Did they change version schemes? Because we're talking about OS Mac OS 12 here, or have there been, like, 20 you know, thirteen, fourteen, fifteen versions since then?

Shay Nehmad:

I think Mac has a lot of versions, like, one every year or something like that. Okay. 12 is Monterrey, 10 is Sierra. They have, like, this weird naming. I don't know.

Jonathan Hall:

You said you're on '27?

Shay Nehmad:

Twenty six point one? That doesn't sound reasonable. They have a a list on their website, though, I think.

Jonathan Hall:

I'm checking that out here. They jump from 15 to 26. That that explains it. Okay. Yeah.

Jonathan Hall:

That's Alright. Anyway, if you're on Mac OS 12 or older, your Go support will be ending in Go 1.27. That's the whole point here. Now what does that mean? It doesn't mean that there's something gonna stop working.

Jonathan Hall:

It just means they're gonna stop testing on that version of Mac OS. They're not going to intentionally break it, but they will not be going out of the way to fix bugs that only appear on that operating system. So, yeah, if you need guaranteed support for Go, you won't be able upgrade to Go 1.28 anymore or newer, but it might work if you don't need guaranteed support.

Shay Nehmad:

You would drop all Macs anyway, right, because you use Linux.

Jonathan Hall:

I I would drop Windows support before I drop Mac support if it were up to me.

Shay Nehmad:

Don't get me started on Windows. Literally, last night, instead of, like, watching my wife and I are watching The Rookie right now. Mhmm. Instead of sitting around and watching our show, she was like struggling with, installing a thing on a Windows because it's such a broken piece of whatever. And I just I I work instead just because this operating system is bad.

Jonathan Hall:

We don't have we don't have Windows in our house anywhere. My wife's my wife has a

Shay Nehmad:

We don't have Windows. It's always dark. You don't use any, like, Microsoft product?

Jonathan Hall:

I'm I'm probably I'm sure I use something that has Microsoft firmware on it. I have a Commodore 64 in the closet. It has it has Microsoft basic on it. I use Versus Code. That's Microsoft.

Jonathan Hall:

But as far as Microsoft That's ChromeViam.

Shay Nehmad:

That's Google.

Jonathan Hall:

Wow. But as far as, like, Microsoft operating system, no. I don't I don't use that anywhere. I mean, I might have it installed. I might have a a Windows boot still on my on my PC that I could boot into, but I I haven't booted into it in several years.

Shay Nehmad:

So my Windows machine has always been on because of gaming, but actually they released the new C machine recently and it's gonna be like Arch Linux. I think most games are gonna have to support Linux pretty soon anyway.

Jonathan Hall:

Many of them already do, I discovered recently. You can you can run Steam on Linux forever for a long time. Most games don't work, but more and more games do. And the games like, I was playing Civilization seven on on Linux not long ago.

Shay Nehmad:

So You checked out save seven already?

Jonathan Hall:

Yeah.

Shay Nehmad:

Is it good?

Jonathan Hall:

No. Okay. No. It's not.

Shay Nehmad:

I really wanna try a ClearObscurer Expedition 33. That sounds awesome. But I haven't assembled my gaming, PC yet since, moving to The States. Yeah. I didn't buy a case yet, but I will.

Shay Nehmad:

I will at some point. Cool.

Jonathan Hall:

Anyway, so enough rambling about old versions of Mac and Windows. That's the news. Mac OS 12 is dropping support in 01/1927, which will be out in nine months or something like that. And that's gonna wrap us up for today. Not a lot of news.

Jonathan Hall:

We have a couple other items we'll keep for next week, but we wanna save time for an interview that's coming up. This should be a very adventful interview coming up with Neil Voss about Advent of Code, so stick around for that. Thanks for making it this far into the program where we start to talk about how you can support this show. We do this as a hobby. We do it to learn.

Jonathan Hall:

We do it to support the community, but it does cost some money. We pay for an editor. We pay for hosting fees. If you'd like to help support us financially, you can become a Patreon. It's very inexpensive.

Jonathan Hall:

What is it? Like $3 a month minimum, or you can even do more than that, $8 or something like that. You can also buy swag. You can buy a t shirt or a cup of go mug or socks. We have new socks available.

Jonathan Hall:

Proceeds help support the show. Although there's very little proceeds from that, to be honest, It's mostly just for fun. The other way you can really support the show is by telling your friends, your colleagues, your coworkers, your other fellow humans about the show, anybody who might be interested. Let them know that you listen to the show, share a link with them, and leave a rating and review wherever you listen to your podcasts. Jai, do we have any new Patreons this week to mention?

Shay Nehmad:

No, I wanted to shout out some of our longer standing members.

Jonathan Hall:

That's great.

Shay Nehmad:

Just, you know, this is really fun to see people hanging around the audience. We don't do anything special for Patreons. Maybe at some

Jonathan Hall:

point we should. We can give them little back rubs if they ever come by our office.

Shay Nehmad:

That sounds, illegal to offer, so I will not respond. I don't wanna end up on the on the Epstein files or whatever is tearing the nation right now.

Jonathan Hall:

Must be 18 or older to participate.

Shay Nehmad:

Yeah. But Arav Duta, David Kinney, Jay Martin, Jay Crumble 27, Moshe Weiner, Simon Law, which I'm, like, also seeing on San Francisco meetups every now and then. Nice seeing you here. Landy Bible, Jess Bryson. Just picked a random bunch out of the people who donated so far.

Shay Nehmad:

We really appreciate it. Thank you all. I do wanna mention our new swag as well. I've been using our, Cupogo hat with the new embroidered, simple Bruiser logo. I've been getting compliments from, like, people in like, parents in the daycare that don't know about the podcast.

Shay Nehmad:

They're like, oh, cute hat. So I'm like, a 100% creator approved. As this has become my my go to hat. Just like this is the cap I'm wearing now. Nice.

Shay Nehmad:

Especially as my hair is I don't know what's what's up with the water in The US, but my hair is getting worse and worse the more time I spend here.

Jonathan Hall:

I have been considering the bucket hat actually for my gardening work. So maybe I'll make make that, make that purchase myself. We can we

Shay Nehmad:

can maybe add that to the store. But, yeah, there's some swag. Obviously, you can find all past episodes, past transcripts. We've been doing this show for a ton of time now.

Jonathan Hall:

We're getting close to three years now. Yeah.

Shay Nehmad:

Yeah. Yeah. And and I've see I've I've started noticing that I go into, like, the episode list and I search for is open source library someone is talking about? I've interviewed that person. So that that does, tend to be the case.

Shay Nehmad:

You can find some pretty good knowledge there. Out of the 136 episodes in total, it's a crazy number.

Jonathan Hall:

Well, let's jump over to our interview. Quick reminder, though, we will not be doing your show next week for Thanksgiving. Enjoy your time with your family if you're in The US. If you're somewhere else, then I guess still enjoy your time with your family. Just probably don't celebrate Thanksgiving.

Neil Vass:

Yeah.

Shay Nehmad:

This is gonna be my first Thanksgiving, so I'll be flying out to Chicago. It's gonna be a ton of fun, but no episode. So week off. We'll see you all in two weeks.

Jonathan Hall:

Until then.

Shay Nehmad:

Jonathan, roll a d twenty.

Jonathan Hall:

Add some side effects here of me rolling a die. And then it just clutters onto the table. D twenty.

Shay Nehmad:

What number did you get? Oh, you don't know how this works?

Jonathan Hall:

I got a, 14.

Shay Nehmad:

Alright. But you do get to roll again. You know why that is? Why do not? Because you have Advent Edge.

Shay Nehmad:

If only we had someone who's an expert in Advent calendars on the on the call. Oh. Oh, hi, Neil.

Neil Vass:

Hi. What an introduction. Thank you.

Jonathan Hall:

For everyone listening, please forget everything just happened up till now. We're gonna we're gonna Neil, tell us about yourself.

Neil Vass:

Sure. So I'm an engineering manager now. I work at the Co op in The UK. So that's a big retailer. They do shops and funerals and insurance and a whole mishmash of different businesses that fit together.

Neil Vass:

Earlier in my career I was a software engineer for a long time but these days I mostly talk to people about software engineering or teams or getting on with people. So I like to keep my hand in some ways just still do some code because I enjoy it. So one thing I like every December is the advent of code puzzles. It gives me a nice excuse to sit and do a little bit of coding every single day.

Shay Nehmad:

That's great. Co op, I'm like slightly intrigued. You said insurance and shops and funerals.

Neil Vass:

Yeah. Oh, there's a whole origin story. So, most slide decks in the co op start with in 1844. So in 1844, 12 people got together and they wanted to try a different way of doing business. So it was the classic, the land owning classes oppressing the common people with lots of price gouging and terrible things.

Neil Vass:

So everyone put ยฃ1 in to be a membership of a cooperative and cooperatives are now all around the world. So they started with food because food was hard to come by and good quality ingredients, so that's where they started. But then looking at their members, they wanted to provide for them and do the right things. So lots of families fell into funeral poverty because they haven't planned for it and that's why there's a funeral business today and other things happened. Lots of businesses didn't want to like deal with the co op, they saw that as hurting the established ones so they wouldn't do things like insure their warehouses and stuff like that.

Neil Vass:

That's why there's an insurance business. So every one of them, I lose count how many different businesses are on the co op, but there's a story like that about where it came from in the olden days. There's no way you'd plan a business from the start to have all these unrelated things in it, but there's a reason about how they all got there.

Shay Nehmad:

Interesting. There actually are some of co ops in Israel as well now that I think about it. Jonathan, are co ops a thing in America as well?

Jonathan Hall:

Oh, yeah, they are. I've been a member, my family's been a member of some. I remember when we were small, when I was small, we had a little neighborhood co op. It wasn't nearly as big on a thing. It was basically health food store where you had to be a member to shop there.

Jonathan Hall:

And as part of your dues, you volunteered like an afternoon every month to go be the shopkeeper. So, you know, I remember going with my my dad. I was probably six or something or eight maybe, going there sometimes and, you know, he'd be there running the I almost said cash register, but it was really more like a money box with a paper receipt system. Wow. So they they do exist.

Jonathan Hall:

I've I'm not familiar with so I actually I I just remembered the biggest one probably is RAI, the sporting goods company. They have retail shops all over the the country and They're co op? Technically a co op. Yes. And I'm a member and I every every year I get quote unquote dues back, which is really just like cash back on anything I buy.

Shay Nehmad:

You're a member. Okay. I know I'm a member. Snowboarding equipment, my skiing equipment this year. Anyway, before we turn into, economics podcast about, co ops, although that's super interesting, what is Advent of Code?

Shay Nehmad:

You mentioned you like to do it, a little bit of code every day. I assume most of our listeners don't actually know this like little coding competition thing.

Neil Vass:

Yeah. So, it's been going. This will be the eleventh year it's on. And up till now, every single year since 2015, a new puzzle appears on the website adventofcode.com. If you solve the puzzle, you log in, you can do it in any language, you can do it in spreadsheets, you can do it whatever you like.

Neil Vass:

If you put the right answer in for your puzzle you get one star and it unlocks like the plot twist second part and quite often all the code you've written to do the first one almost fits but not at all in any way. They always twist it so that it's something like 10,000,000 times more complicated or some other reason that you've got to go and right, change everything. You get one puzzle every day leading up to the twenty fifth so it's 50 satisfying stars when you do it. And there's I think last year I think something like over a quarter of a million people started it. Not everyone finishes it.

Neil Vass:

There's some really esoteric puzzles and some real pathfinding algorithms and three d geometry and stuff you should learn about if you want to finish it all. This year it's changing a bit. It's only going to be twelve days because Eric Wastow, who organises it, that's been a big overhead for him. I cannot believe somebody who's got a full time job and a life and everything just does this for fun. But he's still carrying on with it which I'm really pleased about.

Neil Vass:

So just twelve days seems like a more manageable amount I think people like because quite often as you get up to Christmas Day all the puzzles you've not quite finished yet are building up behind you And you feel like you've got to spend longer and longer on it.

Shay Nehmad:

And the but this year, I heard he's also not doing the leaderboard, which I think is a good change.

Neil Vass:

Yeah. I think, getting on the leaderboard, I can't believe humans do it. If you ever look at some of the times the puzzles unlock at midnight somewhere in The US in different times around the world, and within maybe a minute and a half, like the full leaderboard has filled up and I haven't even finished reading the puzzle description and work out what I'm doing. People used to live stream videos on YouTube of themselves of how they solve that, which was incredible. But some people take it too seriously.

Neil Vass:

He said please, with the simpler puzzles, AI could write it for you in seconds. He says please don't do that. Lots of people ignored that. Loads of people got unnecessarily competitive and against the spirit. I think people tried to DDoS the site so that no one else could come in there before they solved it.

Neil Vass:

And it's just you know, this is why we can't have nice things. So taking that away is good. And for loads of people, it's anytime during the day or anytime over the next year solving it more than a public leaderboard. So I think taking the focus away from that is probably a healthy thing.

Jonathan Hall:

So for clarification, I've I've heard of Adventure Code for years. I've never participated, but it is based on the, like, the advent calendar leading up to Christmas on the Christian calendar or whatever. Right? Where you're Yeah. A lot a lot of people, you know, they get these calendars where they pull chocolates out of the box every day or something like that.

Jonathan Hall:

Yeah. Same concept same concept, right?

Neil Vass:

Exactly like that. New puzzle appears every morning.

Shay Nehmad:

Yeah. I've heard that you you mentioned chocolate, but I've heard that the advent calendar industry is very innovative in in America. You have like bacon advent calendars and jerky advent calendars and whiskey advent calendars.

Jonathan Hall:

I I have never used an advent calendar that gave you a treat until I was in Europe. And when I probably because we had kids then, and then, know, the kids wanted candies. So, yeah, I I don't I'm not I'm not attuned to that industry. I don't know.

Shay Nehmad:

I've participated in Advent of Code a few times, and I'm I'm not every year what what used to happen is, usually I would like tell my brother, yeah, this year this year we're doing it, let's do it one every day or something like that. I would I was all excited, I would open up a GitHub repo, Advent of Code, you know, dash whatever year it is, set up the project nicely, do the first three, four days and then something would happen and I would like drop off. But this year having it be only 12, I'm I'm seriously reconsidering actually doing it. What are the what is the nature of the of of the puzzles that makes you attracted to them, like, makes you wanna do it again, because you've done it already once. There must be something, like, you like about these sort of puzzles.

Neil Vass:

Yeah. He a lot of the same sort of themes come up again and again. There's generally one about a maze and one about something else, but it's different every time. It comes with a silly little story about saving Christmas that I like. But it's just I find it super satisfying because some of the puzzles you look at and you're like I wouldn't even know where to start with this.

Neil Vass:

But it prompts you to go and look into things and it's loads of stuff that if you've got a computer science background at all you've kind of heard of stuff but you don't know what is this for. So some tricks like I had to find, you had to find the best path through a thing, like the hills are different heights, you had to find your way around it. So a few years ago when I saw that I wrote my best bit of code that would let you get through that and it does fine on the small examples and on the bigger examples there's just too many paths. This was running for hours and we didn't finish. So I looked up like how do people do this kind of thing and found the Wikipedia page about depth first search, which I hadn't seen before, loads of people have seen it.

Neil Vass:

It's about eight lines of code. Looking at it I was like, see what that's doing. That might be a little faster than what I did. You've run it and it finishes in two seconds and you think someone made this before computers existed, how can you do that? And there's loads of different things that you've maybe heard of or not like sort of Dijkstra's and pathfinding as well for different cases and stuff like dynamic programming like memorization is like a magic trick when you find a puzzle that it fits.

Neil Vass:

But when I'd heard about that before, like in the abstract, I had no real idea how does that work and when would you ever use it. Some of this stuff does turn out to be useful in real life. It's not just for Christmas themed puzzles, but a lot of it is just really good satisfying brain exercise and that path of going from I could never solve this to Here's something that might work and then getting the star. I just really enjoy it.

Shay Nehmad:

Which I wanna put a pin in, it's a really fun brain exercise, and then talk about the point you mentioned or, oh, yeah, I can solve it in a second. Let let's put a pin in that, like, topic for a second. The reason you're on our show today is because I saw on, like, this shared, online community that you and I both frequent called Rants, that this year you're planning to do it. You posted a blog post about it and you're planning to do it in Go, which is sort of, it's gonna be a tool for you to like learn Go. Are you learning Go like from the ground up?

Shay Nehmad:

Are you using it at work? Why are you interested in it? Like what's what's the motivation here?

Neil Vass:

So I'd heard of Go but never looked at it at all. We don't use it at my work. It's one of like a lot of, you know, you hear about a lot of languages, till I go and evangelise after this, yeah. But I was speaking to a friend of mine, Chris Wilson, who was explaining why he likes Go so much, he's a lot, he pointed me to he's got videos on his channel, christo dev, that just had a really short intro to hear some interesting things about how Go works. So looking at that and just hearing him really interesting contrasting it to some of the other languages that I did know, how it's designed to be like almost boring.

Neil Vass:

So anyone who writes code and solves the same problem, it should look the same way, which has loads of advantages for being able to compile it faster, for new team members contributing, for all kinds of stuff. That really stands apart compared to some languages that have just every file you open is a new adventure. Someone's done this in functional style, someone's done this in something else. So hearing him enthused about it, I was kind of in the mood for looking for a new language anyway. That prompted me to look more into it.

Neil Vass:

And it was once I saw the sort of people who designed it and saw it was Rob Pike and Ken Thompson, I was like these are industry legends. I've been so interested in their work like going back decades, I had no idea they were still doing things. What would they invent if they everything they've learned, everything they've helped to shape the computing industry, what are they doing now? No offense to the third designer, hadn't heard him before. But the idea of these two, what are they doing when they can start from scratch and try and solve problems based on all the things, Plan nine from Bell Labs, Unix and everything else they've worked on over the years.

Neil Vass:

Just keen to see it.

Jonathan Hall:

That's really cool. I'm curious up to this point then, what languages have you been using and let's start with that and then I'll follow-up with some of the questions.

Neil Vass:

Yeah, so most recently, like I said, for a good few years I've not had to use languages day to day, so I keep my hand in for fun. From my computing career, what I knew best, what I'd used loads was C and Python and especially really liked Python as well. And then in recent years and for previous advent of codes, I've used that to learn TypeScript. So that was what I found coming back to JavaScript after not using it for a good five or six years, it was like a different planet and all the TypeScript on top was different. Previously, I've used I used to work at a tech consultancy, whoever the client's using, we'll come and use there.

Neil Vass:

So I've done a fair bit of C, C plus plus Java and other languages as well. So when I looked at Go and I saw the stars and ampersands and the little percent d percent s from print f, I was like, this takes me back. I've not seen this for a very long time.

Jonathan Hall:

And so up to now, what is your experience with Go? How far have you gotten or are you kind of waiting to really dive in in until this advent?

Neil Vass:

No, I feel I'd like to keep up with solving a puzzle every day and if that's the first time I open a textbook and see how you try and make Go like installing your ID, I'd be in trouble. So I've got the Advent Accord puzzles, they stay open forever. If you want, you can collect them anytime through the year. So I found it before when I was looking at TypeScript. It wasn't December when I first looked at it, but it was a super good way to try and know a language.

Neil Vass:

So I find when you read the tutorial or it gives you a toy problem, that's okay for learning the syntax, that's useful. But then I want to know is, can this language get out of my way? If you're solving something that's a bit difficult, I want to think about cues and structures and solving the puzzle, so I need to not be stumbling over the syntax. So just give me something that'll occupy my mind and I'll try that. So I went through the Tour of Go and some of the tutorials on the homepage and tried to do the effective Go because I'm interested in how do people actually write this rather than how will I mangle it to do a one off script for a puzzle.

Neil Vass:

And then I went to the twenty fifteen puzzles that I hadn't finished yet and just had a go at trying to solve these. It makes you reach for different tools. It makes you think, how do I parse this text file that may not come up otherwise? How can I make a first in first out queue? Because apparently there's not one in the standard library.

Neil Vass:

So it was just really good for prompting you to look into more of the language.

Shay Nehmad:

There isn't a queue in the standard library?

Neil Vass:

I may need to search better. I needed a FIFO queue, and I didn't find one.

Jonathan Hall:

Oh, I don't think there is one.

Shay Nehmad:

Yeah, yeah, yeah. That doesn't sound like that sounds like, I I would rig one up with a channel.

Jonathan Hall:

Well, okay. I was gonna say there's channels which aren't the standard library, but they are FIFO queues, but they're they're built into the language, so

Shay Nehmad:

I would I would, I am interested in like, so Jonathan, hearing someone who's basically done the tutorial intro to the language, I assume you have Go installed on your machine and your favorite editor, online. What's your like, what's your like resource now? Do you think you would recommend someone to go through tutorial x or, like, book y or do you think this is enough for Neil to go ahead and conquer the advent of code? Jonathan, listeners is looking up something on his machine because I think he's trying to find this

Jonathan Hall:

a question for me? I missed it. I'm sorry.

Shay Nehmad:

Yeah. Yeah. I was wondering if you'd recommend Neil to go through through Oh, he's doing that. Resource. Yeah.

Shay Nehmad:

Or or is it, like, enough to to get started doing, the, you know, just the basic homepage support?

Jonathan Hall:

I don't know Neil well enough to make a recommendation because every person's different. Right? Mhmm. Some people like to read a book. Some people wanna wanna just dive into the code.

Jonathan Hall:

Some people wanna watch YouTube tutorials. I I don't know Neil well enough to make a recommendation. I I think it's a better question for Neil. Are you comfortable with where you are, or are there gaps in your knowledge that you feel need to be filled before you can do this advent of code?

Neil Vass:

Hey. That's a good question. I think stuff I've had was really good for trying to introduce you to how Go's works. And I know it's designed to be a small enough set of basic features that people can get going quickly. So it's been really good for that.

Neil Vass:

Some things I'm not as sure about yet. I've had a little play with go routines and channels, understanding more about where they are where they might be useful kind of tricks you could do with them. You mentioned that's what you you might use for FIFO queue. Hadn't occurred to me. Is there any good resources to read more?

Neil Vass:

100 creative ideas for using, channels.

Shay Nehmad:

I don't know. I don't know if it's a good idea. I just know it's like the first thing that came to mind.

Jonathan Hall:

A channel literally is a FIFO queue. That's all it is. But it's an incredibly simple one. So it may or may not serve your needs. I mean, but I would look there.

Jonathan Hall:

I mean, if you need something that persists, you know, on a database, obviously, that's not your answer. If you need something in memory that's, you know, fairly temporary, it might be the perfect answer. It depends on your needs. But it is a FIFO queue, so, know, it's it's not a it's not a question of whether it doesn't, it's a question of whether or not it's robust enough for the particular needs you have.

Shay Nehmad:

Yeah. Whatever features, you need. Just don't forget, you know, you you talked about the languages you're coming from.

Neil Vass:

Yeah.

Shay Nehmad:

So C Sharp and Python are like right above, Go in terms of, abstraction and high levelness and whatever I feel. And C and C plus plus are like below, right? You manage the memory yourself and you mess with all the pointers and there's fun here and there's fun there. But I think you'll find as you as you start to solve this stuff with Go, you you can get, like, Python level scriptage. Yeah.

Shay Nehmad:

Like, oh, I just wanna whip up a quick thing that reads the file. Okay. So I don't have to, like, allocate buffer space right now. I'll just, like, read it using a reader. Oh, that just worked out.

Shay Nehmad:

Which I I remember is a big thing of Advent of Code. Right? You get a big text file with all the, like, input data. Here are all the calories that the elves are carrying this this month or whatever and you need to parse the lines. But it is, like a compiled language and you do have access to the memory and whatever, so know, if you wanna think about these things, you you could.

Shay Nehmad:

So it's nice. It it it should be a, it should be a comfortable balance for someone with your background, I feel. You just have to try to remember when you're looking at it through the Python, like, c sharp lens and when you're looking at it through the low level lens. Yeah. You did mention how people are actually using it.

Shay Nehmad:

I'd recommend Learn Go with Tests. This is like my number one resource, not sponsored or anything. I don't know who that person is, but there's a resource called Learn Go with Tests, especially for people coming from other languages. When I taught the people who write Python in a company I used to work, at Orca, that's the resource I used. Because it shows really how people are using it practically and also lets you practice TDD a bit.

Shay Nehmad:

So I think for advent of code is a good thing because you want to think about the solution and like define it. Advent of Code is basically a TDD simulator, right? You get a failing thing and you got to make it pass, sort of.

Neil Vass:

Yeah. Oh, it's fantastic for TDD because they always say, I want you to solve this. For example, given this, you should see that, given this, you should see that. And some people skip that and wonder why their multi thousand cell thing hasn't given them the right answer. And those tests are fabulous.

Neil Vass:

And it's also for, oh, I'll just change this to make it a bit faster, why have all my tests broke? So it's good for that.

Shay Nehmad:

Oh, yeah, for sure. I've I've had that when I tried to do the advent with Rust. I like the changes and I didn't understand their meaning, but then the moment I started doing a test there, I

Jonathan Hall:

I That's how Rust is supposed to work, right?

Shay Nehmad:

Yeah. You heard Cloudflare. They they know it best. One unwrapped call away from breaking the entire Internet. Anyway, I'd really recommend Learn Go with Test.

Shay Nehmad:

I think it's literally called learngowithtest.com or something.

Neil Vass:

Great. I'll have a look.

Shay Nehmad:

Oh, no. It's a it's a Gitbook. But I'll send you the link. It'll also be in the show notes, listeners. Yeah.

Shay Nehmad:

It's just a great resource for learning how to do it, like reading files or if you're worried about, like, concurrency and channels, there's a whole section about that. And I feel it's very pragmatic. Like, you you learn how people are actually doing things. And even though it's a toy problem, it's patterns I saw over and over and over again.

Neil Vass:

That's really good to know. One thing that has, loads of the things in Go, if you write something, the the standard way to do it is like this, idiomatic Go is laid out like that. And all of that I've been 100% fine with, except the way I'm reading it is they encourage you not to use XUnit style assertions in your test. So you could quite easily get a library or write a little reusable function that says assert. Equal, here's the two things.

Neil Vass:

But it seems to encourage me to write got is this, want is this, if got not equal, want then here's the message. And those six lines in every test, or if you do a table test, it's quite a lot of scaffolding. And I'm just so used to making my tests as simple as like, get that down to that. I say, I know exactly what that does and I don't have to think, so I have to read less in my tests. So that's encouragement.

Neil Vass:

I might be misunderstanding it. Encouragement not to do XUnit style That's one part that surprises me.

Jonathan Hall:

I have strong opinions on was just about to What

Neil Vass:

do we like strong opinions?

Shay Nehmad:

What is your opinion about this, Jon? We had an author of, like, one of the assert libraries on the show

Jonathan Hall:

Maintainer. Super He's not the author. He's the current maintainer.

Shay Nehmad:

Yeah. The current maintainer. Like, two years ago. He was the current maintainer at the time. Who knows where he is right now?

Shay Nehmad:

Yeah. So what are your opinions, Jonathan? What is your recommendation for Neil with this I feeling coming from other

Jonathan Hall:

think Testify is a terrible package, even if you like assert libraries, because it's so inconsistent. And I think that we had the same discussion with him on the channel. You know? And that that was back what right after he'd said decided he's not gonna do a v two, even though he knows there's some breakage and and the that API is not ideal. And a v two could solve that, but then he'd have to maintain two versions forever because nobody you know, world isn't going to switch to a v two right away.

Jonathan Hall:

So he would be stuck maintaining two different APIs essentially forever. So, yeah, first first, even if I liked assertion libraries, that's a bad one. I don't know if there's a better one, but that's a bad one. Second, I hate assertion libraries, so it doesn't matter to me whether there's a good one or not because they're all terrible.

Shay Nehmad:

My, take on this is that asserts are fine, I do use assert libraries, but table driven testing is something that's for me missing in other languages. Like, love, defining the struct with the name and the fact that you run Go test and it you'll see it in your, like, ID, whatever ID you use, they already know how to deal with table driven testing. Go. The LSP knows how to deal with it. So it looks really good.

Shay Nehmad:

You have like the file colon, the like the test name slash the test case within the table driven test. This is something I've carried from Go to other languages. Like, you'll see my Python or TypeScript test now. I would if I have a test that's like, okay, this function can take I wanna test these nine different cases of like, one to three, one to two, whatever, I'll do it in a table driven manner even though in, like, Python or TypeScript, it looks worse because I think it's a really strong pattern. The moment you add enough parameters for your table driven test to be really, really big, it just sort of forces you to understand that your function maybe is taking too too many parameters.

Neil Vass:

Okay.

Shay Nehmad:

I would I would reconsider your opinion on a table driven test. I think it's a strong

Jonathan Hall:

feature. I love

Shay Nehmad:

you, will never write got, it is different from want again. I'm with you on that one. That's just stupid.

Jonathan Hall:

So let me tell you why I think assertions are bad. And of course, everyone's welcome to disagree with me. First off, it's reinventing language features. We already have if. In fact, I made a whole video about this on April fool's day introducing my new assertion library, which was just if wrapped in a function call.

Jonathan Hall:

Because it's, you know, literally it's if. That's all it is. You make the argument that it's easier to read. I disagree. I think it's harder to read.

Jonathan Hall:

It's easier to read in some cases when you know exactly what the assert does. But this goes back to the problem with Testify where sometimes it's inconsistent. You don't know what it does and understanding what it does, especially in complicated cases where you're maybe comparing slices or there's an empty slice compared the same as a null slice and stuff like this. You don't know what it does. You do you know exactly what an if does because it's just right there in front of I think that at a fundamental level, this gets to the same argument as do we like Go's error handling style or not?

Jonathan Hall:

If you like the verbosity of Go's error handling style, then I think to be consistent, you have to also not like assertions.

Shay Nehmad:

That's a good argument. I haven't heard that one.

Jonathan Hall:

And then I'll add one other thing because this came up when I was at Go West recently talking to some folks there. One of the arguments I got, I've gotten this other places too, was I like the idea of avoiding assertions except for when you're doing deep comparison with, you know, a struct or something like that. You know, comparing each field individually is annoying as hack. I agree with that. The official guidance from the Go library or the Go team actually says don't do that either.

Jonathan Hall:

Use the Go CMP package, which does deep comparison with incredibly configurable options. You can ignore certain fields, you can do approximate quality on certain fields on floats or on timestamps and stuff like that. Far more configurable than any assertion library I've seen. That doesn't mean there isn't one that does the same thing, but you don't need a certain don't need to couple your assertion libraries to your deep equality checks is my point, right? Those are actually different concerns.

Jonathan Hall:

You can solve one without adopting the evils of the other. No, I'm going to stop ranting it's really interesting to hear your

Neil Vass:

views on that. I was, as I was going through this library, how we tend to write Go, I know lots of people get hung up, you know, tabs of these spaces and one true Brace style and I'm like I don't care. I'm just pleased. Tell me how you do it, I'll do anything and nothing bothers me. Want to know how you do it here.

Neil Vass:

And then I got to the test and I went oh, I'm wrong. I am wedded to things. So it's just interesting. I'm sure getting used to them and understanding more why they're recommended is part of the the journey. So it's it's interesting to hear.

Neil Vass:

You agree with that? I've not misread

Shay Nehmad:

the I definitely I definitely think for your first foray into a new language whether it's Rust or Go or whatever, I do think it's important to like read the room and act like everybody else is acting for a while and then once you devote the taste to like, okay, why do people do this in Go so for so much? You can have a, like, nuanced opinions like Jonathan. Oh, well, the CMP package blah blah blah, you know what I mean? So I would definitely try to, like, make my code look as as similar as possible to, you know, the Go recommendation and the standard library, which is by the way a great resource to read, like, some the more high level stuff, it's a great just thing to peruse, just clicking into it and seeing how it works pretty easy, and some learn you know, just some examples. Try to make it look like that.

Shay Nehmad:

And then once I read the room and I can, like, formulate my own opinions, okay, now I'll bring in my assertion library because I I'm do doing it, like, from a knowledgeable place and not just trying to make my code look like a TypeScript. You know what I mean?

Neil Vass:

Absolutely. And I've definitely seen that mistake when you've seen people contributing to our code base and it's in Python. You say, do you usually write Java? It really comes across People

Shay Nehmad:

trying to look at, go from a Java, like, object oriented perspective. You tend to write, like, tons of lines of code that, you know, Jonathan would probably look and be like, we can delete all of these. They they are unnecessary and the program will do exactly the same.

Jonathan Hall:

Let let let me preface or not not preface.

Shay Nehmad:

Let me let me let me

Jonathan Hall:

add to what I just said. If you're new to Go, and this isn't just for you, Neil, but it's for anybody listening. If you're new to Go and you're comfortable with the assertion style tests, I would much rather you do that than, like, say, I don't understand Go tests. I'm not gonna do Go or I'm not gonna write tests. Right?

Jonathan Hall:

Yeah. What gets you there. I have my opinions for why I like what I like, but, or my reasons for my opinions, but you know, do what works for you. And if that means writing tests that I think are ugly, God bless you. I'm not gonna see your tests anyway.

Jonathan Hall:

It doesn't matter.

Shay Nehmad:

Cool. So Neil, so you're excited about, doing this, advent calendar, I assume. You mentioned tests are a bit uncomfortable, for you. I'm wondering, like, looking into it, do you see yourself other than, you know, for fun learning Go? Is there anything that will be very compelling to you to the point where you bring it back to the people you manage at work and be like, man, we gotta look at this Go thing?

Shay Nehmad:

Or is this strictly a hobby project as far as you're concerned now?

Neil Vass:

So for right now, I'm just interested to look at something, especially if it's very different than the way I've seen languages done before. So just already hearing about the decisions that drove the shape of Go has been interesting. I think there's a Rob Pike talk that mentions concurrency is not parallelism, which I've not thought enough about before. Apparently no one else has because that's why he gave the talk. But he says TypeScript and other languages have chosen async the way, which he thinks is a mistake and pointed me to the communicating sequential processes paper from C.

Neil Vass:

A. R. Hoare. He thinks everyone should read that. I'm like I don't even know the difference.

Neil Vass:

So just knowing what the trade offs, what decisions the languages you use daily have been making is interesting. I think if I learned more about Go, if it really is the case that it can more reliably type safely, run things faster, be easier to write and be over there, I might go making a case for it somewhere but that's not my intention at start. I just want to play around with Christmas themed puzzles to begin with.

Shay Nehmad:

Well, it it starts like that. Obviously, I'm biased but and also I'm kind of a hypocrite because my back end is TypeScript right now. But man, whenever I deal with, like, TypeScript nonsense, trying to bolt in types to the language on top of the world's, like, most typeless, engine that was meant to run-in the browser, I'm like, man, I wish I had some Go right now to write. I I think one hidden side of the language design, they they actually spell it out, but you have to work with it for a few days to to to really feel it, is, the developer experience. I think Jonathan will back me on this.

Shay Nehmad:

It compiles fast, the language server is fast, you don't fuss around with with like formatting, just go format. That's how it's done. No question. Really gets out of your way, I which I like a lot. I've I've been basically spending a lot of my time trying to make TypeScript like that, just adding more and more linters, adding more and more tools, adding more and more formatters, trying to make it come close to the developer experience with Go.

Shay Nehmad:

So far unsuccessful. Before we we finish this interview here, I really wanna point people, towards your blog other than your promise, that now is on air and like recorded. You can back out of it to, you know, do the advent calendar and go and let us know how it goes. What what can people find in Neil's notes? Neil-vast.com in the show notes as well.

Neil Vass:

Yeah. I've really I've really enjoyed having a having a blog. Everything I write, I think. I don't know if anyone else in the world cares but I enjoyed writing it so it was good. And sometimes you get some happy accident like I posted it on that Slack and here I am on a podcast now.

Neil Vass:

Someone did care about me writing about how I'm planning to approach Christmas. I've written in the past about different things I've tried with Advent Code, like how does memoization work and what's that useful for outside of Christmas themed puzzles. And also quite a lot of ongoing headaches for anyone who works in the tech industry. So I've got a multi part blog series and minimum viable estimation, the last words I'll ever have to say about it because I'm tired of talking about that. And I've also got my stakeholder management advice called how to disappoint people, which is just things I find myself talking about or reflecting on again and again.

Neil Vass:

I've put it all down there. It's useful just for me to keep coming back to because I forget all my own best advice. But a lot of other people have mentioned they like seeing it too. So if you want to have a look, I'd appreciate it.

Shay Nehmad:

I I really like the blog. It's, pretty like, there's a lot of things here that I would find as interesting. How I do that in TypeScript, what are OKRs, things that seem to be interesting. I like the simple style. I appreciate it a lot.

Jonathan Hall:

Mhmm.

Shay Nehmad:

And I see you're, building there's a technical note that you've been building another site, neovas2.com.

Neil Vass:

Yeah. When I started this, vlog, I knew if I stopped to think about what's the best blogging stack, what's the right way to do it, that's all I would do. It's really hard to sit down and actually write any posts. So I set myself a challenge. I would like a blog, I would like to have one by this afternoon and publish something on it.

Neil Vass:

So one quick search, what's the most painful way to get started? Some companies said they would host WordPress for me and I wouldn't have to think about anything and I got going. I think I've put on the link there about why registered neovast2.com in a fit of pink. It was after the end thing had gone wrong with this blog and I got frustrated with it. And I think you just have to know what's going on under the hood on things.

Neil Vass:

WordPress needs caring attention no matter what anyone tells you. So I declared I will write a better blogging engine myself, but that's mostly a vanity hobby. Whenever this blog annoys me enough, I'll go and spend another week or two trying to build something from scratch over there. One day I'll have my own thing ready. I'll migrate away from the current stack.

Shay Nehmad:

What's your recommendation, Jonathan? I know what's my own.

Jonathan Hall:

I just use Hugo.

Shay Nehmad:

Me too. Yeah. So Hugo is a Go based site generator thing, which I've been using since 2018. It's really good.

Jonathan Hall:

It's it's good. It's really fast, but not that doesn't really matter for a static site generator, right? I mean

Shay Nehmad:

I actually like the fact that it's fast enough that I can It's nice. Edit. I can edit like the markdown or the templates, and see it on my local thing

Jonathan Hall:

in my complaint about Hugo is how rapidly it changes.

Shay Nehmad:

And It is a little breaky.

Jonathan Hall:

Updating it staying up to date is a full time almost a full time job sometimes, but it does have a lot of nice features.

Shay Nehmad:

Yeah. Yeah. It's super customizable. Like when I run my site locally to test the, you know, some feature or whatever I wanna do, like I wanna introduce math equations or I wanna introduce mermaid or I added this little flashcard thing. I could in in a few minutes, I added a a template that, like, says local server, you're running locally right now.

Shay Nehmad:

Draft mode, this post is in draft, like all these tiny features I could just go around and mess with. And then it's great because I go around and mess with my blog stack for like two hours and like, man, I didn't have time to write the blog. Well, maybe next week.

Neil Vass:

It's easily done. Well, maybe once I've done this advent of code in Go, I'll be expert enough that will motivate me to go and take a look at Hugo and see if I wanna try setting that up next.

Shay Nehmad:

I would definitely check it out. Jonathan, you wanna do our stumper question? It's gonna be kinda weird for this one.

Jonathan Hall:

It is. So the question is, who has influenced you the most in your journey with Go? I'm guessing there's not a whole lot of people to choose from right now.

Neil Vass:

It's a short journey and we may have mentioned them all briefly already. So like I said, it was my friend Chris Wilson, who pointed me to his Chris Doo Dev YouTube thing and talked me through why he likes Go so much. That's the only reason I'm looking at it now. And then of course the Rob Pike and Ken Thompson combo if they hadn't created it and Rob Pike in particular doing his talks about what we got right, what we got wrong and other things to make me interested enough to say, right, I see what you're trying to do here. I want to come and look at it.

Neil Vass:

And that's it so far.

Shay Nehmad:

Awesome. Good answer. Well, Chris, DooDev, we appreciate you bringing, if you watch that movie, you know, Hot Fuzz, one of us. Welcome. Welcome to the Gopher community and we hope you have a great stay.

Shay Nehmad:

It's pretty chill around here on these parts. Fantastic. Thanks a lot for coming on the show.

Neil Vass:

Thank you. It's been fun.

Jonathan Hall:

Awesome.

Creators and Guests

Jonathan Hall
Host
Jonathan Hall
Freelance Gopher, Continuous Delivery consultant, and host of the Boldly Go YouTube channel.
Shay Nehmad
Host
Shay Nehmad
Engineering Enablement Architect @ Orca
๐ŸŽ„ An Adventful Sweet 16 for  Go! ๐ŸŽ‚
Broadcast by