Cup o' Go

★ Support this podcast on Patreon ★

Creators & Guests

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

What is Cup o' Go?

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

Shay Nehmad:

This show is supported by you. Stick around till the epic to hear more. This is CapaGo for October 1, 2024. Keep up to date with the important happenings in the Go community in about 15 minutes per week. I'm Shay Nehmad.

Shay Nehmad:

Today, we have just a couple of news items. I'll try to keep it super short and then a super interesting interview with Willem, Willem dot dev. You probably saw his blog, if you haven't, you'll learn about it in a few minutes. First up, Go 123.2 and Go 122.8 are released. The releases don't seem to include any security fixes.

Shay Nehmad:

It's mostly compiler and run time crashes. So honestly, if you, like, don't experience these crashes, you don't have to upgrade. It's still a good idea. The issues themselves are really interesting if you wanna look at the code, alignment issues with, 128 bit ints or timer stop sometimes returns false or mysterious crashes and even nondeterminism with range over func. It's a really cool reproduction where if you add a print statement, it doesn't crash, but when we we remove this the print statement, suddenly the compiler has some sort of memory issue where it's allocating it to the stack, but it should actually be in the outer frame just like compiler generating bad code.

Shay Nehmad:

And the reason it's in 1.23 is, just because it's a compiler bug, and there's no workaround. Even though it's gonna be in 124 for sure, it was back ported to 123 as well. However, if you're not using the range over func, feature yet,

Jonathan Hall:

you should be good.

Willem Schots:

There are a

Shay Nehmad:

few other issues here. Like always, just upgrade. It's probably gonna be fine, and you should try to stay on the latest, patch of your major anyway. Next up, we have a something kind of, out of left field for us. Let's talk about Windows.

Shay Nehmad:

Quim Montulf, who's a senior software engineer at Microsoft jumped on our channel and told us, about a really cool blog post he wrote, which is gonna be in the show notes, about high resolution timers in Go. So apparently, the Go scheduler in Windows doesn't work as precisely and the implementation sort of conflicted with the scheduler. So a lot of, versions ago, it worked and then it stopped working and there was no good solution and now the high resolution timers made their way back to Go's standard library. And there's a lot of, code examples here, like really simple and, you know, if your application requires precise timing, now you can use it in Go. And thanks a lot for jumping on the channel and and letting us know about it.

Shay Nehmad:

This was something that was introduced in Go, 23, Go 123 or 123 as we've been known to call it here on the show. One last highlight about this blog post, there's a really really cute go for sleeping on a on a pillow and it says go sleep. I really really like that one. Nice art there. There's a whole treasure trove of, Go posts in the Microsoft for Go developers.

Shay Nehmad:

They've been pretty pretty active there since we, like, saw this getting opened last year. It's mostly about build now available, build now available. But it's good to see real blog posts here, not just, oh, build is available, build is available. Funny thing is I try to like this post then it says log in to like and then the login page is the Microsoft login page, which I never remember the password too, then I always have to refresh it. So, Quim, I like this, I just don't like it enough to reset my Microsoft password yet again.

Shay Nehmad:

And, you know, create some more cool changes for, Go on Windows and and let us know about it. Really cool stuff. Next up we wanna tell you about a new release for Air. Air, I've ran into it recently, I think it's a really cool project to mention. It's live reload for Go apps.

Shay Nehmad:

So if you've been coming from the front end world and you're used to running npm start and then every code change, it the code change immediately reflects in your browser, this is a similar thing. I've learned about it from work and apparently, if you write HTTP endpoints, it's very useful. Right? You save your code and then you can curl the HTTP endpoints and see what it does. I've known some people who've had their test suite run on every save to get this sort of feedback loop.

Shay Nehmad:

If you're using TDD, then probably you don't need this, but, you know, if you're just trying to develop something and you wanna really quickly refresh the code to see what happens, seems like air dash versus air is a really cool solution for that, problem. Also has nice output, like, the the terminal UI looks pretty good. The reason we're meshing it is because it just had a new release 2 days ago, 1.61.0. This, release includes mostly fixes, fix color output again on Windows, by the way, include file overrides, fixing some broken code, silent flags in the configuration file. So looks like a lot of, good contributions and and, like, this project is pretty serious and fixing bugs.

Shay Nehmad:

Also, very interesting to see that there are a lot of new contributors. Like, a lot of the people who are included in this release are new contributors to the repo, which to me seems like a good sign for this project's help. It has a lot of issues, a lot of pull requests, a lot of stars. Actually, kind of surprised I've never, seen it before. So if you're using Air, you have a new release and it's gonna be even better if you've never heard about it like me.

Shay Nehmad:

Next time you try to do some Go programming, maybe you should give it a shot. Finally, for today, we wanna mention a really really nice blog post that I found. It's called glad I did it in Go. Now, obviously, we like Go here, but still worth taking it at face value. Thorsten Ball has, I think it's a substack called register spill, which I'm subscribed to, and the title is glad I did it in Go.

