Changing careers isn’t easy. I have a lot of respect for people who can learn a completely new discipline later in life and become a professional in that field. When I tried to become a professional programmer, I had several advantages going in. It still wasn’t enough.
Programming isn’t a least-resistance path to a more secure, better-paying, work-life balanced job. It’s a difficult occupation that not everyone is well suited for. If it were easy, everyone could do it—and then it wouldn’t be as valuable.
That’s not to say basic programming is hard. It’s an exciting rush for just about anyone who completes a few free programming lessons online. That experience might lead you to believe that with just a little extra instruction, in the form of a three-to-six-month coding bootcamp, you can become a professional developer. But that’s rarely the right approach—or mindset.
There are vast numbers of free and low-cost resources available to teach yourself programming online. Educating yourself and building a portfolio without a degree in computer science is absolutely doable, professional developers say.
But before you jump into a bootcamp that will separate you from your hard-earned money, there are several caveats you need to consider. That’s the focus for the initial sections of this article.
There’s also a lot of noise around the question “How do I become a coder?” This article removes a lot of the bad, time-wasting advice and will make you more aware of what challenges await you if you’re trying to become a professional programmer.
Instead of another list of things to do, you’ll learn what not to do, which is equally important.
Bootcamp placement numbers can be misleading
TechBeacon has previously conducted a review of coding bootcamps, gathering details about 24 programs. The findings showed that 17 of 24 programs claimed that 90% or more of their students got full-time programming jobs or freelancing positions within six to 12 months of graduation. But those numbers can be misleading.
Course Report, a site that hosts reviews and resources for coding bootcamps, has conducted student surveys (with over 1,000 respondents from many reputable, in-person bootcamps) for the past three years for its annual Alumni Outcomes & Demographics Study.
The 2014 report claims that no more than 75% of graduates of coding bootcamps gained employment as developers after graduation. In 2015 that number dropped to 66%. For 2016 it jumped back up to 73%. By the 2018 report the number had hit 78%.
Not all bootcamp attendees are starting from scratch. Some aren’t there to get a developer job, and some students are already professional developers who are just trying to acquire new skills. While the study doesn’t say who went from “zero to developer,” the surveys do cast doubt on many programs’ 90% job placement claims.
Quality complaints are common
It’s not hard to find a litany of bad bootcamp experiences online. You can find plenty of positive reviews as well, on sites such as Course Report, but people considering bootcamps may not hear as much about negative experiences.
Graduates cite several reasons for this. For example, they may not want to devalue something on which they spent so much time and money, or they don’t want to get into a confrontation with the bootcamp provider after posting a negative review.
Many of the negative reviews that do get posted are criticisms of individual instructors. Basel Farag, an iOS developer with experience as a bootcamp mentor, admits that finding good teachers is hard. “You don’t get paid much, so you have to really love doing it,” he said. Although several schools have highly qualified, well-paid teachers, many bootcamps fill teaching assistant and mentor positions with less-experienced developers, he said.
The practice of bootcamps hiring their own graduates as mentors immediately after graduation is widespread, Farag said. Not only does that help to fill a shortage of teaching assistants, but it’s also an easy way for bootcamps to improve job placement stats. “It’s a very common practice,” he said.
It’s nothing new, and it’s not restricted to bootcamps. “We see law schools doing this all the time.”
Another concern is that, when working with inexperienced teachers who don’t have a lot of time to spare, there is always a danger that your bootcamp experience could resemble this anonymous reviewer’s story:
“A few of our teachers hadn’t even been in tech longer than two years. Their teaching skills lacked and they got increasingly frustrated when students didn’t understand the material.”
Because of their lower pay, mentors need to take on additional students (if they’re paid by the number of students they mentor, as they were in the bootcamp I attended) or work at a second job. This can cause some of the mentors to make themselves less available to students, or to provide low-quality feedback, as some online reviews claim.
Be realistic about the length of training time you’ll need
Bootcamp students who come into programs as beginners are not prepared for a development job when they graduate.
It’s possible that you might qualify for a junior developer or internship position after graduating from one of the more rigorous bootcamps, Farag said, “but it’s going to be very hard to stand out from the increasing number of bootcamp graduates and thousands of computer science graduates. You can’t truly become a developer in three to six months.”
The problem comes when companies interview graduates and find that their programming skills aren’t fundamentally sound. Even though developer interviews have problems of their own, Farag said that a technical interviewer will eventually find out if you can’t implement even some of the most basic algorithms.
Many coding bootcamps don’t spend much time on algorithms. And many courses focus on learning tools rather than on programming. Ken Mazaika, co-founder and CTO of the Firehose Project, an online coding bootcamp, also sees this trend.
“The good coding bootcamps out there will cover CS topics around algorithms and data structures, but 9 out of 10 coding bootcamps won’t cover these topics at all because these topics can be difficult to teach.”
Mazaika’s view of the industry is particularly jaded, as the title of his 2015 post makes clear: “The Dirty Little Secrets About The Worst Coding Bootcamps Out There: 9 out of 10 programs are outright scams.”
Many of the top coding bootcamps teach frameworks, such as Ruby on Rails, that favor convention over configuration. That is, students learn the usage conventions for a specific tool, but not the fundamentals of how web development actually works across tools and technologies.
These frameworks give students just enough knowledge to start building simple web apps. After getting a handful of projects under their belts, many graduates believe they are ready to enter the job market. Unfortunately, they still lack a solid foundation.
Bootcamp grads have flooded the market
It’s surprisingly hard to stand out in today’s junior developer job market because, according to the Coding Bootcamp Market Sizing Report, low-skilled developers continue to flood into the job market. According to the 2019 report, the number of bootcamp graduates has gone from 15,400+ to 23,000+ in the past year.
With so many new coding bootcamps, and so many bootcamp grads hitting the job market over the past couple of years, “finding a job as a junior software engineer in the Bay Area is not as easy as it once was,” said Marcel Degas, a senior software engineer at Autodesk and a General Assembly bootcamp graduate.
A few years ago, bootcamps took off when entrepreneurs saw a shortage of developers as an opportunity. They thought they could close the gap by creating coding bootcamp businesses that could train anybody in basic development skills. But professional developers, even junior ones, need experience in many different aspects of programming to be effective software engineering professionals.
While it’s unclear whether coding bootcamps significantly helped alleviate the developer shortage in the job market, hiring managers aren’t as impressed by bootcamps as they once were, said Ted Whang, a developer at Pike13 and a 2014 coding bootcamp graduate.
“You dropped everything in your life and dedicated three months straight to learning how to code? ‘That’s amazing!’ You won’t hear those kind words of praise anymore, except maybe from your mother,” he said. Some developers even worry that a stigma is attached to bootcamp graduates, marking them as sloppy coders.
Anyone can learn programming. Not everyone can gain enough coding expertise to be a good software engineer.
Everyone does not need to learn to code
When the learn-to-code movement arrived in 2012, the don’t-learn-to-code movement followed soon afterward. This blogging backlash by Jeff Atwood, “Uncle Bob” Martin, and others might have seemed mean-spirited and egotistical, but some complaints about the programming profession raised legitimate concerns.
John Kurkowski, a user experience (UX) engineer at CrowdStrike, said programming isn’t an inviting field because even the most mature technologies have been roughly cobbled together over the years, and developers often spend much of their time hacking together libraries that were never meant to be used together. Maybe in 10 years, he said, developers will have tools and platforms that work more elegantly and are easier to work with.
And Mike Hadlow, a freelance C# developer with more than 20 years of software development experience, points out that software development is harder than people think. It’s one of the few highly skilled occupations that require no professional certification (although some believe it should), and it might just be the only highly skilled job where other workers in the industry give copious amounts of their free time and energy to help train people off the street (and still, there’s a huge mentoring gap).
That free entry is both good and bad, because, as Martin, author of the Clean Code Handbook, points out, the industry usually doesn’t benefit from hoards of novices, but needs carefully trained individuals. He compares good developer training to a flight school, adding that not many bootcamps are that intense, nor require as many hours of training.
Despite these voices of caution, some foresee a blue-collar coding revolution on the horizon, and others predictably have scoffed at this idea in the same way that the learn-to-code movement was criticized.
There are many valid arguments on both sides, but Atwood, the co-founder of StackOverflow, perhaps sums it up best:
“While I love that programming is an egalitarian field where degrees and certifications are irrelevant in the face of experience, you still gotta put in your ten thousand hours like the rest of us.”
Ask yourself: Are you cut out for coding?
You’ve felt that first sip of power that programming gives you. You finish your first program, then all of the syntax starts to make sense after you build a few more, and perhaps complete a course on Codecademy or Coursera. At that moment, you think: “I could do this for a living.”
But at this stage of the game, you still have no idea what you’re doing. You haven’t stayed up until 2 am three nights in a row trying to fix a bug or solve a problem. You haven’t had to spend the rest of your day sorting out version control issues and getting stuck going down multiple rabbit holes. You haven’t had your app stop working, even though you’re sure that you didn’t change anything.
You need an extreme level of commitment and patience to work all the way up to an entry-level developer position, and exponentially more for the rest of your career. “It was—and is—that persistence that allows me to stay in this field,” said Farag.
Going in, bootcamp students may not realize that computer science is actually a low-success educational field. And there’s plenty of evidence showing that even college-level computer science programs don’t have stellar graduation rates. Between 30% and 60% of first-year students in university computer science departments fail their first programming course. So why would anyone expect bootcamps to be significantly more successful?
What’s more, developers who get computer science degrees say that they are largely self-taught, according to the 2016 Stack Overflow Developer Survey. Even computer science departments can’t keep up with the rate of change in the industry. Developers can never stop learning.
Need any more discouragement? A 2008 survey of nearly 900 developers on Stack Overflow revealed that, if your interest in programming didn’t start between the ages of 8 and 18, your chances of being motivated enough to become a developer are low.
It’s still possible to become a programmer at any age, but as you can see from the second bar chart (in red), most developers in this Stack Overflow survey said they started before age 20. The number of developers who started after that age was very low. Source: How old are you, and how old were you when you started coding?, Stack Overflow.
It’s still possible to become a programmer in your early twenties, of course; it’s just a lot harder when most of your time is spent working to support yourself.
From these stats, you can see that bad practices aren’t the only reason coding bootcamps are failing to take many people from zero to developer in just a few months. Programming is fundamentally hard, and people who are considering these bootcamps should be honest with themselves as to their level of commitment to programming. Software engineering is not an easy way to get rich quick.
If you really want to find out if software development is the right career path for you, ask yourself these questions:
- Am I willing to work hard for just the three months it takes to complete a bootcamp, or for the rest of my life?
- Am I able to get unstuck on problems without the help of a mentor? Am I motivated enough to never give up on those problems?
- Am I willing to give up a lot of my leisure time in the early years of self-teaching?
- Am I willing to keep learning and coding even outside of normal work hours once I have a coding job?
- Do I want to adopt programming as one of my main hobbies? Don’t assume you can just flip a switch and this will be the case.
- See some additional questions here.
If you can say yes to all of the above, then you should be able to surmount the obstacles to becoming a developer with or without the help of a bootcamp. You also won’t fall flat, as many students do after attending a bootcamp, because the class was the only thing pushing you to keep working.
DIY bootcamp: 4 things you should do and 5 things you shouldn’t
There are plenty of people out there who have nothing but good things to say about their bootcamp experiences, and some landed jobs a few months after completion. But with a little extra time and more awareness of the resources at their disposal, those people probably could have succeeded without investing thousands of dollars in a bootcamp.
Documentation for all of the open-source tools, languages, and frameworks that bootcamps teach are available online. There are countless free online tutorials on just about any development technology that bootcamps will teach you.
All you need to do is pick a technology and run a Google search. The learning path may not be as streamlined as a bootcamp, but everything you need is out there for free. You just need to get good at looking for up-to-date resources, which some bootcamps will have trouble providing on a consistent basis. Nothing is more up to date than the new resources the coding community and open-source maintainers provide online.
Find a reason to code
Many people start their coding journey because they want a better career with better pay, but your motivation won’t hold out if you code just whatever some class or tutorial tells you to code. It’s okay if you don’t know what you want to code at first, when you’re in the initial exploratory phase of discovering if you enjoy the basics. You need some time to learn what’s possible and generate ideas for exciting projects.
Obviously, you’ll want to try creating things that grow your knowledge even if those projects don’t produce an end product that sparks joy. But treat those assignments as steppingstones toward building more intriguing projects so that you maintain your motivation in those instances as well.
Build something that would improve your life. Something that you wish existed. Something related to your current job or areas of interest. Want to build a game? Figure out how to build one. Enjoy music? Try to build a Spotify feature you always wanted. Do you like to follow certain topics online? Build a web scraper. Wish you could automate some tedious tasks at your job? Watch “Automate the Boring Stuff with Python.”
It doesn’t matter what it is; just code things that you want so badly that you’ll keep grinding through bugs and maybe even learn to love the countless hours of research. Doing otherwise is a reversal of priorities. As a student of programming, you should take some advice from someone who wasn’t an amazing programmer, but he was an amazing experience designer: “Start with the customer experience and work backwards for the technology.”
For your personal coding projects, the customer is you. Figure out what you want to create and then research which languages and tools would be good options for making that thing.
Don’t obsess over the language or framework
If you’ve spent a bunch of time reading “What Programming Language Should I Learn?” articles, you’re already doing this wrong.
If you decide to start learning just whatever language or framework is currently in vogue or those that are more common in developer job postings, then you’re not really learning programming. Programming is learning to solve problems using the right tools for the job. If you just learn one framework, you’re only learning one way of thinking about problem solving.
I mentioned previously that bootcamp graduates are often done a disservice when programs teach them one framework, trapping them in that framework’s conventions. You don’t want to be tied down to one way of thinking. Try learning several languages and tools and you’ll learn more about the core concepts behind programming rather than focusing on only one piece of the picture.
Build a lot of simple things, not one hard thing
In the same spirit of not overthinking the language or tools you use, you also shouldn’t overthink the projects you decide to build.
One of my favorite stories about building skills comes from the book Art & Fear: Observations On the Perils (and Rewards) of Artmaking. To summarize: There are two groups in a ceramics class. One group has to create a piece every day and submit their best work at the end of the class. The other group is allowed to work on a single piece for the entire length of the class to produce a masterpiece.
When the class was finished, the best work consistently came from the group who had completed pieces every day. When learning programming, the same principle is true. You learn better and faster when you code and finish small projects frequently.
It’s still good to work on passion projects that are specifically relevant to you, as mentioned earlier, but it’s not good to spend more than a few hours deciding your next project or researching the perfect next step.
It’s fine to work on something weird or fun for temporary amusement, as long as it’s something that works. Jennifer Dewalt, the founder of Zube, showed that there are 180 different things you can code in a single day. With each new project, she added to her portfolio and gained new skills.
You don’t have to be completely random with your project choices, either. It’s good to try a wide variety of projects so that you expand your ability to handle many different programming scenarios. Just don’t overthink it. Stop researching and theorizing, and start writing software.
Forget the advice. Don’t write code every day
Writing lots of applications is important because that process will help you quickly discover if the satisfaction you get from completing a variety of projects will sustain a long-term interest in coding. Eventually, you’ll finish some of your passion projects, and when that happens, will you want to continue coding to feel that satisfaction again? Will you still have the curiosity to learn more? Will you be able to find new passion projects?
Personally, I was more than happy to code for two hours, five nights a week, within the framework of a course syllabus. But when that course was done, it was hard to keep motivating myself to write code every day, as many bloggers now recommend.
I thought by the end of my course I would be close to getting a programming job and then I could start growing my skills in my day-to-day work rather than in my free time on nights and weekends. Maybe the best question aspiring professional coders can ask themselves is “Do I enjoy coding enough that I don’t mind spending 20 hours of my free time per week doing it?”
If you find that your motivation is lasting after several months, I don’t think you need to to take the “write code every day” advice literally. Sure, you need to practice often, as you would when learning a sport or musical instrument, but coding every day is unnecessary. People need breaks. People need to take long vacation periods and unplug. This prevents burnout.
You could argue that coding every day might even be detrimental to your ability to code. The brain needs time to rest and process difficult problems in the background while you sleep, relax, and work on other things. Taking a day off is actually good for that problem-solving process.
And if you lose motivation and fall off track on your programming goals, then perhaps its a sign that coding isn’t the right path for you. Taking breaks from coding will help you step back and see if you want to return to coding in a few days, putting that motivation to test.
Find a buddy and meet in person
This can be one of the hardest things on this list to do, but it’s also the most important. Coding in isolation or with only a mentor online is only going to take you so far. You need some kind of partner or mentor that you can meet with on occasion for two main reasons:
- To keep you motivated
- To practice collaboration and idea sharing, and to see a different perspective
Having a friend or a mentor who encourages you to keep up with their pace is the best motivation for a self-taught coder. Without that social connection, it’s very easy to let your progress fall by the wayside, because no one will notice.
Experience in coding on projects with others is another key component to your path toward becoming a professional. In most jobs, you’ll be working with others, so this experience will help you learn how to navigate those interactions and learn from them.
Working in isolation makes it difficult to solve hard problems when there’s no one to help introduce you to new ideas. Other humans are sometimes more helpful than Google.
I’d recommend that you keep trying several strategies to find a partner in coding:
- Try to encourage some friends or co-workers to join you, or look for new ones who are likely to be interested in coding together.
- Go to several different programming-related meetups in your area. Some groups might not be as welcoming or open to mentoring, so you’ll have to keep attending to try to find people who won’t resist mentoring or pair programming, or just want to keep to themselves. I found several groups that just get on their computers and barely speak to each other. Try to find better options than groups like these.
- If you need help and still can’t find anyone to work with locally, try checking out sites like Codenewbie and the Learn Programming subreddit. They can help you find online partners and resources, but don’t stop looking for a local partner.
I’d even suggest you go to the extreme of taking time off from coding to spend more time on searching for a coding partner or mentor. That’s how important it is.
If you do decide to enroll in a coding bootcamp, consider programs where you can meet with classmates locally first. Then try to make long-term friends and coding partners out of those classmates. This is still possible with an online bootcamp, but it takes a lot more effort and discipline. You should pick only online bootcamps that have you work on projects with other classmates.
After the bootcamp, you should get some classmates to commit to video conference meetings and pair programming sessions every week to work on projects until you all find jobs. You can even help each other with your job searches.
Focus on a few good resources
There are many free online resources to help you become a programmer without needing to join a bootcamp, but that also means there’s a lot of noise to sift through. It’s not hard to find hundreds of articles that are simply lists of learn-to-code sites. But your goal is not to spend weeks reading; you need to spend most of your time in your code editor, writing code, and using resources mainly for reference.
Go back to the first piece of advice in this article: Find something to code. The resources you choose should match the thing you’ve decided to build, not the other way around. Your main resource should always be Google and the documentation for the language, framework, or library you’re currently working with.
If you still want some helpful starter resources, or courses to follow along with before you figure out which projects you want to build, these are probably the best resources you could start with:
Codecademy: If you’ve hardly written any code before, this is the place to go and see if you enjoy how it feels to solve coding puzzles. It’s not going to teach you how to assemble custom applications, but it’s good for learning the syntax of different languages and computer science concepts.
The Learn Programming subreddit: The common questions a beginning coder asks are already answered in the resources section on this subreddit’s homepage. Do some searching for even more helpful starter information.
FreeCodeCamp: This site and its instructional videos are widely regarded as the best free content for teaching yourself to code web applications, frequently topping learn-to-code site lists. It also has forums where beginners can help each other on their journey.
Free online university courses: FreeCodeCamp also has another killer feature, which is that it updates this convenient list of links to hundreds of massive open online courses (MOOCs) on programming every month. These are great when you need to learn programming and computer science fundamentals through some purpose-built projects. For learning computer science concepts, introductory courses at Harvard, MIT, and Stanford have been well received.
“Teaching Yourself to Code to Become an Employable Programmer—What to Learn, Where to Learn, and More“: Although this is essentially a “how to learn to code” type of article, it’s probably the most comprehensive, well-articulated one you can find. True, the author is trying to promote his own bootcamp, but if you want a good look at the progression of a typical self-taught programmer and you need an additional resource list to read in your free time (after you’ve done some coding first), then it’s a good one-stop shop for this topic.
Just those five resources are already more than enough to bog you down in plenty of reading, so make sure you’re doing as much coding as you are reading when exploring these.
Don’t fall down the resource rabbit hole
The resource list above is not meant to be a prerequisite reading list, but something to use to start coding. If you find yourself falling down rabbit holes of tutorials and resources instead of keeping momentum on your coding projects, you may lose motivation when these rabbit holes cause your progress to slow down.
One of the biggest challenges for programmers throughout their careers—but especially as beginners—is getting unstuck. Resource saturation and rabbit holes are an obstacle to that goal, so your first stop anytime you’re stuck should be to look at the docs for the language, framework, or library you’re working in. Then search for your problem or error message. If the problem is conceptual, then try to articulate that in an online search.
If you’ve been stuck on the problem after 30 minutes of troubleshooting and research, then it’s time to try posting a question on StackOverflow or in a forum like r/learnprogramming, Codenewbie, or FreeCodeCamp’s forums. If you can afford it, check out Codementor if you need serious one-on-one help getting unstuck or for some learning advice.
Most of your learning should be driven by trying to get various lines of code to run and work properly in your project, not by reading through some list of top resources or tutorials. Get good at Googling.
Don’t try to read everyone’s code
Many coding advice resources tell you to try reading great code to learn how to write great code. This is true to an extent, but it’s simply a bad idea for beginners learning Ruby on Rails to try reading the Ruby on Rails source code in their spare time. It’s going to make absolutely no sense and waste your time. It would be as daunting for you as it would be for Little League baseball players to compare themselves to a professional in the Major Leagues.
A better option is to take simple templates for certain frameworks that you’re already familiar with and trying to modify those to learn how they work. At one time I was building a blog on the Jekyll static site generator. I found out that there were blog templates, and I used one of those rather than building a blog from scratch. It helped me understand a lot more about how the system worked and how the template worked.
This is how a lot of programmers start. They don’t know how the internals of various services and applications, but the API (application programming interface) is built so well by the service’s developers that it’s much easier for a junior programmer to work with those by modifying data fields. A lot of junior programmers are going to start their careers by working with and learning existing codebases while hunting for bugs.
So reading others’ code is a necessary skill, but it’s important that you don’t jump into code that’s way over your head. If you can understand 60% to 70% of the code you’re looking at, and how various files communicate and work together, then it might be worth exploring.
Don’t waste a lot of time on learning the coding interview
I’ve written extensively about the problems with whiteboard and puzzle-based interviews for developers. As a beginner, all you need to know is that a lot of companies (including Google) have bad interviewing practices, and you shouldn’t spend much of your time teaching yourself how to pass these impractical exams.
When you’ve finally reached the stage where you have enough projects (and hopefully some freelance work) to put on your résumé, you should at least do some research into how developer interviews are conducted. But don’t go out and buy Cracking the Coding Interview or any other resource solely focused on helping you pass a programming interview test.
There are plenty of companies that don’t do gotcha-style interviews, and those are the ones you should gravitate toward. If a company can’t spare a technical person to run your interview or asks brain-teaser questions that are unrelated to what you’ll be doing in your daily work, then you probably don’t want to work for that company.
You don’t have to be a developer to find a rewarding career in tech
If you take the advice I’ve given in the previous sections and you still can’t find a way to break into professional coding, it may be time to take a step back, like I did, and see if there are alternative paths to a rewarding career in tech that utilize your specific strengths.
If you’re not interested enough in programming to code 20 hours a week in your free time, maybe there are other things you enjoy more that map onto one of the many roles found in tech companies.
StackOverflow’s Atwood made a great list of these software development company occupations in his blog post “So You Don’t Want to be a Programmer After All.” I’ve updated the list based on my own experience and the changes in job titles since his 2013 article:
- Product / program manager
- Project manager
- QA / testing
- Build / release engineering
- System administrator / DevOps engineer / site reliability engineer
- Technical sales
- Technical marketing
- Technical writer
- Tech journalism (actual developer news, not just smartphone and video game news)
- Business analyst / programming analyst
- Technical support / technical account management
- Customer success
- Community development
Try searching for some of these titles and see what’s involved. Building some experience in a field that you can explore in your current job is one of the best approaches you can take toward career progression.
Just remember that coding isn’t your only path to a good career. But also remember that a little bit of coding ability can boost your earning potential past other candidates in your chosen field, and that ability can also be a foot in the door of the coding tools industry.
Having graduated from an online bootcamp myself in 2013 and still not making it as a coder (it wasn’t the right path for me), I love hearing about other students’ experiences at bootcamps, good or bad. This article became so popular after writing it in 2016 that I was asked to update it for 2019. I hope commenters will post their new thoughts and experiences as well in the comment section below, or tweet me at @mpron.