There is much debate about splitting computer science and software engineering. Computer science being the theoretical stuff and software engineering the practical, but is that feasible?
We probably agree that software development should be engineering. Building a software application should be like building a bridge. The problem is that it is not.
Joel Spolsky talks about three phases in software development:
- Design needs an artist
- Building needs an engineer
- Debugging needs a scientist
When the building part is already engineering, we just need to figure out, whether design and debugging can be made engineering or (mostly) optional. If you use a framework like Rails, you don’t need to design (apart from CSS and URLs). Type checking and verification could help to make debugging disappear.
A software developer describes the requirements for a job as a software developer:
- communication skills “The best developers are often the ones who can explain problems and solutions the most clearly to others”
- teams “Very few developers really work alone”
- analytical skills, particularly around ambiguous problems “It’s important that developers understand the intention of what they’re being asked to do as well as the implications of a solution they’re thinking of and can weight and communicate these”
- development processes “Not a theoretical one—they need to work on teams that use formal, top-down development process, agile development, teams with other developers, teams with test processes, and so on”
- an ability to learn on the fly
- competence in several programming languages “C++ is typically a must; C# or some other managed-code language is also mandatory, competence in one dynamic language, such as JavaScript, should also be present and the graduate should have the ability to know which to use when.”
No need for insight into algorithms or math. This may help, but isn’t mandatory.
There is still a big part, where computer science and software engineering intersect. Somebody has to build the standard and extension libraries. Somebody has to understand the math for multimedia and implement it.
For the common (web or desktop) application development, you don’t need to study computer science. This leads me to the conclusion that a software engineering education could be separated from general computer science. Do you agree?
