Question

I'm studying Software Engineering at the moment and some of my courses include the theory of computation and analyzing algorithms. I find it hard to relate a Turing Machine for example, to Software Engineering or just plain programming. So my question is:

Why include theoretical subjects that play an important role in Computer Science in the field of Software Engineering? Or how can I apply the knowledge of PDA,TM,P,NP and so on in developing software? I fail to see the link between the two.

Was it helpful?

Solution

A bit of theory is always required. It helps you thinking in the right way. I know it may seem very detached at the first approach, but if you are able to catch the true meaning of it, you'll have that extra oomph, especially in your field.

The Turing machine, for example, you have mentioned, is a classical logic and mathematically model to understand the limits and the potential of mechanical computation as well as the study of the algorithmic complexity.
Of Course, a software engineer needs less theory and more technology than a scientist, but here we are talking about the theoretical basis that all we should have.

OTHER TIPS

There are two reasons why these subjects are included.

  1. As Gengiolo says, these form the theoretical basis that we should, arguably, all have.

  2. In attempting to understand these fundamental principles, we develop our reasoning skills and can apply them to complex multi-disciplinary problems.

I rarely use any of the theoretical - or even practical - subjects that I learned whilst studying Software Engineering in their raw form. But I believe that a good fundamental knowledge of these principles makes me a better engineer - more employable too.

Well, Software Engineering education is problematic. And Computer Science also.

I do not think that to study Turing Machine, will give you more insight about algoritmic complexity nor limits of computation. But they are part of our history.We should know them. At least we should know Alan Turing :-)

And It is hard to talk about "theoretical basis" of software engineering and computer science. It is also not realistic that someguy will ask you to solve an NP hard problem.And you will say that "Oh that is NP hard sir". Many software developers do "routine development" task.

So you are "right at your feelings". But software development is not just "writing codes" or "learning new buzz technologies". If you just do it, you will make your thinking tools "dull". To keep them sharp, consider Algoritmic Complexity, Problem Classifications like NP and other courses as an thinking exercise. To develop your imagination take also some other interesting courses from other departments such as "String Theory" [ physics] or to understand human nature why not take a "Anthropology" course . :-)

The truth is that our education is try to make a swiss knife from us.To know from everthing a little bit , but not a real knife or real can opener etc.[no deep knowledge] They think that if you consider to be a "real can opener" you can start with "miniature can opener" they proive it to you.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top