The Computer Science Mismatch
blog.smartbear.com
blog.smartbear.com
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, 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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
Isn't that kind of a general rule of thumb for just about any major/direction in college?
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.
(College dropout here... :-) )
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.
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. :)
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.
Pretty much every one of my classes included a heavy programming load, including Algorithms. Depends on the program.
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).
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."
"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...
Again, the article directly addressed this issue. Read it.
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)