Do Businesses Really Need to Hire CS Majors? (cio.com)
A new article in CIO magazine argues that when it comes to computer science, "few of us really need much of any of it." Slashdot reader itwbennett offers this summary:
At the heart of the matter is the fact that most businesses don't really need programmers to be deep thinkers. For them, it's "just as worthwhile to hire someone from a physics lab who just used Python to massage some data streams from an instrument. They can learn the shallow details just as readily as the CS genius," according to the article.
CIO's anonymous author promises an incomplete list of "why we may be better off ignoring CS majors." Some of the highlights:
CIO's anonymous author promises an incomplete list of "why we may be better off ignoring CS majors." Some of the highlights:
- Theory distracts and confuses. "Many computer scientists are mathematicians at heart and the theorem-obsessed mindset permeates the discipline."
- Academic languages are rarely used. "...the academy breeds snobbery and a love for arcane solutions."
- Many CS professors are mathematicians, not programmers. "One of the dirty secrets about most computer science departments is that most of the professors can't program computers. Their real job is giving lectures and wrangling grants...."
- Many required subjects are rarely used. "...it's too bad few of us use many data structures any more."
- Institutions breed arrogance. "...the very nature of academic degrees are designed to give graduates the ability to argue one's superiority with authority. "
- Many modern skills are ignored. "If you want to understand Node.js, React, game design or cloud computation, you'll find very little of it in the average curriculum... It's very common for computer science departments to produce deep thinkers who understand some of the fundamental challenges without any shallow knowledge of the details that dominate the average employee's day."
"It's not that CS degrees are bad," the article concludes. "It's just that they're not going to speak to the problems that most of us need to solve."
This sounds like it was written by a non-CS major who has tied all their business processes to wonky VBA macro laden Excel workbooks.
The whole point of open source is that the software is already written. Just need to put it together like Lego blocks. CS Major won't help. Outsource the development and it will be done in no time.
Is this written by some guy that can't get a programming job because he doesn't have a degree?
"Wah, they're all elitist nerds. Now I have to write for this stupid website to pay rent. They're the stupid ones, not me! Why don't I get paid $200k a year? Wahh!"
So basically this magazine allowed an anonymous troll to write a flame bait piece for them. What an outstanding feat of journalism!
Sure, there are probably a lot of instances where someone with a degree is overkill for the job, but this disdain for education is appalling. I wish the anonymous coward (and in this case it is not some cute ./ term but the very definition of the words) would tell us where he works so I can avoid hiring their services forever.
"I don't want to pay for people who understand what they're doing."
Another success without college article, usually writen by someone who did not go to college. Sure, there are auto didacts able to learn good software engineering principles on their own, but few possess the necessary self discipline. To learn to think you need to hang out with thinkers. To learn a subject well it helps enormously to have good teachers. To learn discipline it helps to have structure. Nothing beats college for that, it's an opportunity you should seize if you possibly can.
Never mind the parities, networking and abundant supply of premium specimens of the opposite sex.
When all you have is a hammer, every problem starts to look like a thumb.
From my standpoint, this is an earmark of of the end of IT as a professional specialty.
At this point technicians are treated as hourly workers- if they exist at all. The word "engineer" is being banished from the IT profession. Support is by phone script. The network is built on appliances. Configurations done by subcontractors. Job qualifications require education over experience. Certifications are required- but are generally useless without a degree.
Programmers are shuffled in and out on contract....code is undocumented. Competence is un-rewarded.
And management doesn't understand the technology with a mentality that says: "Do the minimum possible to get a short term result".
The net result is lots of titles like "Network Manager"... "Network Architect"... "Vice President of Information Systems".... ETC.
And yet none of these people have functional knowledge of real practical networking or server administration. They function as gateways to subcontractors, some of which follow the executive from job to job, and the officer level of the company is so ignorant of the issues involved that it continues.
Then there's the "Cloud".
It's the biggest ripoff any company can be subjected to. A multi-layer IT staff that only administrates the actions of sub-contractors. And yet while this management structure can be three layers deep- it does nothing, presents no skill set, and is useless without the added expense of subcontractors which provide "IT Expertise" as a service. And the company... isn't even in control of it's own data. It's security and availability is now preserved by a third party company whose interest is singularly profit.
So when "CIO Magazine" writes an article saying that CS majors are not needed all I can do is chuckle.
Another consultant who stuck it out.
"We are the Priests, of the Temples of Syrinx..."
It's almost comical just how false most of these stereotypes and arguments are.
1) Knowing lots of theory allows you to approach a problem from multiple possible analytical angles. Lacking that kind of critical thinking will make you an excellent drone employee who can execute orders given by smarter people.
2) I take issue with "rarely used." I know CS people love their esoteric languages, but they are hardly the norm for example code.
3) I don't think I've met a single CS professor who couldn't write code.
4) Data structures? You use them all the fucking time. ALL THE TIME. You just don't know it because someone made it idiot-proof, so now even your dumb ass can use them.
5) There may be some truth to credentials making people more confident, but the same could be said of anyone with any recognized accreditation. Furthermore, I feel like this applies more to businesspeople than scientists.
6) There's a reason you don't find highly-specific industry trending software tools being taught in "the average cirriculum." It's the same reason you learn to dribble a basketball before you learn to dunk: fundamentals.
The highlights read like garbage written for adult children.
"It's not that CS degrees are bad, it's just that they're not going to speak to the problems that most of us need to solve."
What is that problem you need to solve? How to appear to be doing your job when you are actually laying waste to your company's future?
When all you have is a hammer, every problem starts to look like a thumb.
This is an open secret that's been known for decades. The best minds that I've work with are almost invariably from other majors. The sharpest programmer that I know came out of the music department. In most positions, technical skills represent about 1/5 of what you need to do a job. Those other 4/5 matter a whole lot. It's easier to teach a humanities person some technical skills than it is to teach a technical person humanities.
Let the physics major debug it, thereby proving themselves.
When all you have is a hammer, every problem starts to look like a thumb.
The self-taught usually don't know what they don't know, the recent PHP thread comes to mind. There are exceptions of course, but they are rare.
When all you have is a hammer, every problem starts to look like a thumb.
Clickbait aimed at the hard of thinking
When a headline asks a question, the sensible answer is always a resounding No.
I've been progging for 33 years, since my teens. Classic 80ies computer kid. I do that for a living since 18 years ago. I've finally enrolled in a BSc CS track that I'l pobably manage to complete, after having done my German GED High School diploma 3 years back. I'm in the second semester, only taking a few courses at a time, and pushing a wave of exams in front of me. I do part-time, because I'm working as a professional webdev too.
Here's my observation and it's 100% spot on with my expectations and one of the reasons I'm doing CS in my late 40ies:
The basics - Math, theoretic CS ("Theoretische Informatik" ... dunno what that's in english exactly), graph theory, expanded theory of sets and so on are exactly what someone doing anything computer related at a professional programmers and software architects level should know and be able to wrap his/her head around. Being able to algebrahicly express and calculate the complexity of a relational graph in a database is a level or two above simply discussing which goes in what entity. It's tough - boolean algebra is a particularly neat alien monster to tackle if your not into algebra that much - but it's doable and it ups your understanding of what you're doing in your everyday work and it does away with the fog that covers many deeper areas that IT people encounter every day and should know more about. This is the reason you should do CS if you'e doing IT professionally. At least a bit of it on the side, in Kahn Academy or something.
Point in case: I'm in a CS project group right now reimplementing RSA to learn all the n00ks and crannies about it. Very nice. Slow as hell and crappy n00b code by my 19 year old comrades, but we all (me included) learned new stuff. For instance: Asmetric is hard and demands performance, thus is only used to do a preceeding exchange of a symetric key before the show starts. That's why https handshakes take up 1.5 of the 3.5 second rule for loading and displaying websites. Now who without some CS knowlege is aware of this?
However, there is the other side that the GP mentions, and this is a very simple cold hard fact that CS faculties need to get into their collective head: The avantgarde of software development is not in academia anymore. The regular skills you're teaching your students are most likely sub-par and will be nigh obsolete once your students leave for the real world. Yes, there is the occasional Scala that comes out of a university and then gets some hype in the industry, but that only works if the Prof who invented it is in the industry himself aswell.
Point in case here: We're doing this project in IntellyJ Idea already (bad idea imho). The introduction into the IDE was sub-par and the Prof talked bullshit and wrong details about Git. I could've given his introduction on the spot and he would've learned some new things. ... That's because they probably only moved from SVN a few years back.
Kotlin is barely on their radar and it's already being used in the industry, in non-trivial projects.
Bottom line: As far as practical skills go, CS is too far behind the curve. I'm sure they are becoming aware of this and many a college is trying to catch up with close ties to the industry, but right now I learn more and better at local meetups than in class. Graph theory and math however I doubt I find some better place to learn that than at my faculty.
We suffer more in our imagination than in reality. - Seneca
And they ignore that the cheap coders used so often today are already hugely expensive because of their low level of competence. Making this even worse will drive costs for software up, not down.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
This literally was the most idiotic article I've read in sometime. No wonder the author wrote it anonymously. Apparently CS majors are mathematicians, yea, well, I guess he hasn't seen the part where an undergraduate is no longer required to take the mathematics that was once required. I went into a company that had written close to 50,000 lines of code to solve a simple over-time calculation. It was extremely moronic. Their "best developers" from India with CS degrees had written it. All 22 of them. They complained to me their billing was always wrong and would never balance. That part of the code base was a disaster that I wouldn't wish upon anyone. Four simple piece-wise mathematical functions I derived and implemented in about 30 lines of code fixed all of it and replaced 50,000 lines of debauchery in about a day. To boot, I created a proof. There is no telling how much they spent on this stupid issue, but having one person trained correctly could have saved everyone a lot of time and money. I immediately returned to visualization systems, and asked not to be involved in those types of projects again. Amazing how management was dumb founded. I quit a year later. They ended up on f*cked company, then I started my own company. My belief, there isn't enough math taught in a CS degree now, let alone any other degree. When you're faced with a real problem, the mathematical tools escape most today. Pattern identification can only be taught through rigorous mathematics. My recommendation, don't listen to CIO's. Fire the CIO and get a competent COO. People have become lazy, entitled, and now believe the tools that built civilization are unnecessary. This is a real problem that unfortunately mathematics can't fix.
Yes, they probably are. That 5% is what the doctors spend so many years training for. It's great you've never had anything serious. One day, you might do. Should that happen, be sure to thank the doctors who save your life.
Non-CS majors are likely not to recognize intractable (NP-complete) problems when faced with them. I have seen many non-CS majors who call themselves programmers ignore (or just plain not be knowledgable of) simple approaches / heuristics to solve these problems. Also, non-CS majors tend to be unaware of time saving solutions to problems and will often go for the "straight forward" or "brute force" approach which ends up being more costly algorithmically (the difference between solving something in O(n) vs O(1) can be horribly expensive).
I don't know why questions or assertions like this come up every so often within the community, but I find it deeply concerning that many people hold the opinion that CS isn't needed or that an institutional education makes you arrogant. By definition, someone who is intelligent is flexible and willing to change... if they are not, then it's a problem with the person, not the institution.
CS is needed. Make no mistake. If you don't have someone who is a problem solver and knows what they are doing on your staff, you're wasting time and, possibly, lots of money. There is a reason why Google looks for the best of the best from CS programs all over the world.
Gregory Casamento
## Chief Maintainer for GNUstep
" most businesses don't really need programmers to be deep thinkers"
This whole writing is a large pile of stinking bullshite. You don't need people with knowledge? There are plenty of those. You only need shallow coders for a short un-important job who'll move along after the job? Even more of those. Good luck building a company for the long term using such people.
Plenty of "programmers" and "coders" are out there with some level of lanuage knowledge, but what people like the writer above don't always realize is that they usually need people who solve problems, and the ones not being deep thinkers are seldom capable of that. The iidiotic examples about NP completeness shows how the writer is a bigger idiot that those people (s)he praises.
And the bashing of maths, arrogance, etc? It seems the writer is a disgruntled lunatic, toxic and unproductive. Someone I'd really never want to work with, ever.
I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
I'd start with Equifax
throwing away the importance of modern math and CS theories is suicidal. Never had to do with problems due to rounding errors, for example ? Try fixing them without somebody with skills in CS and math! The author of TFA is probably somebody involved with the development of web interfaces, and we just appreciated the results of many years of progress in web development.
I'm old enough that when I got into programming, CS degrees weren't really that common. Most companies were hiring programmers by giving aptitude tests and training people in house. I eventually did end up going for a university degree, after I had been programing for about 10 years, but dropped out after my third year because there was little relevant to the work I was actually doing and the skills I actually needed. For a lot of projects I worked on, being a virtuoso programmer was a lot less important than subject matter expertise. At one time most accounting software was written by people who were accountants that were trained in programming as a sideline.
I've found CS degrees are analogous to music degrees. Having a advanced degree in music doesn't make you Jimi Hendrix, but on the other hand if you want to be a symphony orchestra conductor or write arrangements, you're probably not going to get too far without one. But I've certainly met plenty of musicians with advanced music degrees who could barely play their instruments. And I've met plenty of terrific musicians who have had no formal training at all.
Likewise, there are talented programmers with CS degrees, but a CS degree is not a guarantee of talent. And there are plenty of talented programmers with no degree at all.
Personally, my programming career would have gone just fine if I'd never gotten anywhere near a university, but then, I spent most of it in corporate IT. I wouldn't have a clue where to start writing a search engine, but then, it's highly unlikely I'd ever have been asked to write one.
Whether you need CS majors or not depends on the work you need to have done. If you're going to develop compilers and OS's, then yeah, probably a good idea. If you're doing routine business applications, then probably not so much.
He sounds to me like he recommended hiring physicists for an engineering role, because he's unaware that software engineering and systems engineering exist. He thinks computer science is supposed to be programming.
Sounds like the author is completely unaware that software engineering and systems engineering are fields, and people get degrees in each. He thinks computer science is the degree for programming. Realizing that computer science teaches a lot that isn't programming, he suggests hiring a physicist who learned a little programming.
Maybe an analogy will help him:
If you want to design and build a physical thing, such as an engine, you get an engineer to design it. The *science* of how an engine works is physics, applying that science is engineering, not physics. Specifically, you want a mechanical engineer.
Similarly, applying knowledge to design computer-based systems is the job of an engineer as well, a different type of engineer. Either a software engineer or a systems engineer. The difference is that while an engine needs to be designed in detail, blueprints made, before it is built, for software the detailed blueprint *is* the software. You don't need the extra step of machinists physically constructing it after the blueprints are made.
Computer science is to programming as physics is to engine design.
Computer engineering, like mechanical engineering, is a degree that teaches you how to design robust, cost-effective things. Programs in the former, machines in the he latter.
I have only taken two computer classes in my 40-year career -- Fortran and Cobol. The first was for the credit in case I ever got a degree, I had already taught myself Fortran because I had already taught myself BASIC for a project in my calculus class (I was a math major) and realized I could teach myself far faster than the school can. I took COBOL because I was a computer operator and they wrote programs in COBOL, and I didn't want to stay a computer operator. Every other programming language I've learned since then has been on my own. Except for C++, I took an online course for that.
It doesn't take a CS major to be a programmer. It does take someone who can understand logic and I believe has spatial awareness, the ability to 'see' how chunks of code and external processes fit together and be able to manipulate them in their head. The best programmers I've ever met were musicians, and I think it's because the best musicians have a high degree of spatial awareness so they can 'fit' different parts of a piece together in their head.
There are different types of programmers. There are those that need a spec to get anything done because they aren't able to figure it out on their own. Some CS work will help with that, but I think at some level you can't teach it. It's like teaching me to play the piano .. I can learn where the notes are but I'll never be a concert pianist because I just don't have the dexterity and coordination. That's why I play the saxophone instead of the piano. Then there are the natural programmers that just get it, CS will help them get a job because it checks off a box in HR, but for the most part, they are very capable of learning themselves.
While I believe all aspects of CS can be learned on one's own, they can also be taught faster. Testing techniques, architectural designs, data designs, and a whole host of things can be learned by googling. But, if one doesn't know something exists, one may not be able to find it. A CS degree, at a minimum, should provide exposure to a wide range of knowledge that can be extended as one needs it and technology changes. Let's face it, while we may have come a long way since I wrote assembler, deep down inside, it's still all ones and zeroes, registers and memory.
Idiots abound, both untrained and trained. If companies were more focused on hiring smart people, paying them well, and then hiring the next level down and letting the smart people mentor them and give them the tedious tasks, we all get a lot more done.
Regardless of what degrees they have. Degrees don't mean squat, one has to actually talk to someone to figure out if they know anything.
This isn't mean to disparage learning things, I'm only saying the HR department needs to look past the degree to the person before making decisions. I've known very smart people with and without degrees, and the same goes for idiots.
I'd rather have smart non-degreed workmate than an idiot with a degree. Ok .. I'd rather have a genius with a degree, so the actual order is:
1. A genius with a degree.
2. A genius without a degree
3. The rest of the idiots for tedious tasks, a degree is irrelevant.
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
Sigh. I hear this argument often, but its not true. You don't need a separate person as an architect when your project is small. Do you need an architect for putting together the barn behind your house? No. But its not because an architect isn't needed. Rather its because, building the barn is such a small problem that the builder (programmer) can perform the trivial architecture piece all by themselves (in most cases, in their head, without needing to formally declare it on paper).
It takes a while before college graduates deal with the big problems. Until one understands that big problems come with challenges that require a different approach, its hard to understand why an architect is needed. To go back to the example of the parent post: the architect isn't specifying how exactly one needs to implement the code. It is a false argument to say that they are taking away anyone's flexibility in that area; this viewpoint makes it clear that the poster doesn't know what an architect does. To go back to the building analogy: suppose the customer comes to the builders and say that they want an office building. Who gets to make the decisions on what it should look like, how tall it should be, how many entrances and exits, where does the supporting infrastructure (pumps, networking and telephony equipment, etc) go? Its not the builder or the electrician, or the brick layer or what ever the trade is. They are not laying down the vision of what to build. The architect - whether it is civil engineering or software engineering - is describing what it is that you need to implement - not how. An architect is NOT a lead developer. If you have to blame someone for taking away your flexibility in programming style, blame the lead developer.
There is no such thing as luck. Luck is nothing but an absence of bad luck.
This needs to be repeated: "The idea of programming as a semiskilled task, practiced by people with a few months' training, is dangerous. We wouldn't tolerate plumbers or accountants that poorly educated. We don't have as an aim that architecture (of buildings) and engineering (of bridges and trains) should become more accessible to people with progressively less training. Indeed, one serious problem is that currently, too many software developers are undereducated and undertrained. Obviously, we don't want our tools--including our programming languages--to be more complex than necessary. But one aim should be to make tools that will serve skilled professionals--not to lower the level of expressiveness to serve people who can hardly understand the problems, let alone express solutions. We can and do build tools that make simple tasks simple for more people, but let's not let most people loose on the infrastructure of our technical civilization or force the professionals to use only tools designed for amateurs." - Bjarne Stroustrup
It really depends on the type of programming/systems work that needs to be done. Full stack development is different from back end development, which is different from database development, which is different from business logic development, and so on. Each of these require a different set of knowledge and skills.
Overall, you need the ability to think logically and to be able to understand how the entire system works together.
For some tasks, such as analyzing/implementing business logic, an understanding of the business itself, the ability to manage people, expectations, and timelines, and good communication/documentation skills are paramount. If you're working within a system that is designed to hide away much of the technical cruft, allowing an employee to focus on business logic without the need for so much technical knowledge, then I suggest that a non-stem major, such as an English or Business Management major, can achieve the best results. A CS major might feel out of place, and become frustrated at not being able develop some of the more technical skillsets.
For other tasks, such as those that build up the system that ultimately supports the business, you will need specialized database knowledge, set knowledge, scaling knowledge, systems design knowledge, and so on. For those, a CS, Math, or Systems Architect major can achieve the best results.
One trend I see in corporate CS is the fact that some companies are becoming frustrated with proliferating technical skillset requirements, and are trying to disengage themselves from the tangled technical web many systems become, even going so far as to develop their proprietary own in-house programming languages that require very few industry-standard technical skills to use.
Kind of like how not everyone needs to hire someone who designs programming languages or builds compilers, right?
Studying programming languages and compilers is important. Such a foundation to build upon is how we CS grads can easily learn and switch to whatever "new" language is the flavor of the moment, while writing decent code that has some understanding of the limitations of the underlying architecture it all runs on.
Not having such a foundation can lead to those degenerate situation where "fans" of a language try to use it everywhere for anything and require 3 GHz quad core CPUs and 16 GB of RAM to accomplish relatively simple things.
In short those CS classes and projects teach a young developer there are many ways to do things, a wide variety of tools are available, some tools are better for some tasks, and they learn a little about what happens at the architecture level where all the levels of abstraction have to meet and execute on the available hardware.
Now can a young developer learn these things outside a formal degree program, sure, but very few have the personal initiative to do so and most need the coercing of the university. And the direction of the university as well since many of the seemingly "unnecessary" classes actually turn out to be useful.
If you think a CS degree is limited to complex problems and inapplicable to modest projects, you are mistaken. CS and other degree programs are a foundation, and with a stronger foundation the personal study one does and the experience one gains will be more effective. Again, its just starting on day one with a bigger toolbox and more tools.
And for the record, I've gone both the self taught and formal university route. The former is not a replacement for the later, the two are not mutually exclusive, and the CS grads that have an inherent interest in software development (as opposed to those who were told its a good career path) likely have practiced the former as well.
The theory taught in CS courses has plenty of application and there are plenty of CS people who can overcome the limits of their education, however a high density of CS degrees in a software development team has often in my experience correlated with problems.
Then you have not learned how to differentiate between the CS grads who chose that degree program because they had an inherent interest in programming and those that chose that program because a parent, guidance councilor, etc told them it was a good career path.
Here's a simple way to tell the two apart. Has the recent grad written *anything* unrelated to class assignments? I don't care what their personal project was, sometimes I have to coax it out of them because they think it too simple or too stupid a project. But they are mistaken, all I am really looking for is that they had some sort of personal curiosity or "need" to sit down and write some code that was not an assignment from a professor, a boss, etc. Something purely for themselves.
Your "overcome the limits of their education" comment is misguided, you don't understand a good CS program. Learning to program is left as an exercise to the student, they are expected to learn, outside of class (maybe there is a TA session to help), the necessary programming language to complete assignments. Some do the absolute minimum, these are the "ticket punchers" who take the class to get the degree to get the job, they aren't really there to learn. Others will be more thorough in learning some programming language, will start to think about problems beyond the class assignment, may try to code up a solution to one of those on their own initiative to satisfy their curiosity as to whether they know enough to pull it off, etc. These "stretch goals" are actually expected and encouraged by the good professors. What you think is some extra work they have to perform to make up some shortcoming is actually work expected by the professors, the "exercises" left to the student on their own time.
Now if you want to rephrase your argument that the less capable students are allowed to somehow skate through the program and graduate that is a valid complaint. But to think that good CS programs do not produce good programmers, that is misinformed.
Second time in two days I've had occasion to post my favorite Master Foo story:
http://www.catb.org/esr/writin...
(the story doesn't say anything about PhDs, but it does talk about elegant)
a programmer how to do engineering.
I got my degree in Mechanical Engineering. My whole class had PCs with DOS, Basic, Fortran and 8088 cpus. And access to Vax/VMS sometimes.
In heat transfer, we coded a Chebyshev differential equation to figure out the optimal thickness and spacing for cooling fins. It would take 30+ minutes to run at a minimum. Or 8 hours if you were way off. You learned a bit about better algorithms and speed when things took so long.
It's not the kind of thing I'd expect a programmer to be working on. And the engineer isn't going to be able to solve it w/o programming because of the thousands of number calculations that are needed.
Agreed to a point. Enlarging, if you just want a privacy fence you don't hire an architect, an engineer, a general contractor, and a work crew. You just hire one guy who probably doesn't have a degree in anything and he hires a couple helpers and they put up a fence. You certainly don't hire people degreed in materials science and physics.
Likewise, you don't need to hire a EE to put a dimmer switch in your dining room. You don't hire an ME to figure out why your Ford stumbles on acceleration.
The guys who install home theater speakers aren't acoustic engineers.
Part of the problem is that we often confuse Computer Science and Software Engineering. We actually need a lot of the latter, but a lot fewer of the former. Just like we need a lot of people who can install satellite dishes than radio scientists.
If you need an engineer, get an engineer, not a scientist.
So I'd need a structural engineer to design the bridge spanning the internet between the independent networks of my field and home offices?
--- Keep the choice with the user..
Is why so many companies have data breaches. They hire people who don't know what they're doing, but can jury rig a bunch of crap together so it looks like its working from the outside.
I've worked with these scientists that need a little programming. It makes no one happy, the programming is lousy and the scientist is dismayed at not doing more science. I've got one guy who says "I wrote all the code, I just need you guys to clean it up and integrate it into your stuff", or "why are you designing that piece, I already wrote it!"
Let me tell you, some of the worst programmers out there are physicists. It sometimes seems like they even forget their math as they complain that their exponential time algorithm takes too long to run.
CS is weird, at different universities it comes from different schools.
3 categories, CS program comes from: Math, Engineering or Business. They produce very different graduates.
From business school, worst graduates, learned a fair amount of practicals, but very weak on math and theory. Beware the Java only monkeys.
From engineering school, close to the silicon, at least they've most likely learned an assembler or two. Likely best coders.
From math, loads of theory. Avoid CS majors that don't code, especially those that think they're 'above coding'. Talk about database normal forms past the 3rd. Those are net negative workers, but their are good ones.
In my experience the best single interview question remains: How many languages have you coded in? The right answer is...long pause...how are we counting? Even for a recent college graduates (the good, recent college grads have about 8-10+ years of coding under their belts). Follow up is: Which do you like best and why?
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
No, you can't get rid of the programmers, but yes, in my experience it is the most educated who make the absolute worst programmers. Violent disregard for maintainability of any sort.
Not because they're stupid, but because that's not what they're hired to do. Academics often make terrible engineers.
Most programming is a trade.