So the giant article I’ve been planning to write from what I learned prepping for that talk I gave on being senior a while ago has stalled. So instead I am going to write about small chunks of it.
This is the first.
The most surprising finding of the survey was the dramatic increase in the number of Junior Developers with degrees in Computer Science(CS), or a related field. It was a massive shift from the generation of Senior Developers that I am part of. 77% of those surveyed that were Jr. had CS degrees, while only 38% of the Sr. respondents did. That is a sea change, and it was one of the things I talked about.
There are many things that are driving that shift. But most of them appear to be cultural. For one the internet didn’t exist when we were young. No one majored in CS to go build complex web applications. Because complex web applications didn’t exist.
Now we build complex web applications on a daily basis. Machine learning, and distributed computing, are table stakes today. All the things that people went to college in CS for are common today. The market has made a rapid and forceful transformation.
Also, films like The Social Network have made developing web apps cool. Creating a tech startup has become the chosen path of upward mobility. Add that to a world where the financial barriers to entry are low and you have a burst of growth. If you wanted to build a server 20 years ago you were looking at thousands of dollars upfront. Now AWS, Google, and others will give you free trials to get started. It's incredibly inexpensive to create a tech company now.
Let’s sum that up by saying that the world has changed. Developers today need a more complex set of skill then they did when I was getting into the business. I learned them... but I learned them the hard way. Over time.
If you want to get into software development, and are in a position to do so, get a degree in CS. Make sure you go to a university that has a good mix of practical and theoretical. Theory is your real head start here, so lean towards more theory. The practical stuff you are going to get with time anyway. The theory is hard to make up for missing out on at the beginning.
Theory is one of the biggest holes in my knowledge and one that I am still working to close.
So what does this mean for boot camps? A lot actually.
In saying what I am about to say I don’t mean to denigrate your boot camp experience. I am not saying that you personally are in a bad place. I am also not saying you should not attend a boot camp. This is a complex decision, I want you to have all the information up front before you make it.
One last caveat: I am basing the following statements on the mock interviews I've done, and resumes I've reviewed for boot camp graduates.
So... boot camps.
Most boot camps are set up backwards. They are heavy on practical application, but light on theory. This will help you get in the door, but will make long term progress difficult. To be a Senior Engineer you are going to need to be able to apply theory to understand many layers of abstraction. You will need to know what it means to find a constant time alternative to a loop. You'll need to be able to look at code and make solid guesses about its runtime characteristics. You are going to need to know what makes for a good abstraction and what makes a bad one. This comes easier with a theoretical background, and exposure to the language of Computer Science.
A boot camp's customers is you, the student. This means that their goal is to attract you. My dad pointed out to me as a kid that a fishing lure's job is to catch fishermen, not fish. Same thing applies here. A boot camp ceases to exist if it can't attract students. That means their marketing is going to sell you on what they are offering.
As long as they are a reputable boot camp that shouldn't be a bad thing. Because your interests will align with theirs.
But what I've seen in reviewing resumes is that most of their graduates are trying to get into the industry with the same canned projects. Nothing that makes them standout. Very little that isn't contrived. This is problematic for both graduates and the industry.
So here is problem #1: You leave most boot camps with no theoretical knowledge and no real world experience.
That is a problem. I have seen the github profiles and resumes of a growing number of boot campers. They all have the same set of code exercises. They may, or may not be running in heroku, but are mostly backend-less projects. There isn’t anything differentiating about them, and the "projects" never actually ship.
This is bad. Because lacking theory you fall back on experience and lacking experience... well... there is nothing else to fall back on.
Before you despair let’s talk about how to fix this. It isn’t easy, but by choosing the boot camp route you probably knew that you were choosing the hard way. So that won’t intimidate you. You’re also a hard worker and luckily the solution is more work. If you’re boot camp doesn’t provide you with more then the standard contrived solutions, you need to create things on your own. Write your own website from scratch, buy a domain and get it up and running on your own. You could also be picking up some contract work on a freelance site, working with code for america, or competing in hack nights. Do something though. Get some real experience on your own.
Another option is to go get a good theoretical starting point on your own. Yes your boot camp should be doing this, but if they aren't there are good options. Coursera, as an example, has quite a few good data structures and algorithms courses for free. Take some.
Building some real world experience will be even more valuable if you can do it with a team. Because...
Problem #2: You likely haven’t worked on a team to ship a project
Working on teams is different then working on your own. Shipping things with a group of people in diverse roles, minimally with a designer, is how you will be working for most of your career. Getting experience with it is critical. Not having experience with it is going to increase the learning curve at your first job.
You can get this experience in many of the same ways you can get experience with real projects. Work with a group like Code for America, do some contracts, or design and build an app with a friend.
I have no fancy transition to problem #3...
Problem #3: I am seeing your resume because your boot camp isn’t thinking about what to do with you once you graduate.
Boot camps should ramp you up to a base acceptable level of technical expertise. What that means exactly, is going to vary from boot camp to boot camp and company to company. Because of that they should have companies lined up to take their specific graduates. These coporate partners should work with boot camps to identify what student's needs are. This isn't something with no precedent. Universities often partner with industry to identify, and correct, holes in their curriculum.
These partners also need to have specific cultures and expectations to ensure success. They need to know how to train you (mentorships, etc.) and be willing to spend the money on getting you up to speed. It's important that they also recognize you are going to leave within a year or two, and that they be ok with that.
Good question and I have a few answers.
First, favor college over bootcamps if you can (fiscally, time-wise, educational background*, etc.).
Second, If you still choose boot camp you need to be very picky about what bootcamp you choose. Make sure that they have a good reputation. Talk to some graduates and see what their experience has been, both in the camp and in finding a job. Make sure they are finding jobs, and see if they are fitting into those jobs.
Third, go get experience any way you can. Get out there and ship some real stuff. Code exercises in your profile mean very little in a interview and evaluation. But having shipped something does.
Fourth, make sure you can talk about what you have learned and haven't learned. Knowing what you need to know is powerful. It will let you grow, but it will also help you ask the right questions of the company you are looking at. Interviews are a two way street and you want to get better knowledge and skills out of the deal as well as a paycheck.
Last, I would love to see the bootcamp model radically shift. Right now they are pumping entry level developers into an industry that wants Senior Developers. An industry that struggles to know what to do with beginners in the workplace. There are more sustainable models for all this that few groups seem to be trying out.
For instance, I’d love to see a bootcamp that is heavy on theory and which functions as a software development consultancy/ad agency. With students pairing with Senior/Mid Developers to ship real projects for customers.
Have them spend a couple months coming up to speed and then get some real project work under your belt. Agencies make a great platform for this since their projects tend to be fast, short and simple. This would allow you to tackle a few real world projects before you graduate. That work could even help offset the cost of the boot camp! In fact, once you finish the theoretical part there should be a shift from you as a student paying, to the agency paying you. Maybe you stick around for a while. Maybe you move on with some real experience and results you can show and talk about. Win-win.
This is closer to the model used by trade schools, but with a builtin apprenticeship since most companies don't offer them.
If you are reading this and have a some funding and want to try this model out, hit me up! Let’s talk. If you're boot camper, or future boot camper, find this camp if it exists. Or if not, find someone who will let you write real code for real clients. You need that experience to be competitive in the job market.
One last thought. Think about where you want to be in 10 years. If you don’t want to end up a Senior Developer, or Team Lead, then bootcamps are great. They pump out implementors and you can likely make a nice living implementing.
If you want more decision making power then reconsider. You are going to be starting well behind the people you are competing with that have CS degrees. You can still catch up. But, it’s going to be hard work. Think about starting a 10k after everyone else hits the 5k mark. That's what boot camps are doing compared to universities.
* NOTE: If you’re educational background doesn’t fit the college pattern, recognize that you are about to be in a group of people who tend towards the academic. DO NOT let this intimidate you. But, do be aware that it represents a specific set of biases and thought patterns.
*** Edited for clarity and content and to get rid of the horrible writing that was the first version ***