The relationship of software engineering to other areas of computer science – Deepak's Blog
Software engineering seems different, in a frustrating way, from other have more rigorous results, like the other parts of computer science?. Both degrees (Computer Science and Computer Engineering) are topics and allow students to engage in projects across multiple areas. “Computer Engineering” typically focuses specifically on computer hardware and software. It is an MIT is still the leader here, but other schools like the University of. “Should I choose Computer Science or Software Engineering if I want to is the study of how software systems are built, including topics such as project There are other related options as well, such as Product Manager, QA.
Programming languages are the central tools used in software development. As a result, they gave profound influence on how well we can achieve our software engineering foals. In turn, these foals influence the development of programming languages. The most notable example of this influence in recent programming languages is the support of modularity features, such as separate and independent compilation and the separation of specification from implementation in order to support team development of large software.
The Ada programming language, for example, supports the development of packages allowing the separation of the packages interface from its implementation and librarian of packages that can be used as components in he development of independent software systems.
This is a step towards making it possible to build software by chord from a catalogue of available components and combining them similar to the way hardware is built. Operating Systems The influence of operating systems on software engineering is quite strong primarily because operating systems were the first really large software systems built, and therefore they were the first instances of software that needed to be engineered.
Many of the first software design ideas originated from early attempts at building operating systems. Examples of the influence of software engineering techniques on the structures of operating systems can be seen in portable operating systems and operating systems that are structured to contain a small protected kernel that provided a minimum of functionality for interfacing with the hardware and a non-protected part that provided the majority of the functionality previously associated with operating systems.
For example, the non-protected part may allow the user to control the paging scheme, which has traditionally been viewed as an integral part of the operating system.
Similarly, in early operating systems, the command language interpreter was an integral part of the operation system. Today, it is viewed as just another utility program. This allows, for example each user to have a personalized version of the interpreter.
On many UNIX systems, there are at least three different such interpreters. Understanding the interaction between hardware and software will be included in curricula; however, specific training on hardware development generally will not.
In general, students in this field will not receive training on hardware development; however, they will gain knowledge on the interplay between hardware and software. Is algorithmic training part of the curriculum?
What's the Difference Between Computer Science and Computer Engineering?
Students will likely take classes on algorithms; however, it will not be a focal point of the degree. Is project management of software development part of the curriculum? Project management is often included in the computer science curriculum, sometimes as part of a software engineering course. Students studying software engineering will likely take courses on project management, both in undergraduate and graduate programs.
Researchers have used some formal methods to learn about a software system's impact on people's health and property. But no discussion of software safety is complete without appeal to the human component of the system under examination.
Software Engineering ≠ Computer Science
Likewise for requirements engineering. We can devise all sorts of interview techniques to elicit accurate requirements from software stakeholders, and we can create various systems of notation to write down what we learn. But no amount of research in this area will change the fact that requirement gathering often involves talking to or observing people.
Sometimes these people tell us the right information, and sometimes they don't. Sometimes people lie, perhaps for good reasons. Sometimes people are honestly trying to convey correct information but are unable to do so. This observation leads to Connell's Thesis: Software engineering will never be a rigorous discipline with proven results, because it involves human activity.
This is an extra-mathematical statement, about the limits of formal systems. I offer no proof for the statement, and no proof that there is no proof. But the fact remains that the central questions of software engineering are human concerns: What should this software do? My thesis explains why software engineering is so hard and so slippery. Tried-and-true methods that work for one team of programmers do not work for other teams.
Exhaustive analysis of past programming projects may not produce a good estimation for the next. Revolutionary software development tools each help incrementally and then fail to live up to their grand promise.
Software Engineering ≠ Computer Science | Dr Dobb's
The reason is that humans are squishy and frustrating and unpredictable. Before turning to the implications of my assertion, I address three likely objections: The thesis is self-fulfilling. If some area of software engineering is solved rigorously, you can just redefine software engineering not to include that problem. This objection is somewhat true, but of limited scope.
I am asserting that the range of disciplines commonly referred to as software engineering will substantially continue to defy rigorous solution. Narrow aspects of some of the problems might succumb to a formal approach, but I claim this success will be just at the fringes of the central software engineering issues. Statistical results in software engineering already disprove the thesis. Despite their mathematical appearance, these methods are not proofs or formal results.
The statistics are an attempt to quantify subjective human experience on past software projects, and then extrapolate from that data to future projects.
But the seemingly rigorous formulas in these schemes are, in effect, putting lipstick on a pig, to use a contemporary idiom.
The formula looks rigorous, but is dominated by an exponent made up of human factors. Formal software engineering processes, such as cleanroom engineering, are gradually finding rigorous, provable methods for software development. They are raising the bright line to subsume previously squishy software engineering topics. It is true that researchers of formal processes are making headway on various problems. But they are guilty of the converse of the first objection: Formal methods simply gloss over any problem centered on human beings.
For example, a key to formal software development methods is the creation of a rigorous, unambiguous software specification. The specification is then used to drive and prove the later phases of the development process.