It seems like every tech event I go to these days includes at least one conversation with someone trying to change careers and move into development. It’s not surprising. With practically 0% unemployment, ballooning salaries, and work from home flexibility, a career in tech looks a lot more promising than a lot of careers people find themselves in. While the path these people are going down can be intimidating and difficult, it’s at least somewhat predictable.
I find myself giving the same advice to so many aspiring developers that I think it’s worth writing it down, both for their sake and mine. If you’re reading this article, then I’ve probably met you at a recent event or talk. I wish you luck and I hope you find this guide useful.
First, Decide What to Learn
Before you can figure out how to learn, you need to decide what you’re learning. “Programming” is an incredibly broad topic and if you don’t focus, you’ll run out of drive by trying to cover too much ground and changing direction too frequently.
I’d recommend allocating a fixed time to survey the field before making a commitment. Do a few online intro courses on Treehouse to get a feel for topics like front end web development, back end web, mobile dev, data science, devOps, and see what speaks to you. I also highly recommend finding professionals on LinkedIn who have jobs in these areas and talking to them about it.
In the end, which area you choose isn’t terribly important. What is important is that you make a commitment and have a reasonable argument as to why you’ve made that commitment. You’re going to use that reasoning to help you choose which courses to take, which articles to read, and which influencers to follow. You’re going to use it with employers and potential mentors to help them understand how to help you. You’re also going to use it on yourself to help you stay the course when things get hard and self doubt creeps in.
That said, most new developers seem to start with front end web development. It could be because it’s the most accessible. The community of developers writing code for the web is vast, the learning resources are plentiful, and the tools are forgiving. It’s also easier to get an entry level job in this area since there’s a lot of low risk maintenance work out there doing things like putting up marketing sites. It could also be because new developers find it more satisfying to build applications they can see than they do building a command line tool.
This isn’t to say that front end is the only choice. It’s an easier on ramp, but it’s also a more crowded field for entry level talent. Take a look at back end technologies like .NET, Java, Node, and Python for another point of view. DevOps, InfoSec, and data science are also really hot topics that could instantly set you apart from the crowd when you’re looking for a job. If you need any proof, just change your LinkedIn headline to “DevSecOps Developer” for a day and see what happens. Specializing is an especially good option if you have a professional background that’s relevant to one of those fields. For example, if you have a background in math or statistics you may consider data science. It helps tell a richer story.
Set Expectations with Yourself
The #1 reason people fail to make the career transition into development is that they give up too soon. They get frustrated when they don’t understand some technical concept and start questioning whether or not they’re “built for this”. Ultimately they tell themselves that they are “putting things on hold” while they pursue another opportunity, but they’re really just giving up.
You can avoid this pitfall by preparing yourself for the length of the journey and the emotions you’re going to encounter along the way.
As far as timeline, it takes at least 8–12 months between when you decide to learn to code and when you’re potentially employable. You can work harder to accelerate that timeline, but don’t expect your elbow grease to work magic. Learning to code is about re-wiring your brain and thought patterns. That kind of change takes calendar time, not brute force.
You’ll stare at code for hours and still not understand it. You’ll go to sleep, think about it all night, wake up in the morning, and BAM!… still not understand it — Until one morning, you do. Don’t rush it. Push too hard, and you’ll just get frustrated and burn out. Instead, methodically beat your face against that wall until it breaks (the wall, not your face).
As far as emotions, the #1 thing to watch out for is imposter syndrome.
Impostor syndrome is a psychological pattern in which an individual doubts their accomplishments and has a persistent internalized fear of being exposed as a “fraud”
While you’re learning, you’re going to feel like a fraud (98 and 3/4 % guaranteed). Learning isn’t easy. When you run into concepts you can’t wrap your head around, you’ll find yourself saying things like “I’m not built for this”, “I’m not good with computers”, “I’m not a developer”, and “This is hopeless”.
That’s perfectly normal. It’s well documented that even very senior developers experience imposter syndrome. No matter how much you learn, you’ll always feel like you don’t know what you’re doing. Being a developer is about learning new things, and learning new things necessarily involves not understanding new things. It’s just a fact of life, ignore it and move on.
Another feeling you should prepare yourself for is your brain hurting. Continuously racking your brain on programming logic puzzles can get tiring and uncomfortable. That uncomfortable sensation is just your brain growing. Treat it like physical exercise. You need to work in sessions, take breaks when you’re tired, and give yourself time off. Changing attributes of your brain is no different than changing the attributes of your body. If your head is spinning, don’t try to power your way through the session, just walk away and come back to it when you’re rested and focused.
Learn. Do. Network.
So you’ve decided what you’re going to learn, and you’ve resigned yourself to feeling like a dumbass for the next 12 months. That’s a great start. Now you need a strategy.
In order to break into any new field, you have to consistently perform activities in three categories: Learning, doing, and networking. You need to intentionally learn new things, make it real by applying it, and build a support network that’s going to help you succeed. You do all three of these things concurrently.
Start by brainstorming a list of activities you can do immediately in all three categories. Think about which classes you can take, small projects you can do, and anyone in your network you can start talking to. Color code and block out time on your calendar each week to make sure you have scheduled activities in all three categories.
New developers often make the mistake of only focusing on learning, signing up for an online course or bootcamp and leaving it at that. They think that they can’t do the other things until they know “enough”. This is an easy trap to fall into because the other two activities both seem to involve the risk of public failure. While that might be true, the risk of avoiding those activities is much greater.
You don’t want to wait to network until you’re looking for a job. It’s much easier to build a real relationship with an industry professional when you’re just looking for advice than when you’re making a big ask. Relationships take time, so start them early. Make sure to put together a list of open ended questions you can ask the people you meet with. For example, “How did you get started in development?”, “What makes a successful developer?”, “What’s the hardest part of your day to day job?”, “What are you learning?”, “What are some companies doing interesting work in the area?”, “Who would you recommend I talk to?” etc.
On the “Do” front, it’s important to start a personal project as soon as you can — Even if it starts as just a simple html page. Bootcamps and online courses will give you assignments, but they’re no substitute for an open ended project that you’re driving. A personal project doesn’t have a reference textbook answer or an instructor to bail you out. You’re likely going to push yourself to solve more problems than you’re capable of, which is a good thing. You’ll get lost, feel the pain, and drive yourself to learn new concepts to solve the problems you’ve created. This is a natural cycle in development.
To Bootcamp or Not to Bootcamp?
Depending on where you live, there’s between 2 to 20 coding bootcamps that offer code immersion programs to transform you from Melting Pot waiter into “Full Stack Ninja” in just under 12 weeks. If you’re in the Charlotte NC area, Tech Talent South and UNCC’s Bootcamp are probably the most popular.
A lot of aspiring developers I meet struggle with the decision of whether or not to pony up between $3k and $10k for one of these bootcamps (That’s a lot of fondue). Are they worth it? Are they a scam? Can I do this on my own? How much am I really going to learn?
Bottom line: Do the bootcamp (but not for the reasons you think). If you recall, the reason most people fail isn’t because they can’t learn, it’s because they quit. You’re much less likely to quit early if you laid down several thousand dollars to be there. Also, seeing other people around you struggle with the same concepts as you staves off self doubt and reinforces the fact that what you’re feeling is perfectly normal.
Bootcamps are a great way to bootstrap your network too. Students you meet will one day have jobs, and be in a position to hire you. Professionals you meet can become life long mentors. The code school itself might hire you to TA or teach a class one day.
It’s (almost) never too early to establish your online presence as a developer. You want to focus on LinkedIn, GitHub, and possibly a personal portfolio site.
Start by changing your headline on LinkedIn to the job title you want to hold (e.g. “UI Developer”). Just because you’re not currently employed as a developer, doesn’t mean you can’t be one. Your LinkedIn profile isn’t a resume, it’s there to tell people how you can be of use to them. Answer that question clearly.
Do NOT use the word “Junior” in your title. If readers are asking how you can be of use to them, using the word “Jr” is like answering, “I don’t believe I’m useful”. It’s better to say you’re a developer and let the reader determine your level of experience from your career history.
Next, check out your Github profile. Developers and recruiters who scratch just below the surface, will look at your Github profile to determine your interests and activity. Luckily, it’s pretty easy to make your profile pass at a cursory inspection. Spell out your skill interests in the bio. Go star and watch a few popular repos in your technology area of interest. Follow a few influencers. Not sure who they are? Start with the people teaching the video course you’re taking. In a matter of a few minutes your Github presence can be good enough to pass typical inspection by a recruiter or lazy hiring manager. To have a legit Github profile though, you’ll need to contribute to open source. More on that later.
Finally, there’s the personal portfolio site of projects you’ve done. Most bootcamps tell you to create one of these, but I think they’re overrated. Almost every front end bootcamp grad has the same mediocre portfolio site with similar projects on it — a twitter clone, something something Google map, list of music from some API, etc.
As a hiring manager, I don’t spend a whole lot of time looking at them. Unless they are really outstanding, they don’t tell me much about whether or not someone is a good developer. The projects are usually half baked, out of date, and don’t reflect someone’s best work. I get a better understanding of someone’s skills by looking at their project’s code and commit history on GitHub than I do by inspecting the pixels of its deployment.
Contribute to Open Source
The activity whose value new developers most often underestimate is contributing to open source.
A really unique aspect of a career in software development is that no one has to give you permission to do it. Unlike doctors, lawyers, architects, accountants, or just about any other skill career, you don’t need to be accepted by an educational institution, certified by a board, or even be offered a job in order to practice your trade. All it takes for you to become a developer is to be able to do it.
Right this second, you actually have a job offer in hand from millions of companies. They have projects waiting for you and can’t wait for you to get started. It just so happens that these “companies” are on GitHub and your job pays $0 without questionable benefits.
Before you decline this generous offer, think about the opportunity it holds. You get to work with the world’s most talented developers on projects in any technology area you want. You’ll learn how to work in a team environment — discussing issues, learning branching strategies, getting code reviews, and more. You’ll learn new coding techniques by reading other people’s code. Best of all, you’ll build a network of developers across multiple companies and countries. Those developers are all hiring and if they like working with you on Github, they may also want to work with you at their company.
To put it another way, imagine you’re trying to become a professional soccer player. Taking coding classes and doing solo projects are like learning to run and kick the ball. You can get really good at those things, but they won’t make you a soccer player. If you want to be a player, you have to play the game.
As a coach, there’s nothing more compelling than seeing a player in a game situation. As a hiring manager, there’s nothing more compelling than seeing a developer demonstrate their ability to work on a complex project in a team environment. Dealing with other people’s code, discussing technical solutions, handling feedback, managing branches and conflicts. These are the things that you’re actually hiring for. Too many developers send hiring managers videos of them running the 40 and bending it like Beckham on an empty field. If you want to get noticed, jump into GitHub and get in the game.
Play the Long Game
It’s a difficult path, but you’re doing the right thing. Even if you don’t see yourself as a career software engineer, learning how to code is worth the investment. Most of the biggest names in the tech business — Elon Musk, Bill Gates, Jeff Bezos, Mark Zuckerberg, Larry Page and more, started their careers writing code.
A few years in the trenches and you’ll get a much more realistic understanding of how things really work. The experience will not only make you a better coder, but a better product manager, designer, and entrepreneur. Play the long game and you’ll be positioned you to take advantage of the digital economy for the rest of your life.