New web developers have it rough. They come from a variety of backgrounds, often non-technical. They’re trying to learn the basics while they’re swimming upstream against a steady flow of changing technology. They often have to learn outside of work since there isn’t much demand for folks with less than 3-5 years experience (at least that was my experience).
When you’re learning web programming, it’s hard to evaluate how things fit together. Everything is on an equal plane called “new things” and you can’t tell which of those new things are fundamental principles and which ones are unique to your workflow, your toolset, your training, or your environment. For example, we all know that HTTP is really important, and Dreamweaver isn’t. It sounds funny to even compare the two. But when I was new, I could built websites with Dreamweaver and put them online without having to think about HTTP. What seems more important when that’s all you know?
By confusing the fundamentals with the trivial parts, you end up with knowledge that teeters precipitously on your tool stack. Picture a content editor who has worked with the same CMS for the last 8 years. They may know all the intricate details of that setup, but all it takes is a new environment, and everything they knew is rendered useless. You get your own version of that when you’re just starting as a new web developer.
I started out by building static websites using front-end development techniques. It’s a natural first step. The first time I tried programming server-side code, I was at a complete loss of how to troubleshoot bugs. Whenever I got an error, all I could do was look closely at my code and try to find something wrong with it. It’s not like I didn’t understand the principles around isolating variables, or breaking down problems into small pieces. It didn’t matter that I had an engineering degree, or that I could approximate the integral of a function using an infinite series in C++. This wasn’t Microsoft Visual Studio, and I wasn’t printing the results of numerical approximations to a terminal. I was swimming in a pool of newness without any reference points. I felt slow and stupid.
Over time I’ve learned that the solution is to get a wide variety of experiences. Work on a few different projects. Work with different teams of people. Learn four different programming languages. In doing this, you’ll start to notice which parts are consistent across your experience and which parts come and go. You start to see how everything fits together, and you can extrapolate knowledge from situation X and apply it to situation Y.
But how do you get a range of experience when you have no experience? Anyway you can.
Ideally, you can get in a situation work alongside some other people who are willing to help you. I was fortunate enough to line up something like that. If you can land an internship with a good mentor, that can work really well.
But you still have to fight through some simple issues the hard way. You’ve got to figure out that ugly process of trying to set up local development for the first time. You have to face your command line fears. You have to spend a weekend just trying to get Sass running. You have to ask questions that make you feel dumb. And you have to just keep doing this stuff, trusting that it’ll get better (don’t worry… it does).
To be clear, this isn’t just a web developer issue. Is a noob issue. Grandma experiences the same thing when you update her computer and she can’t check her email anymore because the icon she used to click on the desktop isn’t there anymore. It isn’t her fault. She hasn’t had that range of experience that would help her know where else to look.
Go easy on people who are just starting out… it’s hard being new.