Shay Nehmad:

Thurston apparently had a project called writing an interpreter in Go which is sort of an educational book and you end up with a fully working interpreter for the monkey programming language. The monkey programming language is a language mostly designed for the book. It's very educational. It looks simple and, you know, it has some data types, has some, you know, functions and and if else return, like, what you would expect. The monkey also has closures, 1st class and higher order functions seems pretty complex.

Shay Nehmad:

And in this book, writing and interpreting Go, Thorsten goes through the process of writing an interpreter that actually makes this, language viable on your interpreter. Seems very cool for learning by building, etcetera, etcetera. I haven't read it. It'll it looks really good. The blog post is about whether Thorsten is happy with the fact that he used Go for this book.

Shay Nehmad:

And it mentioned Go as a language that has very long shelf life, which is something I I I really like. Instead of, you know, every Python project or JavaScript project where you try to whip up some old code and run it, you have a very long ramp up time usually. Oh, I need to install this tool and that tool and this tool and that tool until you can get it to work. Thorsten said the code I wrote 8 years ago, no warnings, no errors, just compiling and running on go 123. And the code hasn't changed since he started writing the book.

Shay Nehmad:

Just added a Go mod, 4 years after the original release and that's it. So and and people have been also positive about how easy it is to read Go, which is also a great contributor to the shelf life of this project because code that's easy to understand is easier to, like, maintain overall even for people who didn't, know Go, according to Thorsten again. So a really good blog post if you're trying to convince maybe someone at work why Go is a good choice other than the features like, oh, right now it can do concurrency very well or right now it has these libraries that are good or right now it's using these and those projects. I think this is a really good blog post to share to say, like, hey. We're gonna work on it and then it's gonna work forever.

Shay Nehmad:

And the maintainability cost for tooling and things like that is gonna be relatively, small compared to other, text stacks that you can choose that even if they are they look more feature rich, you know, they're very complex. Deno 2 has just been released, with a pretty funny video where they say, program should be simple and they sort of dunk on a node, but it just goes to show how difficult it is to maintain this, like, JavaScript tech stack compared to what Thorndston is sharing in this blog post. And if you wanna take a look, the SubStack link is in the show notes. That does it for this week. No lighting around this time.

Shay Nehmad:

We're just gonna jump to the interview with Willem, but before that, a quick ad break. Like we mentioned at the top of the episode, this show is supported by you. There are a few ways to support us, but first, how do you reach us? Capago.dev, has all the links you need including links to previous episodes, transcripts, our Slack channel which is, you know, people tell us what to talk about and if we like it, we do. It's 450 members strong at this point, which is super cool.

Shay Nehmad:

Cup o go on the gopher slack, kebab case with dashes. You can also email us at news at cupago.dev, that is news at cupago.dev. If you wanna support the show, since you like what we do here and you want us to keep doing it, there are 2 main ways to do it. The first one is directly financially via Patreon. If you join as a Patreon member of with $8 a month, this will help us.

Shay Nehmad:

This is a very expensive hobby to maintain. So, we really appreciate all our beautiful Patreon members. Thanks a lot y'all. If you wanna join this beautiful group, you can go to our Patreon page and pitch in. You can also, share the show with a colleague or a friend if this episode included the thing that you're gonna send in Slack later.

Shay Nehmad:

How about including the, oh, I heard it on this podcast. You should probably subscribe in the Slack message. You can also leave a review on Spotify, Apple Podcasts, or wherever you listen to your podcasts. It helps us climb the charts, which is nice because more people will listen and then we'll learn from more people and then the conversation will grow. Overall, a positive for us.

Shay Nehmad:

Thanks a lot for listening. We'll catch you all next week. Coming up, we have an interview with Willem, which we talked about his blog post a few times in the past. When we got off the interview, we just said, woah. This was a really fun interview, and then we had to go.

Shay Nehmad:

So this is why I did the news all on my own this time. We're hoping to get back to regularly scheduled programming next week. Here's the interview. Hey, Jonathan. What's up?

Jonathan Hall:

Hey, Shai. How's it going?

Shay Nehmad:

I hope we're not recording. So I was totally undressed in the middle of the street, everybody looking.

Jonathan Hall:

Wow. Oh, no. That's embarrassing.

Shay Nehmad:

It's are we recording?

Jonathan Hall:

We are.

Shay Nehmad:

How will we prevent sensitive data from leaking? Let me go to the Internet real quick. Oh, there's this beautiful blog here from William called prevent sensitive data from leaking. Maybe you can tell us more about it.

Jonathan Hall:

Let's get him on the on the line. Tell us number.

Shay Nehmad:

Hey, William.

Willem Schots:

Hello. I see that you have some sensitive data you don't want getting out.

Shay Nehmad:

And I I don't know if you're if you know anything about it or you're a Go podcast. Any chance you can help?

Willem Schots:

I will check my my calendar, but there's some I can probably do something. Yeah.

