Raquel Vélez: Evolution of a Developer

Slides Transcript
Raquel Vélez

The road to JavaScript expertise is hard, but easy to forget. Let’s go back to the beginning and work our way to the top, reminding ourselves of the struggle (but ultimate triumph!) of how we become the incredible developers we know we are. We’ll talk about individual journeys, shared experiences, and the community that has brought us all together.

Video Video Video

Transcript

Thank you so much. So, as has been said, my name is Raquel Vélez. I am @Rockbot on all of the things. I am a senior software developer at Npm, Inc. You may have heard of npm, you use it to install all of your wonderful JavaScript things. I am honored to be able to work there. If I can answer any questions or give you stickers, please let me know. I have answers... and stickers. So, let's get started. On a scale of "fist" to "high-five", where would you rate yourself as a developer? Where a fist is, "I'm just figuring out this whole JavaScript thing. I think I know what a variable is and I'm learning about loops, etc." To "I have taught Brandon Eich everything he knows." And you can totally do the Fitbit thing if you want. You can be like, "I'm a three-and-a-half" or whatever. Cool. All right. You can play along too! Feel free to play along. Cool. I'm seeing kind of like beginning to middle... That's awesome. Great. What I'd like to talk today about is how we go from here (fist) to here (high-five). Because I think a lot of us who are kind here (fist with wiggling thumb), don't know what this path looks like (opens to high-five). And I think those of us who are here (high-five) forgot what it was like to be here (fist). So let's go through that whole process. Yeah, it's intense. I am going to use my personal story. This is not going to match everybody's, but I think a lot of the elements are going to be the same. It all starts out the same for all of us. For whatever reason we say, "I'm going to start learning JavaScript." Or insert technology of your choice, but I'm going to start with JavaScript. Whether it's for a business reason or for personal reasons, we say "Okay. This JavaScript thing? I'm going to do it. Let's do this. Yes! Totally!" For me, I used to be a roboticist. I used to build robots. And I said to myself, "OK, this is kind of boring, because the robots... they don't really have fun with me. We don't get to party. We don't get to talk about boys. We don't... They're just kind of robots." And so I decided I needed a little more people in my life. I was living in Charlotte, North Carolina at the time and I said "OK, where is a cool place to work? I think the Internet is kinda cool. Let's do that." I mean, I was a roboticist. The Internet can't be that hard. I went and talked to the CEO of the coolest company in town. I said, "I'd really like to work at your company. What do I need to do to work here?" He said, "Learn Node." Okay. Cool. So I went home and said, "I am going to learn Node. Let's do this. I'm going to build an application. That's how I learn." And I got nowhere. This happens to all of us. We have no idea what we're doing, because we don't know the words that we need. I knew enough to say, "OK, Node. It's a project, it's a thing. Go to the website: nodejs.org." I downloaded Node. I knew enough about the command-line to say, "There's no 'application', so I don't double-click on anything." I go to the command-line and type n-o-d-e enter. What happens at that point? You get this caret-y thing. Looks like this: > You see it also in the JavaScript console, when you go in a browser. And you're looking at it, and it doesn't say anything. You're like "Okay..." So, go! g-o enter. And what does it say? It says "undefined". You're like, "Okay. This doesn't work for me at all. I have no idea what I'm supposed to do." I don't have the words. I don't have the vocabulary to use to say "How do I make this thing work?" So, what do you do next? You go online. Go to Google. Stack Overflow. Blog posts. Whatever. And you start looking for help. PRO TIP: "caret-y thing in Node" does not produce any useful results. There's just nothing in there. Again... no vocabulary. No way for me to say, "I have no idea what I'm doing. I need help." And then on top of that, this was at the beginning of 2012, when Node was super-new. It had been around for a couple of years, but it was still really brand-new. To the point where any tutorials I found... if it was more than 6 months old, it was completely out-of-date. This isn't even useful to me. So, whatever. I still try. I find some things. I start playing around and I say "This is cool, but... I... Caret-y thing? Help?" So at that point I realized I needed more people in my life. I needed to start asking questions. So I went to a local meetup. That's a great way to start meeting people. Local developers in your community, and you can actually talk to them. You can say, "So look, here is my terminal. n-o-d-e enter. Caret-y thing." (shrug) And they go, "Oh, that's the REPL! Yes, that's the read-eval-print-loop. That's how we do all of our on-demand type stuff. What you really want is, you want a separate file. And then you can run node file." And then it runs, and magic, and you're like "Oh my god, why did nobody tell me this? I didn't understand anything." But that's okay. Because you go, and you talk to these people. And they have been there enough that they can read your mind a little bit. And you're like "Caret-y thing!" and they're like, "Yes, REPL. That's the word." And you're like, "Cool!" At the same time I was trying to build this app. And I was like, "I have this app. I want it to store data. And I know I need a database, but I've only used MySQL before." Because that's what I used when I was hacking on my Wordpress blog. "Is that what I want to use?" Whatever you want to say about databases... blah, blah, blah. At the time, what I needed was MongoDB. It was the perfect solution. Again, talking to people in person. Being able to use words that didn't make any sense to Google, but made sense to people, made a huge difference. Empowered with all this incredible knowledge, I went back to my app. OK, I'm building this app. I've got Mongoose, and I've got Express. And how do I integrate these things? I don't know. But now I have keywords that I can ask Google. You type: Mongo Node. There is this wonderful module called Mongoose. They have a website, and they have code samples. You're like "Yes! Perfect! Code samples!" Copy, paste. I expect magic to happen. And no magic happens. And, you're like, "Why isn't this working? I don't know." You don't have the concepts fully-integrated into understanding how this is all supposed to come together. So you go back! And maybe your local meetup only meets once a month, so you need to expand your group of people to ask questions. What did I do? I went on to IRC. If you don't know what IRC is, it's this amazing technology that's been around apparently forever, but I didn't hear about it until 2012. And it was on IRC that I found the mongoose.js channel. And I was like "Hi! I'm using your thing. I think it's the right thing for me, but it's not working in my stuff." They're like, "Send us your code." And I did what every single new person does: I copied and pasted all of my code into IRC. It was like, 25 lines of stuff. Someone said, "Oh, god, please don't do that again." And then I learned about a thing called Pastebin. That was super-useful. Then of course, gists, etc. But I did the thing that everybody does, and I got very politely yelled at. "Don't do that again." "Okay." But still, being able to share my code with someone else from a larger community. People who were from all over the world, not just my local community! Because when you're hacking at 2 am, sometimes your friends are not awake, but somebody in Germany might be! And that's awesome because they can give you this feedback, and they share more appropriate vocabulary with you, and then you understand the concepts: you understand how things link together. And it's really awesome! So you take all this knowledge. And you're still going to mess up. If you're not messing-up, you're not doing engineering. Just FYI. This is how it works. You do good, you mess up, you succeed. It's just this cycle and you just kind of keep moving forward. But! This is a turning point. These concepts are coming together enough, and you have grown your community enough to the point where you're like "OK, whenever I have a problem, I might not know what it is, and I might not know how to fix it, but I at least know what to ask, where to ask, and who to ask." Right? Go on IRC, go to your friends, go to your meetup. Whatever. Know exactly the magical keywords to get the thing out of Google or Stack Overflow. Fantastic. So now you can keep moving forward. And you're like, "Yes! I got this!" You find this point at which you are like, "Wow, this is actually really cool! This is so fun! I love this!" But I'm doing this on the side. I have another job, and it is sucking all the life out of me because I really just want to play with Node all the time. "Maybe I can get a job in Node! Yes! That's totally a perfect idea." At some point you get to where you know enough information that you can be a junior developer. Junior developers are useful. They're useful because you can tell them exactly what to do and you don't have to pay them very much money and you can still move forward with your product. So you bring a junior developer on-board. Yeah, you have to train them a little bit, but you get to train them doing exactly what you want them to do. So from a junior developer perspective, you're like "Oh my goodness! Now I have this opportunity to get paid while I learn. Awesome." For me, I got a job as intern. I wasn't even a junior developer yet: I just got enough to be an intern. I was getting paid 500 dollars a week, which is not very much at all. Especially for someone who is coming from robotics, it was kind of a blow to the ego, but I was like, "You know what? It's worth it. This is gonna be OK. I'm gonna to make it work." Fantastic. You start working, and you start learning. And then you get to this point where you are like, "This is super fun, but I'm not exactly learning all the things that I want to learn. I'm learning the things that my employer's telling me to learn. And that's fine, because at least for me, I was working at a consulting company, so I got to see a little php, I got to see a little bit of Node, I got to see a little bit of front-end stuff. I was convinced I was going to be a back-end developer because I did robotics. Then I was like, "Hey, CSS -- as annoying it can be -- is actually really cool. You get to see stuff. And you get to move things. Floats, and divs, and wow!" And so at that point I kind of transitioned to be more of a front-end person, but still lovin' the Node. I like to think at it as a buffet of learning. You go in and you just get a little bit each of these little things. But I still felt like I was missing something. "Yes, this is our stack at this company, but I know that there's more. I keep hearing these rumours of these single page applications and all this other stuff. Where do you go to learn that?" Where do you go? You come to one of these. This is where you find out about all those things that you knew you were missing out on something, but you didn't know what it was. How many of you've learned something new that you didn't realize even existed since being here? Yeah! Exactly. So, it's fantastic. You get what you're missing. It is like drinking from a firehose. It's like trying to get a little sip of water and whoosh! Right in your face. My goodness, gracious! But it is totally worth it, because then you get super-excited about all this stuff. My first conference was NodeConf SummerCamp 2012. I went to this conference hoping to learn more about the event loop. Apparently there's going to be a talk about the event loop later: I'm totally going to that. But at this conference I didn't learn about the event loop. I learned about "node-core" and "domains" and "error handling" and I was like "Whoa, I just want to learn about the event loop, please. I'm new to this." But there was another really important aspect of going to a conference. I learned about people. I met people. Met all of these incredible people that have completely changed my life. Every conference I go to, I meet new people and it's incredible. I become really good friends with these people. As a side note, if there's nothing else you get out of this entire conference. Nothing. At all. Because let's be real: you can watch these videos at home later... If there's nothing else you get out of this conference, walk away with at least 5 Twitter handles. 5 Twitter handles of people that you are going to hang out with and talk to on Twitter. If you don't like Twitter, use Facebook or email. I don't care. Make sure you get to know somebody else. Because these people, that are sitting in this room with you? They are going to help you get your next job. They're going to help you when you have a bad day and they'll send you funny cat gifs. Like, super awesome. These people are really going to change your life. Right here. The ones that are sitting right next to you. And those of you following along at home, come to a conference and let this totally tranform you. OK. Coming back. You're talking to these people. You're at this amazing conference. "There is so much cool technology. Oh my goodness! I totally want to play with this!" When do you do that? What do you do with all that cool technology? You start working on it on your own. And yeah, it kind of stinks. You don't always get to take all the cool technology back to work with you. But let me just tell you a little bit: this is a really good opportunity. If you find the time to hack on things on your own, you expose yourself to a whole bunch of other stuff. You get to use all of these people you met at this conference, where you learned about all this stuff. And you can ask them, "Hey, can you take a look at my code?" Here is the thing about open source. It is not about contributing to jQuery or node-core. It's about taking literally your source and you're opening it up. Just sharing your stuff on Github. It doesn't need to be anything like, "Whoa, magical!" or life-changing. It just needs to be some code. Show it to somebody. Let someone else say, "Hey, why did you do that? What was your inspiration for this? How did you figure that out? That was really cool!" Getting feedback on your code from somebody else is super-useful. For me, I was at this conference and talking to somebody. They said to me, "Hey, you used to do robotics. You know what we're missing in node: we don't have a matrix module." I said, "You know, that's true. There isn't a matrix module." And I used to do robotics, so matrices and I? We're like this. So I went ahead and started hacking on stuff. So, you start hacking on things. Look: you are still going to keep messing up. And failing. And then you're going to succeed. And there will be moments where you are like "Oh my god!" and you're going to run around the office or your bedroom, or whatever. Because it's so exciting that you're getting it. But the point is that you're playing with these things. You're kind of already getting to know the concepts and you're figuring all these things out. And it just starts to feel really good because you're building confidence in yourself. And you're like, "Actually... I'm not a total newb anymore. This is awesome!" I mean, you didn't teach Brandon Eich everything he knows. But you're starting to get somewhere and you feel really good about it. These concepts are gelling really well, and you start to experiment a little bit. What happens when people get a little too confident? They start to get a little experimental. "Hey, I wonder what happens if I do this thing?" It's kinda scary. And it's not always going to work. But every once in a while it will. Also at NodeConf I met this guy named Chris Williams. You may have heard of him. He kind of started the whole JSConf thing. But he's also into robots. And I remember being at the conference and talking to him. And I was like, "Yeah, you know, robots are kinda cool. I guess. Whatever." And then he DM'd me later and he was like, "OMG, wait. You mean you used to do robotics full-time? What are you doing right now? Why are you in this whole web thing? We need to be working together! I do this thing called Nodebots. It's not really a thing yet, but I want it to be. I need your help!" So I said, "Okay. That sounds kind of crazy. Maybe I can..." And afterwards as I'm building this matrix module, I was like "Wait, maybe this is an opportunity for me to kind of segue into that. That's kind of cool." These concepts are so solid. And I have all this extra background information from what I used to do. Things that excite me in general. And you keep experimenting and you keep playing around. Eventually something starts to stick. Something starts to stick real well. And for me, this was my vector module. Not very many people use it, but it is actually really cool how basically it is a robotics-focused matrix module. It's specificaly for robots. It's specifically for matrices. But I started building some really cool robots with it. And as you are building these things, you're like, "Hey, people are starting to notice this stuff!" They start to use your stuff. Whatever it is you are building, at some point it is going to be successful enough that people are going to notice. Because people are going to check it out. You are sharing your code, right? You're putting it all out in open source. People are going to notice. I never forget the day I got a tweet from Rick Waldron, who I'd never met at that point. If you don't know who Rick Waldron is, he is on TC39. He's on the board of jQuery. He wrote Johnny Five, which is like a jQuery for hardware. This is a guy that I totally bowed down to. I was like, "Oh my goodness. You know JavaScript. I don't know JavaScript, but you know JavaScript, and you're saying that my code is really awesome? This is wild. How did that happen? How did I get here?" And you completely forget all of the hard work you went through trying to get there. But from that point, you start to realize that as you're writing about your stuff -- you write blog posts, you go to workshops, you lead workshops -- this stuff that you didn't ever think was evenly remotely possible... you're standing up and sharing your knowledge. And people are starting to think like you're an expert. They start asking you for help. You're the one they're waiting for on IRC. "Hey! There you are! Hey, I have all these questions! Oh my god, can you please help me? Here's all of my code!" "Hold on! Use a gist, please..." People start to notice your expertise. And that's really exciting. For me, I started doing Nodebots, and Nodebots completely took off. We had a workshop at JSConf. We had another workshop at the next JSConf. We had International Nodebots day... twice! There are all these incredible events, and more stuff is coming. But I want to hit home on this one thing. As you start to build expertise, as people start to notice all of the things you are contributing, other people outside of your necessary little niche are starting to start noticing too. Because as you become more of an expert, as you start to actually know what you are doing, other people are going to want to start bringing you on board. I stopped interviewing at this point. I don't really send my resume out anymore. I get other people calling me. And I don't want to sound like, "Oh, look at me: I'm so awesome!" No. What I'm saying is: other people are noticing that you -- yes, you -- are really quite good at what you're doing. Believe it or not. And they start calling you up and saying, "Hey!" Maybe they're Isaac Schlueter -- the BDFL of Node: aka, the leader of the Node project at the time -- saying, "Hi! I really like the things that you're doing. I'm starting this new company called Npm, Inc. Do you want to come on board?" And you have this moment where you're like, "I'm a total newb... Right?" And no, you're not. You're not a newb anymore. You have gone from here (fist) and you're slowly making your way up. Very slowly. But you're there. You're sharing your stuff everywhere. Everybody's already asking for help. How is it so much harder of an idea for somebody to say, "Please come on board. I want to pay you to work for me and nobody else."? That's a pretty amazing opportunity. There gets to be this point at which you realize -- despite every single little piece of imposter syndrome that sits in your head saying "You have no right to be up here" -- you say that you've got to be up here. Because if you don't share, then who will? And, you realize that you have received so much from this community. So very, very much. They put up with your ridiculous IRC logs and they put up with your silly questions of "caret-y thing?" You realize you are not alone, and you've got to give back. You have to give back. Somebody needs to hear your story. So, I want you to know, that no matter where you are on this scale (fist to high-five)... Seriously. Anywhere you are. And believe me, at some point you're going to be like, "Oh yeah, I know everything there is to know about Angular or Ember, or whatever" and someone is going to throw a brand new framework at you and you're going to start at zero all over again. And you're going to continually say "I have no idea what I'm doing!" I want you to remember this major thing. We're in this together. We are all in this together. And wherever you are, we are with you. I'm with you. You're with me. We're in this together. Sorry, you're stuck. It's really important to remember that JavaScript is so much more than syntax. It's not about semicolons or tabs vs. spaces, or any of that. Frankly, it's all of us. Thank you very much. (applause) Edit transcript via pull request.