Become a full-stack developer in 2 Years: Why CodeAcademy is just one of many shortcuts you'll need to take

Today I emerged from a 30-month bender. At the outset of this period, I was an econ student who couldn't code and had never used Photoshop. I had never touched HTML or CSS, let alone JS, Ruby, Python or Objective-C--and I still don't know how to CC or bCC my emails. In short, I was every bit as non-technical as you believe you are right now. Today I'm a full stack web app developer.

Here is my recap of what I've learned going from non-technical to building and designing web and iPhone apps from top to bottom in two years, and why I wouldn't have done it any other way.

2.5 Years gone by

Over the last two and a half years, I've spent every day and every night thinking about apps. Whether at startups under full-time positions, coffee shops or a standing desk in my bedroom, I've devoted practically every waking moment to improving my dev skills or borrowing from related disciplines (of which I've found many!) Needless to say, I don't believe you can learn to code and design apps while moonlighting a full-time job (unless that job is as a developer), and while it's a great start, I don't believe CodeAcademy is a fast track to building web apps.

Though it's technically been about 30 months since I first hounded a friend to teach me what HTML was, I would say 2 years is sufficient to learn web development. The last six months I have spent improving my web skills and delving into iOS.

Here are some of the things I've worked on: Link.

And here is a summary of the "Do's" and "Don't" I describe throughout the remainder of this post. If you have any questions you'd like me to address specifically, please email or Tweet at me: davidhollandlee@gmail.com // @hollandale.

2 Years because there are more shortcuts than you can shake a stick at

I'm not opposed to shortcuts. But unlike most other types of CS or programming, in web development there are more shortcuts than you can shake a stick at. You learn to code through trying them all. If you want to learn to code an app from end-to-end, you'll have to spent endless hours devouring all the shortcuts, tips, tutorials, books, screencasts, meetups, support team exchanges and question-and-answer sessions you can get your hands on--the aggregate of which is hardly a shortcut. The landscapes of modern web and mobile development are so vast that learning that one time-saving MVC framework your friend told you about will only get you a percent of the way there. Believe me--completing that Javascript level on CodeAcademy will not make you a web developer. You'll still have no idea what HTTP is, how to build an API, how to deal with network latency, how to handle errors properly or how to debug a production-quality app. You'll lack context, comparable solutions and counterpoint.

Take cross-browser compatibility, for example. Because the internet evolved so recently and rapidly, its purveyors and architects hardly had time to standardize box models, CSS selectors and attributes, or shadow and text stylings. Indeed, most of the time they were competing to provide contrasting options. As a result web developers, who may have had formal CS training, had to set aside strict expectations about how a language or paradigm was supposed to work, and resort to a tedious trial-and-error methodology of testing identical code on each browser they wanted their app to support. There was no manual or textbook on this stuff. Not even the developers at Microsoft, Mozilla or Google could tell you all these quirks across browsers, because their knowledge was concentrated on their own browser! In fact, Quirksmode is a resource developed by an amateur developer over the course of several years as he and his peers slowly discovered all the odd differences in positioning, and rendering of HTML/CSS across IE, Safari, Chrome, Firefox, Opera, and others. It is now the Bible for cross-browser compatibility questions. Web developers today learn new techniques every time they open their laptops, and harness this mental repository of shortcuts in every app they build.

Should you learn Rails or Django? I usually tell beginners to learn both so that they have a better understanding of how to use Node.js when they finally convert to it. Though both Rails and Django have become known as the all-encompassing magic pills for developing lean, agile app prototypes and MVP's, they are both just one piece of the app. If you want get real users on that Rails app, instead of lying around on your localhost where only you can use it, you have to learn about semantic HTML, cross-browser CSS and JS, non-jQuery JS, HTTP requests and responses, hosting options and deployment procedures, bug-fixing both server-side and client-side, relational database configuration and management, and log monitoring for when you actually have traffic 24/365.

Shortcuts are great! They're what make the best developers stand out, and web development is all about assembly elegant, clever, uncharted solutions to problems. But to think that there is a single shortcut or a set of books that will prepare you for . At the end of the day, it's about practicing religiously and getting your hands dirty every day in code. Keeping your eyes peeled on Hacker News, NetTuts, Smashing Magazine, Treehouse and other learning resources for new libraries and plugins is a must. Even identifying and studying poor examples, incorrect answers and anti-solutions helps crystallize your understanding of a web topic. Indeed, there are many correct ways to do things in web development, but more often there are good solutions that fit the task for a period of time, but are eventually deemed bad solutions in the face of new discoveries and design patterns.

2 Years to leave time for bad advice, random exploration and mistakes

Like most things, learning web development is not a straight path. Despite what various education services claim, there simply isn't one course or tutorial site you can devour as your sole source of information. Given how important context, design pattern recognition, and competing schools of thought are in learning how each piece fits together, two years of diving into one language, library, framework or Photoshop tutorial after another is about right for becoming a full-stack developer. Could you cram it into a year or 1.5 years? Yes, but you'd be relying on the serendipity of coming across bug-free libraries with perfectly-ordered version numbers and dependency considerations, infallible, thorough tutorials, updated API documentation, and understanding all of it on your first read-through. And even then, you will have mastered one design aesthetic, familiarized yourself with one MVC framework, and become proficient in code design pattern--all of which is likely to change within the next six months, and even more likely to fall short of your app development task at hand.

Many folks I encounter who are learning to code these days are well-trained business or law professionals who are used to learning from textbooks indoctrinated by venerated professors. By contrast, mastering the realm of web technologies is less like being a doctor, and more like being mechanic. There is no single textbook that encapsulates it all, and the best technologies out there have been peddled and produced by self-taught amateurs--not professors. More likely than not, the answers to your programming questions will not come from an office hour or TA. It will come from the fourth page of comments on a horrendously-designed programming support site by some anonymous user halfway around the world. The answer will come in broken or illformed English, and your only form of validating his/her answer? Trying it your damn self and seeing if it works as claimed (the broken-English answers are usually correct!). More than half the battle is learning from your peers where a specific technology fits into the stack, why, and whether it is necessary or replaceable by a different combination of technologies. It's about developing a birds-eye view of the stack.

Mistakes, curiosity and random exploration also introduce you to new perspectives, design patterns, styles of coding, and schools of thought. Personally, I grew far more from seeing a pattern I had used and grown comfortable with be completely debunked by a better alternative I discovered, because I had familiarized myself with the shortcomings and unexplained foundations of the former. It's far too easy for someone to just tell you the "best" library for a task, use it, then neglect to read the documentation and stay up debugging all night when shit finally hits the fan.

2 Years to establish a unique value-add: 1 Coder + 1 Designer ≠ a great Web App

I wouldn't call myself a programmer nor a designer. I build apps and teach myself whatever I need to push a certain product.

I design and build all my applications from scratch. I create the Photoshop assets, the front-end JS code, the backend code and API, the database architecture, I manage the hosting (with help from my favorite libraries and services), and if I'm building an iPhone app, I write the Objective-C as well. Am I an expert in any of these domains? Lord no. There are true-blooded hackers out there who've been doing it since the crib, to whom we owe the world for building the open-source libraries we all use, and for answering our awful questions on StackOverflow or IRC. However, I have developed an intangible that specialized experts often lack--the ability to envision a product with character and execute a prototype of it very quickly. Had I spent one year learning to design then one year learning to code, instead of two years doing both at the same time, my design skills would lack user empathy, my programming skills would lack context, and my web apps would be dull. Learning both skills at the same time informs one of the other.

Building apps today is not about being the most technical programmer around, or knowing the most obscure patterns and language features by heart. It's about being a generalist who can quickly pick up a new pattern that she doesn't already know, and draw references from other projects she has done in the past. How do you simulate inheritance in Javascript? Borrow from your knowledge of objects in Python to compare prototypes in Javascript. For better or worse, flexible database systems, and SAS hosting platforms have made it easier to prototype and deploy apps that can support more than enough traffic to get you to an investment round. The speed of one language vs. another or the strict adherence to proper object-oriented architectures is no longer critical. So long as you can Google shit and borrow code snippets from StackOverflow, you can spend your time thinking about what really sets your app apart from current offerings. Worry about scaling when you get that nose-picking app to a million users.

Moreover, the value of building an entire app when you're learning to code is that you force yourself to find a solution when otherwise you would kick the can down the road. If you want to create a dropdown menu a certain way, you won't put it off for another day, or convince yourself you have a good general idea of how to do it if/when you need it. No--your UI designs already include it, the purpose of your app necessitates it, and you've already pushed a thousand lines of code related to it. You will find a fucking solution before you go to bed, or Google til you discover some interesting alternatives--all the while learning three new Javascript functions, two new ways to iterate a collection, and the differences between "event.preventDefault()" and "return false". That's how you learn web technologies.

Two years may seem like an eternity when your idea is ripe and your marketplace is quickly being discovered by competitors. Nevertheless, it goes by in a flash and it's all doable. The technologies are not very hard to learn, they're just vast. So save up some money, quit your job, trade in your expensive drinking habit, and hit up CodeAcademy and many more resources like it.

ABOUT

Born, raised in, and working out of San Francisco, I am an app developer and UI | UX designer.

I spend a lot of time experimenting in the browser with the latest agile dev technologies, including RoR, Django, and recently Node.js. I have also worked with iOS devices and enjoy designing for the mobile web.

Though I've worked with individual clients at times, I am interested mainly in startups and consumer web, where I have production experience.

Reach out and get in touch!

DESIGN

  • ATSHOPR

    "We connect buyers to sellers on Twitter."

    WEB / APP RESTFUL API PYTHON PHP MYSQL DOTCLOUD TWITTER/ API OAUTH

    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
  • ICONS

    Hand-crafted in Photoshop and, begrudgingly, in Illustrator

    PIXEL / PERFECT 16x16 32x32 48x48

    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
  • GRAPHICS

    Graphics optimized for web and mobile devices

    ADOBE CREATIVE SUITE

    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
  • TYPOPHILIA

    Lover of type
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
  • UI | UX

    Web and mobile interfaces optimized for cross-browser/cross-platform performance, and according to W3C best practices and standards
    • exhibit_image
    • exhibit_image
    • exhibit_image
    • exhibit_image
MYAIRLINEFUCKEDME.COM

ANGRY AIRLINE TWEETS AND OTHER FUNNY AIRBORNE COMPLAINTS

CAPPST.COM

FIND APARTMENTS AND ROOMMATES IN SAN FRANCISCO

PVSH

"IT'S LIKE QUORA WITH PHOTOS"

DEVELOPMENT TOOLS

  • Languages
  • Python

  • Ruby

  • Javascript

  • SQL

  • Frameworks
  • Node.js

  • Django

  • RoR

  • Backbone.js