Why students are throwing tons of money at a program that won't give degrees
washingtonpost.com
washingtonpost.com
To me this lack of training is more concerning from a quality point of view, and in software who says quality says security. But I am not convinced a formal computer science education teaches coding best practices either (but not having done one myself it is hard to judge).
Companies used to build LOB apps in Microsoft Access, and nobody believed you needed a degree to use Access (plenty of business people figured it out for themselves, just like Excel). Now nobody uses Access anymore, but the web frameworks that replaced it aren't that much harder to use, and don't really involve a lot of complexity theory or parser generators.
Here's a true story, a few years ago I was a DBA on a large-ish Oracle database (~50T) supporting many users. One guy would run his report, and it would time out (in his client software, Business Objects I think). So he would run it again and it would time out. But on the 4th or 5th attempt, it would work! Why was this? I was curious enough to investigate and what was happening was he was gradually getting more and more of his working set into the cache, and eventually he had enough in-memory that his query could complete in time. Let me tell you for sure, that guy did not have any mental model of computation that led him to discover this. He just tried it and it worked. Would a guy with a classic CS education have done this?
Not that I've seen sales people do such activities before...
One thing seems pretty clear to me though: If you let people that can't write code graduate, you are doing them, and your program, a disservice. The most theory driven industry jobs I have ever seen, and I have seen many, require coding competence.
Also, let's separate the notion of the CS degree from the notion of CS knowledge. They are not one and the same. Many good software developers do not have a CS degree, but have taken the time to accumulate CS knowledge.
Even "Best Practices" are very fluid. it's easy to add a lot of overhead that's unnessisary or to shrink past the point where current overhead is a good idea.
However I think that software probably falls in to two general categories:
* Stuff so generic that everyone needs one even if it isn't an exact fit. (Think houses, and standard things in houses <> Operating systems, basic information processing software of various types.)
* Stuff that is custom made or otherwise fabricated to an exact need out of an otherwise generic template. (Artisan works, and knowledge of customizing things that are more difficult to do correctly without basic concepts.)
Open source software as a public service (and a thing that academic institutions should be contributing with completely open patent free work) really fills the first of those categories. Security audits and security code should also be a government service (with multiple governments as well as public entities working in the open with audit-able logic for every security decision as a web of interlocking watchers).
And that's exactly the sort of work which will eventually be easily automated away. The only real reason that it still uses people even now is that someone needs to select the refactoring menu items in a Java IDE. A smart company will use a better language, and have six developers delivering the impact of hundreds of IDE monkeys.
> “You emerge from a bootcamp fit to do an oil change, but not design a car,”
You emerge from an undergraduate degree with a permission slip to join the professional world. Undergraduate CS degrees aren't 5 year engineering programs. They are just your average bachelors like the rest of them. Your major is a demonstration of what you were interested in during college, not whether or not you're capable of being a a contributing member of an industry. The vast majority of the fundamental career knowledge is learned within your first two years. A couple years into my career in finance, my coworkers with English Literature degrees were impossible to differentiate from those with Finance degrees (those that made it that far). The reason isn't because the Finance major was entitled or less capable. It's because the two were equally capable, and the general industry knowledge plateau comes quickly before you start working towards some specialization.
It depends on where you go, really. Undergraduate "CS" programs are all over the place, ranging from programs that might be better called "IT", to ones that are basically just specialized math degree. A good marker, IMO, is whether the program requires a compilers course that actually requires that the student implement a compiler. Of course, I would say that, of course, since mine did. :-)
It also required enough math that I could've gotten a dual degree in math by taking (IIRC) two more courses. I was in calculus-based physics and ODE right there with the engineers, too. Where the programs diverged was when they started taking statics and dynamics (after physics), and I started taking compilers, theory of computation, and stuff of that nature.
That's my point. I did a double major in Math/Econ with a minor in Applied Statistics. I could have switched 2 courses away from my Econ major and instead received a minor in CS. There are countless boot-campers that just didn't take enough 300 level courses to put it on their resume. Looking back on my degree and my career so far, I can't say I've used the phrase "generalized autoregressive conditional heteroskedasticity" in a context other than a joke or in conversations exactly like this. That's from Stats-3xx time series analysis. I worked as an equities trader for the first half of my career before switching to programming. It's harder to get more time-series analytical than that. Who uses that phrase? The PhD econo-quants and risk managers who spent a bit more time studying it than the 2 weeks I went over it in an alcohol filled second semester of my senior year.
I'm simply saying, undergraduate degrees aren't much more than a rubber stamp. Sure, you may have learned more about data structures than I did. We both probably took some form or another of graph theory, linear algebra, algorithm design, etc. What you learned in a semester of data structures, I'm sure I learned 95% of it in a year on the job. Similarly, if you decided to go into finance, I'm sure you could pick up all the meaningful parts of macroeconomics in a year. Because that information is USEFUL in the day-to-day. If you decided to apply to a job as an equities trader, you wouldn't be dismissed because you don't know how to implement a model you will never use.*
* unless, of course, you decide to work towards being a quant. In which case, you'll probably know more about it than I do in 2 weeks. * poof *, there goes the value of my undergraduate degree.
The program itself was three months of intense 50-60 hour weeks. Then I continued studying full time for a month until I got a job. So by the time I showed up to work, I had put in ~7 months of full time coding.
Since then, I've still been going hard, as have most of my classmates. I've been working in two languages that I didn't learn at school, and using a third one in my side projects. Nine months removed from school, I still spend a lot of my free time studying whatever looks interesting to me at frontendmasters/egghead/pluralsight. I read a lot about programming, and listen to 5-10 podcasts each week on my commute. At some point the three months I spent at a bootcamp or the four years somebody else spent in a CS program are irrelevant. How passionate are you, and how hard are you willing to work?
Keen to hear if you think you're an average example of your cohort or in the top x%.
Of a class size of 17 people, many of us had jobs lined up before we finished while several were / are still taking time to "get ready"; There was only one who sort of remained clueless during the cohort, but in spite of that they have worked very hard to keep up in class.
The coding required to get into GA was minimal, and the interview beforehand was not very difficult-- the person I mentioned who was generally clueless actually blew through the admissions process (better than I did, in fact).
I'm not sure where it's appropriate to set that barrier to entry, especially given that most of the early material caters to someone with very limited knowledge-- it would have been interesting to see a course targeted at someone who already has a foundation in basic web technologies.
Living in Atlanta, I've had the opportunity to speak with grads of many other bootcamps both in Atlanta and on the West coast. The biggest difference I really notice is between people who were able/willing to work those 60/70 hour weeks to gain as much as possible and those who couldn't/wouldn't.
Kidding aside, I definitely wasn't the best or the worst in my class. The variance from best to worst was pretty large, but that's obviously going to be true for traditional CS degrees or anything else in life as well.
For the record, I took a bootcamp over doing a master's in CS: the clincher for such a decision came when an engineer friend at a tech unicorn said he'd take a smart bootcamper over a regular CS grad on the basis that from hiring experiences:
- you don't use most of the stuff you learn from CS at work (when was the last time you proved root two was irrational, or used red-black trees on the job?)
- a bootcamper will write cleaner code and is less likely to have some of the stereotypical traits engineers are prone to having (e.g. takes feedback badly/doesn't communicate well/takes feedback badly) he attributes this to the more diverse pool of people boot camps attract
To be frank, I think the aversion to bootcampers primarily stems from individuals' need to validate their own life choices thinking things like "I studied CS for four years to become a Software Engineer so how could someone come close to playing catch up in 3 months!?"
But really this style of thought is flawed - people underestimate the fundamental value of doing a degree, which teaches you way more than just knowledge. Think how much less developed you were intellectually coming out of high school than post college.
With that said, it's also probably true that there are plenty of bootcamp graduates out there with an inflated sense of worth and companies that have hired/rejected poor bootcampers and now have a set opinion about bootcamps.
To these people it's worth noting that bootcamps have only been around for a couple of years, and as is the case in any good startups, the product improves as the companies grow and mature and have time to iteratively improve it.
Graduates from a bootcamp today are probably of appreciably higher quality than they were back then.
Used them yesterday in fact. Then again, using red black trees and knowing when you need to isn't uncommon in kernel programming. I'd couch this more: you generally don't need to care about using red-black trees. Until you do need them that is. The key is knowing and realizing when that time has come.
Just thought I'd put my $0.02 in on that one as it is both my opinion and experience.
Though you raise (inadvertently) a related issue in mentioning kernel programming:
When asking a friend whether I should learn C, he posited:
Do you want to be a programmer or do you want to be a coder? If you want to be a programmer you should look at C at some stage. His stance being that "programming" involved writing lower level code while "coding" involved working higher level with scripting languages and frameworks. There was no value judgment in his use of the words programmer and coder btw.
So really it's a case of realising what you want to do with your code:
If you're interested in working on kernels, OSs or videogames then CS is probably going to be more useful than a bootcamp
If you want to work on building webpages and apps, a bootcamp could be a fast means of getting you onto the first rung of the ladder.
The world of software is large enough for both CS and bootcamps to coexist.
I often press employees on this - it doesn't require a 4 year degree, but it does require years of education. You can be a developer the rest of your life, or you can continue to educate and push yourself.
I graduated with a 4 year degree and definitely had a head start on some of the more esoteric concepts, but I think it took 7-10 years before I was confident to call myself a software engineer.
If you're writing a web page though... I'd say you're nuts to use C/asm. You should still at least learn some C at least in passing but I'm also a freak that likes to learn a new language every year. I don't stick to them but its a good exercise I think.
The constants though are data structures and complexity, no matter what language you use those will always come in handy. Knowing when things turn quadratic is really useful. Or to be able to spitball how the tree structure you're using is going to fall down with N entries or traversals is a good thing to know.
And that's why of you're a good software engineer, your job is secure. Because most people definitely aren't that and just end up making a real mess of things.
Is it so unlikely that someone who has earned a decent degree (which involved self study) and gone through a bootcamp to foster that behaviour in a software context may also have it?
I think the comparison of bootcamp vs 4years CS degree is not very apple to apple, because well, you compare on 1 side people who almost "discovered" programming 3 months earlier to people who have been studying it for 4 years + most of the time have had internships etc.
What I can say tho, is that, for junior positions (I guess one of the points of the article) those bootcampers can be 1. very good and productive, and because of the nature of the bootcamps, 2. usually very motivated and eager to learn, get feedback etc.
So if you are willing (and have resources) for some extra mentoring, bootcamps can be a very good additional pool for hiring (since hiring engineers is very hard is most places) and can be very good long term for your company.
I joined a YC startup after my bootcamp and continued to work my ass off there for a year (during work, and after work to continue to learn CS concepts etc.) and I think I can say I was successful there. I had good mentoring despite our size (3-4 engineers at most) but I eventually became a good asset to the company.
After 1 years, the company was sold and I needed to find a new job. I did well on multiple interviews, both startups and big cos (facebook and co) and am now very successful at a top startup in the bay.
You just need to expect what is expectable - I remember when I did my bootcamp, I was never promised to get a CS degree in 3 months - I was promised to learn the basics I would need to 1. be hirable at a junior level and 2. learn how to learn, to be able to figure things myself and continue growing. That's what I got from it.
I think everything's the same - if you are motivated and driven to be successful, you'll be successful, if not, cruising through both a CS degree or a bootcamp won't do it. I've interviewed hundreds of people, from bootcamps, new grads, masters, phds, experienced people, and people from each background have done from bad to great.
Did you have a college degree before the bootcamp? People frequently mention you don't need a computer science degree, but plenty of places require a bachelors for standard office work. And having gone through a bachelors program might prepare someone for the "learning how to learn" aspect that's required for survival after the bootcamp.
Did you possess any prior technological aptitude(s)?
How much prior experience with mathematics did you have? Are you good at math, or able to understand it with enough work?
How strong are your logical skills, and how were they maintained prior to the bootcamp?
Anything else relevant? Autodidact? Connections to other people? Occupations of parents?
Also, having the financial resources to pursue a bootcamp as an option might also be indicative of something.
I think my point is that the promise of a bootcamp as guaranteed success no matter what your background seems uncertain without more data.
It's something that I think should be more open and verifiable, and that would include being able to verify that the published data is legitimate. Because it might help prevent against shadier operations who would obviously not release this data or attempt to fake it. If they're a for-profit entity, it's not in their interest to release accurate data if it were to be bad for business.
It might be in the interest of the best bootcamps to lead by example here to prevent the proliferation of scam bootscamps that tarnish everyone's image.
I don't feel like any bootcamp guarantees success, at least no more than a bachelor's. I had a lot of trouble getting a job despite a good degree in Canada, and am now way more successful with a bootcamp in the bay area.
I'm not trying to say one is better, they are just different way of learning, different experiences and different length, so each work with different type of people I guess.
And being in school for those years doesn't tend to make people more stupid, so maybe it had some effect. I think people underestimate how quickly some skills like math atrophy when they go unused, or even more basic skills than that.
It's funny to see such strong regional differences. Here, I believe it's normal for temping agencies to turn people away unless they have a 4 year degree (and a 2-year degree isn't considered valuable). I always get the impression that the Bay area is the most open to people taking this route.
Most of my friends in other industries HAVE to go back to school for an MBA or other degree because their company "only give X positions to MBA". Stupid.
Some people need that $30k expenditure to keep their wandering minds in check when the going gets tough at the beginning.
I remember my first paid experience coding...was reading/learning 6+ hours every day on top of the project itself.
With that said, I can't say enough good things about developing the skills of self-education. I was homeschooled K-12, so I probably have a leg up in that department.
The topics you learn are current and high priority (e.g. learning to write clean and readable code while or testing)
Common issues are well documented/there is a support network in place - you hit diminishing returns on learning quite fast when you get stuck.
Yes, you could probably learn this stuff yourself but it'll take longer and don't underestimate the value of collective intelligence/group learning
I think that there is a lot of arrogance in the software industry, and it tends to do far more harm than good. It bubbles certain mindsets and pushes out others. In the end, it does little for what's being worked on, and when good enough solutions that work are displaced by "best" solutions that come out months/years late and/or outright fail.
In the end, you can get a LONG way with pragmatic choices... you can go even further, with consistently simpler ones. The more complex something is, the more likely it is to fail when you need it to grow the most. Time and time again, people just don't see this. I've been guilty of it myself.
You don't need a C.S. degree, or a bootcamp, and honestly, if you do, you're probably not enough of a self starter to actually be productive, help and work with a team checking your ego at the door anyway. I'm guilty of this myself at times. But the debate is pretty silly. Nobody should go six figures into debt for a job that starts out at less than six figures. And nobody should expect to master anything in much less than a couple years.
What often bugs me more than anything is institutional resistance to anything new.
Okay, going to sign off this messy rant... I just find the whole debate the article makes irritating, as it's the people more than the process that determine success.
I think that you can actually get very far in terms of educating yourself with the materials and tools that are now publicly available. I'm currently spending a lot of time doing this, so I suppose it's an axiom that I've accepted.
https://github.com/hypoalex/machine_learning/blob/61d6729489...
For instance, I personally find Jupyter Notebooks many times more useful than traditional course notes. They're executable, they can be revisited and expanded upon, and they're actually used commercially... so you're killing many birds with one stone. It would be a very different world if the first thing you learned in high school was version control and Python, but it might actually be one worth living in.
That's just one piece, but one I've consistently come up against. There's also the more functional vs. classical (class oriented) approaches.
In any case you can come up with "perfect" is entirely subjective... and if it takes significantly longer, it's rarely the better option.. so long as every piece is modular enough that it can be ripped out, rewritten or replaced easily, and with that mindset in play... then it isn't even good enough.
That really depends on how you're measuring productivity. I needed to get a CS degree to become a good programmer. Not because I'm not a 'self-starter', but because I self-start in so many different ways that I'll avoid becoming a great programmer and instead become a mediocre musician, painter, runner, mathematician, teacher, cook, physicist, biologist, historian, novelist, and programmer. Among other things. I love learning and mastering things. But I don't have the self-control to abandon everything else I love in the world to just do programming unless I've got a dedicated channel for doing that. That doesn't mean I'm not a self-starter.
The value of the CS degree, for the people that try, is that they spent the better part of four years coding something. As compared to someone that hasn't, and now it's the team's job to carry the slack.
If employers prefer actual CS degrees, they should be pushing to make obtaining said degrees not require people to go into massive amounts of debt. The "gold rush" might be part of the issue here, but the cost of bootcamp certs vs degrees is not insignificant, as the article states.
In many countries degrees are state sponsored and you don't need to debt yourself for life just to get a CS degree.
That said, 10-12 weeks of "intensive" coding is only as effective as what students bring to it. If you have a science background, and have less instinctive shock at dealing with "symbols", rigor in language, and scientific hypothesis (or rather, knowing how to recognize the difference between a system error and and error in your expectations)...you'll undoubtedly benefit from being thrown into an intense course of learning devops and software engineering best practices. If not? You may be able to know and memorize the steps of complicated processes...e.g. how to deploy a Rails app from scratch onto a production server...but you might be likely to only adopt the skillset described in the article as "the same skillset that can be easily outsourced or offshored."
10-12 weeks is a short time to learn the ropes and get all the moving pieces together...but it is almost certainly too short of time to build the right mindset -- the kind that can properly debug. I've noticed that top-tier bootcamps that promise 90% to 100% rates of employment at $80K+ also have stringent acceptance rates, such that the vast majority of students they're working with are STEM graduates looking to get into dev. The outcome is probably significantly different for non-STEM students looking to do the same.
The faculty was also concerned about succeeding through the acceptance filters - if they couldn't make less prepared students successful, then expanding in order to accept more students is a really poor choice.
If you pay cash for a bootcamp and then work for $30,000 a year for 4 years on real projects, you would be a much more attractive job candidate than many people with an undergraduate CS degree, and you might even have some savings instead of massive debt.
The problem with "bootcamps" seems to be that some people think that they can short circuit the learning/experience process, which is just not possible. If willing to keep learning after the initial program, seems like it could be a good option.
At the same time, people are very arrogant about their CS degrees. I was very successful as a student in a non-technical field and it's honestly amusing that a student in a giant CS department at a random public university would think that they have a competitive advantage against someone like me in the workplace simply because they have a technical degree. CS majors don't have a monopoly on smarts and 95% of enterprise software development is honestly not rocket science.
This will be a good thing. Students who were somewhat interested in programming (but not so much after delving into it) will have picked up some basic skills. Those who were very much interested in it will have to take less of a 'leap of faith' when it comes to a third level course.
When the realities hit and they realize that some of it is mentally taxing and boring work, they give up and quit.
I've been writing software for 20 years. I haven't gotten bored yet.
In any boring task, I can always learn something new that's interesting.
I learned more about software on my own and by working with some of the physicists who specialized in data analysis that I did in any of my CS classes. Many of the CS junior/senior level CS students couldn't do anything real-world. Couldn't hand-optimize code. They also couldn't get anywhere without a fancy IDE that did everything for them.
Had an argument with one of the faculty members about the viability of Python as a useful language. They dismissed it as anything more useful than a scripting language, and likened it to an uppity BASH substitute. I argued that when used properly, it is a very dynamic language with many uses.
All in all, the faculty was all over the board. There was a particular faculty member who was fairly skilled with machine learning and NLP. Until he went on vacation, joined a cult, wiped the NLP research server, and went around campus spouting how the planets were going to align the following December and life as we know it would end.
So the student body wasn't top notch, which is perhaps to be expected at a CC (no entrance exams), but how was the faculty?
A free degree is always nice.
>Do we really need to pay $10,000-30,000/year for gen. ed.?
General education is very valuable if you're not so myopic as to believe you already know everything.
Our program spent a considerable amount of time setting career expectations and preparing for interviews. High performing students would regularly find themselves landing mid-level software engineering jobs based on their interview performance, but we would try to maintain the expectation that an internship or a Jr dev position was really great. We saw some of our competitors get torn apart by past students who's expectations were higher than the reality of being a bootcamp grad. You can't tell someone they're going to make 100k/yr after 12 weeks of learning to code. People believe you, buy into your bullshit, and get burned.
With so many bootcamps popping up, consumers have a lot of resources and choices to find a good program. Low quality programs are slowly being edged out by the market. It's becoming more competitive, which I think is good.
Bootcamps aren't a silver bullet, but they help a lot of people get on a trajectory of a successful engineering career.
They also help with diversity, a lot of folks can't afford to get a CS degree, whether it's because they have an aversion to crippling debt, or they're a single mother who has to work full-time, or they just don't thrive in a university-style environment. I know a lot of really unique engineers that wouldn't have been able to have the careers they do without a bootcamp.
Teachers come to mind here. Many of them encounter a LOT of difficulty when they try to find jobs outside of education. Many, many companies completely discount their experience regardless of the length of time they've spent in the profession. This essentially means that teachers who've been in the system for a while and are becoming disillusioned with it are almost forced to restart their career; this is very painful for those that have many, many years in the game.
A bootcamp is a great way of getting the experience needed to restart their career into a well-paying industry (for now). Yeah, they don't learn Big O or discrete math, but they do learn how to write an app that will make their founders a LOT of money if it sells, and that's worth a lot.
BTW: A lot of high-falutin places (like Jane Street, which I worked at a few years ago) care much more about your experience and what you've done than where you came from (at least on the development side of the house, which pays handsomely compared to market; the trading side still heavily recruits from the Ivies). I remember them hiring a few Hacker School type devs, and if they survived our interview process, that means they HAD to be good.
Programming professionally requires constant learning even when your stack remains roughly the same. No one survives professionally on the strength of memorized rails g commands, and even if one did you'd have to be insane to want to.
I'm sure some people muddle through bootcamps who really don't have the desire or ability to always be learning, but, at least at quality schools, they're in the minority.
(Disclosure, I'm a bootcamp product who had previously been learning on my own)
Bootstrap programs seem great as an accelerator for folks who are inclined to otherwise be self-taught (of which there are lots). Others would make great developers, want a little more time or standard academic environment, but don't want all the math.
I don't like the idea of boot camps unless there's some follow through but I think it's very important for there to be good alternatives to the 4-year CS degree path.