Shay Nehmad:

Hi, William. How about you present yourself to the people?

Willem Schots:

Yeah. Hi. I'm I'm Willem. I, I've, I run this website called willem.dev. There's there's a bunch of Go articles there and more stuff coming.

Willem Schots:

There's some projects as well, some random stuff. But, yeah, check it out. What what else do I do? I live in Hamburg, Germany. I'm originally from Holland.

Shay Nehmad:

Wait. Hamburg, Germany or Holland?

Willem Schots:

I am I'm living in Hamburg, but I am originally from Holland. So

Shay Nehmad:

Oh, cool.

Willem Schots:

Yeah. Netherlands. Whatever you want to call it. I'm not.

Jonathan Hall:

Apparently, leaving Holland is the cool thing to do these days. At least among the people on the show.

Willem Schots:

Yeah. No. For sure. For sure.

Shay Nehmad:

Hey. I also left Holland. I went in for, DevOps days, and then I left. Yeah.

Jonathan Hall:

There you go. Everybody here has left Holland.

Willem Schots:

Yeah. What do you like most about leaving Holland?

Jonathan Hall:

Sunshine? Yeah. That would be amazing.

Shay Nehmad:

I like, the inspiration of riding bikes. You like ride bikes in Amsterdam. You're like, of course, I can bike everywhere. And then you ride once and then, like, even 50 people try to run you over because there's no bike infrastructure. And like, oh, that's why not.

Willem Schots:

Yeah. No. Even here in Hamburg, which is, for for German standards, fairly bike friendly, I'm I'm still, a little bit terrified, to be honest. Yeah. So, Willem, what do you do with Go?

Willem Schots:

I, I, contract out my skills. So I, mostly do back end, microsurface kind of application things.

Jonathan Hall:

That sounds like a kind of thing you could do in Go very easily.

Willem Schots:

Yeah. No. I I would agree. Mhmm. It's, yeah, it's very suitable.

Jonathan Hall:

It is almost redundant to say I write microservices in Go. Right? Yeah. No.

Willem Schots:

I know, but it's, no. And and yeah. Currently, on on the contract mostly doing writing, actually. So, also thanks to the the website doing developer documentation, that kind of stuff.

Jonathan Hall:

So we've talked about one of your articles in the past on the show, which which Shay alluded to, the one about protecting, HTTP sensitive information in HTTP logs and whatnot or or just logs in general. And and you have a whole bunch of, articles that come out every few weeks, it looks like. Yep. And also a wide variety of governing topics, the rich set of of knowledge here on your website. Why did you start writing this website?

Jonathan Hall:

What what inspired you to

Willem Schots:

Yeah. So I started probably what was it, early 2023, and I was kind of like looking for new projects. And I was like, am I going to learn a new programming language or am I going to pick up, you know, a new skill set more? So I was like, okay. I'm just going to I know about Go.

Willem Schots:

I'm fairly confident in my skills in Go. I'm just going to put it all out there on paper well, on digital paper, I guess. And present it as well as I can and see see if that helps some people. Of course, there's also a little bit the self promotional angle there, but the the main goal was was to help and is to help.

Jonathan Hall:

And is that still your motivation? Is it to help others or or has this self promotional angle taken root?

Willem Schots:

No. No. Definitely not. The, the helping is, is definitely the main main motivation. Yeah.

Willem Schots:

Good. Just it does feel good to, you know, see people respond to it and see that it actually helps. Mhmm. And it's it's just still, for myself, also great learning opportunity. The writing things down actually exposes so many gaps in your own knowledge that it's fantastic.

Willem Schots:

It's, I I don't think I will ever really learn anything again without also writing about it. It's, it's the best way, I would say.

Shay Nehmad:

I completely agree. I've I've been helping my brother. My brother and I

Jonathan Hall:

are working on a business startup together, and he's very green in the develop software development space. So I've been helping him with things like even just basic how do you create a pull request and get things like this. And it it it's so amazing how much I learned that, like, I just took things for granted and and thought I knew the answer to something. And until I try to explain it, like, wait, actually, I don't I don't know if that's the right way to do the thing or or if these assumptions I have in my head are actually true. Let let me go research that first.

Willem Schots:

Yeah. Yeah. No. For sure. I I I can totally relate there.

Willem Schots:

It's, yeah, it's amazing. It's it's it feels like a cheat code a little bit.

Shay Nehmad:

You know, I had, we had, Josh Bleeker Snyder on the show a long time ago at this point, maybe over a year. He's one of the people who's contributing a ton to the Go compiler and he has a a lot of work in has his fingers in a lot of different pies. After he did the show with us, he also started a podcast, about, like, where he just talks to people. And he brought me on and the thing I talked about for, like, an hour. Why writing is the best, like, developer skill?

Shay Nehmad:

There is writing shit down.

Willem Schots:

Yeah. Fully agree with

Shay Nehmad:

