How is that different from any other job application? The job will clearly go to the boss's nephew, who is totally great at computer stuff because he plays so much WoW. (Though it is a well known fact that the best middle management comes from Eve Online).
Seriously, you will generally want to look for people who are intelligent and good at abstract thinking. In my biased opinion, you should be shooting for the best humanities majors (In disciplines like English, music, philosophy and math), as the targets of such an apprenticeship. Not high-school graduates.
Until it catches on, your competition for employing them will be Starbucks and grad school which means they will be a steal compared to programmers trained at Stanford or MIT (TM). A liberal arts major would be pleased to be making 30-40k a year out of school. Also, you can always fire them if they don't work out.
If it then catches on, you might be able to expand to people who are interested in making programming a career, then you might be able to catch some of the
Currently, CS courses at top universities have very little to do with the business of actually programming, they are more based on mathematical theory. SE courses tend to look more like 'software engineering management.'
In each discipline, you learn important skills... but they tend to have very little to do with the craft of sitting down at a computer and making your thoughts into working code. (I have a master of science in computer science, I learned many things that made me a better coder, but the degree didn't teach me to code, work experience did).
> Currently, CS courses at top universities have very little to do with the business of actually programming, they are more based on mathematical theory. SE courses tend to look more like 'software engineering management.'
Where does this meme come from? If you get a CS degree from CMU, you are going to program your ass off. You are going to write at least one of a compiler, a HTTP proxy, or an OS kernel from scratch (and if you choose to, you will write all three) as well as countless smaller applications (your own heap allocator, your own shell, etc). I didn't go to CMU and those are the project I know about.
At UMD, the curriculum will have you spending most of your time, again, programming your ass off. I don't think there's a single class where you'll spend more time on "mathematical theory" than on programming.
I went to CMU and can confirm this. I coded a shell, filesystem and kernel just in that one OS class. To anyone who thinks this doesn't prepare you for something just because the focus was on the OS abstractions, algorithms and concurrency instead of "good coding design", you are mistaken.
Universities teach math-like computer science instead of OOP/Code style/Agile/etc because it is much harder. You can learn OOP and the rest on the job. College is meant to broaden you as a person, to teach you to think -- not teach you to do a specific skill set. Not all of them can do it, and not all students want to learn this way, but the dream is still pretty great.
Interestingly this is the opposite of what apprenticeships are for. They teach you a skill set from master to student. Perhaps these two systems have less in common then we originally thought. Should the comparison be between apprenticeships and vocational schools?
There are, of course, exceptions, but programming in industry is typically a design job. Your focus is on designing an infrastructure for the application that will allow it to be functional and maintainable, and survive massive refocusing of scope without determent to the prior two points. Things like compilers, HTTP proxies, and OS kernels are plugged into the infrastructure, not written as part of it.
Your concern, as an industry programmer, is not whether merge sort of bubble sort is the right algorithm for your problem; you will just hand that off to the built-in sort function. Your concern is whether or not MVC is the right design pattern for your application. Again, there are exceptions, but that is fairly typical of the average programming job.
So while you might pick up some design skills during your study in a CS degree, it is not the focus of the program. That is where the meme comes from.
I'm not sure if that's a legit complaint. Can stuff like that be taught adequately in a course or is it something you pick up by "just doing" it?
A lot of classes where you program your ass off force you to make design decisions, some explicitly as part of the assignment and some implicitly. Isn't that valuable? What would a "design based" curriculum look like?
When you're hiring someone who's completed an undergraduate degree in CS you have lots more information
At the CV level:
1) A university which has filtered out bad candidates for you, which university/degree you got is a good quality filter
2) An undergraduate thesis which has been chosen by the individual, both the topic and the complexity are good indicators of the candidate (did they build a website or did they implement a new GC algorithm)
3) Internships (did they spend the summer work at McDs or Google)
4) Open source / spare time projects
At the interview level:
1) An ability to write code, you can directly test if they're capable of taking a problem and turning it into a solution (aka fizzbuzz). This is a very distinct skills and no-ones come up with a good way of predicting ability in it despite numerous attempts.
2) An understanding of abstract data structures, again it's very hard to test if someone can understand concepts like call stacks and hashtables without being able to test those things directly.
That's a hell of a lot more information than you'll have with 18 year olds or even with humanities majors (incidentally I assume you classifying math as a humanity was in error).
Of those firms I know who hire non-CS grads to do programming most of them require some experience with programming (which tends to cover most maths, physics and engineering students). Very very few companies try to hire completely unexperienced programmers.
Also, you can always fire them if they don't work out.
I'm guessing you're in a right-to-work state, in the UK and EU firing someone for anything other than gross negligence is very, very hard. Hiring someone who "just doesn't work out" is a huge risk for an organization that can't afford to shuffle them off into a "VP of Paperclips" position.
"in the UK and EU firing someone for anything other than gross negligence is very, very hard"
It certainly isn't difficult to fire people in the UK providing they haven't been working for you for too long (it's either six months or a year). Other countries in the EU can be a nightmare though.
Typically it's laid off or terminated without cause, in which case the person gets unemployment, the business takes a hit on their unemployment insurance but it's typically no hassle as long as it wasn't for a reason that's explicitly against the law, like discrimination.
"Terminated with cause" avoids the hit in unemployment insurance to the business, the person doesn't get to collect, but they can sue you for wrongful term if it really should have been the first category -- here's where you need to document gross negligence.
Seriously, you will generally want to look for people who are intelligent and good at abstract thinking. In my biased opinion, you should be shooting for the best humanities majors (In disciplines like English, music, philosophy and math), as the targets of such an apprenticeship. Not high-school graduates.
Until it catches on, your competition for employing them will be Starbucks and grad school which means they will be a steal compared to programmers trained at Stanford or MIT (TM). A liberal arts major would be pleased to be making 30-40k a year out of school. Also, you can always fire them if they don't work out.
If it then catches on, you might be able to expand to people who are interested in making programming a career, then you might be able to catch some of the
Currently, CS courses at top universities have very little to do with the business of actually programming, they are more based on mathematical theory. SE courses tend to look more like 'software engineering management.'
In each discipline, you learn important skills... but they tend to have very little to do with the craft of sitting down at a computer and making your thoughts into working code. (I have a master of science in computer science, I learned many things that made me a better coder, but the degree didn't teach me to code, work experience did).