I started learning web development about three years ago. Many programmers and web developers that I have met started learning at a young age — high school or earlier. I, on the other hand, decided to start learning the web from scratch in 2012 after I had graduated from college. I always had an interest in computers and tech, but throughout my institutionalized academic career my passion was for physics and mathematics. So I had never even written an HTML tag until I started self-teaching.

I was quite lost when I started my self-education journey. I thought about going back to school for a Computer Science degree but literally 0% of the professional programmers I spoke with recommended this path. Most said that while it would definitely be educational, it probably wouldn’t be worth the cost or time it would take to complete. Many degrees focus on theory rather than practical application, and since I was primarily interested in the web, I was worried that this specific topic wouldn’t have a big enough role in an all encompassing Computer Science curriculum.

So where to start learning?

I asked my professional back-end developer friend how he had learned. He said something like, “I’ve been coding for over 10 years”. I tried to get him to be more specific, and he said that I should really know my way around a database. So I spent a day or so writing SQL statements and taking notes about relational databases.

I next talked to a professional WordPress developer about my ambitions. He explained the difference between the front-end and back-end and suggested I pick a specialty. I had interest in both but decided on the front-end. I started to learn HTML, CSS and JavaScript through CodeAcademy. I completed all the exercises within a few days and felt pretty big-headed. This stuff is easy!

I heard about an all-day continuing education class in front-end development at the university for about $500. There were several other courses that built upon this one that I could take in the following weeks, as well. Although I had really liked CodeAcademy, I craved some structured learning and signed up. The course, while not bad, was not worth the money. I had done enough googling — for free — in a few days that had surpassed the entire course.

Jeffery Way gave a fantastic interview in which he said the following:

What’s particularly nice about online education is that it can be anything you want it to be. While traditional schooling has a tendency to force lesson plans (which I’ve never been a fan of, considering the price tag), when it comes to the online world, you’re in charge. You choose the path. Do platforms like Tuts+ disrupt the traditional medium? I’d say the answer is a big fat yes. As I tweeted not too long ago, at this point, I can’t imagine an environment where I’d find myself recommending to my future child that he or she should attend university. Perhaps there are merits to the social aspect of college (questionable, though), but, beyond that, I see it as little more than an excellent way to start your life with masses of debt. If your goal, specifically, is to develop for the web, then the answer is even more obvious. The best education on the planet in this sphere is not exclusive to a cold brick building. It’s widely accessible for free around the web. We’re very fortunate that our community (web development) is so incredibly open about documenting their trials and experiments.

I continued to self-learn for a few months, using resources like Team Treehouse and CodeSchool. I built a few demo sites with my front-end skills and a little PHP. At this point, I thought I was pretty knowledgeable and decided to test the waters and apply for some entry-level jobs. I was offered an internship which I accepted with relish. On my first day they wanted me to de-bug a broken web application built in a PHP MVC framework. I quickly decided to seek and accept a more front-end friendly position. Long story short, in that position, I ended up taking more phone calls than writing lines of code.

I am grateful that these firms gave me opportunities. Internships and entry-level positions are wonderful things, but in my odd, specific case, they truly were not good fits. They did, however, teach me that I was still an extreme beginner.

In the same vein, sites such as CodeAcademy, TeamTreehouse, and CodeSchool are fantastic resources, and I am still a dedicated paying member of each of them. However, you can ace their various “Become a Web Developer” tracks and still be a complete novice. This is obvious to an experienced developer, but to a beginner, it is not as clear. I see posts all the time on r/webdev along the lines of, “I did x, y and z. Could I land an entry level position?” The fact is, for beginners in this field, it’s hard to know. It’s not like other professions where you go to college for so many years and come out knowing what you need to know.

After these brief positions, I buckled down and continued my self-education. I practiced every day and learned Git, the command line, CSS preprocessors, JavaScript task runners, HTML5 APIs, WordPress, etc.

There is a lot of trial and error. And you know what? While it is daunting for newcomers, this aspect is by far the most beautiful thing about web development and programming.

Cecily Carver wrote an excellent article entitled, “Things I Wish Someone Had Told Me When I Was Learning How to Code”. I highly suggest reading it if you are a beginner or otherwise. She says the following:

