The coding projects were, in hindsight, pretty pathetic compared to what I can do now. I wish the program had forced us (or tricked us) into becoming more mature programmers, just by doing a lot of coding and holding our code to higher standards. Come graduation, the best engineers had gotten the experience to mature in this way entirely outside of our classes. I didn't get that at all so I was very behind.
I don't see a reason one couldn't learn the useful skills in 12 weeks. Except, possibly, for the sorts of mathematical intuition that you get from studying CS theory.
However. I think I got a huge amount of intuition on a wide range of engineering problems from my degree. I did modules on compilers, real time systems, operating systems, control systems, security, genetic algorithms, databases, web services, and many more, and while the depth on each of those topics was not great, I feel that if presented with any of those problems now I would have a very solid starting point, and more importantly, when looking at problems in my day job, I have a far broader set of experience that I can draw from, which helps me make much more informed decisions.
I don't think it's the mathematical intuition, I think it's the engineering intuition.
But there's not a class where you learn Linux + shell commands and basic sysadmin-y things, and for those of us who didn't really know what we liked and just followed along through the coursework, it was easy to pretty much not learn any of that useful stuff.. ever. Not before graduation at least.
I got a BS in Computer Science from liberal arts school with a theory-focused CS department.
Pros:
- I developed a very strong sense of code smell. Intuition. My department cared about elegance and good coding practices. I used to be a TA and my prof even had a couple points dedicated to "style" on his grading rubric. I don't think this is something you can pick up in 12 weeks, but at the same time, there are plenty of college CS programs that don't teach best practices.
- Algorithms. Data structures. Systems. Math. Yeah, I probably never have to write out a proof as to why a program is O(nlogn) again but not all programming jobs are full-stack dev stuff. These subjects are a lot more difficult to teach yourself than just reading a book about Javascript. There are a lot of careers in programming that require strong theoretical CS knowledge. Go to Glassdoor and look at the interview questions for entry-level programmers at Google or Amazon.
Cons:
- Didn't know anything about industry practices. None of our professors had ever held a job in the industry.
- Teaches "irrelevant" stuff. Now, this is a commonly cited as an issue with traditional education. I actually disagree because you never know what's going to be relevant in your future. If you go after a specific subset of the field from the start ("I am going to be a full-stack developer") you are inherently limiting your future. You don't know what you don't know. And you don't know if that's something you're missing out on because you never tried it.
Everything I learned in class, I could have taught myself. However, working with others and having built-in schedules and accountability helped me learn what I may never have followed through on alone. Also, being guided toward achievable milestones is immensely valuable. In those ways and others, the course helped maintain my motivation. And, as inevitably happens when learning something completely new, I encountered some hurdles. Usually, it was worth working through those problems myself. But there were one or two that I encountered that stymied me, and might've killed my momentum. Having access to fellow students as well as the instructors was invaluable in those times, and allowed me to continue learning.
Most importantly for me, the course gave me some level of credibility. I had an atypical background and, while development was something that interested me, I didn't see my resume getting any traction. Code Fellows gave me an in, and allowed me to show what I was capable of - that is ultimately what got me hired and has brought me success since. Since being hired, my salary has almost doubled and I have risen from an entry-level position to an architecting role in one of our top teams. If that sounds unlikely, I've had trouble accepting it myself. All it has shown me is that there are ample opportunities for capable people who are willing to put in hard work.
Finally, hiring. It is difficult to find good developers for entry positions. It isn't that hard to find experienced developers, if you're willing and able to pay. But new devs are difficult to sift through. Many look good on paper - maybe they left a good impression at a meetup, or their GitHub profile looks solid, etc. However, it is amazing how many of those people really are... not a good fit. Bootcamps have helped us to weed out those we aren't interested in, and given us a slate of candidates that have a much better chance of working out.
That said, I'm suspicious of this too. You can certainly teach someone git, HTML, CSS, JavaScript, SQL, and Rails in 12 weeks - but you can't go very deep with any of them.
But if the company decided that they needed a new component that would be a standalone Java service (or whatever), I a) wouldn't feel confident that the person would be able to pick up Java in a reasonable amount of time, and b) wouldn't trust them to structure the application in a good way, as they just don't have the experience building real things.
If you took 100 random people and put them in a coding bootcamp, I would expect far worse results.
Regardless, no hiring manager should expect someone to jump into a professional role. The program teaches you the basics and how to find relevant resources to help you learn. If a hiring manager is expecting more than that, that's on them, not the program.