you. But I listen. This is not just a write only for you to learn a website, the thing. No. I I I opened it.

Shay Nehmad:

The first thing that caught my eye is the fact that the code snippets, I can run them, which was really really cool. And then, I took a step back and I was like, wait, this person that writes Go, he's a back end developer. Why is the site so pretty? So this is not really Go development, but I have to bring it up. How comes the site is so pretty?

Shay Nehmad:

Are you, like, an, an artist or something? What's going on?

Willem Schots:

I I did actually do a couple of months of art school. My my original background, I would say, I've always wanted to be an illustrator first, then I was more into graphic design and then it turned all development and programming and web development and and that stuff, which also, you know, career wise, was probably a bit of a better move. Mhmm. But the the current state of the website also, yeah, my girlfriend deserves a lot of the credit in, helping out with some of the especially the color choices, some of the layout choices.

Shay Nehmad:

Oh, shout out the villain's girlfriend because it looks really good.

Willem Schots:

Yeah. No. That's a major, major credit to her. She's fantastic. So That's really cool.

Shay Nehmad:

I I'm like I'm trying to under I'm trying to figure out in my head how do I carry this over in a audio medium. Yeah. Because I can't really say it's blocky and it has colors. That doesn't really work. I would say, imagine these sorts of, like, French European artists that have they just paint a bunch of squares and then it sells for $15,000,000 but with ghost snippets inside.

Willem Schots:

Yeah. Yeah. That's that sounds about it, actually. Yeah. Maybe I should print it out and try and sell it.

Jonathan Hall:

There you go. Yeah. Just just put a buy now buy prints now link on your on your page and so is your girlfriend then a a web designer or she just happens to be

Willem Schots:

No. She, she's she's actually an entrepreneur, but she did start out as a as a a graphic designer illustrator. Cool. Cool. Yeah.

Willem Schots:

Yeah.

Shay Nehmad:

So I I wanna talk about a specific, thing on on the side before we, the sort of veer off. The it seems like the blogs you you write, whether it's, really articles or more like short snippets, are cases where you've met an actual need when developing back end web applications and then found something very generic to write about it. So, like, I'm interested, for example, in one of your latest post, sets and go. Yeah. I never thought about it that much.

Shay Nehmad:

Like, I just did a map and and didn't think about it too much. I actually did map a bull, which is this first thing you write. And then you're, like, this is not great. Maybe you should use an empty struct instead of a bull.

Willem Schots:

And how

Shay Nehmad:

do you initialize it, and then packages, then etcetera etcetera. This is a really good thing to read as an intro. Where where did this come from? Like, one of your contract works you needed to write sets and then you just went into a rabbit hole? Or is this just from a backlog?

Shay Nehmad:

Like, where do you pick those topics from?

Willem Schots:

I well, I I basically probably maybe like you guys also just browse the Internet, see what people are talking about. And I have a pretty big Trello board with a lot of ideas and notes and, things. A lot of things come like this, that definitely comes from from experience. Like, I've also written sets either with Bulls or with, or with the empty start like a 1000000 times and I so much that I also don't spend much time thinking about it until I see someone ask the question, how do we do a set in Go? And then people say this and it's like, wait a minute.

Willem Schots:

This is not obvious for everyone, especially for beginners and and people new to Go. It's it's, yeah, it's not that obvious and there's a lot of little things in Go that are like that and I I store them away and if I then see enough people ask the question then I will write an article about it, do a little bit of research and see which open source packages also provide this functionality and, yeah, that's that's how that one came came about. That one was was definitely triggered immediately by someone asking a question somewhere on the Internet and doing some research.

Jonathan Hall:

I have for years been advocating the approach that you you offer, which is a map of something to the empty struct whether it's strings or numbers, whatever, because it saves memory and because it's more semantically correct. Like, if it's a bull, I always have to wonder, If I come across code that uses a I wonder, does that mean something or or not. Right?

Willem Schots:

Exactly. Exactly.

Jonathan Hall:

However, I was I was actually about to make a YouTube video about this at one point, and I started benchmarking it, and I found that bools were much faster.

Willem Schots:

Really? Okay.

Shay Nehmad:

That's fine.

Jonathan Hall:

At least in in small cases that I was testing. I was curious if you had done any benchmark testing, yourself either.

Willem Schots:

No. I I haven't. I actually had a conversation on LinkedIn with a good friend of mine about this because he also found like, I haven't looked into it in detail yet. Haven't had the time, but he also found a case where he said that slices were faster than than maps in some cases, which which

Jonathan Hall:

surprised small sets that might be true.

Shay Nehmad:

It sounds good.

Willem Schots:

So he was like, maybe you should do a post or an article about, benchmarking all this stuff and use it as an intro to benchmarking in general. And, yeah. I I did a little bit of work on it, but it's still upcoming.

Jonathan Hall:

I I still advocate for your approach that you you do in the article because semantically, I think it's more correct. Yeah. But but if you're not exposing those details to your consumer, then you and you want and performance is really important. Of course, do benchmarks and and see if it Yeah.

