1. Introduction to Consume, Build, and Teach
2. Tips for Consuming Information and Learning
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 it 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 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. So 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.
3. Creating Personal Projects
If you have a development job, it's easy to know what to build. But if you don't or want to try new technologies, coming up with ideas or using the information you've consumed is important. Stephen R. Covey said, to learn and not do is not to learn. So I'll share a couple of things I created early in my career. SpendMyCents.com was a school project where you could search for products on Amazon based on a specific amount. It taught me a lot about interacting with APIs and the challenges of maintaining a jQuery codebase. Infinite WPM is still running and allows you to type super fast.
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 or just 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 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 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 that my API keys died or something like that. Something went wrong. So this isn't up and running anymore, it was an amount and then it will search Amazon for products that are in that amount. You could scope it down to categories and stuff too. It was actually kind of fun. So if you had a gift card that had $36.17 on it, then you could search that and find exactly the thing 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 had a Node backend that interacted with the Amazon's API. 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 codebase that is 100% 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. Here, all this did was you could type super fast.
4. Building Projects and Learning Technologies
I'll show you Infinite WPM, a project I built using Firebase. It allows you to type super fast and choose from a list of code defaults or submit your own. Building different projects helped me understand the technologies I was consuming.
Here, I'll show you. I got my keyboard. I could just type super duper fast and pretend that I'm a hacker. So I've got infinite words per minute. I accidentally did fullscreen. There we go. Ah! Oh my goodness. Spoiler alert. There we go. So, there it is. 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, boom. We have 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. And 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. 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.
5. Learning through Projects and Technologies
This project allowed users to see auto-complete suggestions from Google and Bing using WebSockets and Socket.io. It involved interacting with fake APIs to understand how suggestions work. Building projects is a great way to learn and explore new technologies like Docker.
This is another one that's really cool. It's no longer working, but I asked you to type in some word in here and it would show you what Google or Bing would auto-complete that to. So why did Facebook or why did The Woodcheck and it'll show you what Google and Bing would auto-complete 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 the suggestions work. Which is why I think it doesn't work anymore. 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 gonna go do something, build something and use Docker to do it.
6. Story of Genie.js and Building Side Projects
Genie.js is the first open-source library I created years ago. It started because we ran out of keyboard shortcuts in our app at Domo. I made Alfred for the web, which is what Genie.js is all about. Integrating it into our app at Domo impressed the engineers and led to my first full-time job offer. Even side projects can get you noticed by the right people. I accidentally committed it directly to master, but as Grace Hopper said, 'If it's a good idea, it's much easier to apologize than it is to get permission.' So go out and build something without waiting for permission.
This one has a fun little story. Genie.js is actually used in Code Sandbox 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, and I don't just have like a million keyboard shortcuts 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 Genie.js 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 that 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, It's much easier to apologize than it is to get permission. Now maybe you don't just commit stuff to master. I actually did it on accident and I pushed it. It got deployed. We had Genie.js 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.
7. Persistence, Community, and Teaching
Persistence offers no guarantees, but it gives luck a chance to operate. You may fail, but you'll learn a huge amount in the process. Communities like Discord and Reactiflex can help us be successful. Once you've consumed information and built something, teach what you've learned. I learned a lot more about AngularJS by teaching my classmates.
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 is Reactiflex. These communities can help, 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, 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 like 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.
8. Getting into Egghead and the Power of Teaching
I got into Egghead by giving a talk at a meetup and it transformed my life. Teaching is my secret to solidifying my understanding. When you teach, you'll realize the gaps in your understanding and learn new things. Teaching also allows you to create new things and gain more experience. Open source, writing blog posts, and learning clubs are great ways to teach and learn.
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 like 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 like 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 is if you really wanna get something down, you really wanna nail it down, you wanna 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 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 that 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 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, there are so many things you can do to teach the things you're learning. If one of these doesn't work super well for you, try another one. You do need to teach. Here's one other suggestion I make for learning. That is learning clubs.
9. The Power of Learning Clubs
The idea of learning clubs is to have a group of people who want to learn the same stuff and come together to go through a curriculum, helping each other understand the material. It's a great way to teach as it requires re-evaluating and restating what you're learning. Check out the book 'Make It Stick' for more ideas. Visit kcd.im/clubs to learn more and join a learning club. Epic React is designed for this type of learning.
It's dangerous to go alone. Take these. These are friends. This is a 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. This is actually a really great way to teach because it requires that you re-evaluate or re-state 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. Stuff like Epic React is just totally catered and built to facilitate this type of learning which will really solidify the concepts for you.
10. Final Thoughts and Resources
Don't be afraid to try. My father-in-law, John Jesse, believes it's more important to be a hard worker and nice. Focus on making the world a better place. Use your skills to make a difference. Take care of the planet and each other. Here are some resources for further learning.
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. So give that a shot. Then 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, link 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.
11. Introduction to Epic React
Hi Ken! Oh my God! What is that that you're holding? This is a koala named Cody, my teacher's assistant on Epic React Dev. Epic React is my effort to make the world a better place by teaching people how to make quality software, specifically with React. It's a workshop-focused approach with eight workshops, like a semester-long class. One learning style that doesn't work for me is just consuming information through videos or tutorials. Epic React is exercise-challenge-focused to avoid tutorial purgatory. Fun question: Have you tried using your Autocomplete project to ask, 'Why is Kent C Dodds?'
Hi Ken! Oh my God! What is that that you're holding? So this is a koala. His name is Cody. Hi Cody! I'm my teacher's assistant on Epic React Dev. And that's actually the shirt I'm wearing. It's Epic React. 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? I wish that it still worked because now I'm curious. 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. A question from the audience.
12. Balancing Personal Life and Learning
Balancing learning, stuff, and teaching has always been a part of my job. Any manager that's worth their weight would absolutely want to have that knowledge sharing. You have to get your work done, but that's where you develop it. It's consumed, build, and teach.
How do you balance your personal life with work, learning and teaching? I think that learning is your job as a professional. Balancing learning, stuff and teaching has always been a part of my job. I haven't had a manager yet who wasn't super jazzed about me teaching this stuff that I'm learning to my fellow engineers. Any manager that's worth their weight would absolutely want to have that knowledge sharing. It never really was a balance. 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 it. It's consumed, build, and teach. What you're teaching is based on the things that you build. You build something for the product, and then you go teach it.
13. Balancing Learning and Exploring Tech
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. 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.