Should you attend a code school or code camp?
What are code schools?
Code schools are increasingly popular, and why wouldn't they be? Software development is a growing field and has been in higher demand for the last few decades. There is a lack of software developers in the US, and the pay is excellent. After all, developers start at $130,000 a year at Facebook, right? (They do)
So it's enticing to look at a code school and think that in 12 weeks, you can get an entry-level software development job. For around $10k, you can completely switch your career in a few months. It's a wonderful proposition.
But should you do it? I cannot answer that question (spoiler), but I can provide some guidance from my experience.
A little background on my experience
I'm in my late 30's. I have an undergrad degree in business and have worked with startups and small technology companies for my whole career.
I went through a code school myself, about six years ago, that focused on backend development (Ruby code, Rails framework). While there, I built an app that we used at my day job for 2+ years.
I learned a lot, and I enjoyed it. I wasn't sure if I was looking for a career change at the time, and I didn't pivot into a career in software development. I did go on to work with software developers and have hired more than a hundred developers in the years since for various companies.
I've recruited experienced developers with 20 years of experience, developers fresh out of college, and developers who got their start in a code school. These are the lessons I've learned from hiring and working with these various groups.
What code schools do (and do not) provide
In some ways, code schools are far ahead of university degree programs. Most universities teach things that you won't use on the job. It's hard for university classes to change at the pace that software development does in the real world. So their curriculum is years behind the marketplace.
On the other hand, code schools teach the practical things you need to accomplish your tasks in the real world. They tend to focus on a specific technology and teach the practical things you need to know to get started.
So, code schools are the way to go, right? Not so fast.
What code schools don't teach
First Principles, or a Developer Mindset
The concept of "First Principles" is a bit difficult to explain. And, as a non-developer, any explanation I attempt will invariably be wrong. But I'll give it a shot anyway.
Good developers don't just know the HOW. They also seek to understand the WHY. Knowing the principles behind the code gives you a deeper understanding of the problem you're trying to solve. It leads to better solutions that hold up over a longer time. It leads to code that not only solves the problem, but solves it in a better way, improves the code, and gives the code base a better chance for future iteration.
Let me try to explain this with an analogy.
You're building a house, and you're tasked with keeping it warm during the winter. Easy, you know how to do that, you buy ten space heaters and fill the house with them. Does this solve the problem? Yes, with a space heater in every room, the house is definitely warm. You've solved the problem. The house has a good chance of burning down, and the space heaters use a ton of electricity, but that wasn't the problem you were presented with.
Now, if you understood first principles, you would take a different approach. You would start with the problem and look at the causes. Houses lose heat in the winter because of poor insulation, so you insulate the walls and put in energy-efficient windows. You also install a radiant heating system because the house already has gas. You know that a radiator and a well-insulated home will last.
Both solutions solve the problem, the house is warm in the winter, but the first ignores the causes and uses the simplest possible solution. This is the difference between an understanding of first principles and a lack thereof.
Experience working with a team
Yes, you will do team projects in both a code school and at a university. But you typically will not learn the complexities of code reviews, push and pull requests, or best practices of modern version-control systems.
Your code is built in the way that you learned, and that's fine. But your code hasn't been integrated into larger systems and intermingled with other developers' code. If it has, it's likely been a part of a system designed and built by others with your same level of experience.
This is true regardless of the source of your coding education.
Ability to learn
Neither code schools, nor universities, really teach this. But it's the #1 thing I've looked for in hiring developers over the years. Do you have the drive, and the ability, to learn and improve on your own.
Yes, you had the initiative to join a code school, but how much have you learned outside the context of that school's program?
Every code school I'm aware of will have you work on a project. That project is not your resume and doesn't show me that you've gained the ability to learn. It shows me that you followed instructions and completed your code school.
The questions I typically ask to dig into this:
Did you learn something entirely on your own?
Did you work on a personal or team project outside of the context of the school itself?
What's the thing you're learning now that you've left your code school?
These are the questions I have asked junior developers, both code school grads, university grads, and the purely self-taught developer. I find these answers to be critical markers of the potential success of a new hire.
Should you attend a code school?
Despite the issues I mentioned above, I am a big believer in code schools. There are many excellent schools, and some bad ones for sure. One of the biggest is General Assembly, but my personal favorite that I recommend is Tech Talent South*.
If you're looking for a career change, it can be an excellent opportunity. It will be faster than learning on your own, and it will likely be better than learning with a purely online/self-paced system. But it is important to understand what code schools can and cannot teach you and what you may lack as a developer coming out of the school.
You should make sure you're prepared to commit to learning outside of the code school curriculum. Development is constantly changing, and becoming a developer means committing to continually learning. Joining a code school can be a suitable catalyst, but it is not the end of the process.
As I mentioned, I went to a code school to learn without intending on changing my career. It was a lot of work, but I enjoyed it immensely. It has added value to my career and has given me some insight into my colleagues' work.
*Disclosure, I have no stake in Tech Talent South. I've met the founder and much of the team in the past and have hired their students. The link above is an affiliate link that provides you with a discount, but you can visit them directly at https://www.techtalentsouth.com.