Willem Schots:

If it works for you. For sure. For sure. Someone on Reddit also made a nice like, made a made a comment which I think I did add it to the article later, that if you do use bulls as, or booleans as your, as your values, then you can use them in one line in an expression or Yeah. Which is also nice because the default, value or the 0 value will be false.

Willem Schots:

Yeah. So it Yeah.

Jonathan Hall:

That's true. Yeah.

Shay Nehmad:

I I love how you said someone, wrote a nice comment, and then you self corrected it. Someone wrote a comment on Reddit because that's how

Willem Schots:

No. It's

Shay Nehmad:

I could just imagine the, like

Willem Schots:

It was actually a nice comment. I'm sorry about it.

Shay Nehmad:

Yeah. So what you're saying is you you actively write things down that you want to write, and then you follow-up on it later and and expand it to, like, a well written blog post with examples, well researched, things

Willem Schots:

like that. It's it's mostly if there's, situations where I remember that I, in the beginning, had big questions or was confused or thought that a particular solution was elegant or found some specific interface in the in the standard library that intrigued me. Like, I I try to keep note of that. And if people if I then also encounter people asking these questions online, I know that there's enough of an audience to write an article about it.

Jonathan Hall:

It. I'm curious, Pierre, a little bit about, sort of the reaction you've been getting, from your blog. I see that you have, according to your subscribe link, over 500 people on your, mailing list. So it's apparently popular. I'm assuming it's growing.

Jonathan Hall:

It's grew by 1 because I just subscribed. Thanks. What what kind of response have you been getting from people? Whether it's on your mailing list or I don't know if you've posted these on Reddit or or other places. But

Willem Schots:

Yeah. The response on the mailing list is is pretty positive, usually. Corrections for typos, and and they are always welcome. People were like, I did take a little break from posting for a couple of months, and then when I got back, there were a couple of good to see you back including you, which was nice. Yeah.

Willem Schots:

It it has been positive and I usually post on Reddit as well. Can be a bit hit or miss, but generally generally positive, I would say. I haven't had too many negative reactions yet. Although it is still quite nerve wracking to post stuff online for an audience that, you know, you can't see. But

Jonathan Hall:

My my experience, especially with on Reddit, but anywhere early online, is you kinda have to just learn to let things roll slide off your back because someone's gonna enough eyes on your thing and someone's gonna hate it or or or hate you or or just have a bad day and then take it out on you.

Willem Schots:

For sure. For sure. And yeah. Like, you also don't know what what mindset people are when they post. There there will be trolls.

Willem Schots:

There will be people with bad days. You you can't you really can't let it get you. But it's, so far it's been very positive. And, honestly, I I also do enjoy a little bit a little bit attention of it and, cool. Yeah.

Jonathan Hall:

So I wanna talk about some of the other things rather than the content on your blog. I see you offer some training. You offer on your website, you have Go training.

Willem Schots:

Yeah.

Jonathan Hall:

You have a workshop and coaching. How long have you been doing this sort of work?

Willem Schots:

That's literally brand new. I put that online last last week. Okay. I have not done any yet, so they're all, yeah, custom at the moment.

Jonathan Hall:

Mhmm.

Willem Schots:

There's no fixed package or anything. I just yeah. I would need to get a few, first clients in the in the door there and see how that will how I will like it, how the clients will like it, what, yeah, what will actually work and what won't. You know that.

Shay Nehmad:

When you imagine your I'm talking mostly about the the personal, like, coaching thing. Do you imagine a company that has, like, l and d budgets reaching out to you and saying, here's a bunch of, developers. We want to upscale them in, Go. Come to us and talk to us. Or are you more looking for people to reach out to you and be, like, I want to, personally do it?

Shay Nehmad:

What just in in your, like, preference. I'm not exactly like, it's not like I have offers. No.

Willem Schots:

No. I think the preference would be the first purely because yeah. It's it's actually, now that I think about it, it's actually difficult to, to decide there. I did have more personal coaching sessions online, for a while as an offer, but no one responded to that. So this is kind of a second attempt and a second, try.

Shay Nehmad:

So if there's a company, like, by the way, where I work, or your blog posts have been making the rounds in the in the Slack channels, that could be a natural next step.

Willem Schots:

Yeah. I I I think so as well, and I think it's a bit easier to market to. When when developers are, like, not responsible for their own budgets, probably it it will be a bit of an easier sell than asking someone for 1 on 1 coaching. Yeah. The the price is gonna be too steep probably for

Shay Nehmad:

Yeah. Just ask every cloud provider. When Principal Fraternity charges the price, then it's very easy to sell.

Willem Schots:

Yeah. Or more machines.

Jonathan Hall:

I I I'll chime in with an affirmative, in my experience. I I offer GoCoaching.

Willem Schots:

Yeah.

Jonathan Hall:

