Month 1: ALL THE THINGZ
- w3schools JS Tutorial
- jsbin for running/testing code
- Coderbyte "easy" level challenges [see my practice files here]
- Stack Overflow
There's a wealth of intro-level material out there for new JS programmers. My first goal was just to pass the Hack Reactor admissions challenge (a very clever coding exercise that requires you to submit your info by manipulating an object and an array). I used the Codeacademy JS track to learn about how to work with objects and arrays, and w3schools to find the methods I needed to apply. I ran my code in jsbin before submitting it in the admissions challenge interface.
It took me about a week to pass the challenge. After I submitted my info successfully, I felt my first real twinge of achievement. I scheduled my interview for the next month and vowed to study everyday up until that point. I was in for quite the ride.
Month 2: Doing as Real Programmers Do
- Code School: JS Road Trip, Parts 1 and 2
- Udacity: Learn Git and Github
- Sublime Text
- Hack Reactor: JS Fundamentals Part 1 (Objects, Arrays, Functions)
A few days before my interview, I went to a day-long course at Hack Reactor to learn about objects, arrays and functions. This was the first of a two-part series they offered to prospective students. It was expensive ($225), and probably not worth it, learning-wise, since I was already pretty comfortable with the material they presented. I still got a lot of value from it though; I met cool people, and interacted with current Hack Reactor students and instructors, and generally got a good feeling for the place.
Interview day came, and I was not terribly optimistic about my prospects. My interviewer was perfectly nice and friendly, and I got through the first few problems OK (very basic stuff, working with objects and arrays), but completely froze when I had to write functions. After a painful figuring-out process, my interviewer finally just told me the answers. I could tell he was eager to move on with his day (he wasn't rude or anything, just fiddly and ready to go), and that was that. I got a very friendly rejection two days later, with a request to submit a JS project before scheduling another interview.
Getting rejected is a bummer, but I was undeterred (and unsurprised). I was ready for more code, and started planning my project.
Month 3: Let's Do This
- Code School: JS Roadtrip Part 3
- Treehouse: Interactive Web Pages with JS [see my project here]
- Hack Reactor: JS Fundamentals Part 2 (Scopes, Closures, Callbacks)
Of all the learnings I consumed this month, I'd say the Object-Oriented JS course on Udacity (taught by Hack Reactor's Marcus Phillips) AND the JS Ninja book were the most useful -- at this point I didn't need new coding challenges, I needed to understand what the hell I was doing. The Udacity course is free (all Udacity courses have a free path, but you have to read the buttons carefully), and the JS Ninja book was $25 and a VERY good investment.
Things seemed to be going swimmingly. I was hitting my stride, coding every day, usually for hours at a time, and generally feeling good about my progress.
At the end of the month, I attended Part 2 of Hack Reactor's JS Fundamentals series, and found it to be pretty helpful and well-taught (h/t to RebootJeff, who led the course). I was still shaky on implementing callbacks and closures, but figured I could work it out in the days before my interview.
Month 4: This is How You Grow
Everything started great. I sailed through the first few coding exercises with ease. I had a different interviewer than the last time, and he was perfectly nice and helpful. Once we reached more complex functions, I hit a stumbling block. I had no idea what to pass into my callback. I probably could have figured it out if I'd been at home, with the wealth of the Internet at my fingertips, but this was an interview, and I was stuck. I talked through my thought process with my interviewer, and he helped me get unstuck. I stumbled through the rest of the problem, and hoped for the best.
The best did not happen. Two days later, I got another friendly rejection, saying that I was "very close" to where I needed to be, but not quite there, and please try again after a week or two. This time, I wasn't required to submit a project, so I think I really must have been very close to getting in. Regardless, I was sad and, for the first time, discouraged. Maybe it was time to rethink this whole idea. Maybe I couldn't do this.
That insidious gremlin, Doubt, crept into my mind, and I thought about giving up. I took a break for a few weeks and mulled my options. I could give up and go back to my non-technical but perfectly fine job, and have a perfectly fine life. OR I could stretch myself and keep trying, and emerge with a highly valuable new skill set and career prospects. I opted for the latter.
OK, so here's the thing. Whenever you stretch yourself and try to make a big, scary life change, you're going to hit doubts. You'll hear them in your head when you struggle -- they'll tell you that you can't do this, it's too hard, you're not smart enough, you're too old, it's too late. Or maybe it's friends or family members telling you this (in which case, you have shitty friends, and your family sounds terrible). Wherever the doubts come from, you will feel them, and you will feel like giving up. Be ready for that.
Month 5: CAN YOU LET ME IN, PLEASE?
After my break from coding, I found it tough to get back in the game [Important Lesson: Do NOT take more than a few days off when learning to code!]. To help motivate myself, I emailed a few friends for help with callbacks. If I got other people involved, I was far more likely to recommit. Soon after, a friend volunteered to help, and basically taught me how callbacks worked. It took less than 30 minutes. Amazing, right? It's funny how you can read endless blog posts, take classes and do exercises for weeks/months, and still not really understand something until someone just sits down and explains it to you.
I scheduled my third-try interview for a few weeks out. It had been over a month since my last interview, and I didn't want to drag out the process any further. I'd already missed, like, 3 cohorts since my first-try interview, and I didn't want to be pushed out to next year's cohorts, at the rate I was going.
I kept coding and focused on writing functions with callbacks. By the time the interview rolled around, I felt ready. I had the same interviewer as before (the second-try interview), and we basically jumped back in at the point where I'd gotten stuck the last time. I didn't get stuck this time. We did a few more exercises, and ended with a problem that required you to manipulate objects. Funny enough, I was rusty on using objects, having been so focused on functions and callbacks in recent weeks. So it took me more time than it should have to work it out. Again, my interviewer was helpful and answered my questions patiently until I got through it.
I left feeling good about the interview, but still nervous. After all, I'd felt fairly good after the last interview, and didn't get in. I tried not to think about it too much, and enjoyed my weekend (I interviewed on a Friday). On Monday, I got a very friendly acceptance email, and will start in 3 months!
Moral of the story: DON'T GIVE UP.