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.
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.