♪ Hi everyone, my name is Kent C. Dodds and I'm so excited to talk with you about consume, build, and teach. This is the way that I learn and from my observations in teaching other people about various topics, this is the best way that I've found to actually learn and solidify and be able to apply the things that you want to learn to upgrade yourself in your
career. So this is some stuff about me, here's my family, I live in Utah, I work for myself, I have testingjavascript.com and epicreact.dev which you should absolutely take a look at. And you can find a link to my slides here, it's kcd.im.com. And with that, let's just go ahead and get started. This talk is my personal experiences, some things that I messed up, some things that I got right, and how I recommend you focus your learning, how you structure your learning, just kind of in a general way to think about it. This is also based on a previous talk that I gave called 0 to 60 in software development, how to jumpstart your
career. So I've taken out a couple of the
career-specific things and just focused totally on consume, build, and teach, which is a really important aspect for us upgrading ourselves in our
career. So without any further ado, let's jump into it. Consume. So a little bit of a story from my past. When I was just getting started, I read a bunch of books. I actually worked at a company in San Antonio called USAA, just as an intern for a summer. And I lived just south, I think south of the campus. And my office, where my chair was, was at the north side, and the campus was a mile long. So I was a mile to campus and then a mile to the other side of the campus. And that whole time I was reading books. I would just grab a book from the library, maintainable
javascript, this giant thick thing. At the time I was doing AngularJS, so I got an AngularJS book. Just tons of books as I was just getting into software development in general. I was still in school at the time. And so I would read these books and fill my mind with tons of information. So this is one tip. I actually don't read anymore, like at all. But this was really useful to me as I was just getting started into software development. And what this did for me was it exposed me to lots of different ideas that I never even considered, things that I didn't know. And it helped me get an idea of what was possible with this amazing thing that we call technology and writing software. So reading was a big help for me. In general, the idea is I want you to consume curated content. So things like EpicReact.dev and TestingJavaScript.com, but also newsletters like the weekly newsletters from Peter, awesome person, and UI.dev, the bytes stuff, and then we've got
react Podcast. So podcast, I've got my own newsletter, so I'll send you a blog post that I write. And then we've got Syntax FM. So really, it's just consume as much information as you can. And what this does is it exposes you to what's possible, to the things that people are doing, to the opportunities that there are for you. And in particular, with Epic
react and
testing javascript, I hope that it not only exposes you to what's possible, but also gives you the exercises and the tools that you need so that you can go beyond just consuming and actually building and even teaching. And I'll talk a little bit more about those aspects here in a little bit. But just in general, just fill your mind with what is happening in the
ecosystem and what's possible with software. So learn from others, water cooler chats or during the pandemic, maybe Discord is a more appropriate place to just hang out and lurk a little bit, see what other people are talking about. When I was first getting into software, I worked at a company called Domo. I was actually still in school and I would just listen to the other engineers in the building talking about the problems that they were facing. And I learned a huge amount of things from that. Maybe I didn't dive in deep, but I at least got an idea of what types of problems people are facing and what are the buzzwords that they're using that I can go and look up later. So, yeah, pay attention to what other engineers are talking about. And then you can just have that kind of at the surface level of your mind so you can dive in deeper later. Open source is a huge opportunity for learning. So that's another area where you can just watch a repo and see how people solve different problems. You're not actually getting anything that you can maybe apply right away, but it's exposing you to different ways of thinking about problems. Even Stack Overflow, Twitter, Meetups, Conferences. This is how we can learn from other people. George Evans once said, Every student can learn, just not on the same day or the same way. So we have lots of different ways that we learn. And I would also suggest to you that you're not just a single-dimensional learner either. You learn from different mechanisms and different concepts you learn in different ways. Maybe you think that you're a visual learner or you're a hands-on learner. No, you're actually both. And so you're going to want to apply the different consumption methods at different levels. You'll have your own recipe for consuming information and learning. So once you've consumed enough information, then you want to go out and build something. If you have a job, a development job, then that's actually pretty easy to know what you're going to build. You're just going to do the job that you have given to you. If you don't, or maybe you want to try out new technologies that you can't really do on the job, then coming up with ideas of different things that you can do to go and use the things that you've been consuming information about, this step is super important. Stephen R. Covey said, To learn and not to do is really not to learn. To know and not to do is really not to know. So if you don't do anything with all that information you've consumed, I mean, it's great. Maybe you can have a pseudo intelligent conversation about those things that you've consumed. But if you haven't actually tried to build something with it, then you really don't know or you don't understand what it is that this thing is that you've consumed. You want to produce. You want to create something. So I want to tell you a couple of the things that I created early on in my
career. SpendMyCents.com. This is actually a school project. It's not up and running anymore. I think my
api keys died or something like that. Something went wrong. So this isn't up and running anymore, which is a real shame. But basically, it allows you to enter an amount and then it will search Amazon for products that are in that amount. And you could scope it down to categories and stuff, too. It was actually kind of fun. So if you had like a gift card that had $36.17 on it, then you could search that and find exactly the thing that you could do to use up your gift card. It was never like a real thing. I never made any affiliate bucks on this thing, but it taught me a lot. This was my first real web project. It was 100% jQuery. It also had a node back end that interacted with the
api, with Amazon's
api. And I just learned a silly amount of stuff while I was building this about interacting with APIs. Also, I learned how painful it can be to maintain a code base that is 100% just jQuery madness. That was a very difficult lesson to learn. So spendmysense.com was a lot of fun. Infinite WPM. This actually is still running. And in fact, this is an iframe. So I can actually use the app. So here, what all this did was you could type super fast. Here, I'll show you. I've got my keyboard. And I could just type super duper fast and pretend that I'm a hacker. So I've got infinite WPM. And I accidentally did full screen. There we go. Ah! Oh my goodness. Spoiler alert. There we go. So here you can also get some settings. And another really cool thing about this is you could choose from a list of code defaults. And you could even submit your own. So here, I could submit my own thing. This is
react Summit and
react Summit rocks. And this, let's see, horns, the sign of the horns. Yeah. All right. Add that. And then we'll click on
react Summit. And now, boom, boom, boom. Yeah. Awesome, right? So you could submit your own minified
react or something like that. So that's actually using Firebase. And it's amazing to me that this thing still works. But from infinite WPM, I learned this was the first project that I ever used Firebase with. And I was just playing around. I was like, I need to learn how to use Firebase because I've got this other school project that I'm doing. So I'm just going to throw together this little app just for the fun of it. I actually did end up using this for reals in a project at work at USAA. And it was super kind of interesting and fun. So the projects that you can work on to solidify and get an understanding of the different things that you've consumed can actually be a huge amount of fun. I use Firebase for this, and I pretty much just wanted to show this because it's stored on our secure servers. The hubris of me. But this is also just a Firebase thing. This was just for some club stuff that I was doing at school. And I was able to interact with CSV
data and parse that. And just building a lot of different little projects helped me get an understanding of these technologies that I was consuming in my mind. This is another one that's really cool. It's no longer working. But it allowed you to type in some word in here, and it would show you what Google or Bing would autocomplete that to. So why did Facebook or why did the wood check? And it'll show you what Google and Bing would autocomplete that to. This one was using WebSockets, and this is where I learned how to use Socket.IO. This is where I learned what WebSockets even were. I also interacted with APIs that weren't actually real APIs. Just fake APIs that I kind of looked at the network and figured out how those suggestions work, which is why I think it doesn't work anymore. But, yeah, this was a good time. And really, all I'm saying is you want to put projects together to learn about these different things that you consume. You're like, oh, I heard about this thing called Docker, and I want to learn what that thing is because it seems like a pretty hot thing. So I'm going to go do something, build something, and use Docker to do it. This one has a fun little story. GenieJS is actually used in CodeSandbox now. But this was the first open source library that I ever created years ago, and I created it because we ran out of keyboard shortcuts in our app at Domo. And I thought, you know what? When I'm on my Mac, I don't use keyboard shortcuts. I use Alfred, or it's like Spotlight. And I just type, you know, search around for what I'm looking for. And I don't just have like a million keyboard shortcuts that I have memorized. I mean, sure, there are those, but it gets pretty complicated when you get past, you know, a couple dozen of those, like the keyboard shortcuts stop making sense. And so I made Alfred for the web, and that's what GenieJS is all about. And this is actually how I got my first full-time job. I integrated this into our app at Domo for a hack night. And the engineers there were so impressed. Merrick Christensen is a good friend of mine. He was working with me. I owe him so much. And he brought the CEO over and said, hey, check out what this intern did. And that night I got my job offer, which is pretty legit. That was a good time. So, yeah, even these side projects can get you noticed by the right people, if you're lucky. And it was a pretty cool experience. And I also accidentally committed that directly to master. So I included this quote from Grace Hopper. If it's a good idea, go ahead and do it. It's much easier to apologize than it is to get permission. Now, maybe you don't just like commit stuff to master. I actually did it on accident, and I pushed it. It got deployed. We had GenieJS in our app without any peer reviews or anything. But pretty much all I'm saying is you don't have to get permission to go out and build something. Maybe you don't put it into your product at work without getting permission. But go build something. Do it. Just do it. Another quote here. While persistence offers no guarantees, it does give luck a chance to operate. So do it, and you're going to hit your head against the wall, and you're going to fail. And it's not going to be fun, but you can make this work. And you just keep on working at it, and eventually luck will operate, hopefully, in your favor, and you'll learn something. You may not succeed and build the next Facebook.com or anything, but you'll learn a huge amount in the process. And this quote needs to be followed by this next quote, or by this future quote here. I've not failed. I've just found 10,000 ways that won't work. Thomas Edison. It takes a lot of persistence. But don't spend time beating on the wall, hoping to transform it into a door. Sometimes you need to stop and just get some help from somebody. And that's where these communities like Discord. I have the KCD Discord. That is an awesome
community. There's Reactaflex. These communities are places where we can help each other to be successful in whatever it is that we're trying to build. And that actually leads us into our next point. Whoops. Spoiler alert. Which is about teach. So once you've consumed a bunch of information, now you've built something with that information, now you've got to teach the stuff that you learned in the process of building. Those who know do. Those that understand teach. From Aristotle. So a couple of experiences from my own life. As I was learning AngularJS and started doing some stuff on the job, I decided I wanted to put together something for my classmates. I was still in school. I wanted to put something together for my classmates to teach them AngularJS. And so I did. I contacted Firebase. And I said, hey, Firebase, I can tell a lot of my classmates about you if you just buy us some pizza. It was like $100 or something. And Firebase was like, yeah, sure. We're a growing company. We're new. You may not recognize that logo, but that was Firebase's old logo. And they sent us stickers and hot sauce and stuff and even earbuds and stuff. And I got a bunch of people over there to learn AngularJS with me. And I, in the process of creating and adapting some material to teach this, I learned a lot more about AngularJS than I ever would have if I just built my thing and then moved on to the next thing. Also, how I got into Egghead, which totally transformed my life, was I gave a talk at a meetup called JSON Web Tokens, Not Your Grandma's Cookies. And this was recorded and put on YouTube. And John Lindquist saw it and thought it was pretty cool and wanted to make a course out of it. And so that transitioned into him inviting me to make this course. And then I became an Egghead instructor and that just made huge changes for me. So another situation where doing a little bit of extra work opened up a really awesome opportunity for me. But aside from all that, I really solidify my understanding of something when I teach it. And this is my big secret. My whole process of all of the teaching stuff that I've done is just my learning process. And that is hopefully something that you can take home from this talk. If you really want to get something down, you really want to nail it down, you want to understand it, then don't just consume a bunch of information. Don't just build little apps. Actually teach the stuff that you're learning. Because that is how you're going to remember the stuff that you've learned. Ashley G. Williams said, Teaching is nature's way of letting you know how sloppy your understanding is. This is so true. Like you go in to teach something and somebody asks you a question, you're like, Oh, I actually don't know that. Let me figure that out and I'll tell you later. Or like as you're preparing the material, things end up not working the way that you thought they did. This happens to me all the time. I actually pretty frequently make an open source library based on something I'm teaching. I'm like, there are some details here that aren't relevant to what I'm trying to teach, but I have to do all this stuff to get to the part that I'm trying to teach. So actually, I'll just make this library so I can focus on the thing I'm teaching. Lots of my libraries came from that. Actually,
react testing Library kind of came from that. So teaching is also a mechanism for creating new things, which will give you even more experience. So a couple of ideas for this open source, maintaining or co-maintaining an open source project is an opportunity for you to share some things with your fellow learners. Writing blog posts, screencasts, like there are so many things that you can do to teach the things that you're learning. And if one of these doesn't really work super well for you, then you try another one. But you do need to teach. Now, here's one other suggestion that I make for learning, and that is learning clubs. So it's dangerous to go alone. Take these. These are friends. And this is learning. The idea of learning clubs is you have a group of people who want to learn the same stuff. And so they come together, and they go through this curriculum, whatever that curriculum is, and then they help each other get an understanding of whatever it is that you're trying to learn. And this is actually a really great way to teach, because it requires that you re-evaluate or restate the stuff that you're learning. Lots of ideas from a book called Make It Stick, which I strongly recommend you go and grab a copy of that book if you haven't read or listened to that already. Super book. But lots of those ideas are just kind of embedded naturally in this idea of a learning club. If you want to learn more about this, go to kcd.im.clubs, and I can facilitate getting you and a group of other people who want to learn the same thing together so that you can consume, build, and teach together. And stuff like Epic
react is just totally catered and built to facilitate this type of learning, which will really solidify the concepts for you. So I know I'm just about up on time, so I just want to say the last couple of things. Don't be afraid to try. Just give it a shot. You'll always miss 100% of the shots you don't take. And so give that a shot. And one last thing here. My father-in-law, John Jesse, he likes to ask the question, Hey Kent, is it more important to be smart or a hard worker? And he asserts that it's more important to be a hard worker. And then he says, is it more important to be a hard worker or to be nice? And he says that it's more important to be nice. And I agree with him. I think that it's just so critical that we focus our efforts on trying to make the world a better place. There are plenty of people in the world already who are just making it miserable for everybody else. We don't need any more of those types of people. We have the tools and the skills and the capabilities to make the world better than it would be if it weren't for us. And so it doesn't matter if you learn everything and if you consume and build and teach all of this stuff. If you're not using your skills to make the world a better place, I don't care. I think it's really important that we take care of our planet, take care of each other, and work hard to make the world a better place. And I'm happy to participate in that with you. Thank you very much. Here are some resources, links to the slides, a bunch of other links to different things that you can learn about from me. And that's all I have for you. I hope you have a rock-solid conference. Hi, Ken! Oh my god, what is that that you're holding? So this is a koala. His name is Cody. Hi! Hi, Cody! And Cody is my teacher's assistant on Epic
react Dev. And that's actually the shirt I'm wearing. It's Epic
react. And yeah, so Cody is just in the code comments helping people go through Epic
react. Anybody who's gone through Epic
react will know Cody and love Cody very much. That's amazing. Can you tell me a little bit more about Epic
react? Yeah, so Epic
react is my effort at trying to make the world a better place by teaching people how to make quality software, specifically with
react. And it's a totally different approach to teaching people
react. It's very workshop-focused. It's a set of eight workshops. It's basically best compared to a semester-long class, like a three-credit course at a university. So it's really, really big, and people seem to like it. Amazing. You talked a little bit in your talk about different learning styles and how you're more of a doer. Are there any learning styles that you know don't work for you, and how did you figure that out? Yeah, I think probably one of the most common learning styles that really just don't work is sitting in front of your computer or in front of your TV, watching videos and just consuming that information. Or sitting at your computer reading tutorials all the time. I find a lot of people get into this tutorial purgatory thing where they're just constantly going through tutorials and never actually learning anything. And that's actually why Epic
react is so workshop-focused and exercise-challenge-focused. You spend at least four more times working on exercises and stuff than you do actually watching videos there. That's awesome. This is a fun question. Have you ever tried using your autocomplete project to ask, why is Kent C. Dodds? And see what comes up? You know, I wish that it still worked because now I'm curious. But I could just go to Google right now and find out what Google has to say about me. I don't know if we want to do that live just in case. Yeah. A question from the audience. How do you balance your personal life with work, learning, and teaching? Yeah, you know, I think that learning is your job as a professional. And so balancing learning and stuff and teaching is really, at least for me, it's always been a part of my job. I haven't had a manager yet who wasn't super jazzed about me teaching the stuff that I'm learning to my fellow engineers. I think any manager that's worth their weight would absolutely want to have that knowledge sharing. And so it never really was a balance. I mean, you have to get your work done. You can't just spend all of your time learning and teaching. But that's where you develop the, you know, it's consume, build, and teach. And what you're teaching is based on the things that you build. And so you build something for the product and then you go teach it. Cool. The audience also asked, as someone new or in industry with a little bit of imposter syndrome, what would be your advice about balancing learning the tech for your immediate work and
career versus exploring new tech and training without feeling super overwhelmed? Yeah, you know, I feel like I've blogged about this. I have a lot of blog posts, like 170 blog posts. So go check that out. But I think that one of the things that I decided to do early on was make a bet. And I bet on
javascript. So I just totally focused 100% of my attention on
javascript. When I found AngularJS, I just was like, okay, I do
javascript, but I am going to focus even further on AngularJS. And then I switched over to
react. And now I focus on
react. And I know that there's a lot of benefit to being a polyglot programmer. You just know everything, you know, surface level of everything. But I think that for me, I just found a lot of success being the person that everybody thought of when they thought of AngularJS. When I was in school, I was teaching people how to use AngularJS. And so after we all graduated, I had a classmate who needed an
angular developer. And who do you think they thought of? They thought of me because I was the
angular guy. And so it really ended up working out nicely for me to focus. And then another thing that I'll mention that's related here is a lot of people, when they're just getting started, don't feel like they have a lot to offer by way of teaching. And I just want to tell you that's bunk. That is not true. You totally have stuff to offer. In fact, you have things to offer that I can't offer because I have the curse of knowledge. I've been doing this for long enough that I can't do the things that you can do. So we need your voice and we need your teaching. So definitely don't feel like you're inexperienced and can't teach anybody anything because that's ridiculous. Yeah, that's awesome and very inspiring. If you have more questions for Kent, he will also have a Zoom room right after this. The link is on the live. Just because we're running out of time here, but you can always go there. I also want us to find out the answer to the trivia question. So drumroll, please. Thank you so much, Kent, for all your
inspiration and for your talk. And hopefully people can see you in the Zoom room. I'll see you all there.