Inspiration is the most important thing when learning to code. Do what excites you. Without that fire, you are going to burn out when things get difficult. Try to build whatever sounds fun to you, and see how you can incorporate what you're trying to learn into that. Afterward, you can learn a lot by trying to optimize your project!
Always strive to gain a deeper understanding of your tools beyond their applications. When you read specs and source code you'll become more familiar and be able to write much better code.
Take 30 minutes to dive deeper and try to understand how a tool you use works under the hood.
Kent C. Dodds (00:00):
Hello friends. This is your friend Kent C. Dodds, and I'm excited to be joined by my friends, Lydia and Evan. Say hi folks.
Kent C. Dodds (00:08):
I asked you to say hi folks, but that's okay. Just kidding. So yeah. Lydia, is it Halle?
It is Halley, but it's okay if you say Haley or Hill. I've heard-
Kent C. Dodds (00:22):
Heard them all.
Kent C. Dodds (00:24):
And it's Evan Bacon, which is fantastic. So just feel hungry all of a sudden. So actually this is the first time we've had two people on Chats with Kent at the same time, which is exciting. So Lydia, why don't you go ahead and go first, introduce to our friends who you are and then we can hear from Evan.
Kent C. Dodds (01:14):
I was originally introduced to you through a Medium article that you wrote years ago when you got into the industry, right?
Yeah, yeah, yeah. many years ago I wrote, I think it was called like advice from a 19 year old software developer or something. Yeah. That kind of blew up.
Kent C. Dodds (01:30):
It was a great article. I'll have to find it and stick it in the notes here.
Oh, thank you. Yeah, no.
That's how I got introduced to you, too.
Yeah. He used to like, kind of introduce me as the girl who wrote the Medium article. I was like Evan, I'm with you everyday nonstop and I'm still just the Medium girl but whatever. I mean he's the marked out engineer, like cool.
Kent C. Dodds (01:55):
Your markdown is pretty good.
Oh, okay. So yeah, I'm Evan Bacon. I'm an engineer at Expo, which is an open source platform for building apps with React for iOS, Android and web. And I've been doing open source for maybe like three or four years now. And I date the avocoder. Yeah. That's about all there is to me.
That's your resume.
The whole thing.
Kent C. Dodds (02:22):
In a nutshell. Very good. Cool. Well, it's just a pleasure to have you both on, and you mentioned to me earlier that people often ask you what it's like to date somebody who does the same kind of work as you. And I imagine there are a handful of our listeners who have been or are in that situation now. But yeah, just to get rid of that elephant in the room, what is that like?
I mean, well, we kind of started living together right before the pandemic hit. So like we immediately had to spend quarantine together, like nonstop and we both are kind of workaholics. So in the beginning it was kind of weird because we were both just coding and working like 24/7. And I guess I got kind of-
That didn't change by the way. That was in the beginning and also in the middle and end.
Yeah. Yeah. So what is it like? It's-
It's pretty good. I think normally in other relationships I might have conversations about not exercising or something. And now I have conversations about node and [stack 00:03:30] traces, and-
Microwave or something.
Yeah. That's kind of our everyday life. I'm so [inaudible 00:04:03]-
Kent C. Dodds (04:02):
Yeah, and you teach me about LA express servers and draft [inaudible 00:04:20], things I should have already know but don't.
Exactly. So it's never boring. We teach each other a lot. So it's awesome.
Kent C. Dodds (04:29):
Yeah. It doesn't really overlap much, so.
Yeah, it's exciting.
Kent C. Dodds (04:59):
Well, I think as something that we often notice is because yeah, whenever, sometimes he wants me to try out some expo related thing or like [inaudible 00:06:22] Native related thing. And I'm very used to I guess more like web technologies or back end technology. So then I kind of asked him, why doesn't it work this way or why doesn't it work that way? And then he gets more inspired to kind of I guess merge them together. So it becomes more one. So I guess eventually what we would want is that it's a lot more one-to-one all platforms.
Like, yeah, web standards kind of come together, which you see this a lot too with Node, when Node releases new features like a work controller or is that right?
I don't know.
Yeah. I wish you could just learn something once and apply it to as many things as possible. that's the future.
I think that's the dream of crypto type scriptors.
Yeah. Especially, yeah, just learn TypeScript and be able to apply it everywhere.
Kent C. Dodds (07:35):
I'm on board with that as well. I'm definitely a TypeScript fan. It would sure be nice if I could just run my TypeScript file with Node. And so maybe that's where [Dino 00:07:45] comes in handy. But yeah, I'm definitely on board with the TypeScript train.
Yeah. My favorite part of TypeScript is that when you write it, you don't need to write unit tests because it just exists. That was a special classic one just for you Kent.
Kent C. Dodds (07:59):
Yeah. Thank you. I hope your TypeScript types are really, really good so that you don't have to test any of the business logic your code is doing.
I don't use any for objects.
Kent C. Dodds (08:13):
Yeah and you never have TypeScript errors either. That's great.
Yeah it's really good.
Kent C. Dodds (08:17):
Yeah, I agree. It's really just getting back to kind of the core, the fundamentals. As long as you understand that, I think slowly you can kind of build up, add more tools to that, but-
Yeah. Which is kind of double-edged because we have tools like really great tools, like [Versel 00:09:34] and [XJS 00:09:35] which tried to abstract so much of everything away from even PHP. And those names where it's like, actually it's PHP. And it's like, they're really good and they help you move super fast, but it's also important to understand what's going on behind the scenes.
Exactly. Yeah, and I think people often see people trying to reinvent the wheel, it's like they come up with those new tools that are actually solving what's been solved long ago, but it's just abstracted away so much that you didn't see what they're doing. And this is also a problem that I've been seeing. For example, when you use [inaudible 00:10:13] a lot is they add so much Webpack config or so many optimizations that you don't even know are there or why they're necessary.
And then you try to write your own Webpack content. You're like, how hard could it be?
Exactly. Yeah. Yeah, still, I mean, it's good. Like I'm glad that they make it possible for so many people to write really optimized web apps.
Right. Like enjoy your favorite tools, but also figure out what they're doing.
Yeah. Just stay curious, you know? I don't know, just don't be too lazy about it.
Kent C. Dodds (10:47):
Yeah. Definitely learn assembly first. Correction, if you use [inaudible 00:11:43] you're not even a real developer. Yeah, getting inspired by coding is definitely number one most important thing.
Definitely. And I feel like this is kind of hard to say because I often forget what I struggled with in the beginning, but I think what really got me super excited about coding was just making so many random things, even though I had no idea what I was doing, but you know, it worked, so it was fine. And probably when I look at it now, I'm just embarrassed of everything I've built. But then after you've built something, then you should kind of try to think like, okay, but what is it actually that I just did? Why did I have to initialize that? What does this [inaudible 00:12:22] actually do? Yeah. I don't know. Just ask the right questions after you've built something. But I don't think it's a good place to start, no. That would just get boring and overwhelming. That's not-
Yeah. I think a good way to ask these questions is after you've built something is trying to figure out how to make it more performant or just optimized. And then usually in doing that, you inspire yourself to dig deeper, like how do I do bundle splitting or something? And when you actually have a goal in mind of why bundles putting is important to optimize your website and make it load faster on people's devices, then it's actually interesting. But if I just go up to someone and I'm like, hey, let me tell you about bundle splitting, you're going to be really bored very quickly. Like Evan, please leave me alone.
Yeah. I think something that I personally always did was I tried to recreate the libraries that I was using, which sometimes it worked. But it was really good because then I actually saw why it was necessary that I had to add it and what they did exactly that, I don't know. I kind of liked that because I could still use the tools that I'd already built.
Yeah. That's good.
Yeah. And see if it actually worked.
Mm-hmm (affirmative). Yeah. And I often just read documentation or the source code. Like I often just read through the V8 source code, which might sound super boring, like-
Kent C. Dodds (14:08):
Here's a fun way to get you excited about coding.
It's real bad. But I mean, you learn so much from that. Or at least I do. I don't know. Maybe I'm just weird, but.
Yeah. I think that's it.
Kent C. Dodds (14:20):
Yeah. No, I agree. Yeah.
That's pretty good. Yeah.
Kent C. Dodds (14:40):
I think what I'm hearing is that you're best served by learning just one level down from the level of abstraction that you're using, right? So you understand how to connect the tools together, but then you also want to understand how those tools work and like why do you think it's important to understand how these tools work? Why can't I just take this Lego brick over here and stick it with this Lego brick over there? Like what's the benefit of actually understanding how they work?
I mean, I definitely think that you could, but often you run into certain errors or certain bugs that you see maybe pretty often and you don't really know what they mean. I mean, you probably know how to solve it, but you're just like, I don't know, at least this is what happened to me. It's like, I don't really know what's going on. I don't really know why this happened or this error happens. And the more you understand about how a certain tool is used and how it works internally, I feel like you write better code that way. You know how to optimize your own code in order for the tool to run more efficiently.
Yeah. I definitely see this doing Open Source when people share error messages because for me, a lot of their messages will make sense to me because I understand the internals. But then to other people they might not understand. And a lot of the times it usually it's just like undefined, it's not a function. But sometimes it'll be like-
Kent C. Dodds (15:44):
It's not very helpful.
Yeah, they'll be like why is this not work? But yeah, sometimes it points to something. And if you understand a lot of how things work, then you'll recognize and you can just debug things much faster. And-
And you'll see often, or sometimes, that tools are just using something that is so completely unnecessary. And it's like this tool is actually pretty broken.
Kent C. Dodds (16:26):
Yeah. I find researching Babel, what little Babel plugins do is really helpful because you're like, oh, this basically works the same as this code and I understand how this code works, but not this other code. And so now you kind of have a better understanding of how stuff, and then you can also do it in little chunks just by language features.
I think a lot of it for me, it was really just trying it out. You know, it's also just years of coding that you eventually kind of know how things fit together, but it might not always make sense if you just get started. That's for me the hardest part, kind of like emphasizing with people that are now getting into the React community because when I started, we didn't have hooks, we didn't have all that. So how does it feel for them to start with React using hooks? That must be pretty confusing. I mean, I would be super confused, but.
I'm just, yeah always confused.
Yeah, I'm still confused. Yeah.
it's better now there's not much Redux being used everywhere.
Yeah. That was the confusing part when I started Redux. But, okay that kind of didn't answer the question at all.
If you let us talk long enough, we'll go onto a tangent.
Kent C. Dodds (18:54):
Yeah. I completely agree.
It's who to blame, it's who-
On the wrong [inaudible 00:20:30].
Kent C. Dodds (20:32):
Yeah. I think also understanding what problem is React trying to solve. At least that always really works for me. It's like, why? Why am I doing this? Why does this tool exist? Why is hooks a thing? What problem did they solve?
Yeah. That's a really nice way of teaching by the way, the Dom nodes thing because whenever anyone asks me how to get into web development, I want to say React, but I also know that if they don't know HTML, it's going to be a problem. But I don't want to say HTML because it's like they might fall down that rabbit hole of like-
I think just generally like knowing Dom [API 00:21:57].
Yeah. Yeah. That's pretty interesting.
Kent C. Dodds (22:01):
Yeah. It's kind of tricky especially for brand new people, you have to walk that balance like we were talking about earlier of using abstraction so you can build something exciting and keep yourself motivated, but also not missing out on really important fundamentals. And so what I often will tell people is I'll say start with abstractions that can help you build something fast. Just ship something interesting to get you excited, and then when you're ready to level up, then you dive deep on the abstractions that you're using. And so that's when you get into the monotony, I guess you could call it of like understanding the low-level Dom APIs and stuff like that.
Yeah. I like that.
Kent C. Dodds (22:46):
So we're reaching toward the end of our time here. And so I just want to ask you, is there anything else that you wanted to talk about or any other ideas around understanding how things work under the hood that we didn't get to touch on already?
Is that for me? I thought that was a question for you.
Yeah, well maybe some Native thing.
Because yeah I mean, I always like, even though I know that when you do div in a React component that it's not HTML, I don't really fully grasp what it means for it to actually just be a React component until you start working in a universal way and you're like, okay, this view is on iOS, Android, web, it's the same. And it's like, this div is actually a component wrapped around a Native element. I forget what they actually call them, properly host components I believe. It's not like an actual host component. So I definitely think React is super nice for its ability to just pick you up and drop you in a different run time. And if you want to try that, you can do it with the Expo.
Kent C. Dodds (24:57):
If I was going to throw out a recommendation, you can try Expo with it.
Kent C. Dodds (25:01):
Yeah. Well, I actually Expo is the only time I've ever used React native is a little hello world thing. And it blew my mind how easy it was to get going. So I mean, relative to what I was expecting I guess.
Yeah, yeah, yeah. It's kind of, it gets easier every few months. React Native is still really pumping out new features and getting better all the time. It's very reminiscent of React maybe a couple of years ago where you were like, wow, every time there was a new React release, you were just kind of changing the way you were thinking about it. And it was like Christmas every time a new release. That's kind of how being in the React Native community is right now, the Native React community.
Kent C. Dodds (25:44):
Kent C. Dodds (27:11):
That's great for production.
Kent C. Dodds (27:37):
Kent C. Dodds (28:32):
Kent C. Dodds (28:40):
Cool. Well with the-
You mean TypeScript.
Kent C. Dodds (28:44):
Yeah, like also just using, I think, other run times. A great one that I just thought of was like, I think, it always slips my mind because Versel is so good at hiding it. But with an XJS, that code does run in a node environment at some point, and then in the browser. So that actually shows a lot of similarities with what I was saying about React Native. So if you're familiar with an XJS, kind of see where things work in a node environment versus when they work in the browser.
Kent C. Dodds (29:50):
Yeah. Actually it comes to mind that a first good step for that is just like understanding what part of your code runs in which environment. And so you put console logs everywhere and look at the [crosstalk 00:30:02] and look at the client and see, okay, this ran on both, this ran on one, this ran on the other.
Yeah. And understand why. Why did they do it that way?
Kent C. Dodds (30:15):
Yeah. Exactly. Cool. Well, it's been such a pleasure to chat with you. I'm going to put your links in the show notes, but do you want to share your Twitter handles or what's ... I guess, let me rephrase that. What's the best way for people to keep up with each of you and what you're doing?
What are the kids doing these days?
My Twitter handle is just [buddyhalle 00:30:36]. I think that's my main.
Yeah, I'm [baconbrix 00:30:40] with an X because I was a teenager when I made it.
Kent C. Dodds (30:47):
That's excellent. I love it. All right. Awesome. Thank you so much. And yeah, we'll see everybody in the future. Bye.