Gifting is hard. This isn't news, but what might be news is that you can now send beer, wine, and spirits right to your friends and family with Drizzly, the go-to app for alcohol delivery. Save time shopping, save money comparing prices across stores, and spend more time sipping with your gifties. Now that's good news. Download the Drizzly app or go to drizzly.com. That's D-R-I-Z-L-Y.com, and get your favorite drinks delivered today. Must be 21 plus, not available in all locations.
AJ_O’NEAL: Yo, yo, yo. I'm coming at you live from that awesome underdust treadmill I've been talking about.
CHARLES MAX_WOOD: Amy Knight.
AIMEE_KNIGHT: Hey, hey from Nashville. I'm jealous of AJ.
CHARLES MAX_WOOD: I know me too. Steve Edwards.
STEVE_EDWARDS: Welcome Portland.
CHARLES MAX_WOOD: I'm Charles Max Wood from DevChat.TV. Quick shout out if you want to get coached on how to become a Dev Influencer. Two links, one of them is DevChat.TV slash hero. Fill in a little information, we'll do a strategic call, figure out what you need to do next and see where things go from there. The other one is I'm starting a podcast. It's gonna be called the Dev Influencer Podcast. You can find that at DevInfluencers.com and I'm gonna be talking about a lot of the same things I'm doing in the accelerator. So there you go. We have a special guest this week Yehonathan Charvit. I hope I got that right.
YEHONATHAN_SHARVIT: Hi, I'm glad to be here with you guys. I hope we'll have a great time.
CHARLES MAX_WOOD: Yeah, we usually do, often at AJ's expense, but we do. Right, Steve?
When I went freelance,I was still only a few years into my development career. My first contract was paid 60 bucks an hour. Due to feedback from my friends, I raised it to 120 bucks an hour on the next contract. And due to the podcasts I was involved in and the screencasts I had made in the past, I started getting or even heard of who wanted me to do development work for them because I had done that kind of work or talked about or demonstrated that kind of work in the videos and podcasts that I was making. Within a year, I was able to more than double my freelancing rates and I had more work than I could handle. If you're thinking about freelancing or have a profitable but not busy or fulfilling freelance practice, let me show you how to do it in my Dev Heroes Accelerator. Dev Heroes aren't just people who devs admire, for clients who know, like, and trust them. Let me help you double your income and fill your slow downs. You can learn more at devherosexcelerator.com.
CHARLES MAX_WOOD: So yeah, so data-oriented programming. Like, what is that? Let's just start out with the basics, right?
YEHONATHAN_SHARVIT: Yeah. So first of all, I think it sounds cool as the title. It's attractive. Everybody loves data. Everybody loves programming. So why just not simply make you an attractive name that aren't in programming. So that's the most exciting programming paradigm that you could imagine.
CHARLES MAX_WOOD: I know, right?
STEVE_EDWARDS: It can't be good if it doesn't have a good name.
AJ_O’NEAL: So this, the question here, because when you talk about it, like a buzzword data sounds like hashtag, follow the science kind of thing. You know, like we're going to, we're going to look at the, the, the analytics and the analytics are going to tell us how to orient. Is that, is that what it is? Or is it just like how we're looking at JSON objects.
YEHONATHAN_SHARVIT: Yeah, we'll figure out. I think as the discussion goes, we'll distinguish between data oriented programming and other programming paradigm that either are similar or just have a similar name. Like for example, that oriented design, which is almost the same name, it has nothing to do with that oriented programming.
CHARLES MAX_WOOD: Gotcha. So yeah, so what are we talking about here then?
YEHONATHAN_SHARVIT: Okay, so we are talking about a way to reduce complexity in programming and not programming in general, but programming in the context of information systems of web services, web servers, front end applications that deal with information. So typically a web service that fetches data from another service or from the database, manipulate it and send it back to the client over HTTP and JSON. For information system like that, there is a way to reduce complexity. And this way is called data-oriented programming.
CHARLES MAX_WOOD: Well, I like reducing complexity. Go ahead, AJ.
AJ_O’NEAL: So break that down a little bit more. The first thing you said was, before you put it in the database, we're gonna do what with it?
YEHONATHAN_SHARVIT: Let's say after you fetch it from the database, you do a small manipulation, you rearrange the shape of the data, and you send it over from the wire.
AJ_O’NEAL: Okay, so we're doing, this sounds almost backwards, the shape of the data is one thing in the database where we're transforming it before we send it over the wire. So what, tell me more, what defines the difference between an orientation in a database and an orientation over the wire? Or maybe even what over the wire means in this case.
CHARLES MAX_WOOD: Yeah. It's more reactive than anything else. Yeah. It's in and of itself. Yeah. It's, it's more reactive than in any other paradigm.
AJ_O’NEAL: Let's assume the browser context.
CHARLES MAX_WOOD: So but yeah, I mean, for the most part, when I talk about it with people, I'm talking to people about yeah, they're usually doing more functional programming with it. Not always. And they blur the lines a lot when they're dealing with data, but yeah.
STEVE_EDWARDS: That's a dangerous question. If we talk about what kind of developers we are.
STEVE_EDWARDS: Yeah, I agree. You know, yeah. Objects, you can have arrays, you can have objects within arrays and arrays within objects and define different types. And, you know, that's, that's how I tend to kind of my data as well.
YEHONATHAN_SHARVIT: What about,
AJ_O’NEAL: I think that's kind of the way React is as well as you typically like they used to do the whole class syntax for the event management, but that really wasn't about the data. That was about the event management and the data goes through as plain objects, it seems.
YEHONATHAN_SHARVIT: Yeah. What about the store? If you are in the React application, do you like Redux or your more MobX or different approach?
STEVE_EDWARDS: As a Vue developer, I use, you know, by default, I use Vue X, which is, you know, Vue 2 version of the store.
CHARLES MAX_WOOD: Redux, Redux pattern.
STEVE_EDWARDS: Yeah. Redux for React and so on. Now with VIA 3, we're supposed to be able to, with the new composition API, we're supposed to be able to get by without a store using their API. But I haven't delved quite into that in a lot of detail yet.
YEHONATHAN_SHARVIT: West end.
YEHONATHAN_SHARVIT: Yeah. So that's the great insight, but before I address your objection, let me ask you, what do you think about when I say immutable data structures? What ideas come to you came to your mind?
YEHONATHAN_SHARVIT: So you probably refer to using a library like immutable JS, who represents immutable data structure or another one? I haven't, I haven't actually used it, but I'm familiar with the concept.
YEHONATHAN_SHARVIT: Okay. So, so I have great news for you.
AJ_O’NEAL: Oh, good.
AJ_O’NEAL: Well, it depends. That can actually be quite fast in certain scenarios for very large objects that are multiple kilobytes. Yeah, it can, it can become expensive to use the stringify parse, but for small objects. I'd have to go back and look at the benchmarks, but my understanding is for small objects, it's pretty much the fastest thing you can do.
AJ_O’NEAL: No, I haven't heard of that one. Is that a new one?
STEVE_EDWARDS: Yeah, it's pretty brand new, isn't it? Yeah, it's just kidding.
CHARLES MAX_WOOD: Nobody's using it yet, but hot stuff.
YEHONATHAN_SHARVIT: Okay, what about Lodash SP? Have you heard about Lodash SP?
AJ_O’NEAL: I've heard it, but I'm not familiar with its use. I'm assuming that it's they split off all the Lodash into individual functions and then have them apply immutability or return modifications as different objects.
STEVE_EDWARDS: But SP, is that like the ESPN version with the SP awards or is this different?
AJ_O’NEAL: FP, FP, functional program.
STEVE_EDWARDS: Oh, FP, functional program, sorry.
YEHONATHAN_SHARVIT: Actually, if you go to the Lodash website, you will see in the top bar to the right, a link to Lodash SP. I never noticed this link until I started to write my book about data oriented programming. And what's super cool is that LODASH, for example, if you take a look at the set function to modify a value in a map or an asset value in a map, if you use the regular LODASH, it will mutate in place. If you use LODASH FP, it will create a new version of the map where the value has been changed. And the good news is that it's going to use structural sharing so that it's blazing fast and it doesn't consume too much memory. Similar to what Git does on every commit. When you commit a new commit in Git, you don't do copy your whole code base, your whole folder structure. You just make a change in the file that you want to change in the commit. So this technique is called structural sharing and it's implemented by a load hash. It allows you to cut the cake and eat it at once. Or no?
AJ_O’NEAL: Have your cake and eat it too.
AJ_O’NEAL: So I'm not sure if this is what you're talking about. But this sounds at first blush, this sounds like if it's modifying an array, it just makes a copy of the array with all the same elements. If it's modifying an element in the array, it creates a copy of the array with all the same elements except the one you're modifying. So
YEHONATHAN_SHARVIT: shallow copy, that's the trick.
STEVE_EDWARDS: So if we could, let's, I want to step back a little bit, just to some more basic stuff in the immutable data objects that we're talking about. First of all, it sounds like we're assuming that immutability is good. And I'd sort of like you to explain why that is. Some people who aren't as advanced. And then I got another question after that. What is the benefit of immutable data objects?
YEHONATHAN_SHARVIT: Okay, let me, I just, yesterday, I implemented a function called rename keys. So let's say you have a map with 10 properties and you want to rename some of the keys. So for example, ID you want to transform to user ID and product ID you want to change to the product ID. Okay, you could imagine a function that we see the two maps, one map with the data and the second map with the mappings between the old keys and the new keys. Right? Could you imagine writing such a function?
YEHONATHAN_SHARVIT: OK, so it will be a reduce, basically. You reduce over the second map, and each time you see a mapping, you replace in the original map the, you create a new property and you remove the old one, right?
STEVE_EDWARDS: OK, I'm with you.
YEHONATHAN_SHARVIT: So if you do that without immutability, it's going to be a pain in the ass, because you could remove a property that is going to be accessed by another mapping. So for example, if you decide to rename A to B, and B to C, if you remove B when you want to access it again, it's gone. And if you stick to immutability, you have the initial object left untouched. So the fact that you create a new object with slight modifications, let's say in the original object you have 100 fields and you want to change three of them, the fact that you guarantee that you don't touch the original object makes you 100% sure that you are not going to have bugs that might occur depending on the order you pass the key that you want to map. So that's one.
STEVE_EDWARDS: Sorry. Okay, sorry, go ahead.
YEHONATHAN_SHARVIT: So that's one example of bug that simply doesn't occur when you stick to readability.
STEVE_EDWARDS: Okay, so now you, when you reduce function, you have two objects. How are you knowing when to access one versus the other? So you basically got old object, old object and new object. So you've run your reduce, you've created your new one, but you're saying you want to keep the old one around in case you need to access that original queue. Am I understanding correctly?
STEVE_EDWARDS: So how does this fit in? You know, we're talking about not changing data. Okay. How about a real life use case where you do need to change the data? And I think I understand where we're going, but I just want to clarify. So let's say, you know, one of your standard, probably one of the most standard use cases on the web is recalling data in a form, changing it, and then saving it, okay? So you have, you pull out your data from your backend and you have your immutable map or whatever, you know, format you're storing your data in. You display it in your form, let's say you're editing a user profile which is a common occurrence, right? So you changed your data. So obviously now you're gonna create a new object because of immutability, right? And so you're gonna take that immutable object and send that back. So am I understanding that correctly?
YEHONATHAN_SHARVIT: 100%. The trick is that it will be fast if you use either immutable data structure or low-dash immutable methods.
CHARLES MAX_WOOD: Why is that fast?
YEHONATHAN_SHARVIT: Because they leverage structural sharing. So that they don't do a deep copy of the object that you would do if you go with the naive approach that AJ mentioned before, serializing and passing back.
STEVE_EDWARDS: So you're basically referring to the same object beneath the covers then? Or I don't understand.
YEHONATHAN_SHARVIT: So for me, internally, it refers to part of the same object. But as a user, you don't care. As a user, it's like if it were a deep copy of the object. And that's the beauty of it. So when I use low-dash immutable methods, it works like if I were doing deep copies, but it is fast.
STEVE_EDWARDS: So it looks to the user, at least from the development standpoint, that you're using a new object, but reality it's basically the same object underneath?
YEHONATHAN_SHARVIT: Yes, yes. Exactly like in Git, when you commit a new change to Git, it looks like you have a totally new repo, right? That all the files are yours. But under the hood, Git is smart enough not to copy all the signs.
STEVE_EDWARDS: Because it's all pointers. It's all pointers, basically.
YEHONATHAN_SHARVIT: Exactly. It's exactly the same. But it's hidden from you. You don't care as a user. You don't care of the internal details of the tree and the path and the shine. All this fun stuff.
Hey folks, if you love this podcast and would like to support the show, or if you wish you could listen without the sponsorship messages, then you're in luck. We're setting up new premium podcast feeds where you can get all of the episodes released after Christmas 2020 without the ads. Signing up will help us pay for editing and production. And you can go sign up at devchat.tv slash premium.
CHARLES MAX_WOOD: Yeah. The operating systems do this too. The term is copy on write. And essentially what it does is when you start a new function, it only pulls things over when you change them. I mean,
YEHONATHAN_SHARVIT: yeah, but it's actually, it's not copy on write. Copy-on-write is the older approach.
CHARLES MAX_WOOD: Okay.
YEHONATHAN_SHARVIT: This approach is called either structural sharing or pass copying. And it's a bit smarter.
CHARLES MAX_WOOD: But it's the same idea, right?
CHARLES MAX_WOOD: It's here's what's changed and it refers to the old thing for the rest.
YEHONATHAN_SHARVIT: Yeah. But it was copying, right? You could end, you might, you end up with deep copying on right.
CHARLES MAX_WOOD: Yeah.
YEHONATHAN_SHARVIT: You, you know, there is zero penalty. You never do a deep copy and that's what Git does. Let me give you another example. Okay. I hope I would remember the detail. Do you know that in react there is. React decides to rerender or not, depending on if the state has changed, right?
CHARLES MAX_WOOD: Yep.
CHARLES MAX_WOOD: Right. But if it's immutable, then if you check the pointer and you know that it's not going to change, then you can just check the pointer and know that it's the same.
YEHONATHAN_SHARVIT: Exactly. Exactly. Again, like, like indeed, that's why, that's why, that's why this is fast. Because if a folder is the same between two commits, you know that all the files in the folder are the same. You don't need to check them.
CHARLES MAX_WOOD: So I'm curious, what kind of got you to this point where you have these principles for data-oriented programming? Like what's your background? What kind of brought you to these conclusions? I mean, I'm assuming that there's some discipline around it that people talk about, but what's your story into this?
YEHONATHAN_SHARVIT: Yeah. So first of all, there is no, if you Google data with the programming, you will find nothing.
CHARLES MAX_WOOD: Oh, okay.
YEHONATHAN_SHARVIT: I mean, one month ago, you would have find nothing. And now you will find only, only my book and my draft Wikipedia article and the thousands of blog posts that I'm writing about it.
AJ_O’NEAL: So is there not some other name? Because this feels like it's very similar to functional. And it feels like it's very similar to what I've called. Well, not that it's similar to, but it fits in with what I've called event-driven development. So is there another name that is, or some adjacent keywords?
CHARLES MAX_WOOD: No, it's all good. And I love just the journey, right? I mean, that's the part of it that kind of gets me fired up is, hey, you know, I kept learning, I tried this, I did this, you know, I encountered these principles from this language and these ideas from this other place. And I realized that that, you know, that makes a difference in this way, right? So what were you asking, AJ?
AJ_O’NEAL: I don't think I asked anything.
YEHONATHAN_SHARVIT: Oh yeah, functional programming.
AJ_O’NEAL: Oh, way back when.
AJ_O’NEAL: And Askell is the true mark, the true Scotsman of functional programming is Askell.
YEHONATHAN_SHARVIT: Yeah, and there is a huge difference. Is that it's statically typed and it's a nightmare. It's a nightmare. Believe me, it's a nightmare.
AJ_O’NEAL: Wait, why is it a nightmare? Because you get all that, that the matches, the matches are what make those languages great, isn't it comes from static typing, doesn't it?
CHARLES MAX_WOOD: Don't play with me.
AJ_O’NEAL: Oh, he's shaking his head.
YEHONATHAN_SHARVIT: If you believe, if you believe that when it, if you believe this idiom, it compiles, let's ship. Okay, then go for it. But I don't believe it.
AJ_O’NEAL: I have pretty good success with that in Go.
YEHONATHAN_SHARVIT: Yeah, every time it compiles, you have zero bug?
YEHONATHAN_SHARVIT: Yeah, you feel safe.
AJ_O’NEAL: If I was gonna write a parser for something that was important, if I was gonna write software that needed to fly a plane, I would write it in Rust. And there's no other language that I would write software that someone's life depended on.
YEHONATHAN_SHARVIT: You know what? Check me. What is the programming language used by the Boeing that crashed? I bet it's a statically typed language.
AJ_O’NEAL: It's probably something like C or C plus plus, which is statically typed in the way that horses are unicorns.
YEHONATHAN_SHARVIT: Anyway, we are not in this land. We are in information system, backend or frontend. And we deal with information that is sparse, that we don't know a priori what is going to be the shape of the information. And let me tell you this thing, I didn't program in OCaml, I mean, I program in OCaml, but I didn't program in Asken. And there is a tragedy, a tragedy, I'm putting a little bit of drama, but there is a tragedy in statically typed language, is that the names, the names, which is the most important part of our information. The name compiled away, the names compiled away. That's, isn't it a tragedy? You write your code, you have fields in your class, but at run time, the field disappear, it's just an offset in the layout of the class.
YEHONATHAN_SHARVIT: No, no.
AJ_O’NEAL: Yeah. You, you console.log anything from the Google API and tell me differently.
STEVE_EDWARDS: Yeah, yeah. When I've seen kind of Spinal Code, it's all your beautifully named variables are A and B and C and D and they're gone. And the sad part is that that's one of the two hardest things in computer, well, two hardest things in computer science, naming things, cache and validation, and off by one errors. But yeah, you go to all that work and then it's gone.
YEHONATHAN_SHARVIT: That, that, that. So how does it work? So you cannot stringify an object?
AJ_O’NEAL: So with many, with many APIs, you cannot, because they get the, the API details are internal. So for example, if you use Google login, like you want, you want to use the Google login button on a site, when you get back to the user object, you can call functions on that object. But if you console dot log the object, none of the functions that you actually use, which by the way are not documented, which makes this super frustrating. You have to find random examples, but none of the functions that you use are enumerable. And of the things that are enumerable, none of them have names that make any sense. They're like GA or AQ. So I realized that if you, if you have an object that goes all the way from an API all the way to a user form, yes, you can console.log that and it, and you'll see it. But the same thing is true in statically typed languages that have some sort of tagging system. So if you're going to use Rust. You're going to use, I'm spacing on the name for it, but the Serda, you're going to use Serda to interface with JSON and YAML and stuff like that. And all of your Serda tags are generated by the macro system and they're all there and the same thing with Go. All your tags are generated by the, the pre-processing system and they're there in the compiled binary.
YEHONATHAN_SHARVIT: Yeah. But you cannot then add new properties.
AJ_O’NEAL: No, you got me sold for APIs, for stitching APIs together, it's hard to beat node. Yeah. It really is.
CHARLES MAX_WOOD: All right. Well, I'm going to push this over to PIX. We need to start wrapping up, but this has been really interesting to dive into. And if people want to learn more, so you have your book on Manning, that's still in the early access program, correct?
CHARLES MAX_WOOD: Awesome, very cool. All right, well, let's go ahead and do our picks and then we'll wrap up the show.
CHARLES MAX_WOOD: Amy, why don't you start us off with the picks today?
AIMEE_KNIGHT: Okay. Sorry. I've been very quiet, kind of debugging some prod issues and haven't been able to jump on too much.
CHARLES MAX_WOOD: The conversations moved pretty fast too.
AIMEE_KNIGHT: So let me, oh, I'm trying to look at my list here. Well, I'm going to go with, I don't think I've picked this yet. So ZS each tricks from the Twilio blog. And I will drop a link in the show notes.
CHARLES MAX_WOOD: All right. Cool. Yeah. I've been using ZSH since Mac OS switched over and yeah, I like it.
AIMEE_KNIGHT: Yeah. This is my first laptop that I have been using it to. It's pretty good.
AJ_O’NEAL: Yeah. All are catching up, catching up. Using fish.
CHARLES MAX_WOOD: I use fish. I just, I cook it. I eat it. You got it.
AJ_O’NEAL: Obviously you can only use bash for scripting. That's a given. I would never recommend anything else out of all the crazy shells that are out there. Maybe PowerShell if you're a Windows guy, but Fish is the friendly interactive shell you deserve to be using.
CHARLES MAX_WOOD: All right, AJ, do you have some picks?
AJ_O’NEAL: Why, yes I do. So first of all, I've been talking about some lifestyle changes that I've been making. I feel confident enough about the treadmill now to pick it as a pick. I think I talked about it before. I don't think I picked it as a pick before, but it's a Urivo, Urivo, Urevo under desk treadmill. And I did a lot of searching for this thing because I'm a bigger guy. I'm over 260 pounds. So that rules out 95% of all treadmills that you're going to find that are under $2,000. And this one was about 400 bucks and it looks better than just about anything else I've seen out there. And I feel fairly confident that if I follow the instructions and oil it every once in a while and keep the, I put a little piece of plywood underneath of it so that the carpet doesn't, carpet doesn't interfere with the heat dissipation. I feel like this is going to serve me well. I'm enjoying it, using it a couple of times a week, really like it. The other thing, and this one's kind of a little bit here, a little bit there. So we have a britter water filter because we live in Pleasant Grove where the sewage water and the tap water are indistinguishable from one another and, and taste and smell. Well, not really the smell so much, but I actually haven't tasted sewage water. But anyway, it's pretty much gray water that they're just feeding back through the pipes at you. So we have a Brita filter, but the problem is the way that it's designed. Filters, the way filters work, if the water gets below the filter, then the filter dries out and the filter doesn't filter. And my wife is always using the water that's in there and then not refilling it. And then I go to refill it and I have to walk away by the time I come back and remember I wanted some water because it's so slow. It's all gone. So I got this three filter water filter and it filters water fast because there's three filters. The only problem is that the flavor is really strong. It seems like it puts a lot of calcium in there to give you that low alkaline slash mineral, whatever, but I couldn't find anything else. I was a little bit worried about it is a little strong. So what I do is I mix it like three or four parts this filter with one part Brita water. And that seems to be working for me pretty well. And then other than that, I'm going to do, so there's been a really positive response to our things you should know, things you must know JS series. So I am doing some, some Q and a and some live streams. If you are interested in that, please hit me up at underscore beyond code on Twitter or check some of these other links here. You can hit me up directly personally on Facebook or check out the YouTube channel that I'm creating for that. I would love to hear your questions, what you wanna know more about most. And I have AriaV intent to help you as much as I can. So please reach out to me.
CHARLES MAX_WOOD: All right, Steve, you have some picks? So I don't have a thing to pick, but I figured that that in the past I've mentioned some of my favorite quote unquote dad joke sources. I think what I'm gonna do for cases like today where I don't have a pick is just to share a couple of the phenomenal dad jokes that are part of my collection. I have high standards as you'll be able to see, but I just thought I'd share a couple for today. The one that I shared on Facebook for instance is that, I come from a family of magicians. I have two half brothers. You get that.
AJ_O’NEAL: I actually laughed on that one, Steve.
STEVE_EDWARDS: You were on mute, but I saw you laughing. So I appreciated that. And then another one, for instance, in the old days, excessive use of commas was considered to be a serious crime. It usually resulted in a long sentence. So thank you. Thank you very much. Make sure to take your waitresses to shows a day. Those are my picks for today.
CHARLES MAX_WOOD: I think those might wind up being more popular than the beer picks that we had on the rogues way back when. All right. I've got a few things that I'm going to shout out about. I'm going to try and make it fast. And then, Yohanathan, if you have some things you want to shout out about as well, happy to hear about those. So the first pick I have, I'm not sure many people are aware, we do have a machine learning show and I've been kind of the primary host on that for a while, but it's starting, the panel is starting to fill up on that one, which is awesome. So anyway, you can go find adventures in machine learning just on devchat.tv and really digging that. In the interest of all of the self-promotion, we also have a Women in Tech show called She's in Tech. That one just started a couple weeks ago. So definitely go check that one out as well. And then I'm trying to think. So I have been doing the dev. I was calling it DevHeroes Accelerator, but I'm rebranding it all because I got devinfluencers.com for the domain and I like that. So I'm going to go with Dev Influencers Accelerator. If you're kind of stuck at senior developer architect level, you're trying to decide, okay, where do I go from here? A lot of people don't want to opt for management is typically what I'm hearing. Or it's, Hey, I'm just not learning anymore. I kind of help you walk through that. And there's a lot of focus for that on building a podcast, building an audience, having the conversations that lead you to the kind of growth you want, and helping you use that to network with people who are going to help you get where you want. There are also a few people who are trying to either build courses or freelance practice or things like that. And so using that also to kind of build up an audience that you can then help out in more depth by providing services and courses that are gonna yeah, we've got some people that are getting ready to pull the trigger and start their podcasts. So keep an eye out for that. And then just on a personal note, I'm also gonna pick my doctor. I'm not going to tell you who it is, but I was talking to her today because I had a diabetes checkup. I'm diabetic and my diabetes numbers are really getting under control for the first time in a while just because I've been focused on it. And she's really been a great help there. But I asked her about the tension headaches I've been having and she told me to go get a massage and that made me happy. So I'm going to pick doctors who tell you to go get massages so you can tell your wife that the doctor said you need to go have a massage. Those are my picks. Johanathan, what are your picks?
CHARLES MAX_WOOD: Awesome. All right. And if people want to find you online, I'm assuming you're on like Twitter and GitHub.
YEHONATHAN_SHARVIT: Yeah. On Twitter, my handle is Viebel, which is a French word for life is beautiful after Roberto Benigni masterpiece 20 years ago.
CHARLES MAX_WOOD: I love that movie. I lived in Arezzo where they filmed it for five months.
YEHONATHAN_SHARVIT: Wow. Awesome. So that's. That's my handle. Yeah.
CHARLES MAX_WOOD: Very cool. All right.
AJ_O’NEAL: Anyone who thinks they're smart enough to code in C++ lacks wisdom.
YEHONATHAN_SHARVIT: Yeah. I mean, they could-
STEVE_EDWARDS: Is that your version of a proper?
AJ_O’NEAL: I'm just saying, if you're riding that close to the edge of the cliff, maybe you don't need to show off. It's C++ is a dangerous language. Like people die. Don't put that on a plane, please.
CHARLES MAX_WOOD: All right. I guess we'll end it there. Don't put it on a plane. Thanks for coming. This was awesome.
YEHONATHAN_SHARVIT: Yeah, great. Thanks for having me. It was a pleasure to be with you guys.
CHARLES MAX_WOOD: All right. And with that, max out everybody.
AJ_O’NEAL: It's my line, Steve.
STEVE_EDWARDS: I've been using,
AJ_O’NEAL: let me say adios and then tell me adios.
STEVE_EDWARDS: That's my line.
AJ_O’NEAL: No, that's, that's totally my line.
CHARLES MAX_WOOD: Wait, whose line is it anyway? Sorry.
Bandwidth for this segment is provided by Cashfly, the world's fastest CDN. Deliver your content fast with Cashfly. Visit c a c h e f l y.com to learn more.