It never works the first time. And probably won’t the second or third time. But this experience is so common for programmers of all skill levels that it says absolutely nothing about your intelligence, tech-savviness, or suitability for the coding life. It will happen to you as a beginner, but it will also happen to you as an experienced programmer. The main difference will be in how you respond to it. I’ve found that a big difference between new coders and experienced coders is faith: faith that things are going wrong for a logical and discoverable reason, faith that problems are fixable, faith that there is a way to accomplish the goal.

The first time I ever tried to write a PHP program, when I went to refresh the page, there was nothing there. Just a white screen. No error message — no nothing. I didn’t know how to properly de-bug so I sat there, sans teacher, staring blankly at a blank screen staring back at me. Cecily describes a similar situation with her first C++ program.

I had always been a “smart kid” in school and could get the highest grade in a differential equations class, but I had never felt as stupid as when I was first learning web development and trying to move a box around in CSS.

Over time, you’ll encounter the same problems that you’ve already dealt with in the past. For instance, the first couple times you encounter a CSS clearfix problem, it is a maddening experience. The 300th time, you don’t even think about it.

If you want a career in web development and programming, then you need to reject giving up. You must remove it as an option entirely. You must accept that you will fail again and again, but there is a reason why and you can fix it and you can do better the next time. When you finally solve an issue, you may feel that since you struggled so much with it, you are actually a fraud and not worthy of celebrating your accomplishment. This is a real psychological phenomenon called imposter syndrome. However, it can be overcome.

At each failure and each accomplishment, your determination, confidence, and skill-set grows until you can reasonably say, “I actually kinda know what I am doing”. This is not something that you can see in the moment. It’s the result of putting in work every day for a long time and then looking back on a week, a month, a year, and seeing your improvements.

Then, over time, you begin to be less concerned with getting something working and more concerned with getting it working well and in a state that can be maintained.

As the oft-quoted Douglas Crockford likes to say in his talks:

I used to think that everybody should learn programming when I first started learning it and thinking about how to organize the world in terms of data structures and algorithms. I thought wow, this is such an amazing way to organize information — everybody should learn to do this. I don’t think that anymore. I think there has to be something seriously wrong with you in order to do this work. A normal person, once they’ve looked into the abyss, would say I’m done, this is stupid, I’m going to go do something else. But not us, because there’s something really wrong with us.

Not only is constant failure on the agenda for a career in web development, but constant education as well. One of the reasons a four-year college program in web development would be problematic is that it would have to be constantly re-written. Around 2010, responsive design changed the game. In 2012, CSS Animations were introduced. The last HTML5 revision was finalized in October 2014. The official publication process for ECMAScript 6 is slated to be finished in June 2015.

More recently, developer bootcamps like Hack Reactor and Hacker School have popped up as modern alternatives to standard schooling. Dev bootcamps provide coders with an exceptionally stimulating experience — to engage with like-minded individuals who love to learn. These bootcamps offer intense three month periods of training and mentorship. However, most are not for beginners. They are meant to bring intermediates up to the expert level.

This is not a field where you can learn a skill set and then sit back and coast for the rest of your career. You have to stay up-to-date and continually adapt to new technologies. You have to be able to teach yourself. It’s not just a style of learning but a fundamental part of the deal.

I was talking once with a medical doctor who was frustrated that one of his co-workers refused to learn the new digital way of record keeping. His co-worker’s argument was that he had been doing it the same way for so many years and his way wasn’t broken so why fix it? While I understand that some people have an aversion to all things digital, I think that being able to embrace change is a good quality to have. Web developers must have this trait.

I am honored to be part of the web development community because it is full of tough people. It has taught me so many skills that I can apply away from the keyboard. It is full of people who want to help and inspire others. They write about what they know on their blogs, openly share what they create on GitHub and CodePen while encouraging others to use it, and answer questions that others have on stackoverflow. It is an open and welcoming community for all who want to contribute back to it.

If you are looking for resources to get started in front-end development, I recommend looking at front-end dev bookmarks.

Leave a comment below and follow me on twitter: @QuintonAiken