I’m often asked this question, what’s the difference between Computer Engineering, Computer Science and Computer Software Engineering. I’d like to answer this question once and for all.
See, Computer Science and Computer Software Engineering may have common links, but Computer Engineering has nothing to do with them, even remotely.
Computer Engineering is a category of Electrical and Electronics Engineering where you mostly deal with computer hardware, its design and function. It does involve software, but only to a very basic level that we call firmware. Firmware is small software that is loaded onto microcontrollers (microchips) to control their function. Of course, it is the most fundamental piece of software that is needed to run a system, but at the same time, it is very basic as compared to that involved in the other two fields.
Computer Software Engineering, as its name says, is the design of computer software. All daily applications that you use are a product of computer software engineering. Software Engineers use programming languages like C++, C# and Java to make their applications. Do remember that software that is a result of Computer Software Engineering is generally compiled and is platform dependent. In other words, it knows on which operating system (Windows, Linux, Mac OS X) or hardware (Intel x86, x64, AMD, etc) it is supposed to be run. This software is standalone and would generally not require any other software to run it (dependencies are something else, e.g. Installing DirectX because some features of the program require it).
Computer Software Engineering can be considered easier than computer science in sense that you do not have to sit and derive the algorithms, but you should have technical knowledge of several programming libraries. Programming language, in itself is nothing but a platform for development. It’s programming libraries that give you additional functionality in that language. For example, to make the simplest Windows program, you should be aware of WinAPI. WinAPI (Windows Applications Programming Interface) is a library to interface software with the massive Microsoft Windows operating system. Windows applications are built using WinAPI libraries. UNIX software is built using X.org libraries. (I am not referring to Command line applications since they follow a general code and do not even require knowledge of WinAPI. It’s because they are supposed to be run inside the shell, or console of the operating system, and do not generate a window on their own.)
In order to show stuff inside your Window, you need to be aware of libraries specific to the type of software you build. DirectX and OpenGL for example, are two most common libraries for building applications with 3D graphics.
Computer Science, on the other hand, is a mainly theoretical field. You will often use software like MATLAB, Mathematica, Maple to visualize systems. Of course, it also involves programming, and of more or less the same level as Computer Software Engineering. As a Computer Science major, you will be doing mathematical modeling, physical calculations, algorithm design, etc. However, the software you make will generally be platform independent. In other words, your software will not be aware of the platform it is running on. MATLAB programs for example, will run on any computer system with a copy of MATLAB installed on it (although MATLAB itself is a product of software engineering).
When it comes to deciding your major, you should be aware in the first place whether you want to work at hardware level or software level. If hardware, then Computer Engineering it is. If it’s mostly software for you, then you should know whether you want to work mostly on the technical side or the theoretical side. Do remember that both Computer Software Engineering and Computer Science have complexities at different levels. Computer Science is better if you are good at mathematics and algorithm design. Computer Software Engineering is better if you are good at reading the documentation of different libraries and putting them to practical use to build software.
At university level, Computer Science majors will often be taught courses related to Software Engineering, and vice versa. Some universities may not even have a separate program for Software Engineering. Both fields share a lot in common, and by getting a degree in any of them, you can get a job in either field.