Published August 20, 2017 on LinkedIn: https://www.linkedin.com/pulse/problem-ios-bootcamps-abbey-jackson/
When moving my articles onto this new site I have not edited them except to fix broken links or incorrect information. I like to preserve the original mood, bad grammar and all!
There is a good chance what I am about to share with you applies to other kinds of programming bootcamps as well but as I am iOS specialized I really can’t pretend to know what is needed for a career on any other platform.
I am a bootcamp grad and I would not change the path I took. It was the right path for me and I think it can be the right path for many people but they need to go into it with an awareness of the drawbacks of bootcamps – and there are many drawbacks.
My path
I went from Nanny to iOS Developer at a Fortune 100 company working on very cool unannounced tech in 18 months without ever being pegged a junior. I am what you could consider a success story for my bootcamp – for the entire bootcamp model really. I was the only student in my class that got a proper iOS job with a competitive (local) salary upon graduation (not counting two students who were promised jobs before they started).
This didn’t happen because of my bootcamp though, at least not directly. The bootcamp gave me the launching pad I needed to create these opportunities for myself. I have worked hard to create these opportunities including being involved with new developer training and doing projects on the side for clients and non-profits. I have a lot of teaching experience in previous careers and so I enjoy mentoring and have found myself the go-to person for developers onboarding onto our projects at work – and even find myself helping out new devs in other offices remotely. Recently my bootcamp asked me to become an instructor (I had to decline due to scheduling).
Outside of work I started a non-profit called CodeDoesGood with 3 friends. I have constantly sought out opportunities for growth and learning both at work, in my evenings online, and through side projects. I’m only 2 years into my career now, and I still have a lot to learn, but I know senior developers who come to me with questions because I’ve had a chance to study and be exposed to more than they have.
The common path
So yeah, you can launch a successful career from a bootcamp, bootcamps aren’t a bad thing necessarily. The more common scenario though is one where you spend 6 months (or more) trying to find a job, when you get a job you are either the only iOS developer there or you are in an environment where no one wants to mentor you. After a stressful 3-12 months you either quit or are let go because you can’t match the performance they want from you – because they’re not helping you understand what you need to do to make that performance. I know 5 bootcampers this happened to and have read countless other accounts like this.
Or possibly you do land a stable job but you are given simple bug fixes and UI tasks where you are never really challenged.
Or even worse you are the only dev and think you are killing it. After a year you might think you are experienced but you have barely grown in your understanding and it becomes obvious when you try to interview for new jobs. You are lost if you spend any time listening to seniors talk about architecture, testing, and other general best practices. In your future career I imagine you would look back at this time astounded by how little you knew when you thought you knew what was going.
Where iOS bootcamps fail
A couple weeks ago I was asked this question on the ios-developers.io Slack:
Abbey, you mentioned the dev bootcamp in the thread above and I was wondering how useful was that in boosting your career (or kick-starting) it, some of my students in NYC wanted to ditch college for a dev bootcamp. I have mixed opinions about it, I think if you can get a degree and won’t be burying yourself in loans then it should be a no brainer. So as a general thought, has this bootcamp helped your career? Do you think you could have done the same w/o it?
From that question, and my subsequent initial reply, began a really valuable discussion which included myself, some bootcampers currently looking for work, as well as some other really knowledgeable, strong, helpful, and passionate developers who have demonstrated to me their interest in helping new developers since the first day I met them. Their comments warrant full consideration, this is not a case of taking anything with a grain of salt. What follows is a summary of that conversation.
Despite my path, in general I and the others that contributed to this conversation do not recommend quitting university to do a bootcamp, especially if you have already invested time in your degree. But there is no right answer to a question like this. The only right answer is “it depends”.
Specialized Learning
One of the biggest drawbacks to an iOS bootcamp is also one of its biggest strengths. When you do an iOS bootcamp you are not exposed to other programming platforms, you specialize in iOS only. This has an obvious advantage: you don’t waste time learning stuff you won’t use. But it has a less obvious disadvantage which I believe is the crux that has given bootcampers such a bad rap: You don’t have enough far reaching experience to understand what the fuck is actually going on.
Bootcampers can make apps, I don’t think anyone will disagree with that. But this is equivalent to cooking a roast that looks great on the outside and then you cut into it and a big chunk of it is raw because the cook didn’t understand how to deal with the innards properly. They didn’t know the best process to use.
Or maybe a more relatable answer can be found on some of those home disaster style reality shows where the foreman / experienced installer comes in. To you the bathroom looks fine but then he starts explaining everything that is done wrong and to do it properly is going to cost. If the bad contractor were making a bathroom for their own house maybe it wouldn’t matter that eventually the tiles will be crooked or there will be a leak here in this grout, but it just doesn’t fly for a professional company.
They are lacking the foundational knowledge needed to understand the full results of their decisions and this is where bootcamp education fails.
That bad contractor knows how to do things but they don’t understand enough to know how to do things right. They are lacking the foundational knowledge needed to understand the full results of their decisions and this is where bootcamp education fails. This is the kind of thing that can only be achieved when a person fully understands how programming works. When they can intuit what needs to happen rather than just knowing what functions to call.
When iOS stops being magic
For me it was about 6 months of working full time with an incredible mentor who would spend hours each day answering my questions, and then me spending hours each night on Slack asking more questions, before iOS stopped being magic. And I wasn’t just working full time, I had also been writing training documents for new devs at the company, done a presentation on Xcode’s UITest framework after researching it and publishing that research for the team, had been exposed to apps for 3 major companies, two in home security and one in music streaming, had built two apps at work from start to finish, and had done client projects in my free time.
Think about that for a bit and put it into perspective. If it took me all that work for iOS programming to stop being magic, for things to finally click, how long would it take a dev who has been tasked to only UI work and not given the opportunity to be involved in other areas of the company like I was? Even if I am a slow learner and it would take most people half as much to get past iOS being magic, it’s still a lot. Someone with prior exposure to programming, even if it wasn’t iOS, would definitely have an advantage here.
The advantage of a computer science degree
The comp sci grad has been trained over the course of 4 years to research and investigate and to intuit. The bootcamp grad knows only what code to use and if they can’t find the right code they get stuck because they don’t know what else to search for.
While a university degree will not take the magic out of iOS specifically it exposes you to other computer languages, other platforms, and more importantly other people. Just by immersion your understanding of programming will be inherently different than a bootcamp grad’s and this is a significant advantage. For most companies looking to hire a new developer, a university grad is preferable even without iOS experience because the belief is that the computer science grad only needs to learn a new language and platform, they should already know how to think like a developer and understand how code hooks together. The common belief would be that if you make it through a computer science degree you should be easier to teach because you will not be clouded by not understanding what is going on.
From my experience talking to new iOS developers, both from university and from bootcamp I would tend to agree with this. The bootcamp grad appears at first to be ahead. They know frameworks and can generally answer how things work. They tend to write their code in an “iOS way” whereas the comp sci grad’s code can look bizarre for use in iOS. The first few tasks are less frustrating for the mentor with a bootcamp grad than they are with a comp sci grad just starting iOS.
But after the first few, when we expect to see some progress, the bootcamp grad starts to fall behind the comp sci grad. The comp sci grad has been trained over the course of 4 years to research and investigate and to intuit. The bootcamp grad knows only what code to use and if they can’t find the right code they get stuck because they don’t know what else to search for. I still have problems with this but I am getting better.
The great equalizer: knowledge
This is where my answer of “it depends” comes into play. For someone like me doing a bootcamp rather than a computer science degree was the right choice. I am a self starter who is able to see where my knowledge gaps are and fill them on my own by seeking out whatever resources I need in order to accomplish that. A friend of mine left his computer science degree with only one year left because he is the same way and he knew that he wanted to do iOS. He is an enthusiastic learner who didn’t need his diploma to land a permanent job and he already had grasped the understanding needed to be able to learn proper iOS development.
A good mentor who pays attention, understands the way their new developer underling thinks, and provides clear non-judgemental answers, can make the distinction between a university grad and a bootcamp grad irrelevant but good mentors are hard to find. Many new devs whether they are from a bootcamp or a university don’t find a mentor they click with who can provide this.
But increasing knowledge on your own, seeking out answers to questions through forums and Slack groups, can level the playing field.
Not all computer science programs are created equally
One reply to the conversation we were having on the ios-developers.io Slack was:
Note that college programs vary wildly, I have interviewed people who just graduated with CS degrees who had no idea what they are doing, and how much practical software engineering they do can ranged from literally none to a professional amount
An interviewer who knows the platform they are interviewing for will quickly spot those university grads who have made it through their degree without fully grasping the point of their degree. It’s important to keep that in mind: Having a computer science degree does not mean you will get a job in iOS. Generally you still need to show that you have worked on and been interested in iOS.
In the hunt for your first job having a computer science degree can be to your advantage because it gets you that interview. My friend above who did 3 years before leaving university would not have gotten the internship that led to his full time offer if he had not been in university; these kinds of opportunities are rarely handed out to bootcamp grads. This is another disadvantage of a bootcamp: they often are not publicly funded, and often not accredited, which means government job hiring programs do not apply
The great divider: Misinformation
every good developer can learn and a good developer will be a good developer whether they did a university degree or a bootcamp program.
In my opinion, misinformation, or rather ignorance, is the biggest problem with iOS bootcamps. As far as I am concerned every good developer can learn and a good developer will be a good developer whether they did a university degree or a bootcamp program. They will have unique challenges related to their education going forward no matter what education they choose to do. However, the bootcamper (and in here I lump together also people who have learned iOS through online courses with no prior programming experience) has a foundation of ignorance when it comes to their own level of knowledge.
The university grad knows they don’t know stuff. The bootcamper has been told by their school and their instructors – as a way to encourage and build their confidence I assume – that they are programmers, that they can build anything, that they can do any job. In fact the truth is when you graduate an iOS bootcamp (or a computer science program) you are (usually) not a programmer. University grads know this but iOS bootcampers and online students have been told otherwise. It is worth stating again:
when you graduate an iOS bootcamp you are not a programmer
Of course exceptions apply but being able to bake a cake doesn’t make you a baker and it’s the same thing here: being able to build an app does not make you a programmer. When you finish an iOS bootcamp or an online course you are capable of creating. You are a creator and that is a fabulous first step and an incredible skill that most people do not have.
In fact I would wager this skill can make you more valuable than a computer science graduate who has a similar knowledge level because creative thinking is hard to teach and often killed and pounded out of a student in university. But what you have learned in bootcamp is no different than learning any other tool. If someone makes Wordpress, Wix or Squarespace websites using pre-made templates we do not call them a web developer. They may call themselves a web developer but the community at large would vehemently disagree. Simply learning a tool – in this case basic iOS via Xcode – does not a programmer make.
The disadvantage bootcampers face is that they have not been told this. As a way of selling their courses bootcamps and online schools tell would-be students that they will “be” a developer when they finish the program when what they should be telling them instead is this:
When you graduate this program you will have the skills necessary to create iOS apps, and the foundation required to continue learning and build a career as an iOS developer.
This is how I worded it when I answered the university teacher who asked that original question:
Yeah at my bootcamp they were all “you guys can do anything, you’re devs now”. It was irresponsible. Lots of those guys never ended up with iOS jobs. I was deemed the “bad” student [who only completed 40% of my assignments]. Barred from career events for example. Yet my final project won the public demo day and employers wanted to talk to me. I wasn’t the fastest or smartest. I was just fucking realistic…The other students didn’t stop to ask “is this the best way”, they weren’t even aware there could be a better way. They were told they were devs because they made an app. For me, I only completed 40% of my assignments because the final product mattered a lot less to me than exploring the knowledge that went into it.
When it came to learning iOS, the thought process and understanding was more important than finding code online that compiled and completing an assignment. The difference between myself and most of the students in my bootcamp is that I recognized this early on. When it is time to interview for jobs a lot of bootcampers go into those interviews with naiveté. They have been told that they can do anything, that they are developers now, and even though they don’t always feel confident in themselves they try to stand by what their school’s marketing has told them – they are a developer now.
“I don’t know, but I know I can learn it”
Not me. I was the total opposite. Despite being one of the “worst” students in my class, I had confidence to spare. I knew that the things career services were telling us were not right. I knew that the most valuable thing I had to offer was my attitude and my ability to be taught and to learn, not the knowledge I had. I knew that there was only one person in our whole group I would consider a programmer, only one person that really knew what they were doing (and it wasn’t me). I would go into interviews and confidently answer “I don’t know” when asked a question. What made me a desirable candidate was not knowing my stuff, it was my followup: “I don’t know, but I know I can learn it”. I applied for many many jobs and didn’t hear back from most but I had 5 interviews and every one offered me a job except one who lost funding for the project but told me they would have extended an offer if the project had gone ahead.
It’s not because I was so great or knew so much. It’s actually the opposite. It’s because I knew that I didn’t know a whole lot and I proved myself to them to be a motivated learner. I came to them not with the knowledge required to be a programmer but rather with the foundation I needed to become a programmerand I was fully aware of that.
Unfortunately most iOS bootcampers do not have this awareness and I feel this does a great disservice to the students.
The question about how much you can learn
There is no doubt that a few months is not enough time for learning iOS. I don’t know about other platforms but iOS is so intrinsically abstract with so many rules to follow and so many limitations that it is very difficult for even an experienced programmer to pick it up thoroughly in such a short time. That being said, the university grad also does not know iOS at this level and so I don’t feel that this is a bootcamp specific issue.
It’s worth mentioning though because, related to the above section, I feel it does a disservice to the students to not explain to them that they are barely scratching the surface. I’m not sure if university grads realize how much they will need to learn to really understand and know iOS but I do know that I have never met an iOS bootcamper that really grasped the position they were starting out from. Though maybe this is a blessing in disguise; it’s possible I would never have struggled forward if I had known just how far back I was.
False expectations and crushing reality
Bootcamp grads face more challenges than university grads. Not only is getting interviews tough but getting that first job is even tougher. Companies are less likely to take a chance on you and schools bloat their graduation outcomes which leads to prospective students thinking they can just take this course, graduate as a programmer and boom! They get to work as an iOS developer! Not true.
I consider it pretty irresponsible of schools to twist and interpret the outcomes like they do without full disclosure. If you are looking at an outcomes report that says 90% of students get a job within 3 months make sure you ask some important questions:
- Are they coding? Are they doing iOS?
- Were they hired at a standard starting salary or an internship salary?
- How many that were hired at internship salaries got to move up to a standard salary?
- Of the ones doing iOS, how many are hired onto teams vs being the only iOS developer?
In my bootcamp almost everyone did get a job in tech and that is important to note, but they didn’t all get jobs doing iOS and they didn’t all get jobs coding. If you really only care about making a career change into tech then this information may not matter to you. Myself if I had not ended up working in iOS I would have considered it a giant waste of time. It all depends on your own personal goals.
At my school most did get jobs within 6 months but I know of a couple who didn’t and I know of several on Slack that took 6-12 months. Being unemployed for 6 months or even a year can be absolutely devastating. A new developer’s confidence is a fragile piece of china, at best. My first year I would break down crying on a regular basis that I would never be able to make it, that I would never understand what was going on – and I had a job! I still get overwhelmedand feel like I am a bad developer even when I am being praised for my work. Programming is hard. It is incredibly taxing on your mind. Being an adult and not knowing what the fuck is going on is really demoralizing. Now imagine feeling like that but also not being able to find work: Absolutely soul crushing.
Bootcampers often get the shit jobs
I have heard more stories of employer abuse from iOS bootcamp grads than I have from comp sci grads. I feel this is probably related to the fact that the university grads are more likely to get a job at an established company whereas the iOS bootcamp grad is more likely to get a job at a start up which has an inexperienced management team.
From what I have witnessed it seems to me also that a larger percentage of iOS bootcamp grads end up at companies where they are the only iOS developer versus computer science grads who end up at companies where they are on a team. The opportunity for mentorship is reduced but the real shame is this kind of first job can actually hold a lot of people back – it can have ramifications that permeate through their career. If I had ended up in a job like this I would not have progressed the way I did.
A new developer working alone is not exposed to best practices, they may continue to learn but they are learning in isolation and any bad habits or non-standard ways of solving solutions will seep through their code. Once these less correct ways of doing things become standard for a developer it is going to be difficult not only for them to change their habits in the future, but for them to even understand why they should be changing their habits. They have essentially wired their brains to think the “wrong” way, they have not learned how to involve others in their decisions or use other people’s experience to inform their own code, and they are difficult to work with and integrate into a new team. The result of this is that sometimes finding that second job for this bootcamper can be tough too.
If a bootcamper has been hired out by it’s school to a start-up where that bootcamper is the only dev on the project, a future company knows that this developer, who now considers themselves an intermediate, could pose more challenges than hiring a brand new university grad with no experience. The bootcamp grad left their iOS school being told they were a programmer. They were hired as the only dev at a start up and they made an app. They know what they are doing, damnit! They lead this project, therefore they are definitely an intermediate developer now and they know how to do stuff.
At least that is the attitude that they have. And who can blame them? Being in that kind of situation you have to have confidence and blind belief in yourself or imposter’s syndrome will eat away at you. It was only a matter of survival. So I get it, I really do. The problem is by the time they go for their next job they usually have lost their humility and they are unable to admit they really don’t know much. This is a hard person to work with and an even harder person to mould into a great developer.
Unfortunately this trend does not only affect the iOS bootcamper described above. Many companies who have hired iOS bootcamp grads in the past for their second job have not had great experiences and this has informed their hiring practices: namely they don’t hire bootcamp grads pretty much in any circumstance until they have proven themselves at a few other companies.
So this means even if you are not that kind of person and you did not go through that experience in your first job, you are dealing with companies that have been burned by hiring bootcamp grads in the past. You have to work harder than that computer science grad to prove that you will be an asset to the team.
This can also be an advantage though because when you find a team lead or manager that is willing to take a chance on a bootcamp grad you know that they are open and willing to not be stuck in traditional ways of thinking. Fact is, you don’t need a university degree to do iOS. I can believe that it is necessary (or extremely helpful at least) in other platforms but iOS is quite specialized and if you know that specialized knowledge you can succeed no matter your education. Personally, I want to work for people that believe it’s more important to hire someone who knows the language and can manipulate data to solve a problem vs someone who can rattle off the definition, and give an example, of O(logn) notation.
Access to information and people
The kinds of people you find at universities and bootcamps vary greatly and each have their own sets of advantages and disadvantages.
The teaching staff at universities tend to be composed of academics and ex-industry professionals. These are people that have worked on real projects for real companies and have experienced different kinds of workflow management, sat in on scrums, learned to balance company priorities with team management and project deadlines. The academics have an intimate understanding of the things they teach though they may not have real world experience in implementing them or integrating them with other components.
The teaching staff at bootcamps on the other hand, tend to be made up of indie developers. I assume this is due to the irregular hours, often part time work, and the pay being less than what an industry dev would earn if they stayed with their full time job. Most of my teachers did not have real world experience aside from their own companies and projects. One may argue that is real experience but when I would ask what was normally done or what was best practice in a given scenario or why they did one thing over the other they usually didn’t have an answer.
This lack of experience in the teachers leaves the students ill-prepared. The teachers themselves don’t even realize what they are not teaching the students because they themselves do not use these words and phrases as part of their everyday vocabulary. I had no idea what scrum meant, what a “ticket” was, what “architecture” meant or even that “api”, “sdk” and “library” all pretty much referred to the same thing. In fact I had absolutely no idea that there were many different architecture patterns you could learn.
Lack of teaching experience but no lack of enthusiasm
Most developers do not have teaching experience aside from mentoring, and why would they? They entered a career as a developer, not a teacher. Teaching staff at universities have to take courses that teach them how to teach, from what I’ve seen bootcamp teachers do not do this. Further because a lot of the teachers at bootcamps tend to be (usually successful) indie devs, they have not worked in big teams where mentorship was part of their duties.
The teaching assistants at my bootcamp were often previous students and it was my experience that other than giving the answer (the right code to type) and despite being great people who really wanted to help, the majority of them didn’t yet have enough experience to know the answers to questions. At university teaching assistants are previous students also but they are usually grad students who have completed the entire 4 year program and have a more advanced understanding of what is going on.
This lack of experience though was made up for by the fact that the bootcamp teachers and teaching assistants tend to be pretty enthusiastic about learning and teaching and iOS in general. I haven’t been to a computer science program so I can’t say for sure but based on my own experiences in university I would guess the staff at a computer science program probably are less enthusiastic and less excited to teach. Indie devs are devs because they think the technology they work with is cool, they have fun, and they are excited to share this enthusiasm with others.
This enthusiasm is infectious. I think it is what got me through my bootcamp because these people were like me! They were curious and excitable and I really identified with that. I think I would probably never have finished a computer science degree, I would have gotten bored.
I would still choose a bootcamp
I know it sounds like I am hating on bootcamps but I’m not at all. Totally the opposite actually. I do still recommend bootcamps I just think people have to be more realistic going in. If all you do is follow the instruction at the bootcamp, complete the assignments by doing tutorials and googling for code snippets, you will never be more than someone who can make stuff. It will be a long time before you are a “real” programmer and you will have a hard time getting into the industry with a proper job.
Programming isn’t something that can be taught in a few months and I’d argue it’s not something that can be taught at all. Someone can provide you with the foundations but whether your brain makes those connections to enable you to think – which is what defines a programmer – or you simply store how to’s in your memory, is up to you.
That’s why I think a new grad from college vs a bootcamp is mostly only different in their ability to understand programming, their potential to find their first job, and their attitude coming out of their program. I think in both cases actually being a programmer can’t be predicted and is up to the individual student. I do think if you are already in a university program you should carefully consider whether you should leave or not because there are important things to think about on both sides of the coin.
During that conversation on Slack, almost everyone could agree that usually finishing your degree will be the right choice. Having a degree will get you easier access to interviews and to industry people who can refer you for interviews. Going through a computer science program will help you understand programming which will be an advantage bootcampers don’t have. But there are many instances where doing a bootcamp is an equally good decision. I never would have been able to change careers otherwise; there is no way I could have taken that much time out of working or afforded tuition.
I also think that if you are a motivated self learner you can skip the university degree. If you work hard you will gain the understanding that a degree gets you on your own and if you demonstrate these kinds of traits well in an interview it won’t matter what your education is. If you can prove that you can do the job and you are willing to put in that extra time to learn and study, the degree is not needed. But what is needed is an understanding that simply doing bootcamp assignments does not launch you into a lucrative career as a programmer no matter what your bootcamp tells you, no matter what successful student they show you as an example for what their students do.
To be perfectly honest I would actually like to do a degree in the future, for the knowledge I could gain from it. I do feel like it would be valuable, but the interesting thing is I don’t think it would have been as valuable as my learning tool. For me doing the degree after working as a developer, where I can apply real world understanding to the courses I take, will result in much deeper learner and bring more value to my career and knowledge levels.