I took some computer science courses over the past few years on the way to a degree in English and comparative literature. The courses were more or less what I expected: heavy on theory and algorithms, lots of programming homework (in Java, no surprise), more than a bit of math. The degree requirements for computer science majors are based on a similar mix of classes. (My experience was at Columbia, for what it's worth.)
Developers certainly need grounding in these topics. But I continue to be struck at how little the computer science curriculum matches the day-in, day-out reality of software development. Columbia undergraduates don't learn software methods. They don't collaborate on projects. They don't get much exposure to analysis, design, debugging, or maintenance.
In my experience, developers spend relatively little time developing algorithms, especially the kinds of algorithms that require the advanced math courses that are part of the traditional computer-science curriculum. In the real world, developers meet with users to create analysis documents. They work to break projects into parts for different team members. They spend a lot of time analyzing and extending inherited code. They communicate constantly: with users, with management, with team members, with subordinates, with other teams. They evaluate languages, tools, development methods, services, and architectures.
If I were developing a curriculum for software developers, I would make sure to include plenty of courses on effective communication and collaboration strategies. I'd make sure students had experience with lifecycle-support tools, not just compilers. I'd try to give students a taste of what it means to deliver a project, from start to finish, preferably with multiple team members.
Or maybe I wouldn't bother. The best programmers I've known haven't had computer-science degrees. Degrees traditionally are not necessary for employment in our industry. The U.S. Department of Labor's Bureau of Labor Statistics recommends a degree for job-seekers, but in a remarkably lackluster fashion: “[M]ost employers prefer applicants who have at least a bachelor's degree and broad knowledge of, and experience with, a variety of computer systems and technologies.”
Job postings lead me to think that computer-science degrees aren't necessary for employment in software development. And a review of curriculum standards makes me question the applicability of formal education to real-world challenges.
What's your thinking? Do you require the developers you hire to have degrees? Do you have a degree, and has it proved valuable? What would you do to make formal education more relevant?
Web recommendation: Writer Anne McCaffrey doesn't occupy a place on my top 10 list, but I read (and enjoyed) her Pern books along with everyone else and I respect her many accomplishments. I was sad to read that she died this week after suffering a stroke. There's a nice fan page here. J.D. say check it out.
J.D. Hildebrand has written hundreds of articles for dozens of publications and online communities dedicated to software development. Since moving to Serbia, he has eaten a lot of mush.