Don’t confuse Computer Science with Software Engineering

One thing we come across quite often when discussing our ideas about modern tech education is the confusion between computer science and software engineering.

Whether we look at studies describing the digital skill shortage in the workforce and the consequences for our economy, at job descriptions from employers in search of ICT professionals or at politicians demanding more and better educational programs aimed at digital competences – in most cases there is no clear definition of the skills profile in question. ICT Professionals, Developers, Programmers, Software Engineers, Computer Scientists – all too often are they used as synonyms.

Computer science is about taking complex problems and deriving a solution from math, science and computational theory.David Budden in “Degrees Demystified”

Computer Scientists are first and foremost scientists. They possess a deep knowledge of the theoretical foundations in mathematics and information science and can develop complex algorithms and advance scientific research. They operate in a world of rigorous analyses, clearly defined concepts and proven facts.

The digital skills in demand as described by employers, labor market studies and politicians are of a different kind. They involve the ability to interact with human beings and to create easy to use software solutions for real world problems with limited resources in a highly unreliable and dynamically changing environment.

Where computer science is about taking complex problems and deriving a solution from mathematics, science and computational theory, software engineering is very much focused around designing, developing and documenting beautiful, complete, user-friendly software.

Imagine a brilliant structural engineer who is the world’s expert on building materials, stress and strain, load distributions, wind shear, earthquake forces, etc. Architects in every country keep this person on their speed-dial for every design and construction project. Would this mythical structural engineer necessarily be good at designing the buildings he or she is analyzing? Not at all. Our structural engineer might be lousy at talking to clients, unable to design spaces that people like to inhabit, dull at imagining solutions to new problems, and boring aesthetically. Structural engineering is useful to physical architects, but is not enough for good design. Successful architecture includes creativity, vision, multi-disciplinary thinking, and humanity.

As does successful software engineering.

Why is this distinction so important?

Because it helps to choose a study program that fits one’s abilities: Many have what it takes to become a successful software developer but lack the mathematical interest or ability to succeed in computer science. We cannot afford to discourage these young talents from choosing a career in software engineering, especially because – as Sarah Mei lays out in her article “Programming is not math”: “Learning to program is more like learning a new language than it is like doing math problems. And the experience of programming today, in industry, is more about language than it is about math.”

Because it helps to choose a study program that meets expectations: Starting computer science studies to become a software developer is probably going to be disappointing, because Computer Science is more a “degree in applied mathematics” than a “degree where you learn how to code”, as David Budden puts it. The dropout rates in computer science programs (at some German universities as high as 40%) are a depressing monument to this confusion.

Because it helps politicians and institutions to identify the approaches and instruments that improve tech education and contribute to closing the digital skills gap.

Because it helps employers to better understand where to look for future employees that support their growth and successfully drive the digital transformation.

Because it helps us understand how to design a study program that produces graduates with competence profiles that enable them to become successful software developers and that meet the demands of future employers.

Software engineering is very much focused around designing, developing and documenting beautiful, complete, user-friendly software.David Budden in “Degrees Demystified”

We are not trying to diminish the importance of computer science as a discipline or computer scientists as a driving force of digital innovation and advancement in scientific research. But the vast majority of the 800.000 digital professionals missing in the European labor market in the year 2020 do not have the competence profile of a computer science major. They need to be creative problem solvers with communication and soft skills and the ability to utilize scientific innovations to make a difference in real life.

A note about Germany: While the education system in English-speaking countries at least offers the distinction between computer science and software engineering, the German education system almost exclusively talks about “Informatik” (information science) meaning the science of systematic information processing. There are variations like “Angewandte Informatik” (applied information science), “Technische Informatik” (technical information science) or “Medieninformatik” (media information science), but the starting point of any discussion in this field is Informatik. Due to a strong dual education system (combining an apprenticeship in a company with vocational training at a vocational school) the role of German universities was traditionally focussed on scientific education while looking down on the idea of teaching hands-on knowledge and skills with practical relevance with regard to future employers. As a consequence the need for a software engineering study program as alternative to information science is even greater in Germany (as this commentator elaborates).

i understand computer science to be the broad study of machine while software engineering which is a branch of computer science has to do with how the application(and how it can be applied to real life issues) of the knowledge gotten from the study of machines

That’s correct. Computer Science has a strong origin as a predominantly mathematical discipline but has expanded to incorporate anything to do with computing. There is a lot of variation in courses. Some are highly mathematically, some are focused on software engineering, some are almost vocational and many today mix in all of those things. Quite often you can choose which direction you want to go by choosing modules.

