Intro to front-end development
Note to non-technical people: contains more technical language than the rest of my story
When we last left off, I had ramped up on full-stack web development and was finishing my time at my first web development job. My next job landed me at a bigger startup, doing full-stack development at first. I was shifted around on a few projects before landing as the tech lead for a product developed using Backbone.js (a Javascript framework) and Marionette (a library written on top of Backbone). Javascript is the language that runs in your browser, and it’s exploded in popularity in recent years. I haven't mentioned my Javascript experience until now because in my earlier career it mostly consisted of hacking together truly terrible code, and I had never even heard of the concept of using a framework to organize my front-end development.
The system architecture for this app had been set up primarily by a developer who left the company shortly after getting everything in place. He designed it as a single-page app, which means that the website is a page that never refreshes when you click links and submit forms, but instead fetches data and changes layout as needed. None of the other developers I worked with knew much Javascript at all, and they didn't recognize front-end development as a legitimate field, which was an opinion held by many developers at the time (including me!). After the architect left, my remaining teammates attempted to finish his work, shoehorning programming paradigms from other languages into Javascript. However, in working with the app, I discovered that Javascript was very different from what I was used to.
I'll spare you the technical details, but the result of my teammates writing Javascript without truly understanding it was a barely-usable app that locked up constantly, behaved erratically, and was extremely difficult to maintain or change. Fortunately, the app happened to be in the early stages of a total redesign, and I requested the opportunity to rebuild large portions of it. I took the time to dig deep into Backbone.js, reading through the entire codebase. I'd highly recommend doing this exact thing if you are starting out in Javascript (maybe if you're beginner/intermediate. Reading the code for a big project like this probably wouldn't be very productive if you're a total newbie). It's thoroughly-commented and relatively short compared to other similar frameworks, and it will give you a solid sense of well-written Javascript code that lots of people rely on.
As we went through the redesign for this site, I appreciated learning about front-end more and more. While Javascript has its fair share of warts, I saw how far web browsers had come in enabling web developers to easily create rich experiences for users, and I enjoyed the idea of building things that would wow people. There were two books that were unequivocally the most helpful to me while learning:
HTML(5) and CSS(3) were also getting more complex at this time too, which also contributed to front-end development being a real thing. I didn't buy any books on these topics, but I managed to cobble together a working knowledge of these technologies after subscribing to a few weekly newsletters on front-end topics:
These publications are still going strong and are a fantastic way to get curated updates on what's going on in the field.
I was able to use my newfound knowledge to fix a lot of the issues plaguing the old app, and the intermittent locking up issues went away. Even though there are a lot of frameworks now that make development much easier than Backbone.js does, I'm pleased to have started out with it. I feel like other frameworks provide too much abstraction for a beginner to truly understand what they're doing and how they're interacting with Javascript. Learning Backbone.js first was a great balance between learning the language as well and getting an app up and running.
Silicon Valley and Google
Having lived in Boston my entire life, and now on my way to becoming a full-fledged web developer, I set my sights on moving out to the Bay Area in the hopes of being surrounded by ambitious people, finding a mentor, and developing my skillset even more. My wife and I found a natural transition when she graduated from grad school, and I started applying to jobs. It was my first time looking at new opportunities since I had decided to specialize in front-end development, and because I'd had virtually no guidance in learning this field, I was anxious to see how I'd perform in interviews.
I'd only worked in startups up to that point, but I'd always set my sights on the idea of working for a big company and enjoying free food and other perks, so I reached out to a friend of a friend at Yahoo, who was able to put in a referral for me. I put a lot of effort into my interview and managed to land a job as a front-end engineer on Yahoo Mail.
My tenure at Yahoo was fairly short, however, as a recruiter from Google reached out to me about 6 months after I started. I had always wanted to apply, even when I was still in Boston, but had never worked up the courage. I know it's not a healthy view, but I was fairly content to be someone who had no idea whether he was good enough for Google rather than someone who knew he wasn't. When this recruiter contacted me, I had no more excuses, so I said I was interested and started on a pretty intense interview process.
The interview started with a coding exercise, for which the recruiter encouraged using Google technologies to do. At the time, Google's Javascript framework AngularJS was becoming the most popular way to write Javascript on the Internet, and I'd been wanting to learn it for awhile. I pulled an all-nighter (not done since college) to learn the framework enough to get the project done within the timeframe allotted.
After that, I went on a bit of an emotional roller coaster ride as I went through several technical interviews with multiple teams over the course of three and a half months. Finally, I got the call that a team had been found for me, and I started a job at Google. And I lived happily ever after…
What's next?
It's been a pretty intense journey so far, and I'm excited to see where it continues to lead me. Although all developers need to keep learning to avoid slipping into irrelevance, the web is constantly changing, and good front-end developers, in particular, need to really stay on top of their game to keep up with all the new features that browsers release. This can be quite tiring, but it's also cool to see how else we can be enabled to serve our users even better. So I'm pretty much in a constant state of being exhausted and excited at the same time.
In my next and last post of this series, I'll offer a few final tips for people who are hoping to make this transition, both from my own experience and also the opportunities that I've seen spring up during my few years of doing this. Thanks for reading so far!