Software Engineering vs. Computer Programming

<p>@lightnin, TomServo</p>

<p>After going back and forth on this issue for a long time, I think I’m finally at a point where I’m willing to strongly defend the position that programming is an activity which should be considered as part of what computer science studies. That is, computer scientists may legitimately do programming in the course of practicing computer science, and programmers may legitimately do computer science in the course of programming. Some clarifications:</p>

<ol>
<li>It’s possible to do computer science without doing what most would consider “programming”.</li>
<li>It’s possible to do programming without doing what most would consider “computer science”.</li>
</ol>

<p>The overlap in disciplines between formal studies of “programming” and “computer science” should be substantial. In particular:</p>

<ol>
<li>A computer scientist writing a constructive proof of a theorem, or defining an automaton or grammar, is doing something theoretically indistinguishable from programming.</li>
</ol>

<p>Ex.1. Kleene’s proof of the equivalence of regular expressions and finite automata is clearly computer science. However, Kleene’s proof can be (and indeed is often) used as an algorithm for constructiving equivalent regular expressions and automata.</p>

<p>Ex.2. Constructing an automaton is simply using some formalism to automate computation, no different than specifying the automation using any other programming language.</p>

<p>Ex.3. Defining a formal grammar to parse a language is basically just programming a special-purpose parsing computer to produce the correct output for certain kinds of strings.</p>

<ol>
<li>A programmer writing a program is doing something theoretically indistinguishable from defining an automaton or formal language, or constructing a detailed and convincing proof of some theorem.</li>
</ol>

<p>Ex.1. Writing a program that computes integer-roots of positive integers constitutes a mathematical proof that positive integers have integer-roots, and moreover, that these are computable.</p>

<p>Ex.2. Writing a program in a Turing-equivalent programming model demonstrates the existence of a Turing machine for the recognized language / effected computation. Moreover, defining a programming model capable of effective computation that is more powerful than Turing machines would be a major breakthrough in computer science, but could be achieved as a purely practical programming matter. Similarly, a program written in C++ that solves an NP-Complete problem in polynomial time would be a huge computer science accomplishment, and would garner the Millenium Prize money as a valid proof.</p>

<p>All that said, “Software Engineering” will likely be the de facto degree for working in the software industry as CS continues to become more rarefied and Software becomes increasingly important. Realistically, in the short term, the huge superabundance of positions in the software industry will basically make what academic credentials one has more or less redundant, and competition/differentiation will only exist at higher levels.</p>