And I've I've had a small number of of clients. I have one active client right now, but they're they're usually later career folks

Shay Nehmad:

who really recognize the value in investing

Jonathan Hall:

in their own career, which usually, you know, there's a small number of people who are

Shay Nehmad:

in that situation who who are like changing tech stacks or something like that.

Jonathan Hall:

Yeah. They've all been that literally. Everyone I've coached has been somebody who is an experienced developer switching tech stacks, and they know that it's worth their own investment to to invest in a good coach to switch to Go.

Willem Schots:

Yeah.

Jonathan Hall:

And those are few and far between. Most people learning Go are earlier in their career. They don't have that sort of money to throw around unless you're offering really, really cheap coaching, which probably isn't worth your time at that point. Point.

Willem Schots:

No. Exactly. Exactly. So that's the that's been the issue a little bit there with the initial offer that I had. But yeah.

Willem Schots:

So it's that's why now the coaching is more towards companies and Yeah. Teams.

Jonathan Hall:

Yeah. It's more lucrative,

Shay Nehmad:

I think, and easier to to make a living on. Yeah.

Willem Schots:

But, okay. It's still early days there as well. So we'll see. Maybe maybe being on the podcast will. So

Jonathan Hall:

Maybe so. Yeah. If you need some go coaching, reach out to William.

Willem Schots:

Yeah. Yeah.

Jonathan Hall:

So you also offer, of course, freelance software development and and consulting. Yeah. And you've been doing that, at least the freelance development longer. You and I were talking before we recorded. How's that going for you?

Willem Schots:

Yeah. Pretty well. It's it's easier to find that kind of work, to find it in in different shades of of pricing, I would say. I initially started out as as like someone just building websites in HTML and and JavaScript and PHP and and all that stuff, and kind of leveled up into Go over the years. So I've I've kind of seen the whole, yeah, journey in the last 15 years from with all the frameworks and all the all that stuff.

Willem Schots:

But it's it's nice. I still like it. I still enjoy being, in charge of my own time, in charge of my own schedule. That's, that's yeah. That's cool.

Shay Nehmad:

The sorts of projects that, you know, companies tend to bring expert consult consultants out, I I feel like they divide into 2. Either it's very samey words that they can feel they can just outsource because it's low risk, or it's super difficult problems. So do you have an example of, like, a a company or or someone you helped that just you had to debug a a thing that you really didn't know? Because you said that you've been doing microservice development, so, like Yeah. Alright, setting up another HTTP server.

Willem Schots:

Yeah.

Shay Nehmad:

Is one thing. But did did someone ever bring you to, like, solve a very difficult problem or maybe console them?

Willem Schots:

No. I, it's it's always been, the typical, application development. More the, more the first category, what you mentioned, than the than the second.

Shay Nehmad:

And and

Willem Schots:

do you have

Shay Nehmad:

a chance to the

Willem Schots:

second, but, it's, it's also a matter that's also, again, the matter of marketing getting in the picture and, like, I just haven't had the opportunity there, to get those kind of projects or clients. Like, of course, there have been gnarly problems in in those, but I have never been hired to specifically solve a single problem and then,

Jonathan Hall:

I feel like this might relate a little bit to the conversation I had with Mariah a couple months ago about what is advanced level Go. Like, Go is Yeah. In a language that's kinda designed to make complex problems simple to deal with.

Willem Schots:

Yeah.

Jonathan Hall:

Now there are advanced probably. If if you're trying to do, you know, compiler optimization or something, you know, something low level, then you know, but but those are the kinds of things that people usually hire contractors for, usually.

Willem Schots:

No. Right?

Jonathan Hall:

They're gonna it's gonna be either internal or they're just talking to the Go team and crossing their fingers hoping that the Go team actually solves their problem someday.

Willem Schots:

Yeah. Yeah.

Shay Nehmad:

So do you have preferences, like, if I tell you well, obviously, you do have preferences. If I tell you, your Microsoft services with, it's a gRPC service or a REST service, it's, domain driven or it's structured. I know you have a lot of thoughts about Go project structuring, for example. Do you sort of try to, I don't know, evangelize these, these are my preferences, let's push them when, you join a company? Or or do, like, you know, get hired by a company?

Shay Nehmad:

Or do you feel like team rules, team rules? Like, whatever the team says and did so far, that's how I'm gonna sort of play it.

Willem Schots:

I am inclined to go more for team rules at at the moment. It depends though. Like, if it's a new project and, we can we can start from from, yeah, first principles, then I would prefer to, yeah, follow my my approach to things, of course, in the team that will always also be yeah. Everyone needs to be on board with that. I think it's more important to have a harmonious structure in your team, and solve your technical, goals, than to uphold some specific standard of of purity or or whatever in, yeah, of in a technical sense.

Willem Schots:

I, I think the other, concerns are more important.

Shay Nehmad:

There is one specific preference that you do mention on your blog that I don't know if it's controversial, but for me, it's not obvious. Who? It's the the the structure of of an app, like not having a models package, but having a value based, like, package structuring. Can you, like, just in a high level overview, understand, explain what you mean when you say Yeah. Value oriented or I don't know exactly how you say it, but value, oriented structuring of Go applications.

Willem Schots:

Yeah. I would say that it's more of a library approach to your like, if if you're going with kind of like domain driven design, you're split your don't split your Go app in layers according to, if it's controllers or, or models or views. Split it according to your business domain to your yeah. Make basically, turn your business domain into a library. That's that's the shortest way I can put it.

Willem Schots:

It is very feely vaguish though. Like, where where like, it's hard to say very concrete things about this because so much depends on on the domain, that you're talking about. I've been struggle I'm I'm currently working on, on the guide that you're, where where you're referring to now, to the page. And it's actually pretty difficult to put this in words. You you you need a solid example to really kind of show this.

Willem Schots:

Obviously, I wrote the marketing page first because I wanna know if there's there's actually market before I spend time spend time working on a guide or writing a guide, but it's it's pretty pretty difficult.

Shay Nehmad:

I think a lot of people I I met that developed multiple, like, let's say more than 3 similar issue web applications, in Go. They go in one of 2 directions, either, like, here's a template you can use that's gonna be very repeatable or, or even as far as, into cogeneration, and I'm gonna generate almost everything other than Yeah. Like Yeah. Implementation and the rest is boilerplate. Yeah.

Shay Nehmad:

And other people who are more neuro approach of, like, we need to think a lot about the structuring. And if the structure is very good, then the code is gonna flow very naturally, and then you don't have to generate as much. So No. We shouldn't worry.

Willem Schots:

Although I am like, I have some plans for me for December when I have a bit of time off to, to also work. I have a couple of ideas also with code generation that I would would like to experiment more with. And I think what you're saying is, like, if you model your your, what I'm then calling now, domain correctly and you can kind of map directly from your HP or your web layer to your domain, then things can get very interesting.

Jonathan Hall:

So I I think it's safe to say you're not a fan of the MVC pattern. Is that is that accurate?

Willem Schots:

No. It's not in Go. No. It's, like I think it solves a problem, but if you structure your your Go app that way, you will end up with it's it's going to be if it's of a decent size, you're gonna have very long names for everything and it's the packages will kind of grow very big.

Shay Nehmad:

Yeah. I'm not a fan of I'm not a fan

Jonathan Hall:

of any language, but it's especially a bad fit, I think, for Go.

Willem Schots:

Yeah. Yeah. So, like, in the in the PHP world, you have this, Laravel, this framework. And if you just want to get something up and running quickly, you can you can do great things with it. But I guess it's kind of like Ruby on Rails and, yeah.

Willem Schots:

But if you're talking that kind of application, then I don't think you need this kind of domain modeling approach.

Jonathan Hall:

Sure. If it's a simple

Willem Schots:

Yeah.

Jonathan Hall:

Either a throwaway app or maybe just it's just crud or something like that Yeah. Then then your your architecture doesn't really matter that much in the first place because it's just a a thin layer over your database or or whatever, basically.

Willem Schots:

Exactly. Yeah. It's it's more when you when you indeed have difficult or, yeah, difficult state transitions that comes in difficult business rules. Yeah.

Jonathan Hall:

Cool. I'm sorry. I like this guy. I I think I agree with everything he said so far. Well, what do you have coming up in the next maybe until the end of the year?

Jonathan Hall:

Do you have anything planned for your website, that we should be looking out for?

Willem Schots:

Yeah. Definitely. Well, the guide I just mentioned, that's that should be done by the end of the year. If it isn't, don't yeah. Don't hold it against me.

Willem Schots:

Writing is hard.

Shay Nehmad:

This podcast is not admissible in court. I really hope so.

Willem Schots:

Yeah. I I hope so too. So, yeah, that that's that's the primary thing, that that will be sellable. Yeah. Well well, you not just sellable.

Willem Schots:

You can buy it on my website. Mhmm. The yeah. Apart from that, every 2 weeks there will be an article. Follow me on preferably on the mailing list because whatever x.com, Twitter, I I I am active there sometimes, but I can't guarantee anything there.

Willem Schots:

Yeah. Fair enough. Yeah.

Jonathan Hall:

So go to william.dev, hit that subscribe button

Willem Schots:

Exactly. And follow that way.

Jonathan Hall:

Yeah. Yeah.

Shay Nehmad:

I I like getting the the emails in the from the mailing lists because they they you just look really good. And then they look at the title, and it looks like, oh, this is something I need in Go or I have needed or wait. I did it differently. What's what's a villain up to? So other than the the website, we sort of off mic mentioned, game development in Go.

Shay Nehmad:

And I did I there was an episode where I said, yeah, Go is not really a game development language. And then someone I don't remember who that was, but he was like, hey, you're missing out. There's Bear's restaurant. There's a lot of really cool games written in Go. You're missing out.