i’m a newbie but gat beginners knowledge on C# and java(currently on a two course on Software Engin. @ NIIT ghana) but i really need a mentor to help build my potentials…..this is a sound cry for help..pls if u can help brush me up i’ll be very glad to work with you.

The developing countries should bet on professionals in Computer Science and Operational Research, as a strategy for our development, in Lima (Perú) only the national university of San Marcos has this careers.

simply doesn’t matter. both professionals will end working doing the same thing. Delusional at least to romanticize computer scientists nowadays. If you can write your name on a log in screen you can call yourself both computer scientist and software engineer.
Also, most of the old big employers care about code producer for trivial tasks, thus put your O factor or development plan aside and google the name of that function that you are looking for to resolve your project.

Wow, this is incredibly shortsighted. This article is attempting to say that physicists are to engineers like computer scientists are to software engineers. This is simply untrue, except for those who become graduate students and eventually teach computer science or have a career at a DOE/DOD lab, Google, Amazon or some other high performance computing facility that needs true scientists.

1. Learning to program is not like learning a new language. Nor is it like learning mathematics. Learning to program is learning to think more broadly and deeply than most other people and how to express it so methodically and logically that a computer can produce the expected result. This takes mathematics, logic and linguistics. And if you want other people to use your creation, it take skills in design and a bit of psychology.

2. Just ridiculous. I’d love to see where these statistics came from. Degrees in computer science were akin to applied mathematics decades ago. Through the 1970s, getting a job in computers required a degree in mathematics, and you happened to take some computing courses on the side because there was no discipline yet in existence expressly for computer science. The difference now is that software engineers tend to get a bit more electrical an computer engineering coursework and sometimes a dash learning business processes regarding software development (e.g. Agile, Waterfall, etc.). Unfortunately, to add all that, it detracts from their time in learning computer science — the knowledge needed to do more than plug and play your way through a problem.

3. What?

4…

Forget it. You do realize that real engineers think software engineers are pretenders to the name “engineer”, right? Now, you’re also alienating yourself from the field of computer science. Good luck.

I both agree and disagree with your last statement. SE can very much be considered as much real engineering as anything else but it also varies on two fronts.

The first front is that it tends to be inclusive of everything and anything involved in the construction of software, it’s very broad, while also spanning from incredibly simple to incredibly complex work. There’s a large difference between engineering a footbridge over a stream and engineering a vehicular bridge to span a river. The latter would be considered less of an engineering challenge yet you still need to apply at least some basic engineering principles to it.

The second is that SE gets things wrong in a lot of places. That’s one of them, it often fails to appreciate when you’re building a foot bridge and not a whole city.

Even that aside, anywhere you look it’ll tend to fail to bridge the gap between theory and practice. It fails to ask basic questions such as what’s the load required.

Further compounding all of these is that quite often it’s really not a science. It’s just people making up theories with little real testing, measuring, considering the alternatives, etc.

I don’t really see how you can say software engineering isn’t engineering but I can see how you can classify some of what’s placed under its banner as that.

Software Engineering is a huge mess and poorly categorised. There are aspects to it where it fails to be able to or to bother to test, quantify, measure, properly describe the context of things, etc. There’s also little separation of things such as SE for idiots and SE for clever people.

If you take design patterns for example. Those are just basic things like you can alternate each layer of bricks. You then very quickly have waves of graduates that think they’re genius engineers when in fact they’re just well informed bricklayers.

OK guys am at 11th grade in Africa (ethiopia)
and after i finish my preparatory class(which is after 1 year)
i want to be in computer field
but still confused which field is better for me to learn(computer science or software engineering)
please tell the truth&help me

Hi , Iam also in grade 12th in pakistan. Iam also confused what should I chose. I want to study graphics and web designing. What field should I choose ? Computer science engineering or Software engineering? Please guide me..
Also I want to study less complex maths problems :p

CPSC and software engineering programs cover extremely similar topics and their career paths are nearly interchangeable. While there is a distinction between the heavy math-theory based computer science and the application-based software engineering, both fields teach adequate skills to go into software development or algorithm research. The writer makes it sound as though computer scientists have very little programming skills and that engineers know nothing about how algorithms actually work.

