Institutes of higher learning are still not in consensus of what is meant by many technical degrees, such as software engineering and computer science. These fields, along with information technology, information systems, and computer science engineering, are simply too new. Therefore, what one school or employer perceives as a requirement of computer science may be interpreted by another as software engineering.
There are many similarities between the two fields. Both will be expected to understand how computers work, how programs are structured, and what the user is entitled to expect. However, computer science is typically overseen by the mathematics department while software engineering is normally included in the engineering school.
In the early days, computers were hard-wired to perform a certain function. The user did little more than punch a button. Allowing greater user control led to the development of programming languages and compilers to translate "normal" language into computer language. Punched tapes or cards allowed the user to write his own routines. The actual keypunch was often performed by another, typically someone with clerical skills. A misplaced dot, missing bracket, or transposed letter meant that the entire program would fail. There was often no clue as to why, leaving the programmer to pore over the cards as well as his program.
Computer programming began to come into its own with the development of the personal computer. Simplified languages such as BASIC gave more control to the average user. A few minutes spent with a book enabled the user to begin to construct rudimentary programs. Many times, however, the lack of understanding about what a computer could and could not do led to failure. This laid the foundations for the software engineer, who not only understands the program but the physical abilities of the hardware.
One method of examining the differences between software engineering and computer science is to consider how most printers were controlled by the first personal computers. In most cases, changing printer functions such as font size, number of copies, or paper size required entering the proper printer string in DOS. Today, these functions are controlled from an interface on the desktop. The user may enter the information in the software or in the printer dialog box. In a simplified statement, one might say that the creation of the dialog boxes and underlying code was provided by a software engineer. The ability of the printer to understand the commands and comply with them was provided by the computer scientist.
In the most basic terms, CS focuses more on the hardware, circuitry, and networking involved. An SE is typically more concerned with creating a program that will be efficient in terms of size and speed and optimizing the user interface. Neither area, however, has a patent on any one area. To build a network or a computer that is reliable and efficient requires an understanding of what demands will be placed upon it. To write a powerful, "bug-free" program requires knowing how compilers operate, what the processor speeds mean, and the memory needed.
With little standardization between universities, the quality of the degree can vary greatly. Some colleges require CS majors to take Microsoft Office as their first programming course. In some cases, this may be followed by Pascal, COBOL, or RPG, none of which are in high demand today. They may also teach Visual Basic, Visual C ++ or Visual J without first teaching the underlying language. By the same token, software engineers may be graduated without a basic understanding of wireless technology. Those seeking a degree as well as employers might be better served by ignoring the title and examining the actual courses required.
Not too many years ago, computer science positions were often filled by those with other degrees, such as electrical engineers. Software engineers were usually those with programming skills, many of whom held no degree at all but were self-taught. As technology became more complex, increased specialization followed. Only by considering the goal is it possible to differentiate between them. For example, if the goal is to produce the greatest game of all time, a software engineer is likely to be the one to meet the challenge. If the goal is to produce the next generation of gaming systems, however, a computer scientist is probably going to make the greatest contribution.