Shay Nehmad:

And you're you're developing, games as well at the moment. Right?

Willem Schots:

Well, yeah. Yeah. I I would say that I'm trying to keep them small in scope. Like, I'm not trying to build the the next open world RPG, whatever, in Go.

Jonathan Hall:

I thought maybe you would give us, Skyrim 6 before before Yeah. Yeah. The real developers.

Willem Schots:

Written in Go.

Jonathan Hall:

Written in Go.

Willem Schots:

Yeah. I can see that Hacker News post already. Yeah. Yeah. No.

Willem Schots:

It it's it's small two d stuff. I would say it's very suitable, and I haven't run into any issues yet. But I'm also not trying to build very, like, I haven't tried to do anything 3 d. I haven't done any really heavy, games either. It's it's they are with an update loop, 60 FPS, that kind of stuff.

Willem Schots:

But, cool. So it's not just turn based kind of things. But, yeah.

Shay Nehmad:

The game games usually have a very different Yeah. Data model and, like, architecture than web applications. Yeah. You have to worry about good. Like, ECSs and state and drawing stuff.

Willem Schots:

Yeah.

Shay Nehmad:

This must be like feels like stretching your architecture skills developing games after developing a lot of web.

Willem Schots:

I I, I actually did a lot, like, my my in my entire journey into programming actually started with with building video games, like tiny stuff with with my cousin. You know, there was a tool called GameMaker and it had a small, c like language called GML, GameMaker Language. Maybe that's also where why I like Go, I guess. It's it's just small and it does what it needs to do and, I could understand it as a, I don't know, kid. So that that was pretty good.

Willem Schots:

And I I still enjoy building stuff like that. And, you know, worked a little bit in Unity, worked a little bit with with what what else was there? There was one more but I don't remember. But, yeah. Unreal?

Willem Schots:

Yeah. Unreal. Yeah.

Shay Nehmad:

Mhmm.

Willem Schots:

Yep. But it it they they feel like professional big tools and then you kind of have to scale them down to do small 2 d stuff. So I kind of enjoyed this approach in Go now. It's, if you already know Go, give EBIT engine a try. It's it's a lot of fun.

Jonathan Hall:

I think this is a good, segue to our our so called stumper question. You've

Willem Schots:

you

Jonathan Hall:

have a a varied history with programming. You talked about PHP and Laravel, game development with Unity and and, GML and simulated C plus plus So when you were learning Go, what was the biggest surprise or the biggest challenge to you?

Willem Schots:

I I would honestly say because most of my develop back end development before that was all in PHP. It took me a little bit of time to actually come around to the idea that not the entire world needs to be built in a single HTTP request. That's, like your typical PHP application just runs the entire application for each request coming in. Yeah. Yeah.

Willem Schots:

And yeah. In Go, you have full like, it felt like stepping out of the matrix or something. You you could actually do stuff before the HTTP request came in.

Jonathan Hall:

Right.

Willem Schots:

Yeah. Like, in the back of my mind, I knew that stuff like that worked or that it that's how it worked, but Mhmm. It it was a little bit of a mindset shift that took took a bit of time.

Jonathan Hall:

So you mean things like, I suppose, connecting to the database and reading configuration files and and all that stuff that that you maybe do on a startup in a Go application. But Yeah. In a PHP application, startup is the HTTP request as well.

Willem Schots:

Yeah. Exactly. Exactly. Yeah. Yeah.

Willem Schots:

So that that probably was the the biggest thing to get. Like, it it was a good thing to get used to. But, yeah. Cool. Yeah.

Willem Schots:

And I'd like typical stuff also coming from PHP background like learning pointers.

Shay Nehmad:

Of course. Yeah. And where where do I put all the vulnerabilities in PHP?

Willem Schots:

Yeah. Exactly.

Shay Nehmad:

Every line had the 5 security vulnerabilities. Yeah. Where do you put them in the Go code?

Willem Schots:

Yeah. Now you have to write them yourself. It's really

Jonathan Hall:

I see a new niche for your, your consulting offering. Yeah.

Shay Nehmad:

I will value match your PHP CVE score to to your go CVE score.

Willem Schots:

Yeah.

Jonathan Hall:

Well, Willem, it's been a lot of fun. It's a pleasure to meet you and to dig through your website a little bit. Thanks for coming on the show.

Willem Schots:

Yeah. Thanks for having me. It's, it's been great. Thanks a lot, Willem.

Shay Nehmad:

Yeah. And everybody, make sure to check out the Willem's blog with it's really good.

Jonathan Hall:

William.gov. Don't miss it.

Willem Schots:

Yeah. Please, please do have you all.

Shay Nehmad:

Thanks, William. Cheers. Alright. We're off the air. Thanks a lot for listening again, everyone.

Shay Nehmad:

We'll see you next week. Gemak Hati Matovai if you're Jewish and you're, celebrating Yom Kippur and program exited. Goodbye.