We're going to talk about when we were beginners, some of the things we wished we knew, some of our biggest early days goofs, our suggestions for newbies, etc. We'll also talk about making the community open to newbies/what can be done to increase this.
Kent C. Dodds
Sweet, so let's get, oh yeah, a couple more announcements. So, #jsAirQuestion, that is a hashtag that you can utilize on Twitter to ask questions of our guest during the show. So, if you have any questions while you're watching, yeah #jsAirQuestion. And then next week, I'm going to be in Kansas City at KCDC, that is Kent C Dodds Developer Conference, no just kidding, it's Kansas City Developer Conference. I'll be doing an onsite show there. So, look forward to hearing what's going on at KCDC next week. And as always, follow us on Twitter, Facebook, and Google Plus to keep up with the latest.
Let's get into introductions. So, for our panelists, we have a great, big panel here. I love big panels. So yeah, first we have Dan Abramov.
KENT: And Brian Lonsdorf.
BRIAN: What's going on?
KENT: Sorry, Dan did wave by the way, he wasn't just being a, like, "I don't even want to talk to you." He did wave. (laughs) Then we have Kyle Simpson.
KYLE: Hello, everyone.
KENT: And Pam Selle.
KENT: And again, I'm Kent C. Dodds, your host. And then for our guest today, oh shoot Max, I didn't practice your last name, it's Max Strauver.
MAX: That was perfect. Yeah that's me, nice to meet everybody.
KENT: Yay! And Aimee Knight.
KENT: I had Aimee's name practiced really well because she was a panelist on Angular Air for a long time. So, it's good to have her back. And, Tim Dorr.
But before we actually get into that, let's get a quick intro to each one of our guests. So, Max you wanna give us an intro to yourself? Who you are, where you work, what you're interested in?
MAX: Yeah sure, so as you all know, my name is Max. I work at Think Mill, which is an Australian agency, as an open source developer, where I take care of KeystoneJS our Node JS content management system. And Elemental UI, our React JS UI library. And you might also know me as the creator of React boilerplate. That's the short run down of what I do.
KENT: Awesome. Thank you. Aimee.
KENT: Awesome. It's great to have you. And Tim?
TIM: Hey, so I currently work at a company called Showcase IDX. We do real estate surf for real websites. Co-founder of SalesLoft. I created first (mumbles) Space in Atlanta. Very active in the Atlanta start up scene. Online you might know me from closing your issues with no comment on React Router. Or, nitpicking small wording choices on Redux PRs. I've been kind of involved from the React and now React community group. And then I also do some fun stuff with hacking my car's API, cyber model S, and then I documented the API behind all that. And I actually made a little watch app a while ago that shows you, you know your car's stats and stuff. And yeah, I'm kind of an all-around hacker sort of guy.
KENT: Very cool. Thanks to everybody for your intros. So yeah let's just get into this. So let me give kind of an idea of what I'd hoped that our conversation gets into. I really want people watching this show, especially beginners, to walk away with some actionable things that they can do to develop their skills and integrate themselves in the community. And I feel like each one of you guests have done that successfully and also the panel, so we have a lot of really brilliant minds on this subject on our panel today. So that's what I'd really like to get into and take away from this. But, let's go ahead and start with our guests to get kind of their beginner story. Can each of you give us a couple minutes of how you got into programming? We'll start with Max. We'll go the same order.
MAX: Yeah sure. So, I started programming in school. I had an IT class, and we did a tiny bit of HTML and CSS like you know, how to make a div and how to make the background red. And then I learned a bit of shell programming and then I had to write a 45-page thesis for, basically for graduating high school in Australia, you have to write this sort of 40-page thesis about a topic that you choose. And, obviously, I chose network protocols 'cause that's the most interesting topic ever. Turns out it isn't.
I still have to write that thesis, so I ended up writing a 45-page thesis about TCP/IP, and how that works and how it compares to compares to OZ and all that sort of stuff. And then I had this huge 45-page thesis really theoretically about how all of that stuff works, but have never actually used it. And I realized that one of the most simple implementations of TCPIP is a web server. So I set up a really simple five-dollar Ubuntu server on Digital Ocean, and put in an (mumbles) file on there.
KENT: Oh, that's really interesting. So could you remind me, maybe you said this, when was it that you built your own personal website?
MAX: The first version of that personal website was built in probably mid-2014.
KENT: Oh my goodness. Yeah that's amazing. So--
MAX: So I'm, most people probably don't know this, but I'm 19 years old.
KENT: Yeah, that's awesome. One of the things that I love about this community and just the fast pace of the web is that you can, it's like a really fast moving river that you just jump into and you catch up with the current really quickly just because it's moving so fast. And, yeah, so I'm also pretty young. I graduated from college in 2014. And, yeah, it's you know if you're a beginner watching or listening, just don't think that this is totally beyond you or anything because things move so quickly you can learn and catch up. It's awesome. Anybody else have comments on that before we ask Aimee? Cool, go ahead Aimee.
AIMEE: Okay, so my story I was not exposed to tech or anything. Didn't even own a computer, and spent most of my life as an athlete, as a figure skater. And, I kind of faced this crossroad when you are an athlete like that in gymnastics or skating, you really peak at a very early age. And, I had a ton of fun skating, like it was my life. I made a lot of sacrifices. I left home at 16 so I could skate. And, moved halfway across the country with my coach without my parents. We were all in. And so when I faced this, I decided, even kind of against a little bit of my parents' urgings, I decided like I need to go to college but the plan was for me just to coach the rest of my life.
So I went to college, and college was just kind of like an afterthought, and just kind of like make it through because I had a scholarship I had to keep really high grades. You know, I was working 30 hours a week while I was in school. And but it's kind of like, just facing all this stuff what is the next thing in my life? So, a little bit after college, married my husband and again we moved. And there was no rink nearby, so I couldn't even coach anymore. So I was just like really, really, really struggling before what is my next thing in life?
And it turns out I was working with some developers, because I ended up doing some marketing type stuff. And my husband deployed for a year, so I didn't get to see him. (laughs) And a lot of times, didn't even get to talk to him. So I'm sitting at home. So I'm sitting at home alone in this house in Savannah, with no friends or family nearby, and just had this huge awakening of, "What am I gonna do for the rest of my life?" And because I was working with some of these developers, we had this website that was really outdated and I decided I was gonna take it upon myself to make some updates to it. So I'd stay up really late while I didn't think anyone was paying attention and I would tweak CSS and HTML. In this CMS background. And turns out I got addicted to it, so I went to a boot camp when my husband came home. One thing led to another, and so I have been working professionally now for a little under two years.
KENT: Also quite young. (laughs) That's awesome. Yeah so these beginner experiences are pretty fresh and coming from-- well I was about to say you're coming from kind of an unconventional background but I'm starting to realize that the conventional background of getting a degree and everything, that's less and less conventional these days.
PAM: Yeah, it is actually, I don't know if I would classify it as a peeve of mine, but it is something I feel like so many people introduce themselves, I really like these kinds of origin stories and so many people say, "I come from an unconventional background," that like if 80% of people say that then you know it's now conventional.
TIM: Yeah. I would also say that one thing I've noticed is a lot of these coding boot camps are providing a new path for people to get into development and coding. A lot of people traditionally, say, 10 years ago, would think the only path really to get into this is to go through school, and learn a lot of stuff, and get all that book knowledge enough to get an entry level job and work your way up from there. And then people who are just from an entirely different path haven't even considered the fact that that's something they could switch over to. You know it's kind of like an auto mechanic suddenly becoming a chef or something. You know, it seems so rocky and out of place.
But a lot of these things are really opening up new avenues. There's also a lot more communities formed around these sorts of things. Actually, our newest hire is a guy who used to be an instructor at one of the boot camps. And I have some friends that just hired some people from the boot camps as well. So there's new ways that people are getting involved in this sort of stuff. And it's interesting 'cause it's making this more accessible to a lot more people which makes the talent pool more available. But also like gets-you're able to reach and connect with more of a diverse audience of people that aren't thinking about things in kind of the one accepted or one true way of doing things.
TIM: Sure. So, well I talked about these other ways of getting to it, I went about it pretty much the standard way. So I'm down here in Atlanta. And I've been here for 15 years, because I initially went to Georgia Tech. So I started programming at home. We had a 286, and a 386, and then the 46 with the math coprocessor. It was really awesome. And I got into it because I had a goal in mind. It wasn't necessarily to be a programmer. It was I need to build something. And what I wanted to build initially was like a new interface for my computer. So a startup thing, so I whipped out Q Basic and started creating this menu system for my computer, so I could just easily get to the programs I wanted to get to.
And a lot of my path through development has been around purpose you know driven stuff. So I got into tech because I knew I wanted to be a programmer, so that was kind of the goal there. And while I was there, I actually started my first company which was a hosting company. And that was just incidentally started because I actually wanted to just have a server to play around with. And I got some friends to split on it, and basically that snowballed into an actually company. And I ended up selling that a few years ago.
KENT: Oh, congratulations!
TIM: You know, built on my desire to just have a computer to play with basically. I've kind of noticed that throughout my career. So like usually when I get into something new, it's there's some purpose for that. And then, also what I noticed is that it's kind of also a reset switch. So you know I'm constantly considering myself a beginner at every new thing that comes along. You know, like when I started working on Ruby code. I wasn't very good at it, and I actually kind of hated it initially. And for some reason, I liked PHP more. Just blame it on my (mumbles).
And, I basically have to relearn all this stuff over again. I'd used a lot of the same concepts as I go, so you know each time isn't so much of a complete reset or mind wipe or something. But I would you know have to maintain that kind of humble behavior of you know, "I'm the loner here. I'm the beginner. I'm the newbie." Just because I have some experience way over here doesn't mean I can bring that here and have some sort of unspoken clout, that doesn't really apply.
But I think that's really important to any beginner is like, you're gonna be a beginner for life. I think Ryan Florence has brought up he's a junior dev for life. That's a good way to go about it. You're gonna be a junior developer with everything. Even if you stay within the same field, you're front end dev who just does front end dev stuff, it's gonna be all manner of new stuff coming along so you're constantly gonna be resetting you know. And so I'm sure React will go out of style and there'll be some super you know Google project and then Microsoft will make something and then we'll all switch gears to that. You know, you'll constantly be running into these kinds of things. And I've noticed that through my career for the past 20 years of coding I've been doing, that that's a common theme.
I mean really the skillset you're developing is being a good beginner. You're gonna be a beginner once, and then you're gonna be a beginner many more times. And you're gonna get better at being a beginner and learning to adapt that information that knowledge that you've taken from other areas in a generic way. It might be hard at first, the first time you make that kind of shift, but I think you'll start to see the similarities, especially the third time you do it, fourth time you start to map back and say like, "Okay, this is the same kind of path as before."
MAX: So I want to chime in here because I did try to study Computer Science twice. I started twice, I went in and did it for two to three months but then--
PAM: When you say "study" do you mean in like a formal university setting?
KYLE: I have a question that I'd like our guests and maybe panelists to debate a little bit. On a recent other podcast that I was on, it was posed to me that or the assertion was made that the most important thing that a beginner can have is early wins. In other words, the most important thing that a beginner needs is to see very quickly that they can get an app out or they can get some idea concretely showing up. And I kind of thought about that and sort of bristled with that and I'm not entirely sure I agree, but I'd be curious for those of you, especially our guests who are here to talk about their beginner experiences, if you feel like that was part of your path or if you feel like there was another key thing that kind of helped you-- like once you got into being a developer what kept you staying, what was that thing that hooked you?
AIMEE: So I was listening to that podcast too so I know exactly what you're talking about. And as I was listening to it, even before you chimed in, I was like "No way! That's not my case." But, yeah, I could definitely see where that sentiment would come from because I see that from a lot of people. But for me personally, that wasn't it at all. I think for me it was, like you talked about, the curiosity. Because I was surrounded by all these developers, and they were doing things, and I wanted to know what they were doing. Because in my particular instance what really got me hooked was, I was told they didn't have time to make these things, and I thought, "I could totally figure this out myself. This doesn't seem that complicated."
So, that's what hooked me, but I think what kept me hooked is it is a combination of my personality. I kind of had opened up saying with the skating, my personality does better when I have this constant set of challenges in front of me that I can't ever seem to work through. So as much as that gets me frustrated at times, at the end of the day I know my personality and I enjoy that. So that's what keeps me hooked is just this like constant struggle, constant thing that I need to learn, so. The curiosity.
PAM: Interesting, I think it's interesting Aimee how you bring up different personalities too. 'Cause I think the wins could be viewed in different ways. Like a win could be shipping a whole app, or a win could be just doing something. Like, I think of this as I keep the bar very low for this personally. But you know if I'm trying a new thing, like I'm learning to you know I'm going rock climbing or something, me showing up at the rock climbing gym is a win. The fact that I got there is a win. And so I also teach people to program, and this is very much a part of the way we teach people to program, and we do count, "Did you get Node installed? Yes!" That counts as a win. So I think it also is you know what counts as a win matters too.
TIM: Yeah I was gonna say the granularity of those wins and elements, like how you look at them is really important. Like, I know people who have anxiety, and social anxiety in particular, a good way to kind of break that down is to break down what you're trying to do. So if you're trying to go to a party and that's a really scary thing, you can break it down to, "I'm gonna go put on a pair of pants. And I'm gonna walk to the front door, and I'm gonna open the front door." Like each one of these things is a small step. And, hopefully coding doesn't induce this much anxiety, but you can kind of break down into little things. So like you said installing Node and getting that rock climbing, or you know, the individual parts.
And the other thing too is like take note of your failures. And, don't discount them and kind of discard them as trash. Because, I learn so much from the things I do wrong, all the time. Like just yesterday, I was dealing with elasticsearch and trying to do some query or it wasn't matching a certain part of the query. I ended up learning a lot about how elasticsearch maps data, mixes it, and you know this whole unknown and unseen thing out of this tool I was using became available to me because I was failing at one particular thing. And, while that kind of ate up all my day and it felt a little depressing, in the end, now I know a lot more about it. Elasticsearch, which is gonna be super helpful 'cause that's like one of our main data stores at this job.
So, being able to take stock in your failures and know how to learn from them, I think is just as important as going from win to win to win. 'Cause it's very easy to get kind of distracted like, "I'm making progress so this is all good." But I'm kind of, at the same time you might be glossing over a lot of the important stuff that's gonna bite you later. Especially when it comes to if you're taking a lot of the cargo-culting that goes on in the industry, cargo-culting is kind of a group thing, you know, everyone does this. They don't know why, but they do it. And if you are using tools like using webpack and you use some config that somebody built, you don't understand exactly how that works or why but it works, yay. So that might be a win, but the thing to look in there is like, "I don't understand why this thing actually works at all." And then like later on that line when I wanna do something different with that tool I'm not gonna be sure of why what I'm trying to do is functioning at all.
KYLE: So I wanna clarify/redirect my question slightly. Those were some really interesting thoughts I appreciate that. So, before I do, let me just share my own personal bias which a lot of people probably know but it's towards the teaching side. And for me, it seems like in my observation while working with students, that it is the light bulb moments of understanding, when they look at somebody else's code and it's explained to them and they realize, "Oh, I see why that worked." That was the part that seemed to and it was the collection of those over and over and over again that kind of sold somebody on staying as a developer.
But the bigger context of my question is do we have a responsibility as a developer community to make it easy for developers to fall in love with development? And if we do, are we lowering that barrier? Are we lowering that bar so low, that we're bringing people in and they're not understanding what it really takes, you know, that being a developer being an engineer requires an awful lot of investment of your time and energy. So you know, in my sense, I would love to say let's have everybody be a developer but at the same time I'd love for everybody that's gonna be a developer to understand how important it is to take it seriously how important it is to really learn stuff and not just be able to repeat the things that they see on Hacker News every single day. So I'm wondering what our responsibility is, how we should frame this, and how we should communicate this to beginner developers.
PAM: That's a really interesting way to pose it. So, for I think one of the analogies that I like to use that, I think, does, if you are in the other side of this, you can vehemently disagree with it, second person you. That, you know I think everyone should be able to learn to read, but maybe not everyone needs to be a novelist. That is accessible to people. And I think it's also, I mean I think this is a really interesting show topic too because it is really hard-- I'm finding it harder and harder and more deeply I understand how computing works to get back into that beginner mindset of what it was like when I didn't know how computers worked more deeply, especially some of the mathematics parts. That now I definitely take for granted.
AIMEE: So I was just gonna chime in but Pam you pretty much said exactly what my thoughts like I think especially like younger generations that learning to program is a basic skill, but if it's not your thing, I don't think like Kyle said that we should lower that barrier to entry so far that we take away from what engineering actually means. Because, especially with all of these boot camps, I feel like there is a little bit of and TV shows, there's a little bit of glamorization of what we do. And, I'm not a fan of that. Some people might like it, but--
PAM: Can you expand on "glamorization" of our field 'cause I'm definitely still having trouble with people saying, "I work in IT."
AIMEE: So you think of like the TV show Silicon Valley and a lot of these boot camps are like, "you're gonna make you know six figures doing this for a couple months." So there's a lot of glamorization where they're not really going into-- my personal opinion is especially as a newer developer, you owe it to your employer to put in some overtime because you're ramping up, you have a lot to learn. And I just feel like some boot camps do a great job of doing this, others only do this at the back end when you're about to graduate and they don't tell you this when you've already paid your money. So yeah (laughs) those are my thoughts.
KENT: So, on that I would say that... I would hesitate to say that you owe it to your employer to put in overtime but you owe it to yourself. If you really want to develop your skills, putting in extra work is a really great way to do that. You know, obviously we all have different levels of privilege, where you may get home from work and you have to go take care of your spouse because they're terminally ill or something. But if you are able to and you really want to, putting in extra time is a really great way to develop your skills.
But in addition to that, I also wanted to mention kind of on the topic of glamorization of our field, at the WWEC just this last week it was mentioned by Tim Cook how easy it is to program. I actually didn't hear this, I just saw this around on Twitter. And I think yes it's a lot easier to build cool things than it used to be, but it's a little misleading to say that it's easy to program. It's not easy to program. It is hard. And you have to work really hard to do it. Each one of us combined have spent years and years of time developing our skill so that we could do this job. And it's totally rewarding, but don't let anybody tell you that it's easy because it's not easy. It takes a lot of work.
KYLE: So, to build off of that Kent, the video that Apple showed in that Keynote was tremendously it was emotional and inspiring, talking about how many different people how powerful this notion of "coding" was as a way to empower people to share their voices and whatever. And of course all of those things I think are absolutely positive for society as a whole and culture as a whole. We need to find as many paths for people to have their voice and to participate and to level the playing field as possible. And to the extent that code can do so, I think that's a fantastic thing. It used to be that coding was only something known by the elite few, and the mass public would've had no idea. And now, it is something that you know a 10-year old can pick up and make a great app that all of us are playing on our phones tomorrow. And that's fantastic.
But I would say this, I would pose that when I teach, there's two different places, or two different mental contexts that I will approach someone with if I'm going to teach. And I have to ask this every time somebody asks for a class for example. So the metaphor that I'd give is the difference between-- as a homeowner if I have some cabinets here in my kitchen that I'd like to update or replace or something like that, well one way of doing that is for me to hire some professional cabinet maker person to come in and install them. Another way is to go down and take a couple of weekend classes at Home Depot on cabinet making and cabinet installation, and you know, learn as a hobby, if you will, how to do cabinets. So the classes that I take to learn a do-it-yourself cabinet making or do-it-yourself cabinet install are, and I think necessarily should be, different than the classes that I take if I want to become a professional woodworking cabinet maker. And that I think is where I'm really coming from here is that I think that we sometimes blur those lines in the admirable goal of trying to give everybody a chance, and we don't ever make it clear that there is a step there is a difference between those two.
TIM: This is actually kind of pertinent to me 'cause one of my super-duper long term goals this was like 10, 15 years was actually buy a plot of land and build a house on it as much as I physically can myself. And I understand if there is a lot of stuff to learn there, woodworking, plumbing, maybe electrical.
PAM: Electrical. (Laughs)
TIM: It's a very ambitious goal. And who knows if I actually ever will do it, but, at some point I'm gonna buy that plot of land and get started. And, I don't know, I think that's probably the analogous to like a developer probably not somebody on like a boot camp or something. You know, I'm gonna actually get this going and make it happen.
I think from the teaching perspective, getting back a little bit to what you were saying about finding a person's inspiration, that's really up to the person themselves. But it can be encouraged and moved along a bit based on the tooling given to them. I remember way back in high school or middle school or something with the Apple TVs, and they had a logo on there and I don't know if anybody remembers logo but it is a you had this little turtle on the screen and you issue commands, text commands, to get it to move around and eventually you could make it draw stuff. There were all kinds of complex things you could do. And that was a good one to one representation of the things I'm building and seeing them happen.
I actually also recently got into just playing around with Unreal Engine. It's the game engine behind Unreal Tournament and a bunch of other video games. And they made freely available, so you can go and download it, it's a couple gigs. And it's an editor to create games, basically, and they give you kind of a template to get started with, and then you can build a town. And the way you actually make that happen, I was expecting it to be a bunch of programming you know whipping out my Visual Studio and getting started with that, actually what they built is what's called a flow-based programming model. So think of it kind of like Lego bricks, you get to put together and draw lines and stuff, there's no typing even involved. You can just drag and drop and make it all happen. And, I was able to I was kind of got an idea for a guy who's one of the people that sets up bombs to destroy buildings. So throw bombs around and hit a button and then they all blow up. And physics go flying everywhere and it's cool. So, figuring out how to do that from the basic template they give you which is just a gun and it fires little yellow balls, to make those stick onto buildings and do all this stuff, I had to like figure out all those things. And it was very motivating because every step of the way I was able to hit a button and then preview what I was doing immediately and see the result of it. So it wasn't so disconnected and far away that I'd have to put all these things together and cross my fingers put up in piles and first thing.
KENT: That's great yeah. I just kind of touching on that, I'm reminded of the let's see it's the Changelog episode 200 I think, they had Rock Bot, Rachel Vasquez on the show, and I've referenced this on the show before because I just think this is so awesome. And she said that like when she was in school it was oh yeah, Raquel Vales, excuse me, thanks Pam. Yeah Raquel said that when she was in school, math was not exciting to her because it was like, "Why is calculus even a thing, like my dad still asks me why do they teach people calculus? It's the most pointless math ever." Because it's hard to see how this is really valuable, like who cares what the area under a sine wave is? Is what he'll always ask me and I'm like I don't--
PAM: A lot of people care. (laughs)
KENT: (laughs) A lot of people do care, I just don't understand it either. But, the underlying problem there is that people don't see the application and so there's pretty much no motivation to learn this if you don't see the application to it. And so, Raquel says you got to do it kind of backwards. You have to say, "I want to make this robot that can move an arm like this. I wanna have it do something." And then you work backwards into, "What are the things I have to do to do that? To accomplish my goal there?"
MAX: No, I just wanted to say I just wanted to confirm that. Because I still remember the best math teacher I ever had, I sadly only had her for half a year. And she did exactly what you said, she just always said that gave us before she taught something she told us, "this is a practical use of this. You're not just learning some sort of random thing, you're actually learning something with the practical use case." And it made me remember, it made me love maths basically.
KENT: Yeah, and actually that makes me think last night I gave a talk and got some feedback on it. It was about ASTs, and that's kind of a crazy concept for a lot of people. And the feedback that I got was, once I finally gave use cases, then people were really interested. But until they heard what the practical implications of learning ASTs and transforming ASTs and stuff, until they heard those practical applications, they were kind of disconnected. And so, yeah I think that is a great point.
Cool, so let's jump into our Twitter questions here this has been an awesome conversation. Thanks everybody for participating that's been really great. So, Juan asks on Twitter with the JSAirQuestion hashtag, "What was your best and worst experience as a beginner to programming?" And I think we'll go ahead and open this up to the guests, but also if any of the panelists like to jump in on that, that'd be interesting too.
TIM: I'm trying to think of something quick so I can get started. I remember creating a really bad bug that involved payments, and therefore is really, really bad, in one of the things I was developing. On that same project, I had a really big win in terms of, it was this auction site thing that needed really fast updating stuff, so being to in real time have two people click with milliseconds difference and get that all to work, that was a huge win. So I had to do all the stocking stuff, learn a lot about asynchronous stuff. I hadn't really dived into super deep in a while. But I remember having that payment thing was kind of a bummer. It was actually like a, I had a vague idea for a podcast based around this, where it's just bring on guests and talk about the worst thing that you ever had happen to you in programming and then what'd you learn from it? I learned never to not double check your payment fields or form. Hopefully other ones would be a little bit more in depth.
KENT: Go ahead, Aimee.
AIMEE: Okay, I was gonna let Max go, but I'll go, whatever, since I'm here. So, I think for me the worst, I don't wanna pinpoint a specific thing but I'm gonna pick on Kyle in a good way because I really like his books. But for me, overall, the worst is like people who take a concept that could be explained very simply, and they have a tendency to make it way more complicated than it needs to be. Just I don't know if it is like through no fault of their own that they're not the best. They're not the most skilled at teaching concepts or if they're purposely trying to make it complicated. (laughs) But as a beginner that's really frustrating. So my advice is if you come across that, don't give up, just search for some other materials. Because just because something doesn't make sense doesn't mean it's your fault.
And then, my best experience, I have a lot of them but one of the first things that popped into my mind was my boot camp. Because I know a lot of people that ask questions from people who went to boot camp like, "Was it worth it? Are you glad you went?" My personal experience was I am really glad that I did that. Multiple reasons, it sped up my process in learning, and formed some really great relationships there which I think are important as you're a developer, but yeah.
DAN: Yeah, so, I have my worst experience that I remember was I started individual Basic and it was amazing for me back then. But I also tried to learn serious language because that was people on the forums told me to do. So I downloaded a C++ compiler and I cannot figure out the compile errors. Like, I literally couldn't figure out what they mean, I had the header file and the implementation file and I couldn't figure out like the syntax things. And so basically this stopped me from learning C++. So this was my worst experience.
And so what I did was I went to a coffee shop without a laptop, and I sliced pieces of paper, and I would just put pieces of paper, and figure out how they are supposed to move, how these layers are supposed to move, responding to the scroll position. And so later, I wrote functions that calculate the positions of the layers depending on the scroll position without any DOM. And I wrote tests for these functions, again without any DOM because these are just calculations. And later, I had a single hander that would just listen to the scroll event, call my function, and apply these positions. And, this is how I learned that it's important to separate the computation from the side effects, because it's so much easier to reason about the computation alone.
KENT: Oh yeah, I think actually you referenced that same thing on our functional programming show. So, no that's great that it taught you so much. Yeah that's awesome, I think again just like testifying that you learned so much from your failures. And from the things that you try really hard at, not that you failed at that obviously, you did not.
So yeah I have one, kind of funny bad experience as a beginner developer. So I was working at Domo we had this chat client, and I got a bug that the chat had a cross-site scripting problem in it, so like somebody would put a comment with the script tag and you know run scripts on everybody's computer because it was like instant. So as soon as they put the comment, boom, everybody who had that open would have that vulnerability. And so my blunder was when I was trying to reproduce it at Domo, they (mumbles) their product, and so I reproduced it in production on our client. (laughs) Only on our internal stuff but like everybody in the whole company got this alert that popped up that said, "You've been hacked." (laughs) Oh that was really embarrassing. I had to go and tell everybody, "You haven't been hacked."
Oh my gosh, and unfortunately at that time the mechanism to delete comments was broken. And so we couldn't even get rid of it for a couple hours. It was awful. So, and I'm still alive, like everything is okay. So, you can make blunders. It's okay. (laughs) At least it didn't cost us money or anything. So we have many more questions. I'm afraid that we won't be able to get to them all. And so, yeah we'll just get to a couple of them maybe spend a little bit less time on 'em, but that was a fun one.
So this one's from, I'm gonna pronounce the name wrong, Anirudh Modi, and the question is, "What is one piece of advice you would give to beginners? JS community being very huge, it can be intimidating to survive." So, one piece of advice.
DAN: Find a mentor!
AIMEE: Don't do it alone. Find somebody who's also at your level and do it with them.
TIM: Yeah, there's a common thing called having a-- I think it's brain trust, it might be something else, or having a group of people together who are on your same level and kind of getting together regularly. I forget what that's called. But I know the founder of the company I'm at right now has that with a few other people where they just get together once a month and kind of talk about businesses and stuff, and development and all that stuff. It's really good to have that with a regular support group that you can, much like the JS Air panel that we have here.
PAM: So I would, even though I'm just gonna put this in my tips at the end of the show, but that one of my tips for beginners and I think I might have said this on the show before, but don't stay stuck more than 15 minutes. Like if you have gone as far into the Google hole as you possibly can, and that's actually another one our questions on Twitter about searching on Google. But, if you've gone as far as you can and you are just absolutely stuck, talk to someone and, ask for help. And you know, ask if someone will look at it with you for just a couple minutes to help you get unstuck. It does wonders.
KENT: I think 15 minute rule is a good one. 15, 20 minutes. Yeah, so I think we'll jump into the next question. I really want to get to at least this one from Larry King, his question is, "I work and have learned on my own. I get concerned how much I end up Googling. Is Google a tool or a crutch for us?" I'll just go ahead and say it's a major tool and I Google all the time.
PAM: Yeah, I think there's been this talk about Joe Armstrong talked about how you actually can't hold-- like a machine can get into a state you actually physically can't hold all the things that are going on into your head. So it's really just outsourcing that into the internet. And saying you know, "I'm going to bring these things when I need them," which I really like.
DAN: I Google (mumbles) every day.
MAX: All right, so I wanna chime in here 'cause I kind of plucked this. We built a tool called Carte Blanche which is basically exactly like that. 'Cause we realized that React components can come into a ton of different states, and they're really hard to work with sometimes. Because you just can't keep it all in your head. So we basically built a tool that takes care of that for you.
MAX: Got to get that plug in there, sorry.
PAM: Yeah, no totally.
KENT: Yeah that's awesome, put that in the links.
MAX: Yes will do.
KENT: Any other thoughts on this?
TIM: I was also gonna mention like it's important to have quick links to where stuff is. So as much as, you don't wanna Google everything you think about, but it is helpful to know how to quickly get to the kind of stuff you're thinking about a lot. Like I'm dealing again with elasticsearch a lot right now so I can't remember all of the individual options to DSL it's huge. And, like if I try to figure out how to do a cardinality aggregation, I don't know the exact stuff for that but I know how to get to that quickly. I think that's as good of a skill to have as being able to Google cardinality aggregation by search.
PAM: Yeah, well and Tim, I just wanted to jump in because I think what you're also reminding me that people often used to, I mean it's easy to forget but these books are still for sale, but, you know reference books. People have always used reference books, or you know, cookbooks, like the Python cookbook. So that you can use them, you have books on your desk to reference before we had more of the internet indexed.
TIM: Yep, and cheat sheets too. They're really good.
PAM: Yeah, cheat sheets.
KENT: Yep, nothing wrong with this. So Larry you're good. Keep Googling. Google away. Okay, I do wanna talk about this because for beginners this is a big question I think. So Chris Gallup asked, "Jobs that require a bachelor's degree, would they give candidates without a bachelor's degree a chance?" So it's really common to say like you know, "We require a bachelor's degree," or something on a job description. Is that a good thing? Should people be required to have a bachelor's degree?
TIM: Absolutely not. It shouldn't be required to have anything. What matters is not what you've done in the past, but what you're going to be doing. Typically, how I've learned to structure job postings is to say not "you must have X number of years' experience, you must have experience in this thing." It's more, "Here are the things you're going to do. You're going to do this cool thing with this cool technology." And whether or not you have 10 years' experience, five years' experience, really doesn't matter too because like you might be a really bad programmer who worked on and slugged through something for 10 years, or you might be a really awesome programmer who's only worked three years but knows all of it way better.
So I mean it'll come down to the company obviously if they're enlightened enough to realize that it shouldn't be just a hard cut off of you do or do not have these check box list of skills. But, I would say like don't not apply to a job just because you don't fit the description exactly. All the time it happens, they put in something like, "You must have 10 years of experience in the language that was invented five years ago." That kind of thing, that's actually, that happens. These impossibilities that show up anyways. Maybe they're just weeding out people who are aren't paying attention enough to realize that that's a thing. So yeah, just apply anyways, it doesn't matter. Like if you fit well with that team and you're a good hire, and you've got the skillset or at least the desire to obtain that skillset, go for it. That's another opportunity another challenge for you to overcome, and that's awesome.
MAX: I wanna second that. I honestly suggest just apply to every single job you see no matter what the job description says, at all. Like just try it, the worst thing that can happen is that they say no. And then you'll at least have learned something which is you know that interview process, that wasn't the right fit. But just apply, apply, apply. And try to find the perfect match for you and for the company.
KENT: Great. So we are over our time for sure, so I'm going to do something for our tips and picks. I'm going to give each one of you 30 seconds for your tips and picks. We're gonna do this rapid fire, so that we can wrap up here in a little bit. So we'll go ahead and start with the panelists, and then I'll go, and then we'll let our guests go. And I'll cover Brian Lonsdorf who had to jump out. So, let's start with Dan.
KENT: Cool. Thanks, Dan. Getify?
KYLE: All right, first off, everyone, I recommend that you take a walk every single day. And I also recommend you replace one drink a day with water. And that might be your coffee, or a soft drink, or something else like that. But just try it and see if you feel better. For developers, specifically beginner developers, write your code as simply and as verbosely as possible to explain your thinking, or maybe even lack of it, clearly. Don't just emulate the short clever code that you see from others. Your future self a few weeks from now will thank you if you make your thinking clear in your code.
Some quick picks, SimpleHTTP2Server, those that work with spinning up Python SimpleHTTP2Server know how this one works, but this one was built to use the HTTP 2 protocol so you can start to experiment with that. And I've got links to both the project and a demo of that. That's pretty cool. There's a new flavor of compression coming along and it's not just from Hooli or Pied Piper, it's called Brotli. And it's made a lot of progress very quickly. I think we're gonna see over the next few years. It's starting to unseat gzip. So check out Brotli.
And finally for the beginner developers in the audience, or for the people that know beginner developers, I have in my book series the first book in the You Don't Know JS book series is called Up And Going. It's not only free online but the e-book version from O'Reilly is also free. It's designed specifically to help you do that get up and going, so I hope you'll check that out. That's it for me.
KENT: Great, good resources. Thank you. Pam?
PAM: Hey, so I'm going to pick Nand2Tetris. So this is a course that if you are lots of thumbs up from Kyle on Nand2Tetris, so this is kind of an it's been around for a long time but it teaches you how to build a computer from first principle. So from the math to computer. That's what Nand2Tetris does, and they actually have a Coursera version which if you wanted to get a certificate or something you can do that or you could audit it for free of course. And then since we did touch on jobs for a hot second, I did want to mention I actually do have a book on how to get your next job as a developer. If you are interested in that sort of thing I dropped a link for it, it's called Beyond the Resume. And it basically breaks down a job hunt and all the things of how everyone tells you to get your job through a network. It actually tells you what that means and how to do that instead of superfluous advice. So, those are my picks.
KENT: Great. Yeah love it. Okay, so for me, I just have two tips, the first is learn one new thing every day. So even like, as you're a beginner you're learning crazy amounts of new things all the time. And, over time you start to just do the same thing each day after a while, and so don't fall into that kind of a rut. Make sure that you're always learning something new. So something that I do, I go to Egghead.io, and I find a video that I haven't watched before and I watch it. And then for your all, y'all's benefit, I tweet it with #eggheadADay hashtag, so you can follow that hashtag and learn with me. And then, my next tip is the learning workflow is consume, build, and teach. So we can get overwhelmed by all the things that there are to learn, just like consume as much as you can, high level stuff, just familiarize yourself with it all, and recognize that you're not gonna learn it all and then just choose the things that are interesting to you and build stuff with that. And then you're gonna make mistakes. That process is really good for your learning. If you teach it, that will solidify your understanding of that. And then my two picks are React HTML Email. It's been super helpful, I've been having trouble writing HTML emails, no surprise, and React HTML Email makes it a lot easier. And then Aphrodite. I talked about it on the show before. I totally love Aphrodite, it's awesome. It's CSS and JS, but it actually generates actual CSS. So there are no hacks for media queries or hover states or anything like that.
And then Scott Moss, so Scott Moss is an awesome person who unfortunately last minute wasn't able to make it to our show. He has an amazing back story which he talked about at the first ng-conf, I think so you can find his talk there. But, yeah he wasn't able to make it, so I did ask him for tips he gave me one tip, try to use npm scripts directly for your next project, and not a build tool like Gulp. Probably a good thing to try out. I haven't used Gulp in actually like a year, so it's possible. And then his pick is Overwatch, it's a game. So PlayOverwatch.com. Aimee, why don't we have you go next?
KENT: Whoops, I just muted my video on accident. (laughs) Okay, thank you Aimee, Max.
MAX: Yes, I wanna add to what Aimee said. Definitely read You Don't Know JS, it's probably the best JS book I've ever read. Well the best JS books I've ever read.
KYLE: I paid all of these panelists to plug my books just so everybody knows.
MAX: No so that everybody knows he actually didn't it's seriously amazing. Second tip I wanna add is you don't have to be Ryan Florence or Dan Abramov or Michael Jackson or Kyle Simpson to get a job as a developer. I thought that for a very long time. It's absolutely not true. You a great developer, even if you don't have 30,000 Twitter followers. And, I've got two picks. The first one is an article by soederpop where he talks about the webpack DLLPlugin plugin. Really specific stuff, but it actually speeds up your hot module reloading and your startup time by a lot. It makes everything a lot nicer to work with, your tooling a lot better. Check that out. And I wanna also add on to what Kyle said, there's a great app for Mac called LookUp App, which reminds you every, I think, it's 20 minutes to sort of take a look somewhere else except for your screens so you don't actually ruin your eyes after a while, because that happens if you just stare at your screen for nine hours. And also reminds you to do like stretches and gives you instructions. It's totally nice and free. Get it!
KENT: Cool. And Tim.
TIM: Sure, so one of the tips I had was to contribute to documentation as kind of a first start for-- and this applies both to getting into open source whilst getting into programming. If you can document it, you can probably think about how it works a little bit and then you can start to think about, "How can I contribute and make this better and different?" So it's a good way to get a low barrier of entry into it. We have an issue on React Router for improving our docs, which frankly suck right now. And, need a lot of work, lot of love so if anybody wants to help out that'd be great.
Lastly, I had on the non-technical side, Lady Dynamite on Netflix, really awesome, it's a Maria Bamford show. She has her various mental disorders, which you know she's been super open about represented as characters in the show, occasionally. It's not really revealed until the end, but it's not a big spoiler or anything. And it's absolutely hilarious. Highly recommended. And then also if you're looking to start a diet, I just started keto a couple weeks ago. It's interesting. Basically your body burns carbs, your body burns fat. Carbs are really fast burning, fat's really slow burning so what if you just turn off the carbs and slow burn all your energy? That's the idea. So, I eat under 1,500 calories a day but I feel like I've eaten 2,000, just 'cause it's so consistent and smooth throughout the day. Interesting diet. Nice little body hack. I'm into those sorts of thing. I did (mumbles) for like two years, so I'm always trying to get around the exercise part of diet and just play with the numbers to make it all work. And this is my latest little trick.
KENT: Cool, all right. That is our show so let me just wrap up with a couple of announcements. We have a silver sponsor Trading Technologies. They are hiring, so if you are a beginner developer, check them out. And then, I have a couple links for you. We love suggestions, this show was a result of a suggestion. You go to jsair.io/suggestion, then that will take you to a form to give suggestions for our topics or guests or both. And then jsair.io/feedback, if you have feedback for this show or the show in general, or a past show, that's the place to do it. And then, we love your feedback. And I also wanted to mention that these forms, I'm subscribed to these forms so when you submit, or when you submit this form I get an email instantly and I normally read it right then. So I'm seriously interested in your feedback and your suggestions. And then Jsair.io/email will take you to our email newsletter where you can get updates about the show. Well, it's not updates. It's just like every week we send stuff about the show like highlights and stuff like that, so check that out. And then remember next week is KCDC, the Kansas City Developer Conference. I will be there live and on site with some people. I believe it'll be on Thursday. So just check the website to know exactly when that is. And with that, just gonna say goodbye. So, thanks everyone. This was awesome!