I graduated from Notre Dame with a Computer Science and Design degree. While the CORE classes are heavily theoretical and forces you to think about fundamental CS concepts (Theory of Computing, Programming Paradigms, Data Structures, Algorithms, etc.), there are electives tailored to learning how to program. I took electives in Mobile Application Development, Building Web Apps, JavaScript, Database Concepts, Data Mining, Human Computer Interaction and Healthcare Analytics. We even have electives in Cloud Computing that allows people to learn how to use MapReduce and other cloud frameworks. If there was something that I wanted to learn that wasn't taught in a course or elective, I either learned it through research (Data Mining & Machine Learning, along with Distributed Systems) or through learning it in my free time on my own (Ruby on Rails and EmberJS). People can't expect Computer Science to teach them how to be a Rails developer, but should take the initiative to teach themselves after they get the fundamentals.
The theory, I think, is nice for a small subset of who we call programmers now. The article highlights that there is a huge demand for what you might call blue-collar programmers who don't need to care about theory, because there are plenty of simple, non-groundbreaking jobs to be done. Your basic CRUD apps.
Those blue-collar programmers need not only more of a vocational education, but tools to match. Higher-level programming languages help. In mobile app development that's what's driven demand for PhoneGap and newer tools like Glide, again for those common, boring apps. https://www.kickstarter.com/projects/1783091318/glide-beauti...
But isn't that why there are coding bootcamps to allow those blue-collar programming positions to be filled? Like the Iron Yard, General Assembly, Hack Reactor, etc. I think there needs to be more advertising of these alternatives to a Computer Science degree if thats what somebody really wants to do.
In my opinion, if you want to learn how to be a software engineer you should take a degree in Software Engineering (which is a natural descendent of Electrical Engineering). If you want to be a computer scientist then do a degree in Computer Science (a natural descendent of mathematics). The problem is that the courses in many universities are misleadingly named.
But they're still not going to let you skimp on the calculus classes. I do think 4-year degree programs should offer people more opportunities for the practical aspects. These don't really have to necessarily be part of the curriculum either.
I did two summers in the College of Wooster's Applied Mathematics Research Experience (AMRE) program, where they paid us a small stipend and provided on-campus housing for the summer. It was run as a little faculty-advised math/comp-sci/econ consultancy to help local businesses, and it was possibly the most valuable thing I got out of college.
All without having to skimp on actual computer science and math in the curriculum. These things are supplemental, not exclusive. And of course not everyone needs to go do a full 4-year degree if they just want to get out and make software.
But those people shouldn't be in 4-year computer science degree programs. And we should stop talking about this issue as if it's computer science that needs to change. It's about making people understand their options and what they will and will not get from each. For most quality CS programs, you have to pursue the practical outside the curriculum. For a code school, you might have to do some self-exploration about common problems encountered in computer science.
Everyone needs to find their own correct balance for their personal abilities and goals.
This! Looking back at my career I didn't really learn to program properly until I was in an industry job staring down the barrel of a massive codebase collaborating with colleagues across different teams. It was great.
But time and time again I find my strong theoretical grounding in computer science coming in handy. The last time I hit the front page of HN was with a blog post about how I spotted an NP-complete problem in $m+ enterprise system for insurance companies. It would have gotten to clients with unresponsive brick-like performance if they upped a couple of parameters because my colleagues didn't understand the Curse of Dimensionality and why it was important.
I'll admit that college professors can live in their own world of academic navel gazing, but there is an actual point to theoretical computer science. And the best time to learn is when you have the time and freedom from short term goals and arbitrary client deadlines. If only there were a few years we could devote to such endeavours before entering the workplace. Hmmmmm...
Right, I get that. But if you look at job listings and see one for "computer scientist" and one for "software engineer," what sorts of things would you expect to see under each listing's "required skills" and "duties/responsibilities"?
I wouldn't expect to see a job listing for a Computer Scientist at all. Except maybe at Google? 99% of the market is writing code.
Maybe that's broken - more shops could sure use a good designer who understands the complexity of problems. But I don't see designers very often, and I've worked at dozens of places.