Consider the difference between:
1. The person who learned these concepts as an 18-21 year old so they could pass a test and get a good grade. They don't really know how to apply these concepts to solve real-life problems yet, and often by the time they encounter such problems they might have forgotten what they were taught anyway. How much knowledge do you really retain as a teenager in college trying to pass a test?
2. The person who learns these concepts because they need them to solve a real-life programming problem at their job. I would wager this person learns these concepts more thoroughly because they need to actually understand them in order to finish their work. Their retention will be better because what they're learning has immediate real-world applicability that they can reference back to in the future.
In many circles person (1) is valued more than person (2), which just seems kind of backwards to me.
How many of you are optimizing data structure algorithms, implementing new crypto, optimizing networking stacks, or conceiving and proving new distributed consensus logic? And even if you are, how much of it will end up in production for your company rather than stay as a fun weekend toy project?
I'd venture to say that's it's something that far less than 1% of the developer population has to bother with.
A few years ago I had to correct some bridge calculations that the Engineer had done :-)
Actually, the shop floor often can have valuable feedback as well. They know more about the actual assembly than the engineers. Sometimes the engineers make things unnecessarily difficult to assemble simply because they don't know that something simple on the wiring diagrams is hard in real life. Like thick cables that can't bend easily.
(Don't take that "you're smart" comment as an insult, I genuinely meant it.)
But having CS degree has usually very little to do with it.
Secondly in my long experience it's not the "engineering managers" that have a degree fixation but the "Human Resources" dept, that usually insist on being in charge of recruitment policy, even though an even smaller percentage of them have a job relevant degree or diploma.
Further if you want decent programmers try looking at people with other types of degree in engineering and science. The thing is CS projects are usually "not real" where as those doing engineering and science degree projects have to design and build real tools in software to do their projects. The difference between CS theoretical and other degree practical programming really stands out. Which was one of the points this article could have gone into more thoroughly.
Just what type of developer are they talking about? There are many types of engineers/developers: front end, back end, write algorithms, do data integration, automate systems, write database queries, real time, graphics, embedded systems, and on and on and on.
So which ones are we talking about? What types of background do they need? The discussion on "the shortage" is always lacking in details.
~ Bryan
PS: I think this issue is also why some say developers != engineers.
I'm always amazed at companies that don't train their people. It's easier to say "they couldn't use HAVING in a query, pass" than to say "I believe I can teach them SQL effectively." But the freedom to think the latter lets you build a very strong team.
It's the genius of Facebook's OSS policy. Let everyone use their stuff so that new people can pop right in, learn on your own time before we're even paying you...
Then there's the, if I HAD to have all these credentials to get a decent paying job, then everyone else should have to jump through those same hoops to or it won't be fair to me.
After maintained code made in outsourcing shops, hiring and helping others hire, I slowly came to realize that more than 50% of programmers out there put in a steady negative input into projects and organizations they're part of. The fact that there are millions more "programmers" who are looking for a job than there are job openings doesn't contradict with the fact there are too few good developers out there, in any country that I know.
One example: Google is known to have a lot of people with CS degrees. Yet often, their software is astoundingly lame. For example, their voice transcription seems to have no awareness whatsoever of the names of people in my contacts, data that Google has full access to. This results in a horrific user experience for anyone who attempts to rely on the results. The problem here isn't what degree the engineer had. The problem is more about conscientiousness. Whoever did that system, does not care.
Myself, not having a CS degree, am keenly aware that people perceive that to be a weakness. So, partly in order to make up for that, but also just because of my personality, I care a lot about the quality of what I do, and I assess quality from many different angles, not only the angle of am I using the most efficient algorithm. I'm not saying CS people can't care, but non-CS people do have more reason to.
I only speak English and 100% of my German friends have great English skills. But that doesn't mean 100% of /all/ Germans have great English skills - it just looks like that because my sample is biased.
I would be bored to tears with engineering, web work offers me an outlet for my creativity.
ie Design a road that is x feet long, has proper water drainage for the area, and meets safety standards for typical vehicle weight, etc, etc. Yes, SOME civil engineers are probably pushing the limits, most just design standard parts that fit into the required schematics.
Coming up with new concepts is the domain of the architect, which lies square in the middle of the engineering / craft spectrum.
Otherwise you are just reiterating the basic idea I tried to articulate using different words. You can't engineer or craft without tools. The difference is in the focus. Engineers, because they are building primarily for function, need to know the invariant rules of nature so they can design the most economical solution. They may not need or use them frequently, like your friends, but you need to know them to be an engineer.
One of the things, my friend's coworker said:
"We don't do computer science on the front end. If you want to do computer science, talk to the back end people."
.. To this day, I don't quite understand how a person can think engineering exists independently of science.
Somewhere someone is carefully designing the plumbing for a rocket engine the better to carry cryogenic hydrogen and oxygen. And somewhere a plumber is using a saw to cut a piece of ABS pipe the better to carry sh*t. Somewhere a computer scientist is working on a lockless database widget. Elsewhere a high school dropout is setting up a web page for a diner. It's all okay.
Also, that question on the Stack Overflow survey saying that 40% of devs are self-taught was a 'pick all that apply' question. Some of them may have a degree and checked the box because they continued learning.
Government licensing of engineering isn't the answer, but on the other hand calling oneself an 'engineer' without any formal or informal training seems like equivocation in the best case and outright lying in the worst case.
Indeed this practice is generally the case in the US.
It seems that there are many who feel free to redefine the title 'engineer' as they see fit. I would ask those people: Why isn't it also the case with 'doctor' (medical)?
"Engineers". Hah. Title inflation at its finest.
No CS degree? So what? How much day-to-da programming in the world requires an actual science degree?
I took some time off recently to fill in the gaps missing though I wouldn't say it's something CS degree would have fixed. It would be nice to have a degree to show for it though.
So on that side, yep, studying a CS degree will give you a breadth of knowledge that you won't get learning 'on the job'.
On the other hand, I very much prefer working with someone that is able to see a gap in their 'mind toolbox', identify it as an issue and fix it to someone that just follows blindly a CS degree coursework.
[0] Hey, don't look at me, it was called like that in my country and, to be honest, it did have quite a bit of computer engineering (electronics, circuits, processor design...) as well as all the usual CS stuff. And maths, loads of maths.
I actually stated down the track to charted status but in the end gave up as it has no value to me.
Code monkey != Engineer != Computer Scientist
All this BS about "Anyone can code!" has had seriously detrimental effects. Now everyone who can do some website bullshit and say "Agile" a lot thinks they're Carmac.
They have a breadth of knowledge in programming languages, compilers, cpu architectures, data structures, complexity, computational math, graph theory, and much much moore. Not to mention other things that come with a well rounded education like history and literature.
Can one learn that on their own or from career experience? Probably unlikely they will pusue each topic. Do you need all that to do your typical software job? Probably not.