Computer Science is a young discipline of study compared to other sciences. In it's early years, computer science struggled for legitimacy in many institutions and was the "umbrella" discipline for just about any topic related to computing. It was, after all, a new discipline (in the 1950's-1970's) without the historical foundations and scientific rigor supporting most academic fields at the time. Partly as a result of the entry of computing technology into the cultural and economic mainstream, and partly due to the maturing scientific study of computation, computer science is now a well founded scientific area of study and research. Further, the growing knowledge base of science relating to computation is strongly impacting most other scientific disiplines.
As the study of computation has matured and gained legitimacy, it has also broadened in scope. Prior to the 1990's, computing was primarily focused on computer science. Over the years, an increasing number of fields have become part of a much larger, more encompassing discipline of computing. Computing is not just a single discipline but is a family of disciplines. This family of disciplines commonly includes: computer science (CS), information technology (IT), information systems (IS and MIS), software engineering (SE), computer engineering (CE), and a multitude of other sub-disciplines of each of these areas. During the 1990s, important changes in computing and communications technology and the impact of that technology on society led to important changes in this family of disciplines. With the ongoing growth of the various fields of computing, and the necessary specialization of the professionals, engineers, and scientists that are involved, Computer Science is now a much more focused disipline that can be characterized as the scientific study of the nature of computation.
Given this background, I will give some very brief characterizations of these disciplines and follow it with more complete details from the 2005 ACM Computing Curricula report and Wikipedia.
Computer Science (CS): A scientific discipline focused on the study of the nature and characteristics of computation (which at it's core is the study of the nature and characteristics of algorithms). Dr. Peter Denning (an ACM fellow) gives a widely accepted definition: "Computer Science is the study of both natural and artificial processes"
Software Engineering (SE): An engineering discipline focused on the application of professional engineering practices and the application of scientific principles of computation to the design and construction of software solutions to real world problems.
Computer Engineering (CE): An engineering discipline focused on the application of professional engineering practices and the application of scientific principles in physics, electronics, and computation to the design and construction of computing hardware solutions to real world problems.
Information Technology (IT): A professional discipline focused on the application and management of computing systems to solve business/organizational problems (IT has a computing hardware and operating systems orientation to these solutions). Note: ITAA has adopted the following as a definition: "the study of computer-based information systems, particularly software applications and computer hardware."
Information Systems (IS) and Management Information Systems (MIS): Professional disciplines focused on the application and management of computing software systems to solve business/organizational problems (IS and MIS have software systems and information management orientations to these solutions; MIS has a greater emphasis in business knowledge, where IS has a greater emphasis in IT & SE knowledge).
This links to more detailed information on these definitions from the 2005 ACM Curricula report and Wikipedia (I understand the nature of Wikipedia, but as long as you read things and apply a small amount of critical thinking, Wikipedia contains a LOT of excellent information).
Despite its name, much of computer science does not involve the study of computers themselves. In fact, the renowned computer scientist Edsger Dijkstra is often quoted as saying, "Computer science is no more about computers than astronomy is about telescopes." The design and deployment of computers and computer (hardware) systems is generally considered the province of disciplines other than computer science. For example, the study of computer hardware is usually considered part of computer engineering, while the study of commercial computer systems and their deployment is often called information technology or information systems. Computer science research has also often crossed into other disciplines, such as artificial intelligence, cognitive science, physics, and linguistics.
Computer science is considered by some to have a much closer relationship with mathematics than many scientific disciplines. Early computer science was strongly influenced by the work of mathematicians such as Kurt Godel and Alan Turing, and there continues to be a useful interchange of ideas between the two fields in areas such as mathematical logic, category theory, domain theory, and algebra.
The relationship between computer science and software engineering is a contentious issue, which is further muddied by disputes over what the term "software engineering" means, and how computer science is defined. David Parnas, taking a cue from the relationship between other engineering and science disciplines, has claimed that the principal focus of computer science is studying the properties of computation in general, while the principal focus of software engineering is the design of specific computations to achieve practical goals, making the two separate but complementary disciplines.
The following is adapted from the 2005 ACM Computing Curricula Report :
Undergraduate degree programs in the computing-related disciplines began to emerge in the 1960s. Originally, there were only three kinds of computing-related degree programs in North America: computer science, electrical engineering, and information systems. Each of these disciplines was concerned with its own well-defined area of computing. Because they were the only prominent computing disciplines and because each one had its own area of work and influence, it was much easier for students to determine which kind of degree program to choose. For students who wanted to become expert in developing software or with the theoretical aspects of computing, computer science was the obvious choice. For students who wanted to work with hardware, electrical engineering was the clear option. For students who wanted to use hardware and software to solve business problems, information systems was the right choice.
Each of these three disciplines had its own domain. There was not any shared sense that they constituted a family of computing disciplines. As a practical matter, computer scientists and electrical engineers sometimes worked closely together since they were both concerned with developing new technology, were often housed in the same part of the university, and sometimes required each others’ help. Information systems specialists had ties with business schools and did not have much interaction with computer scientists and electrical engineers.
Before the 1990s, the only major change in this landscape in the U.S. was the development of computer engineering. Prior to the invention of chip-based microprocessors, computer engineering was one of several areas of specialization within electrical engineering. With the advent of the microprocessor in the mid-1970s, computer engineering began to emerge from within electrical engineering to become a discipline unto itself. For many people outside of the engineering community, however, the distinction between electrical engineering and computer engineering was not clear. Before the 1990s, therefore, when prospective students surveyed the choices of computing-related degree programs, most would have perceived the computing disciplines as shown in the top half of figure below. The distance between the disciplines indicates how closely the people in those disciplines worked with each other.
Significant Developments of the 1990s
During the 1990s, several developments changed the landscape of the computing disciplines in North America, although in other parts of the world some of these changes occurred earlier.
Computer engineering solidified its emergence from electrical engineering. Computer engineering emerged from electrical engineering during the late 1970s and the 1980s, but it was not until the 1990s that computer chips became basic components of most kinds of electrical devices and many kinds of mechanical devices. (For example, modern automobiles contain numerous computers that perform tasks that are transparent to the driver.) Computer engineers design and program the chips that permit digital control of many kinds of devices. The dramatic expansion in the kinds of devices that rely on chip-based digital logic helped computer engineering solidify its status as a strong field and, during the 1990s, unprecedented numbers of students applied to computer engineering programs. Outside of North America, these programs often had titles such as computer systems engineering.
Computer science grew rapidly and became accepted into the family of academic disciplines. At most American colleges and universities, computer science first appeared as a discipline in the 1970s. Initially, there was considerable controversy about whether computer science was a legitimate academic discipline. Proponents asserted that it was a legitimate discipline with its own identity, while critics dismissed it as a vocational specialty for technicians, a research platform for mathematicians, or a pseudo-discipline for computer programmers. By the 1990s, computer science had developed a considerable body of research, knowledge, and innovation that spanned the range from theory to practice, and the controversy about its legitimacy died. Also during the 1990s, computer science departments faced unprecedented demands. Industry needs for qualified computer science graduates exceeded supply by a large factor. Enrollments in CS programs grew very dramatically. While CS had already experienced cycles of increasing and decreasing enrollments throughout its brief history, the enrollment boom of the 90s was of such magnitude that it seriously stressed the ability of CS departments to handle the very large numbers of students. With increased demands for both teaching and research, the number of CS faculty at many universities grew significantly.
Software engineering had emerged as an area within computer science. As computing is used to attack a wider range of complex problems, creating reliable software becomes more difficult. With large, complex programs, no one person can understand the entire program, and various parts of the program can interact in unpredictable ways. (For example, fixing a bug in one part of a program can create new bugs elsewhere.) Computing is also used in safety-critical tasks where a single bug can cause injury or death. Over time, it became clear that producing good software is very difficult, very expensive, and very necessary. This lead to the creation of software engineering, a term that emanated from a NATO sponsored conference held in Garmisch, Germany in 1968. While computer science (like other sciences) focuses on creating new knowledge, software engineering (like other engineering disciplines) focuses on rigorous methods for designing and building things that reliably do what they’re supposed to do. Major conferences on software engineering were held in the 1970s and, during the 1980s, some computer science degree programs included software engineering courses. However, in the U.S. it was not until the 1990s that one could reasonably expect to find software engineering as a significant component of computer science study at many institutions. Software engineering began to develop as a discipline unto itself. Originally the term software engineering was introduced to reflect the application of traditional ideas from engineering to the problems of building software. As software engineering matured, the scope of its challenge became clearer. In addition to its computer science foundations, software engineering also involves human processes that, by their nature, are harder to formalize than are the logical abstractions of computer science. Experience with software engineering courses within computer science curricula showed many that such courses can teach students about the field of software engineering but usually do not succeed at teaching them how to be software engineers. Many experts concluded that the latter goal requires a range of coursework and applied project experience that goes beyond what can be added to a computer science curriculum. Degree programs in software engineering emerged in the United Kingdom and Australia during the 1980s, but these programs were in the vanguard. In the United States, degree programs in software engineering, designed to provide a more thorough foundation than can be provided within computer science curricula, began to emerge during the 1990s.
Information systems had to address a growing sphere of challenges. Prior to the 1990s, many information systems specialists focused primarily on the computing needs that the business world had faced since the 1960s: accounting systems, payroll systems, inventory systems, etc. By the end of the 1990’s, networked personal computers had become basic commodities. Computers were no longer tools only for technical specialists; they became integral parts of the work environment used by people at all levels of the organization. Because of the expanded role of computers, organizations had more information available than ever before and organizational processes were increasingly enabled by computing technology. The problems of managing information became extremely complex, and the challenges of making proper use of information and technology to support organizational efficiency and effectiveness became crucial issues. Because of these factors, the challenges faced by information systems specialists grew in size, complexity, and importance. In addition, information systems as a field paid increasing attention to the use of computing technology as a means for communication and collaborative decision making in organizations.
Information technology programs began to emerge in the late 1990s. During the 1990s, computers became essential work tools at every level of most organizations, and networked computer systems became the information backbone of organizations. While this improved productivity, it also created new workplace dependencies as problems in the computing infrastructure can limit employees’ ability to do their work. IT departments within corporations and other organizations took on the new job of ensuring that the organization’s computing infrastructure was suitable, that it worked reliably, and that people in the organization had their computing-related needs met, problems solved, etc. By the end of the 1990s, it became clear that academic degree programs were not producing graduates who had the right mix of knowledge and skills to meet these essential needs. College and universities developed degree programs in information technology to fill this crucial void.
Collectively these developments reshaped the landscape of the computing disciplines. Tremendous resources were allocated to information technology activities in all industrialized societies because of various factors, including the explosive growth of the World Wide Web, anticipated Y2K problems, and in Europe, the launch of the Euro.
After the 1990s
The new landscape of computing degree programs reflects the ways in which computing as a whole has matured to address the problems of the new millennium. In the U.S., computer engineering had solidified its status as a discipline distinct from electrical engineering and assumed a primary role with respect to computer hardware and related software. Software engineering has emerged to address the important challenges inherent in building software systems that are reliable and affordable. Information technology has come out of nowhere to fill a void that the other computing disciplines did not adequately address. This maturation and evolution has created a greater range of possibilities for students and educational institutions. The increased diversity of computing programs means that students face choices that are more ambiguous than they were before the 1990s. The bottom portion of the previous figure shows how prospective students might perceive the current range of choices available to them. The dotted ovals show how prospective students are likely to perceive the primary focus of each discipline. It is clear where students who want to study hardware should go. Computer engineering has emerged from electrical engineering as the home for those working on the hardware and software issues involved in the design of digital devices. For those with other interests, the choices are not so clear-cut. In the pre-1990s world, students who wanted to become expert in software development would study computer science. The post-1990s world presents meaningful choices: computer science, software engineering, and even computer engineering each include their own perspective on software development. These three choices imply real differences: for CE, software attention is focused on hardware devices; for SE, the emphasis is on creating software that satisfies robust real-world requirements; and for CS, software is the currency in which ideas are expressed and a wide range of computing problems and applications are explored.
Such distinctions may not be visible to prospective students. Naive students might perceive that all three disciplines share an emphasis on software and are otherwise indistinguishable. Similarly, in the pre-1990s world, a primary area for applying computing to solve real-world problems was in business, and information systems was the home for such work. The scope of real-world uses has broadened from business to organizations of every kind, and students can choose between information systems and information technology programs. While the IT and IS disciplines both include a focus on software and hardware, neither discipline emphasizes them for their own sake; rather, they use technology as critical instruments for addressing organizational needs. While IS focuses on the generation and use of information, and IT focuses on ensuring that the organization’s infrastructure is appropriate and reliable, prospective students might be unaware of these important differences and see only that IS and IT share a purpose in using computing to meet the needs of technology-dependent organizations.
Descriptions of the Major Computing Disciplines
Computer engineering is concerned with the design and construction of computers and computer-based systems. It involves the study of hardware, software, communications, and the interaction among them. Its curriculum focuses on the theories, principles, and practices of traditional electrical engineering and mathematics and applies them to the problems of designing computers and computer-based devices. Computer engineering students study the design of digital hardware systems including communications systems, computers, and devices that contain computers. They study software development, focusing on software for digital devices and their interfaces with users and other devices. CE study may emphasize hardware more than software or there may be a balanced emphasis. CE has a strong engineering flavor. Currently, a dominant area within computing engineering is embedded systems, the development of devices that have software and hardware embedded in them. For example, devices such as cell phones, digital audio players, digital video recorders, alarm systems, x-ray machines, and laser surgical tools all require integration of hardware and embedded software and all are the result of computer engineering.
Computer science spans a wide range, from its theoretical and algorithmic foundations to cutting-edge developments in robotics, computer vision, intelligent systems, bioinformatics, and other exciting areas. We can think of the work of computer scientists as falling into three categories. They design and implement software. Computer scientists take on challenging programming jobs. They also supervise other programmers, keeping them aware of new approaches. They devise new ways to use computers. Progress in the CS areas of networking, database, and human-computer-interface enabled the development of the World Wide Web. Now CS researchers are working with scientists from other fields to make robots become practical and intelligent aides, to use databases to create new knowledge, and to use computers to help decipher the secrets of our DNA. They develop effective ways to solve computing problems. For example, computer scientists develop the best possible ways to store information in databases, send data over networks, and display complex images. Their theoretical background allows them to determine the best performance possible, and their study of algorithms helps them to develop new approaches that provide better performance.
Computer science spans the range from theory through programming. Curricula that reflect this breadth are sometimes criticized for failing to prepare graduates for specific jobs. While other disciplines may produce graduates with more immediately relevant job-related skills, computer science offers a comprehensive foundation that permits graduates to adapt to new technologies and new ideas.
Information systems specialists focus on integrating information technology solutions and business processes to meet the information needs of businesses and other enterprises, enabling them to achieve their objectives in an effective, efficient way. This discipline’s perspective on information technology emphasizes information, and views technology as an instrument for generating, processing, and distributing information. Professionals in the discipline are primarily concerned with the information that computer systems can provide to aid an enterprise in defining and achieving its goals, and the processes that an enterprise can implement or improve using information technology. They must understand both technical and organizational factors, and they must be able to help an organization determine how information and technology-enabled business processes can provide a competitive advantage. The information systems specialist plays a key role in determining the requirements for an organization’s information systems and is active in their specification, design, and implementation. As a result, such professionals require a sound understanding of organizational principles and practices so that they can serve as an effective bridge between the technical and management communities within an organization, enabling them to work in harmony to ensure that the organization has the information and the systems it needs to support its operations. Information systems professionals are also involved in designing technology-based organizational communication and collaboration systems.
A majority of Information Systems (IS) programs are located in business schools. All IS degrees combine business and computing coursework. A variety of IS programs exist under various labels which often reflect the nature of the program. For example, programs in Computer Information Systems usually have the strongest technology focus, while programs in Management Information Systems emphasize the organizational and behavioral aspects of IS. Degree program names are not always consistent.
Information technology is a label that has two meanings. In the broadest sense, the term information technology is often used to refer to all of computing. In academia, it refers to undergraduate degree programs that prepare students to meet the computer technology needs of business, government, healthcare, schools, and other kinds of organizations. In some nations, other names are used for such degree programs. In the previous section, we said that Information Systems focuses on the information aspects of information technology. Information Technology is the complement of that perspective: its emphasis is on the technology itself more than on the information it conveys. IT is a new and rapidly growing field that started as a grassroots response to the practical, everyday needs of business and other organizations. Today, organizations of every kind are dependent on information technology. They need to have appropriate systems in place. These systems must work properly, be secure, and upgraded, maintained, and replaced as appropriate. Employees throughout an organization require support from IT staff who understand computer systems and their software and are committed to solving whatever computer-related problems they might have. Graduates of information technology programs address these needs. Degree programs in information technology arose because degree programs in the other computing disciplines were not producing an adequate supply of graduates capable of handling these very real needs.
IT programs exist to produce graduates who possess the right combination of knowledge and practical, hands-on expertise to take care of both an organization’s information technology infrastructure and the people who use it. IT specialists assume responsibility for selecting hardware and software products appropriate for an organization, integrating those products with organizational needs and infrastructure, and installing, customizing, and maintaining those applications for the organization’s computer users. Examples of these responsibilities include the installation of networks; network administration and security; the design of web pages; the development of multimedia resources; the installation of communication components; the oversight of email systems; and the planning and management of the technology lifecycle by which an organization’s technology is maintained, upgraded, and replaced.
Software engineering is the discipline of developing and maintaining software systems that behave reliably and efficiently, are affordable to develop and maintain, and satisfy all the requirements that customers have defined for them. This reflects its origins as outlined in Section 2.2.2. More recently, it has evolved in response to factors such as the growing impact of large and expensive software systems in a wide range of situations and the increased importance of software in safety-critical applications. Software engineering is different in character from other engineering disciplines due to both the intangible nature of software and the discontinuous nature of software operation. It seeks to integrate the principles of mathematics and computer science with the engineering practices developed for tangible, physical artifacts. Prospective students can expect to see software engineering presented in two contexts. Degree programs in computer science offer one or more software engineering courses as elements of the CS curriculum. Some offer a multi-course concentration in software engineering within CS. A number of institutions offer a software engineering degree program.
Degree programs in computer science and in software engineering have many courses in common. Software engineering students learn more about software reliability and maintenance and focus more on techniques for developing and maintaining software that is correct from its inception. While CS students are likely to have heard of the importance of such techniques, the engineering knowledge and experience provided in SE programs go beyond what CS programs can provide. The importance of this fact is so great that one of the recommendations of the SE report is that, during their program of study, students of SE should participate in the development of software to be used in earnest by others. SE students learn how to assess customer needs and develop usable software that meets those needs. Knowing how to provide genuinely useful and usable software is of paramount importance. In the workplace, the term software engineer is a job label. There is no standard definition for this term when used in a job description. Its meaning varies widely among employers. It can be a title equivalent to computer programmer or a title for someone who manages a large, complex, and/or safety-critical software project. The layman must be mindful not confuse the discipline of software engineering with the ambiguous use of the term software engineer as used in employment advertisements and job titles.