DAN_SHAPPIR: Hey, hey from Tel Aviv.
CHARLES MAX_WOOD: Steve Edwards.
STEVE_EDWARDS: Hello from rainy and gloomy Portland.
CHARLES MAX_WOOD: AJ O'Neill.
AJ_O’NEAL: Yo, yo, yo. Coming at you live. Live? Full stop.
CHARLES MAX_WOOD: Yeah, live. Absolutely.
STEVE_EDWARDS: From where though?
AJ_O’NEAL: Doesn't matter.
STEVE_EDWARDS: Oh, okay.
AJ_O’NEAL: My home is my castle. Stay out of it.
CHARLES MAX_WOOD: All right. I'm Charles Max Wood from Top End Devs. And yeah, we are live.
CHARLES MAX_WOOD: Anyway, so today we're gonna be talking about Barlett and Const and Scope.
AJ_O’NEAL: No one could ask for better than that. Okay, great. And I've, I've, now I've retweeted on all the, the, my tweet abilities.
CHARLES MAX_WOOD: Awesome.
DAN_SHAPPIR: So we're doing it live and let's see how many people actually joined the stream that we started without out planning it in ahead.
CHARLES MAX_WOOD: Yeah. But yeah. So, uh, AJ, do you kind of want to give us a control on this?
AJ_O’NEAL: I absolutely do.
AJ_O’NEAL: Okay. Yeah. Well, we should talk about truth is out there. The truth. Yeah. Okay. So in the beginning there was VAR and the word was VAR and the VAR was with the function.
STEVE_EDWARDS: I know the quote. That's very good paraphrasing AJ. Very good.
CHARLES MAX_WOOD: I'm just waiting for lightning to hit AJ through his house.
DAN_SHAPPIR: Oh my.
AJ_O’NEAL: But generally speaking, try catch is a compiler wacko mold feature.
DAN_SHAPPIR: Yeah, but you're already going down a rabbit hole. Let's, let's try to stick to bar.
AJ_O’NEAL: Okay. But, but, but it's important because that is the exception to bar.
DAN_SHAPPIR: By the way, again, it's both defined and undefined. I'll interrupt you again. There's an excellent YouTube episode for the HTTP 203 series that Jake Archibald and Sir Madhu, in which they discuss scoping around the for looping statement. And it exactly highlights how complicated these rules can get. Let's just put it this way, there are way more scopes within a single four instructions that you will expect. We'll probably put a link to it in the show notes. It's a great episode.
AJ_O’NEAL: Whoa, whoa, whoa, whoa,
STEVE_EDWARDS: Yeah, I think it's more personal preference. I mean, I'm so used to declaring all my stuff at the top, just so that if I'm looking, if, you know, I'm down in a function and I'm, I want to know where to go look for my definitions. And so if I know they're all in one place, then it's easy to go find them and see, okay, this is what I'm going to be needing throughout the function as compared to, okay, it could be declared here or here or here. So it's, I guess maybe it's just a matter of organizational preference.
AJ_O’NEAL: And this is why let doesn't work in switch statements. Because it both literally it is Schrodinger's variable declaration. It exists and doesn't exist at the same time. And whether you observe it or not, I guess doesn't matter because it'll just fail. It'll, it'll fail in both cases. It'll fail if you use it. It'll fail if you don't use it. If you use lights, if you try to, if you try to use lights in a switch, you experience that first hand where it says, well, you can't use this because it's declared here. Oh, you, well, you can't use this because it's not declared here.
DAN_SHAPPIR: Well, let's put it this way. Usually if you really want to use let's in switch statements, you would actually create block scopes for the different, different cases and then use the, the lead statement within those block scopes.
AJ_O’NEAL: Which is not the way that it works in any other language. So for trying to bring conformity, this is my problem. If you're going to try to bring conformity, then don't introduce new bugs into the language that didn't exist. People. Well, that's part of my beef.
AJ_O’NEAL: Which is another one of my problems with it. It's, it is a compile time feature for a non-compiled language that tooling already handled properly.
STEVE_EDWARDS: It won't let you use it.
AJ_O’NEAL: which would be a different language. A superset of a subset is a different language.
DAN_SHAPPIR: Yeah.But be that, be that as it may, or like I said, you might be using ESLint to just enforce certain rules. I don't know if I'd call that actual compilation or a different programming.
DAN_SHAPPIR: It, I don't know. That's something I have no knowledge about. So I'm not going to debate the point. It's interesting. I'll check and see if I can find information about it, because if that's the case, it sounds sad, but I have no information on it. And consequently, no opinion of that.
AJ_O’NEAL: I tried to use it because it's what's popular. And I thought, well, if I can just use what everybody else is using and I can get it to work for me, then great, I'll do it. And the first thing that I tried to do with it, I was, was put in a, some sort of rule and there, there just wasn't a way to, I couldn't figure out how to do it because it required these babble plugins. And of course that's hundreds of dependencies. I think they trimmed that down a lot. Now I noticed in the latest react install, there's only a hundred dependencies instead of 12,000 or something like that. So they may have fixed it when that was fixed. That was this year. I mean last year, technically.
DAN_SHAPPIR: Well, going back to the discussion about, about bar and let to be honest, I'm not such a huge fan of let either my attitude of let yeah,
AJ_O’NEAL: why not?
DAN_SHAPPIR: Because I prefer cost.
AJ_O’NEAL: Oh no, no, now you've gone down. I need, I need the Skywalker meme. There was something that you needed in the dark side if you went straight for it. You didn't even try to stop yourself.
DAN_SHAPPIR: I know, but look at it. Well, you know, I love that meme, like, join the dark side, you've got cookies. Okay, first of all, I totally agree with you that Const is an unfortunate...
STEVE_EDWARDS: Sorry, I was a little delayed, but it was well worth it.
DAN_SHAPPIR: I totally agree with you that cons is an unfortunate name. First of all, it's unfortunate for being five characters long. It's really annoying to having to type those extra two characters every time I want to declare a variable. By the way, I recently joined Next Insurance, as that's where I now work. And there I'm focusing both on frontend and on backend. And for the backend, the programming language that we use for our backend stuff is Kotlin. So I'm in the process of learning Kotlin. And Kotlin uses var to declare variables and uses val to specify values, which are identifiers that represents values that cannot be mutated. And I very much like that normal culture. So I wish that instead of const, they would have used the word val, which first, but you know, the only downside with it is that it might be too close and confusing to bar. But it does work for Kotlin.
AJ_O’NEAL: All the places where... So one of the problems with all the changes to the language is that it makes the interpreter slower and slower and slower in terms of... There's more and more rules, there's more...
DAN_SHAPPIR: So far the V8 guys have been able to do a really bang up job and. If the language is getting any slower, nobody notices. In fact it usually just keeps on getting faster. And I have to say, I have also to say that you've got a strong representation of all of the engine makers on TC39 and features have been shot down because the various vendors have said either we can't implement this or we can, but it will just hurt performance too much. So, so features have been shot down for that reason. So if they had really been in opposition to this capability because it would really slow things down, then it would not have gone through.
AJ_O’NEAL: I meant, I meant to say parser, not interpreter, but when you, so everything that goes into the language, they want, they want it to not conflict. And I guess this shouldn't be a problem. It's like, because adding a keyword like that, does it prevent you from using you can, can you still barlet? I mean, let me try this out real quick. I don't know if you can,
DAN_SHAPPIR: I have no idea, but at the end of the day. That's not the point. You know, nobody's going to add Vali into the language now. But I'm saying that I totally agree with you that const is unfortunate and a whole bunch of newbie developers are confused by it because they assign an object into a const and they don't understand that, like you said, that what's actually mutable is the reference, not the reference object. And then they are really surprised when you mutate an object that's referenced via const.
AJ_O’NEAL: My biggest beef with const, two things, one, you can var let and this is why they wouldn't have done val because that would have caused way too many bugs. So let is not a strict keyword in the sense that let can be overwritten. So I just did var let equals one and then I can do let one. I wonder if I can still do let foo equals one. But I can still do let foo equals one. So there's huge ambiguity in the language right there, but it works out. Imagine if you had that with val, though. That'd be so confusing for all of the variables that are named val throughout code. But my, my big thing with, with const is cause at first it was just, okay, let's not call things what they are. I don't point at acne on my nose and say, Oh look, I have cancer today. Or, Oh, I just popped some cancer on my face. You know, that's, you don't go to the extreme for minor things unless you live.
DAN_SHAPPIR: All I'm saying is that I totally agree that it's an unfortunate name, but I'm not choosing the name. I'm choosing it because I like to declare immutable identifiers.
AJ_O’NEAL: But this is the problem that I have with that specifically is that then people write really crap code because you'll see nested ternary expressions and, and groupings of and, and or, and because people for some reason believe that const is a moral good. And, and so then they'll create all of this morally bad code that morally bad to me means that it's not readable. It's difficult to discern. It is. It is not built for people.
DAN_SHAPPIR: People will write bad code for any number of reasons. It doesn't mean that we should avoid a particular language constructs just because people who have not been taught the language well might misuse it. Look, I'm looking at
AJ_O’NEAL: the majority of cases are misuse.
DAN_SHAPPIR: Then yes, I'll put it from the reverse. I'll explain the way that I look at it is that. Usually when I assign a value into an identifier, in most cases, I don't want to modify the value contained within that identifier or represented by that identifier. And when I find myself in situations where I do want to modify the value represented by that identifier, I find it to be some sort of code smell that indicates that I should potentially refactor my code. Now I'm not saying that that's the case 100% of the time, but it's the case in the majority of the time.
AJ_O’NEAL: Anytime you've got a string that you want to get something out of, you want to trim the trailing new lines, the spaces, and this happens a lot in the actual...
DAN_SHAPPIR: I put it in a new identifier, the result. I called it untrimmed or untrimmed or something like that.
AJ_O’NEAL: But why? That you're holding onto memory you don't need to hold onto and your variable names are getting...
AJ_O’NEAL: they do in marketing. That's the only reason I bring it up is because someone's going to hear, oh, const is slower and bloats my memory usage. I won't use it. And that's a win for me.
AJ_O’NEAL: And it's not,
DAN_SHAPPIR: yeah. And so when I use const, it forces me not to reuse identifier and I see that as a significant benefit.
Time is of the essence when identifying and resolving issues in your software. And our friends at Raygon are here to help. Their brand new alerting feature is now available for crash reporting and real user monitoring to make sure you're quickly notified of the errors, crashes, and front-end performance issues that matter most to you in your business. Set thresholds for your alert based on an increase in error count, a spike in load time, or new issues introduced in the latest deployment, along with custom filters that give you even greater control. Assign multiple users to ensure the right team members are notified with alerts linked directly to the issue in Raygun, taking you to the root cause faster. Never miss another mission-critical issue in your software again. Try Raygon Alerting today and create a world class issue resolution workflow that gives you and your customer peace of mind. Visit raygon.com to learn more. Their simple usage plans start from as little as $4 per month with unlimited apps and users. That's raygon.com to start your free 14 day trial.
DAN_SHAPPIR: I kind of use these identifier as kind of descriptive placeholders within complex computations. Like you said that, and I actually agree with you that one of the problems with people who are kind of new to the language and try to adopt this concept of using const is that they can end up creating really complex expressions just so that they don't need to mutate because they want to avoid mutating a variable so they don't use something like a plus equals or something like that.
AJ_O’NEAL: Somebody listening in just. Responded sorry to interrupt value as number is a thing. Thank you. Austin Gill You are my personal hero today. You've taught me something in HTML that everyone deserves to know Bless you bless you
STEVE_EDWARDS: way to go Austin. He used to be one of our
DAN_SHAPPIR: So, yeah, it's great to not be alone But anyway, so I was saying that you're absolutely correct that using constant can lead to scenarios where you attempted to write really complicated and hard to understand expressions just so that you don't need to mutate. But it doesn't have to be this way. First of all, you can always just break that complex computation into a separate function, even a local function within that function, and do whatever computations you want there, return the result and, you know, assign that result into the cost. So that's one thing that you can do to remedy this situation. Another thing is very often I see the, you know, stuff like plus equals or, or other type of modifying assignments using the context of core loops. And that just goes to the fact that I prefer to use, uh, iterator methods like, uh, map and find and filter and stuff like that.
AJ_O’NEAL: Those are not on interators.
DAN_SHAPPIR: I said iteration methods. I didn't say iterators.
AJ_O’NEAL: Oh, sorry.I miss heard.
DAN_SHAPPIR: I wish that they were on the iterators. I've, we've discussed this in the past. They're not, they're just methods on arrays. But again, if I, if I want to, let's say some numbers in an array, then I use something like either a low dash sum or some, or my own implementation built with what we do, so whatever, and I wouldn't do it as a for loop and therefore again, I wouldn't need to modify variable in each iteration because I just compute the result and assign the result into an immutable identifier.
AJ_O’NEAL: So here's what I need to know about potential purists. If you needed to interleave stereo channels of audio, would you use a for loop?
DAN_SHAPPIR: I might. I'm not saying I'm religiously against it. I said, I prefer look, I, everything that I'm, everything that I'm saying is to be taken, like I said, within reason.
AJ_O’NEAL: And I just, I just want to know how far you'd go,
DAN_SHAPPIR: but I'll give you an even worse example. When I, I haven't done this in a while now, but the last time that I recall interviewing for a job, uh, and they were giving me, you know, those annoying coding exercises that they tend to do in those types of situations. I tend to, as I recall, I actually used for loops because I was trying to figure this, the problem through under pressure. And I wasn't sure which iteration method I would want to use. So it's easier. It was easier for me to just use a general for loop and go from there. In the real world, I would then go after, you know, if, if I, if I started that way, first of all, in the real world, obviously there's no, no, no such pressure. But beyond that, if I do start with a for loop, I might then go, go in afterward, refactor it into using iteration methods because I prefer the declarative approach because I find it easier to read, assuming you're familiar with the coding style.
AJ_O’NEAL: Yeah. And I think I agree. I think that there's a few that I like to use, particularly map, I find to be honest to goodness useful. When I look at code in general, I see more people abusing reduce than using reduce. And when you get to the more combinatorial methods, flat map and reduce, right. And at that point, it's just all out the window in terms of if people use them at all, they're using them wrong, except for the very, very few people that know how to use it correctly. And then it's actually less clear to read because there is so much that's baked into it's easier to chain two things together and be able to look at this in isolation and look at this side isolation than some of those iterator methods where they have extremely specific behaviors and an extremely specific use case that most people just aren't going to be familiar with in the first place.
DAN_SHAPPIR: Yeah, it's like with Unix or Linux pipes. Used in a sane way, Unix pipes or Linux pipes, the fact that you can pipe data through a series of simple, really specific applications that do a really specific thing is great. But then you pipe it through some sort of a really complex off program or something and you don't know what's going on. And AJ's fighting, so I'm scared.
AJ_O’NEAL: Well, I love to do fairly complex things. Not that I love to do it, but it's, it's not stuff that goes into production, but I will write scripts that do what they need to do to get the job done across the a hundred files. And what I'll do is in my PR or my issue for that, I'll post the script so that if by chance anyone else can understand it, they can comment on something that's wrong and that I have it as a reference if I need to undo and redo. Cause sometimes if you need to go across many files, you, but I, I actually, I'm anti-OC from the perspective that unless you are a sysadmin and you literally do not learn programming languages, then I get the case for Oc, but anybody who knows a programming language, why would you learn yet one more scripting language? When you could at that point just write it in a scripting language.
AJ_O’NEAL: You've got to be on the button for that, Steve. Get your fingers that they're ready. Do we actually have a little bit of latency between us?
DAN_SHAPPIR: We probably do. I mean, latency is a fact of life. But, but I wanted to...
STEVE_EDWARDS: Sorry, there's a little bit of delay when I click the button and when the sound plays, so I'm doing my best.
DAN_SHAPPIR: I do want to add, like, I know that we're running towards the end of the show and there were two important points that I wanted to make. One was that for me at the end of the day, it's a question of reference. I can appreciate people who prefer using VAR. For example, Kyle Simpson, Getify, who we all admire, is a real big proponent of VAR. He literally hates all the other options, I think, more or less. And I totally accept that. It's just like I said, it's my preference to use const, and I accept it when others don't have the same attitude. And so that's one thing. And the other thing that I wanted to say is that it's really the most important thing is to be consistent in your code base. Like if you're coming into an existing code base and you see that they're using bar throughout or let throughout, be consistent with that. Don't try to like say this, okay, I get that everything everywhere else in this code, they're coding this way. I have my own personal preferences. I'm going to code it differently. You're just creating a headache for whoever needs to maintain that, that code after you and ESLint is a great way to enforce consistency in large scales projects in this way.
AJ_O’NEAL: So this is one thing I was going to ask. Why is const at all important as a language feature when it's not a compiled language, so you don't get any of the benefits there, but you have the tooling, right? So this is my thought. If you don't, if you're the type of dev that is at the beginner level where you're not using any tooling, no one's told you about VS code or JS hand or ES Lent yet, right? Don't you just want your code to at that point, you just kind of want things to work at all. You don't want them to break midstream, right? And if you are a dev who uses tooling, what in the world does const offer you that just taking the little checkbox in your linter config while typing out true in the JSON of your linter config doesn't.
DAN_SHAPPIR: Don't exactly follow. How would you indicate that something needs to be, needs to be const or no, needs to be immutable to the linting environment without using the appropriate keyword?
AJ_O’NEAL: Well, because you're saying that, well, essentially, it seems that people are one of two camps. They're either, well, one of three camps. They're either using VAR in a possibly disciplined fashion, or they're using const in a possibly disciplined fashion, or they just do whatever, right? So if you wanted to have the discipline of const, just apply that rule to VAR, right? Just say, I don't want things, I don't want to allow mutating.
DAN_SHAPPIR: Yeah, but then you're changing the meaning or the behavior of a keyword in the language. And I have a problem with that. But you're not changing it because you're declaring lots of vars.
AJ_O’NEAL: You're just saying, hey, don't let me mutate.
DAN_SHAPPIR: Yeah. But first of all, like I said, there are certain scenarios where you actually may want to mutate. And the other thing is that I'll be potentially surprising whoever reads the code after me, because they'll be seeing var. They know that you can modify var. And all of a sudden they find out the hard way that they can and they'll be really annoyed with it. I prefer to be specific about it. So from my perspective, so my perspective is this, I totally agree with you that the use of const is, as the keyword is unfortunate, I would have preferred the different keyword that's more indicative of the fact that it's the identifier.
AJ_O’NEAL: What should that keyword be, by the way? Just like I said, curiosity.
AJ_O’NEAL: Okay. Well, Rust has let and let mute. And I think that that works really well. Sometimes it's confusing because the mute can go on either side of the equation and then I get confused because I'm not used to that syntax. But anyway, I just don't, I don't know what the appropriate keyword ought to be, but I would be in, I would, I would maybe be in favor of an appropriate keyword if people didn't lie and tell people that it's religiously better and then make, encourage them to write crap code so that they don't do an if where obviously let variable equals default value if special condition variable equals special value. That's good.
DAN_SHAPPIR: And another thing that I wanted to say is that before let and cons were introduced into the language, I was familiar with, with the Douglas Crockford's approach of putting all the vals at the, all the bars at the top. I agreed that it was the right thing to do and yet I couldn't bring myself to do it. So By using let and const, at least, I code along appropriately in this regard. I don't know. I'm not sure what the term would be.
AJ_O’NEAL: There's one more thing that I wanted to mention before we end, which is another compiled versus dynamic language issue. Const and let really screw up your REPL experience. When you're just trying to test out some code real quick, test out these three lines of code and say, okay. Let me paste these in here. Oh, I need to change this. Paste this in here. Ah, that doesn't work. Let me refresh the page. Do it again.
DAN_SHAPPIR: So they actually fixed it. I did. Yeah. I'm not sure. First, first of all, you can, you can for sure use that multiple times. And I, as I recall that you cannot even this is cost multiple times, but I'm not sure if it's already in the release version of Chrome, it might be that it's all in from Canary or something like that. I think that you,
STEVE_EDWARDS: we need a breaking news.
AJ_O’NEAL: We do. Because I could have sworn, so I see that it's working in Chrome. I don't think that it works in, in node yet. I'm not sure, but I tried this recently. I recently had a problem with this recently could be anytime in the last year for me actually,
DAN_SHAPPIR: but they actually needed to do work to get it to work. So, because like you said, by default, we're working within the same scope. You've created the cons. Well, you can't create the constitute with the same name again. And likewise, you can't be declared a variable using that. So they actually had to do work within the Chrome DevTools console to actually get it to work. It's like they're creating a new scope for every line that they're executing or something along these lines or something weird like that. I don't know exactly what they're doing.
AJ_O’NEAL: My rule of thumb has become if I don't have any good reason that I want to restrict this code to be for non-embedded environments, let's say, I will use VAR. So if I need to use something such as the web crypto API or some API that only exists in evergreen browsers, that wouldn't exist in an embedded environment, such as, uh, was it duct tape JS or the Wii U or the PlayStation or something like that, if I'm, if I'm using something that I know is not going to be available in specialized environments, I'll use led. But if I'm doing something that's fairly generic, I'll just use VAR because. Why not let it work just in case somebody wants to use it in an esoteric environment? And then I use const for constants if it's actually a constant. So var for global scope and for things that don't matter, let for modern code that the virtue of what the code is, is going to enforce that somebody must have an evergreen browser anyway. And const just for constants.
DAN_SHAPPIR: And I think we need to move over to PIX soon, don't we Chuck?
CHARLES MAX_WOOD: Yeah, we should. Yep, let's do picks. Sorry, I've been pretty quiet on this one, but, uh, been interesting to listen to, but yeah, let's do picks.
Hey folks, this is Charles Maxwood from Top End Devs. And lately I've been working on actually building out Top End Devs. If you're interested, you can go to topendevs.com slash podcast, and you can actually hear a little bit more about my story about why I'm doing what I'm doing with Top End Devs, why I changed it from, uh, devchat.tv to Top End Devs. But what I really want to get into is that. I have decided that I'm going to build the platform that I always wished I had with DevChat.tv. And I renamed it to Top End Devs because I want to give you the resources that are going to help you to build the career that you want. Right? So whether you want to be an influencer in tech, whether you want to go and just max out your salary and then go live a lifestyle with your family, your friends, or just traveling the world or whatever, I want to give you the resources that are going to help you do that. We're going to have career and leadership resources in there and we're gonna be giving you content on a regular basis to help you level up and max out your career. So go check it out at topendevs.com. If you sign up before my birthday, that's December 14th. If you sign up before my birthday, you can get 50% off the lifetime of your subscription. Once again, that's topendevs.com.
CHARLES MAX_WOOD: Steve, do you wanna start us with picks?
STEVE_EDWARDS: Yes, let's start with picks. So I actually have a legit pick before I get to the highlight of the show, the dad jokes. So I just finished reading a book by an author named Eric Metaxas. He's a pretty well-known Christian author. And the book is called, Is Atheism Dead? It's a pretty new book. And in it, he really does a good job of marshaling a lot of the evidence for the historicity and scientific accuracy of the Bible and addressing a lot of claims made by the quote unquote new atheists like Richard Dawkins and Christopher Hitchens. But it's really, really a good book. I've picked before, article that he wrote for Newsweek magazine that is an excerpt from this book about some of the findings related to the physical location of the cities of Sodom and Gomorrah. And so that's part of this book, but it's really good book. It's looked sort of long, but a lot of good information in it. Now,
DAN_SHAPPIR: if I can interject before we get to the joke, I think that you can accept that things that are described in the Bible, at least some of them, are maybe historically accurate or are depictions of, you know, modified depictions of actual historical events without being either religious or an atheist. I believe that a lot of the events, things that are described in the Bible are in fact related to actual historical events. Doesn't mean that I have to be religious in order to accept that.
STEVE_EDWARDS: Yes, that's true. And although my point of view is that if you find that it's telling the truth in some things, you can go on to the historicity of the Book of Luke, for example, as another one, then why wouldn't you believe it in other things? But no, that's a whole typical discussion. I, for instance, you know, to your point, Dan, I can remember years ago reading about a course, a college course that taught the Bible is literature. Nothing more, you know, literature, you look at the poetry and the stories and some of the other things in there where you treat simply as literature without, you know, any validation for the religious aspects of it. So yeah, as such, I believe it's great. That's a great tool for that. So anyway, a couple months ago, I was flying down to Orlando, took my family on a vacation. And on the plane, I was sitting next to this guy who looked really nervous. And I asked him if he was nervous. He said, yes. And I said, Oh, is this your first time? And he said, no, I've been nervous many times before too.
DAN_SHAPPIR: Okay. I laughed before I managed to push the button.
STEVE_EDWARDS: So as programmers or developers, whatever term we want to use ourselves, what's the drug that most programmers are addicted to? Coding.Thank you very much. And then finally, what do you need to make a good movie about Broken Bones? An awesome cast.
DAN_SHAPPIR: Okay, okay.Alright, that's great.
STEVE_EDWARDS: Thank you for the laugh, I appreciate it. Anyway, that's all the picks that I have for this week. All right, Dan, what are your picks?
DAN_SHAPPIR: My picks aren't that funny, Steve.
CHARLES MAX_WOOD: I was gonna say, I didn't think it was that funny.
STEVE_EDWARDS: Actually, it's just the law, I think, to how it accidentally replays.
CHARLES MAX_WOOD: All right. AJ, what are your picks?
AJ_O’NEAL: Oh, I've got some good ones today, don't you know? So first of all, now that you're able to watch this live, I get to say the thing that I say when we're actually really live on my own channel, which is that if you like this, found it entertaining or the sound of our voices just helps you fall asleep at night over there on the other side of the world. Go ahead and give us a thumbs up and sub. Wait, that's not really a pic. That's just me throwing an anchor line in. I'm gonna pick Mario Kart Live. Apps are fricking, literally amazing. I cannot, when I saw the commercial for it, I thought, take my money now. And then as time went on, I thought, nah, it's not gonna be that good. They're not really gonna figure it out. But Nintendo is the Apple of games, right? Other people can try things out. Well, actually, Nintendo fails quite often. Augmented reality is something that they've failed every single time that they've ever tried until now But yeah, Mario Kart live is awesome I can let my two-year-old play and the car will go around the track on its own If she just holds down the a button and it's in auto mode the car that the camera will just look for the gates and the car will drive through them and it keeps track of the track and even as things kind of get bumped and moved a little bit as the car might bump into them or the cat we don't have a cat but the cat might bump into them, you know, etc. It is just amazing. And then I enjoy it and you get to unlock the faster races as you progress. And so the car physically gets faster when a shell hits you there's a wind hazard. So when the wind blows, your car is actually knocked to the side. And so you can't steer to the left or to the right because the winds blowing to it. It's just it they just did a bang up amazing job. I think Mario Kart Live is awesome. I hope that you do too. You're welcome.
STEVE_EDWARDS: Hey, AJ, so yeah, we've loved Mario Kart ever since the Wii. So is this something you play like online?
AJ_O’NEAL: No, this is physical. You buy the car and you set up gates in the house. It is Phantasmagor. And I actually bought a second Switch. I went online and was able to get one used for a pretty darn good price considering that they're always out of stock. Actually, Facebook Marketplace. I got it from a guy in Lehigh just a few miles up the road. Anyway, yeah, but I actually got a second switch so that we could play independently because she being a two year old, it has a much easier time holding the thing up towards her face than she does looking at a screen and holding the controller in her hand, you know, it's a little more together. So yeah, I it was that good. Of course, I am the person who bought a Wii U to be able to play Mario Kart in full HD and spent way too much money doing that and that was literally the only game that ever came out for the Wii U aside from Smash Bros that was I guess Pikmin 3 but I didn't get that until I got the Switch. Anyway, Deku Deals I'm also going to pick because my link to Mario Kart Live is my Amazon affiliate link but if you want the best price you've got to go to Deku Deals. Deku Deals is the one to all the blah blah blah blah blah blah blah blah blah blah for anything Nintendo that you want to be able to buy and know when it's the cheapest either physical or digital or whatever. I mentioned that before, but I love that code deals. I, and, and then my technical pick is the note JS Beck best practices guide by goal, bird, yoni, goldberg, yoni. It's actually not bad. Isn't it's good.
DAN_SHAPPIR: It would be yoni Goldberg, by the way, yoni, yoni, yoni would be his first name. I
AJ_O’NEAL: 'm reading the username, but yes, thank you. Anyway. Yeah. So the guide is actually good. There's multiple contributors to it. There's a few things I disagree with, but it's an excellent guy. It's an excellent guide. I really appreciate it. They hit on a lot of points that I've also hit on over the years. And it's just good to see that I'm not alone and old man yelling at clouds. There are a couple other men out there on the fields with me. And aside from that web install.dev for all your developer tools, Creeds of Craftsmanship.com for great talks and reference material for learning to become a software engineer. It's not the stuff that I'm creating, just stuff that I'm aggregating. And then if you want to follow me on the live streams, CoolAJ86 on YouTube and Twitch and Beyond Code Bootcamp also on YouTube and Twitter for the more condensed material.
CHARLES MAX_WOOD: All right. I'm going to jump in. I do have a question on the Mario Kart thing. Does it have to be on a hard floor because most of my house is carpeted?
AJ_O’NEAL: It depends on how deep the carpet is. If it's shag carpet, it's not going to work. If it's pretty thin carpet, it can work. If it's kind of thickish carpet, then it's kind of a bumpy ride. It's not the best, but you can just take all your Amazon cardboard boxes and lay those down. But we actually have the floor in the kitchen and the floor in the living room are, it's the same room. And it's, it's actually kind of cool to have it hit the carpet and then bump up in the air a little bit. Once you unlock 200 CC and it can go fast enough to do that. It's pretty cool.
CHARLES MAX_WOOD: Yeah. Our kitchen and living room are right next to each other. And there's a long wooden transition strip there that yeah, that might be interesting, but the couch is right there too. So
AJ_O’NEAL: if the couch is only, if it's at least yay high off the ground, you can put up a gate in front of the cat couch and then have part of the course run through the couch. We've done a couple of different configurations between figure eights and circles and going under the couch, going under the table, you know, it's, it's cool. I don't know if it's a novelty item that will only be good for so many hours or if it's something that you'll come back to and enjoy over and over again for hundreds of hours, the way that I feel about normal Mario Kart, but it's at least as challenging as the normal game, but maybe more challenging because if you hit into a table, there is no, I forget his name, the turtle guy to come pick you up and pull you over and put you back on the track. If you hit a hazard, you've actually, well, in the real world, you've actually hit a hazard and have to deal with it in some way. And then the way that they, you know, obviously you can't have different tracks every single time you do a race, but the way that they do the obstacles and the hazards and the different ways of causing you trouble are interesting and fun.
CHARLES MAX_WOOD: Cool. I'm going to have to watch Deku deals. Yeah. Mario Kart's one of the ones that I play with my kids a bunch.
AJ_O’NEAL: So you can play two player locally. If you play on the TV, if you want to play handheld, then the play two player, you need to have two switches.
CHARLES MAX_WOOD: Two switches. We have two switches. All right. Good deal. And it looks like they only have Mario and Luigi. Correct. OK, good deal.
STEVE_EDWARDS: Oh bummer, I always like dry bones.
AJ_O’NEAL: Yeah, you can only play two player. You cannot play more than that. Well, you can play with or without thumbs. And then also when you're playing with a two year old, it's nice when you can play your own race and she can play her own race. You know, half, I mean, obviously you don't have to play together, but you can play together in the same actual race.
DAN_SHAPPIR: Well, I understand why you don't want to play with your two-year-old. She probably beats you like nine times out of ten.
CHARLES MAX_WOOD: Yeah. All right. Good deal. I was just curious. So, yeah. And yeah, the Deku deals. Yeah, that looks good. You might have spent some of my money anyway. I'm going to throw out a bunch of picks here. So I usually do a board game pick. So the pick I'm going to throw out this week. I need to actually make a list so that I can like mark off which ones I've done, because I'm starting to get to the point where I'm like, did I pick this one? So I'm just going to pick it. And we're going to go with it. And then if I've picked it before that I'm real sorry. And yeah, I'll go put the list together so that I know, Hey, I've picked it on these shows, but the game I'm going to pick is called Scythe and it's, it's like the, the tool you use to read the crops Scythe and the way that it works is. So it's got the hexagonal board spaces, kind of like Settlers of Catan, except it's, it's all just, you just put the board down, you don't actually like lay out the hexes and each hex actually generates different resources, like in Settlers of Catan. The difference is that you've also got an action board in front of you and you all play different characters that are different nationalities that all have different abilities that help you out, right? So you may be able to move across water in a certain way or you may be able to... So the one I played with my wife and sister and brother-in-law the other day was what I could do is I could actually, when I triggered an exploration, I could use two of the features instead of one. And so you move around the board and as your character hits certain spaces, you can do certain things. But the main functionality of the game is you have a little pawn on your action board and you move it to the action you want to take. And then you can take an action that gives you like power, which is usually what you're using for combat. Or you can get money or you can get resources or you can place workers and then make the workers work. Right. And so when the workers work, that's how you get the resources. And then as you move around the board, you can have encounters with people and you can get certain things that way you gain popularity. And then at the end of the game, what you do is you tally up all of your money basically, so you get paid for the number of hexes you control and the number of Quest you've completed and the you know different things and at the end you tally it up and whoever has the most wins and it's it's really really fun It's it's a game and it takes about an hour to play it's a little bit involved to figure out But once you get into the gameplay, it's relatively simple do the top action do the bottom action Oh, I know right yeah Yeah, you move between production and deployment and enlisting other people.
DAN_SHAPPIR: Yeah. And at the end of the day, I tell you up the things and hope to go that I've come up with the head.
CHARLES MAX_WOOD: That's right. So anyway, it's super fun game. We have it. We own the expansion to it as well. It does have a single player mode that I have not tried, but anyway, it's a way fun game. Um, it's going to be a little on the little more expensive side of games, but definitely one of my favorites. So I'm going to pick Scythe. And then for everything else, I am currently working on pulling some stuff together with top end devs. I think the next stage of things is to start releasing some of these series that I wanted to put together and putting up a summit. And so the first summit is going to be the top end dev summit, and it's going to be focused on how you get to be that top 5% of developers. So what are the things that you have to do that are kind of above and beyond what anybody else is doing to get you into that top 5%? And I'm going to have people from all over the industry come talk about basically how they made contact with other people, gain notoriety, or just practice every day so that they can essentially gain the skills and connections and personal brand that allow them to notch up. So anyway, go to topendevs.com. All the information will be there. And I should have dates by next week when we record this. But that's what's going on there. And then the last pick I have, and I've talked about the Traeger before that I used to smoke, but my family, we decided for my birthday. In other words, I decided for my birthday that I wanted to get a bunch of people together and do ribs. And so I did that. And then we were talking about getting together with some friends or with some family for New Year's Eve and we made brisket tacos. And I have to say that that's been like the best thing ever. And when you get the brisket right, oh my gosh, it is so good. So I'm going to pick brisket. That's my pick and tie that in with the Traeger smoker.
DAN_SHAPPIR: You're making me hungry, Chcuk.
CHARLES MAX_WOOD: Oh man. I'm making me hungry. All right, folks, we're going to wrap it up here and yeah, thank you all for coming and having this conversation. We'll check out the live stream, see how that went, see if we want to keep doing it. And until next time folks, max out.
For the real contact fast with Cashfly, visit C A C H E F L Y dot com to learn more.