The Computer Science Mismatch(blog.smartbear.com)
blog.smartbear.com
The Computer Science Mismatch
http://blog.smartbear.com/software-quality/bid/227066/The-Computer-Science-Mismatch
11 comments
A computer science degree isn't the only way to get a good software/programming job. In fact, I think doing a more quantitative major like applied math or engineering with a base education of 3-4 CS classes (programming, algorithms, data structures, maybe an applied high-level lab class) would serve many people better. If you have the mind for it learning a language and applying it to problems in your speciality isn't hard and can be done outside a class.
I have never seen a replacement for the algorithmic study outside of a CS degree. It can be approximated by theoretical Math degrees, however. I have a strong bias towards CS/math graduates because of this. Self-taught individuals frequently have a terrible time grasping these concepts and difficulty picking up the language that is taught in CS classes. (n.b.: I don't know WHY this is. Certainly its right there in the textbooks and on Wikipedia. But its been my experience that it is so.)
Also, outside of the hotspots, programming jobs are scarce as hens' teeth. Would not recommend living or going to school outside of a hotspot in 2013.
Also, outside of the hotspots, programming jobs are scarce as hens' teeth. Would not recommend living or going to school outside of a hotspot in 2013.
Those "hotspots" where programming jobs aren't scarce include every major city in the Western world...
Also, the same applies to countless other professions. There isn't a lot of demand for any kind of educated professionals in Hicksville, Middle-Of-Nowhere.
Also, the same applies to countless other professions. There isn't a lot of demand for any kind of educated professionals in Hicksville, Middle-Of-Nowhere.
Defining "programming job" broadly, yes.
However, here in Dallas programming jobs for people who are not experienced Java EE or C# CRUD developers are pretty scarce. Those that do exist for others want pretty specific experience, too.
However, here in Dallas programming jobs for people who are not experienced Java EE or C# CRUD developers are pretty scarce. Those that do exist for others want pretty specific experience, too.
> I have never seen a replacement for the algorithmic study outside of a CS degree.
Perhaps you've not seen it, but a lot of engineering disciplines like electrical, computer, physics, mechanical, mechatronics, chemical go through the basic intro to programming + data structures and algorithms + discrete math sequence. Indeed, somebody with a CS degree is likely to be much more steeped in that material than somebody without, but don't perpetuate the false dichotomy of "took CS and can reason about algorithms, or didn't and can't"
Each discipline had its strengths and weaknesses, but often they are just looking at similar problems from different angles.
EDIT: Reading your comment again I see that maybe this is what you were getting at with the preference to CS/math bit.
Perhaps you've not seen it, but a lot of engineering disciplines like electrical, computer, physics, mechanical, mechatronics, chemical go through the basic intro to programming + data structures and algorithms + discrete math sequence. Indeed, somebody with a CS degree is likely to be much more steeped in that material than somebody without, but don't perpetuate the false dichotomy of "took CS and can reason about algorithms, or didn't and can't"
Each discipline had its strengths and weaknesses, but often they are just looking at similar problems from different angles.
EDIT: Reading your comment again I see that maybe this is what you were getting at with the preference to CS/math bit.
What I particularly find valuable about CS graduates is (1) the algorithmic knowledge usually taught in the upper class courses and (2) the language about the theory and craft. Math people can shift into the algorithmic knowledge without going through mental twists. Some physics people too.
I don't find other engineering majors as amenable to the abstraction qua abstraction that CS pushes. I in particular have had bad experiences with EEs. YMMV.
The language thing is sort of a big deal: when I talk about asymptotic complexity and reason about the math underlying a difficult problem, it's good to be on the same page with my audience. CS majors are taught that, even if they forgot it since.
It's not something specific and magic to CS majors: its just that higher order abstractions are sort of in the curriculum of computer science and math more than others. They can be learned online or from a textbook; it's not some sort of magic only available in a CS course can. :-) And, as you pointed out, diversity brings a great benefit. I find my colleagues with physics, music, IT, and digital media degrees to have very valuable insights, even though we do have communication difficulties occasionally.
I don't find other engineering majors as amenable to the abstraction qua abstraction that CS pushes. I in particular have had bad experiences with EEs. YMMV.
The language thing is sort of a big deal: when I talk about asymptotic complexity and reason about the math underlying a difficult problem, it's good to be on the same page with my audience. CS majors are taught that, even if they forgot it since.
It's not something specific and magic to CS majors: its just that higher order abstractions are sort of in the curriculum of computer science and math more than others. They can be learned online or from a textbook; it's not some sort of magic only available in a CS course can. :-) And, as you pointed out, diversity brings a great benefit. I find my colleagues with physics, music, IT, and digital media degrees to have very valuable insights, even though we do have communication difficulties occasionally.
I know some people that go into programming without a CS degree, but there don't seem to be that many motivated people that learn enough if they don't go through school. There are tons of people who can program a little in visual basic or something, but when we interview people we ask them to implement a stack/queue and have tons of people who fail to come anywhere close.
> I have never seen a replacement for the algorithmic study outside of a CS degree
How much algorithmic study do typical CS students really learn outside introductory algorithms and data structures classes? I mentioned both as something every aspiring programmer/software engineer should take because I agree they are critical. I think the foundation of basic algorithms (search, sort, graphs), complexity, and the data structures in which those algorithms exist provides more than adequate algorithmic study.
How much algorithmic study do typical CS students really learn outside introductory algorithms and data structures classes? I mentioned both as something every aspiring programmer/software engineer should take because I agree they are critical. I think the foundation of basic algorithms (search, sort, graphs), complexity, and the data structures in which those algorithms exist provides more than adequate algorithmic study.
I'm in Chicago trying to higher ops engineers for $70K who are already making $80-90K, and Java devs with 1-3 years experience who are already making $100-120K. What is this "job scarcity" you speak of?
Well, you might try looking outside of metro areas to see it. I'd suggest recruiting in the Dakotas/Montana/Wyoming.
I'm searching nationwide, using Dice, LinkedIn, Craigslist (international nationwide aggregator built for internal talent search!), and StackExchange.
While I've harped about companies allowing telecommuting, the startup I'm at is not my own, and does require people to be onsite (for the time being).
While I've harped about companies allowing telecommuting, the startup I'm at is not my own, and does require people to be onsite (for the time being).
Ops engineers for 70k? Wow, that's a joke
Not my choice, that's my budget. I don't set the budget.
> You might also think colleges would be expanding their departments proportionately, since even with higher numbers of students, the universities aren’t anywhere close to filling industry demand.
Why is that a bad thing? If high demand was to cause a proportionately high supply, then in 15 years we'd find ourselves having too many coders looking for a job.
Why is that a bad thing? If high demand was to cause a proportionately high supply, then in 15 years we'd find ourselves having too many coders looking for a job.
I find this article to be mostly bogus, while recruiters are working hard to bring in talent it's rarely with competing salaries or incentives that people actually want.
Increasingly companies are centralizing and reducing the locations in which they will allow employees to work. While those same employees are placing a higher value on staying close to their families and developing interpersonal relationships.
If you need to find an employee and having a hard time offer more money or expand the area in which employees can work so you have a larger pool of candidates!
If you are a company that truly needs specialized talent, then create it. Stop whining that it doesn't magically appear on your doorstep. Hire someone, train them, and then pay them a retention bonus so they don't leave.
Increasingly companies are centralizing and reducing the locations in which they will allow employees to work. While those same employees are placing a higher value on staying close to their families and developing interpersonal relationships.
If you need to find an employee and having a hard time offer more money or expand the area in which employees can work so you have a larger pool of candidates!
If you are a company that truly needs specialized talent, then create it. Stop whining that it doesn't magically appear on your doorstep. Hire someone, train them, and then pay them a retention bonus so they don't leave.
Stop obsessing about college degrees for the 90% of coding jobs that don't require complex algorithmic work. Hire smart people and train them on the job or hire smart motivated self-learners.
The problem is that those people are even harder to find than people with CS degrees, many of whom couldn't code their way out of a paper bag.
I live in a country where most companies couldn't care less about CS degrees when it comes to developers. Still leaves us with the same problem though.
I live in a country where most companies couldn't care less about CS degrees when it comes to developers. Still leaves us with the same problem though.
How do you find the 'smart people'? (not that a college degree implies that someone is smart). Being 'smart' isn't enough to get the job done.
Time and effort. They don't magically appear. There is no webapp for it. You WILL have to spend a significant amount of time to find these people. It's probably also why you should be spending whatever you can to hold onto them once you have them.
You put out an ad? I would have assumed otherwise, but since you actually asked this question I'll make the obvious statement that a college degree is clearly no substitute for screening for 'smarts'. So either way, the ability to tell if someone is smart is still required. The degree is just more typically used as a crutch, imo.
At University of Massachusetts, you can't get into the CS degree program straight off--you have to take the first 2-3 intro courses, prove you're a) dedicated to CS and b) able to do the work, then they let you in. So if you spend your first year taking gen-eds and getting good grades in your CS classes, you're fine. I think it's a good system.
While it might not be feasible for every college to do this, my college actively tries to get more students to take CS: you don't choose your concentration until your sophomore year (and you're allowed to take any concentration, regardless of what you declared going in/how many others are in it), and departments' survival depends partly on students taking their courses, so they have an incentive to try and recruit concentrators.
EDIT: Also, universities need to learn how to scale their courses. For CS courses, it shouldn't matter whether 10 or 100 students are in a course: you should have enough undergraduate TAs who want to work on course development, grading and hours to scale your classes up with not-too-much friction. That's how one of our intro CS courses went from having 80 students to 180 the next year, and maintained the same attrition rate. Students learn best through each other: the professor should help figure out what the course should be, then get out of the way.
EDIT: Also, universities need to learn how to scale their courses. For CS courses, it shouldn't matter whether 10 or 100 students are in a course: you should have enough undergraduate TAs who want to work on course development, grading and hours to scale your classes up with not-too-much friction. That's how one of our intro CS courses went from having 80 students to 180 the next year, and maintained the same attrition rate. Students learn best through each other: the professor should help figure out what the course should be, then get out of the way.
> So if you spend your first year taking gen-eds and getting good grades in your CS classes, you're fine.
Isn't that kind of a general rule of thumb for just about any major/direction in college?
Isn't that kind of a general rule of thumb for just about any major/direction in college?
In my college you got accepted by the department before you took a single class. I think most work this way.
Sure, I took mostly gen-ed and low level CS classes the first year or so, but I was already accepted to the CS department while doing so.
Sure, I took mostly gen-ed and low level CS classes the first year or so, but I was already accepted to the CS department while doing so.
My college was like this as well. I think the basic idea is that you will sink or swim. If you can't make it in the program then that's your problem. I don't really see the point in limiting who can take part in the program. They get my money and I get to try, whether I succeed or not is totally up to me.
It's like that at the University of Washington as well, except the admittance rate for CS/CSE is about 15% right now and it's only getting lower. The average GPA of an admit is 3.76 which is ridiculously high. It's a good system as long as the department has the funding to keep up with the applicants.
I'd feel better if GPA was an indicator of success. Unfortunately, all it really appears to be is an indicator of future GPA scores.
(College dropout here... :-) )
(College dropout here... :-) )
These types of articles only make sense in Boston, NY, Seattle or Silicon Valley kind of places. In middle America generally few people compete for new/any programmers at a level that would inspire an article.
In middle America, businesses don't realize that you don't need a Computer Science degree to be a systems administrator, much less a CRUD app developer.
It's weird that the same society who thinks "little Johnny is good with computers, he can do x/y/z" has trouble even letting little Johnny get an interview if he doesn't have a CS degree.
It's weird that the same society who thinks "little Johnny is good with computers, he can do x/y/z" has trouble even letting little Johnny get an interview if he doesn't have a CS degree.
They also don't realize that you don't need 5+ years of experience in their specific alphabet soup of languages, platforms, and frameworks to do those jobs effectively.
Nice to get an Informatics shout out, even if it's presented as a computer science 2nd choice. It's a wonderful program that blends code, design, and user experience, with a sprinkling of library science and business ethics. I couldn't think of a better degree for an aspiring entrepreneur.
I'd just like to say that I'm extremely grateful to be working as a programmer right now. Of course, everyone else is, but I started my career right after the .com bust when all I read was how there were tons of new compsci graduates who couldn't find work (I was gainfully employed the whole time professionally).
So, no real comment other than to express my gratitude to be working at a time when so many others in other fields aren't. Hopefully the music keeps playing and we keep circling the chairs. :)
So, no real comment other than to express my gratitude to be working at a time when so many others in other fields aren't. Hopefully the music keeps playing and we keep circling the chairs. :)
Did anyone actually learn software development from their CS degree?
OS: Used mutexes, semaphores, implementation details, argue about pros/cons, liveness/safety properties. Implemented shell, virtual memory, interrupt handling, process tables, scheduling algorithms, and multi-processor kernel support on JOS. Inode management and journaling for a FUSE filesystem. Concurrent network proxy.
Distributed Computing: Paxos, Bayou, Byzantine Faults, 2 Phase Commit.
Network Security: Had to demonstrate SQL injection, XSS attacks, stack smashing various C programs (one exploit required taking advantage of a double free to gain control).
Programming for Performance: cache / matrix multiplication optimization, finding single source shortest path for the USA road network using a multithreaded implementation on a supercomputer 3 ways (Djikstra, Bellman-Ford, BF with chaos relaxation), and again using CUDA.
Algorithms: graph theory (cycle detection, min-max flow, bipartite detection, Kruskal's, Floyd-Warshall, A*), divide & conquer, recursion / dynamic programming, greedy algorithms.
Other courses: compilers, data structures, combinatorics, probability, linear algebra.
These are just some projects I've done over the years, and only a subset of what was taught. Oh, and I picked up boring stuff like git, unit testing, and 3NF along the way.
> Did anyone actually learn software development from their CS degree?
Yes, yes I did.
Distributed Computing: Paxos, Bayou, Byzantine Faults, 2 Phase Commit.
Network Security: Had to demonstrate SQL injection, XSS attacks, stack smashing various C programs (one exploit required taking advantage of a double free to gain control).
Programming for Performance: cache / matrix multiplication optimization, finding single source shortest path for the USA road network using a multithreaded implementation on a supercomputer 3 ways (Djikstra, Bellman-Ford, BF with chaos relaxation), and again using CUDA.
Algorithms: graph theory (cycle detection, min-max flow, bipartite detection, Kruskal's, Floyd-Warshall, A*), divide & conquer, recursion / dynamic programming, greedy algorithms.
Other courses: compilers, data structures, combinatorics, probability, linear algebra.
These are just some projects I've done over the years, and only a subset of what was taught. Oh, and I picked up boring stuff like git, unit testing, and 3NF along the way.
> Did anyone actually learn software development from their CS degree?
Yes, yes I did.
Yes. Mostly from these classes:
1. Operating Systems (custom malloc lib, building own data protocols, servers, networking, etc)
2. Compilers. If you've ever taken this, I really don't need to say more. It's basically a semester-long project with distinct phases all relying on each other (parser, IR creation, type-checking, back-end code generation)
Pretty much every one of my classes included a heavy programming load, including Algorithms. Depends on the program.
Pretty much every one of my classes included a heavy programming load, including Algorithms. Depends on the program.
I found that a lot of the stuff I do daily (architecture, and structuring code for optimum readability, elegance, and performance) was barely even glossed over in my classes.
I guess the how-computers/programs-work type of stuff is pretty important (in a subtle way). I just learned waaaay more by making things I liked in my own free time (games, web apps, tools).
I guess the how-computers/programs-work type of stuff is pretty important (in a subtle way). I just learned waaaay more by making things I liked in my own free time (games, web apps, tools).
I've found myself to be an effective programmer because of the non-degree experiences that allowed me to see the larger strategic and tactical environment in which programming takes place.
However, the foundations that my CS degree gave me allow me to think much more openly about the possibilities of what can be done with computers. I don't need to depend on what a library can do, I can dream big and then find the code that does what I need or build it if I have to.
And strategic thinking is an orthogonal skill that will elevate anybody no matter what professional discipline they are in. As a professor of mine once said "if the only things you learn at university are covered in your classes, you've attended a very poor university indeed."
However, the foundations that my CS degree gave me allow me to think much more openly about the possibilities of what can be done with computers. I don't need to depend on what a library can do, I can dream big and then find the code that does what I need or build it if I have to.
And strategic thinking is an orthogonal skill that will elevate anybody no matter what professional discipline they are in. As a professor of mine once said "if the only things you learn at university are covered in your classes, you've attended a very poor university indeed."
My CS curriculum in the mid-90s had a software development course. We broke into groups and developed a piece of software following the Waterfall model. This was before eXtreme Programming or Agile Methodology were invented so we didn't talk about those.
"CS 371 - Software specification, design, testing, maintenance, documentation; informal proof methods; team implementation of a large project"[1]
[1] http://catalog.nmsu.edu/previous-years/undergraduate/Undergr...
"CS 371 - Software specification, design, testing, maintenance, documentation; informal proof methods; team implementation of a large project"[1]
[1] http://catalog.nmsu.edu/previous-years/undergraduate/Undergr...
It seems counterintuitive that a budget-stressed department would want to turn away potential revenue.
Try reading the article: the departments take a loss on each student. (But we'll make it up on volume?) It's the other departments like liberal arts which are cross-subsidizing them. (Which is cheaper to teach, a computer lab or a poetry class?)
Students don't pay departments, they pay the university itself. The university determines the department's budget. So departments will have budgets which allocate the number of professors, instructors and teaching assistants. From there, they determine the number of courses and sections they can offer. And, from there, they will determine how many students they can handle.
So more people are applying to those programs - but what are the drop-out rates? I've heard that they can be quite high for these types of things.
The problem my alma mater faces is an incredible surge in CS enrollment but a fear of a 2000-style pop in which all those students flea the program.
IOW, they've got more students trying to major in CS than they can possibly handle but are afraid of hiring more professors to handle the load. That's what they did in 2000 and they wound up having three professors with nothing to do. For a small school of <3000 students, that's a big problem.
Their solution is just to make the intro courses so difficult that >75% drop.
(Intro to CS in Scala will do that)
IOW, they've got more students trying to major in CS than they can possibly handle but are afraid of hiring more professors to handle the load. That's what they did in 2000 and they wound up having three professors with nothing to do. For a small school of <3000 students, that's a big problem.
Their solution is just to make the intro courses so difficult that >75% drop.
(Intro to CS in Scala will do that)