Computer Science vs. Software Engineering
theodp writes "Microsoft's promotion of Julie Larson-Green to lead all Windows software and hardware engineering in the wake of Steven Sinofsky's resignation is reopening the question of what is the difference between Computer Science and Software Engineering. According to their bios on Microsoft's website, Sinofsky has a master's degree in computer science from the University of Massachusetts Amherst and an undergraduate degree with honors from Cornell University, while Larson-Green has a master's degree in software engineering from Seattle University and a bachelor's degree in business administration from Western Washington University. A comparison of the curricula at Sinofsky's and Larson-Green's alma maters shows there's a huge difference between UMass's MSCS program and Seattle U's MSE program. So, is one program inherently more compatible with Microsoft's new teamwork mantra?"
In my opinion CS majors have always been the philosopher kind who like to nit-pick every angle of development. Product development leadership requires someone more practical as an engineer.
as if the schools these guys went to makes a difference? their skills are learned from experience working in the industry and their value is in using their judgement based on that experience to make the best choices.
Computer science is a branch of mathematics; software engineering is a collection of methods for applying that math in the "real world." Software engineering is not about state machines, compilers, programming languages, parallel algorithms, etc.; it is about how to use write "concrete" implementations of such things in a way that makes sense for real-world computation.
Palm trees and 8
It feels like we just discussed this a week ago - oh, wait, we did!
http://ask.slashdot.org/story/12/11/10/2038211/ask-slashdot-developer-or-software-engineer-can-it-influence-your-work
Another gem from timothy, right-supreme glorious editor for life.
An engineer uses his tools and techniques to solve problems.
A scientist invents new tools and techniques.
If you're just using your knowledge to build things for people, you're an engineer. Unless you're exploring the limits of knowledge, coming up with and testing new ideas, you're not a scientist. And publishing has nothing to do with it, it's a mindset.
Knuth is a scientist - by laying out algorithms and describing their merits and deficiencies, he's essentially publishing a box of tools that others can use. Bill Gates is an engineer - he implemented known algorithms and solutions into a unified package (nothing new there).
Computer science, is a ... science
Only in the old sense of the word "science," i.e. "knowledge," but then software engineering would also be "science." CS is not about gathering data then forming a theory; it is about developing logic systems from a set of basic assumptions (e.g. the semantics of your programming language, or of a theoretical computational system like a Turing Machine or Lambda Calculus). That would be mathematics (which at one time would have been called "science" as well). CS is a particular branch of mathematics: the branch that is concerned with computational methods, which was originally developed as part of an attempt to classify all mathematics in terms of symbolic manipulation (but which ultimately led to a proof that not all mathematics is symbolic manipulation).
Palm trees and 8
Software Engineering, in the sense of the Seattle University program, is the attempt to reduce the production of software to a set of reproducible steps that any monkey (code monkey) could accomplish. You know, you start with your requirements, you proceed to a high-level design using object oriented design techniques, then you make a low level design, and finally, almost as an afterthought, you write code. As anyone who has been on a software project which attempts to follow this particular discipline knows, it doesn't work. It does, however, succeed in its secondary goal of turning an interesting job into a horrible grind.
I suspect working on Windows is already a horrible grind, so it probably won't make much difference.
CS theory is not "nonsense" by any stretch of the imagination, even if you are only interested in doing "real world" work. The point of theory for professional programmers is to think about software in unusual ways; this broadens your ability to solve problems. The trend in programming languages over the past few decades has been towards the use of concepts that are common in theoretical CS; if that trend continues (and I suspect it will), theoretical courses will be more relevant as time goes on.
Even C++ now has lambda expressions. Introspection was once a theoretical topic (e.g. Turing machines that can read their own description). Type theoretic concepts (type constructors, dependent types, etc.) are probably going to become more mainstream in the near future.
Palm trees and 8
I see you don't get the point of college education. It is supposed to stretch your mental capabilities so that when confronted with a new situation, you aren't without the mental faculties to understand and master it. Why should CS majors learn calculus? Because mathematical reasoning is important, and many CS people rub shoulders with engineers. You want to talk to them and be useful, learn your calculus...well.
Higher Education is just that Higher Education. It is not Trade School Skill Boot Camp so you can regurgitate the latest buzzwords MS and the rest of their ilk cram down managers throats.
Side note: I'm mystified at how someone with a Bachelor's degree in business can earn an MS in Software Engineering. Yes, management skills have an important role in an SE curriculum, but not to the exclusion of the technical skills.