Most universities blur the lines between Software Engineering and Computer Science. At my school Computing Science was 90% practical work, and only 10% theory, so it would really be considered Software Engineering. But it really depends on the school

Excellent information…I’m really impressed with this blog. we provide dell technical support service if you have any problem you can contact with toll free number +44 800 014 8212 dell laptop support service.

Excellent information…I’m really impressed with this blog. we provide dell technical support service if you have any problem you can contact with toll free number +44 800 014 8212 dell laptop support service.Dell laptop support

We’re a gaggle of volunteers and opening a brand new scheme in our community. Your site offered us with useful information to work on. You’ve performed an impressive activity and our entire group can be grateful to you.|

With the forthcoming of blockchain technology, development seems not close to over, and new and innovative processes and technologies emerge. We aim to orchestrate the adoption of an entirely decentralized ecosystem with the help of distributed ledger technologies. It is indeed a very exciting time to be doing work in the blockchain place and as more people take on this disruptive solution, it is going to expectantly permit us to develop a far more safeguarded, adequate and open world.

I think a lot of people mistake that the difference between Computer Science versus Software Engineering is the different between theoretical and practical.

In practice that doesn’t work out. Both of these domains are theoretical. The mistake may arise from that SE is a subset of CS that pertains to the engineering of software. A theory of practise is still a theory.

A huge number of SE courses *are* CS. If you get a degree in SE then that’s a type of CS degree!

Like CS, SE does not guarantee someone will be a good practitioner. It can make someone with the potential to be a good practitioner better but it cannot guarantee someone will be a good programmer, designer, etc.

I know someone whose vocabulary and spelling is impeccable. They’re a living dictionary. Their knowledge of grammar is also perfect and complete. Further more not a single hole can be found in their knowledge of different writing styles.

When put to the task however, they’re not capable of writing anything that’s that funny, interesting, concise, easily understood nor that imparts much in the way of useful information.

There’s learning all of the rules as they can be taught and memorising them. Then there’s applying them, having experience and a depth of understanding that cannot be so easily expressed by knowledge of the theory alone.

I’ve picked up software engineering books that espouse various patterns for maintainability that blatantly get it wrong. In theory it might seem right but in practice it’s not. For example, one claims that I should always use interfaces to allow multiple implementations. In practice the cases where I have multiple implementations are a tiny fraction of all cases so instead I end up making the codebase harder to maintain. In cases where I later need to add another implementation then it is simply to then add the interface required on demand. There are other scenarios where that might not be the case but the theory taught did not explain those scenarios.

I’ve done some scientific and empirical studies on this. Take a programming task of medium size that could be finished in an hour. Now using the theory of software engineering “make it better”. That is look through all the things that can be done such as design patterns that would for example improve maintainability, reliability, etc. This increased both the time taken and the size of the codebase by between one to two orders of magnitude.

You might ask what about large scale. This was applied to projects that would usually take a week, two weeks and four weeks. In every case the optimal approaches according to software engineering produced software that was an order of magnitude worse in nearly every aspect compared to the lean approach.

With all tasks this was tested with a second iteration where a number of what would usually be half hour programming tasks were added in the form of changed requirements or new features.

In all of this experimentation one thing rang true. With few exceptions programming on all fronts beat SE ten to one at minimum. This was for a variety of reasons with an overwhelming reason being that to application of SE concepts solved problems that were imagined and no the problems that the developer needed to solve.

The lean approach would score very poorly as an academic assignment but as a professional assignment it demonstrated the difference between needing a million dollar budget and a billion dollar budget.

The lean approach incorporated SE theory. The difference is that it was not naive. That is, it was allowed to incorporate practical experience rather than purely theoretical knowledge as a primary driving force and it was also permitted to reject faith in the theoretical. By comparison the SE approach was very by the book. A practical approach without CS or SE knowledge had more variable results but you would be surprised to find out that that it still often works out better.

The missing gap here is learning programming. It’s traditional to learn a programming language. Emphasise on language. When children learn to speak they don’t first learn about nouns, verbs, grammar, etc first. It’s much the same for the best programmers who have learn to program fluently. Later learning those things helps them but ultimately the primary and initial force for learning is practice.

Especially starting out with minimalism, just learning the minimum you need to learn and do the minimum your need to do to achieve a given objective then building up from that.

Between SE and CS there’s really little difference. Both gives you lots to do and make trivial tasks very complex. Instead of gradually adding things as they are justified both SE and CS lead to the application of everything that then needs to be sculpted down.