Over the years I have gotten a few emails on how to start in web development. It has been incredibly flattering that people have looked to me for that advice, but I have always been at a loss at how to respond. Small pieces of advice constantly come to mind yet I’ve been unsure how to distill it in a way that would be helpful to others.
Then I remembered that one of the beautiful parts of working on the web, especially within Open Source communities, is the help that is available from across the globe. So I sent a few emails and IRC messages out to various friends, colleagues, acquaintances and mentors to ask them what their advice would be for new developers. I have compiled their responses to share and hope that you’ll find a gem or two that will guide you in your journey into a web development career.
Learn how to learn. You simply can’t learn all the things. There is too much. And depending on what train you get onto, there is a chance that the train’s next stop may be it’s last just when you finally started to understand what’s happening. Don’t just learn how to ‘use’ a tool. Don’t get lazy and depend on another tool to do your work for you. Learn the ‘what’ and the ‘why’ and not just the ‘how’. Then you will learn how to think like a developer.
Never. Stop. Learning. The nature of working on the web is that we work in a world that is constantly improving upon itself. There are always new ideas, new techniques, new methods that people are developing. It is important that you always try to improve yourself, and keep moving forward. That being said, do not get bogged down on not always knowing the latest and greatest tools, because nobody has an expert view on everything.
Get a GitHub account and start playing with stuff. Open-source web shops will expect to see (1) code samples and (2) examples of open-source involvement and passion, and a GitHub account can accomplish both.
The best lessons come from trying and asking questions, not from studying or wondering. If you wait until you fully understand the tools and the concepts, you will have waited a very long time to discover that you don’t understand anything. Knowledge is no substitute for experience.
When I first started in web development, I had the opportunity to learn from some of the best game developers in the region, but building kids games didn’t really appeal to me. Instead, I opted to be the one developer in the department who specialised in content management systems, and installing/configuring search engines. More than a decade later, all of the technologies have changed, but I’m still helping clients to store and retrieve content. There will come a point in your career where you’ll need to choose: do you take advantage of the mentoring that’s available immediately around you; or do you pick a completely different field of expertise? There’s no wrong decision, but when you do choose, commit to your decision and learn everything you can about your topic. This way when the tools change—and they will—you will have the necessary experience to transfer your learning and keep right on going.
I think a core tenet is to start small, very small. Start with the smallest possible thing and build on that; no matter what you are working with. I also think having some sense of history is helpful. I usually have new people code a simple page in tables with inline styles before ever touching css, just so they can get a sense of why we use css and how things have progressed over the short time we’ve been building things on the web. It’s also helpful for modern things like tabular data and email formatting, so it’s not a totally futile exercise as some people would tend to believe.
A good work/life balance is essential. The best developers I know are well rounded people, and the only way to become a well rounded person is to have a personal life. There will always be firefights that will require you to work overtime to get a project out the door, but 80 hour weeks should be the absolute exception, not the norm. Burnout is a real thing; if you work somewhere that doesn’t afford you a good work/life balance, consider finding somewhere that does or risk hating your job and watching your life pass by.
New and shiny is cool but don’t burn yourself trying to stay on the bleeding edge.
I agree with Brad Frost on the “always invest in your own personal website.” Have a project thats your own that you care about where you can try all the things and that you’ll maintain.
Oh! And I think its good to have a mentor. Someone you can casually ask questions to every day, and take advantage of that. Work somewhere where you get that or make a social circle online that can support that.
I tell everyone to start with vanilla everything (no frameworks or libraries), so they understand what is happening. Spend full days on html, then 2 full days learning basics of css. You’ll be 75% of the way there, and it will then take another… well, I’ll let you know how many years to master, but I’ve been at it for 15 years.
Another thing to include is the basic tooling. I am not talking about Bower, Grunt or Yeoman, but rather git, command line, ftp, setting up your development environment, localhost setup, development tools, view source, etc.
Stay honest, open, and curious.
Honest: Don’t be afraid to ask questions. Personally, I often get frustrated because I set these ridiculous expectations for myself that I’m supposed to be on par with people who have much more experience. And it makes me self conscious because I don’t want to sound stupid or want them to think I don’t know what I’m doing. But admitting your flaws is the best way to learn. It’s okay!
Open: Don’t be afraid of criticism— in fact, embracing criticism is the best thing you can do as a developer. Allow yourself to objectively accept that your solution isn’t always the best and be grateful when someone takes time out of their day to tell you why.
Curious: Curiosity is your best friend. Do the research, play with code, and make things for fun. There is such a joy and thrill you’ll find in just making random stuff that will keep you excited and interested. Spend the time outside of work playing and building, and you’ll always find more to learn and do. You’ll never get bored.
Build something. The only way to get started is to start — and your best bet is to take on some kind of project that you care about, and try to make it happen. It could be something totally personal, or something for a cause you believe in, or something you and a friend think is really cool. Buy that domain name and start hacking.
Try to keep it small for starters. Try to move quickly. Feel free to throw things out and start over. Focus on getting something working end-to-end. This will give you a perspective of “the full stack”, all the interdependent layers that go into delivering an actual/factual customer experience.
After that experience, you’ll probably have an affinity for some part of what you built. Follow that. It’s not possible to master everything initially, but if you focus on the most interesting problems, the most enjoyable challenges, you can probably get pretty darn good at some piece of web development, which will make you a hugely valuable member of a team.
Finally, don’t loose the end-to-end perspective. Understanding how browsers make requests, how those requests are routed, and how responses are delivered is the most vital piece of context for a web-developer. Having a firm grasp of this foundation — the underpinnings of every user experience — is more important than any algorithm or specific language or technique.
One of the best things about working in open source is being able to — and not being afraid to — read source code. Even if you don’t understand everything you’re reading, you’ll be exposed to design patterns, you’ll be able to ask other developers questions about decisions they made, and in general you’ll start to see how larger projects are architected.