Is a programmer a software engineer? And a business expert that elicits the customer needs?
In Software Development as a Formalisation Process we described the development process as a language transformation process, from the business to the code. Is the software engineer involved in all these transformations?
If we look carefully at the process, we realize that each transformation consist of what needs to be achieved and of how it is achieved. The former is usually referred as the problem, and the latter as the solution.
For instance, the world is full of business opportunities. Some people are keen to identify business opportunities and to come out with a way of how to make money from them. The business opportunity is the problem and the way of making money from it is the solution. When we describe the business opportunity using a particular language, e.g., natural language, we are describing what is the problem (requirements). Then, this description needs to be transformed into another one which describes how it is possible to earn money, which is the solution. A business case can be the language used to describe this kind of solution.
Note, however, that we have referred to a problem and a solution and we have not described anything that has to be executed on a Turing machine. Are software engineers involved in this part of the process?
The entrepreneur may have found the business solution but she has a problem: how can the business case be accomplished? The solution, the business case became a problem! Suppose that when talking with other people about her problem she realises that a software system will help to have a successful implementation of the business case. In this case the software system is part of the solution, but it will raise the problem of how to implement it…
I guess that you are starting to figure out that the software engineer will be involved in how to implement the business case, but not on its design. Why? Because the implementation of the business requires a software system, and a software system executes on top of the Turing machine. A software engineering is involved in the language transformations where the final target language is to be executable by a computer. Right? Yes, but there is a nuance.
Suppose that the business opportunity is about a new programming language that will be friendlier for programmers, writing concurrent code is error-prone. Obviously, the software development should be involved on the identification of the business opportunity and the definition of the business case.
As an additional remark, it is worth mention that sometimes people get confused with the scope of software engineering because the same languages and techniques are being used to write descriptions of systems that are not software systems. For instance, disciplines like Enterprise Modelling, which are concerned with the description of a business, or an organisation, although using some of the software engineering techniques, are out the software engineering scope. Of course, if you are modelling an organisation because you want to simulate it on a computer, you are doing software engineering because you are concerned about how to execute it on top of the Turing machine, but if your concern is to describe the social relations within the organisation, then you are emphasising distinct properties of your descriptions, and you are not doing software engineering.
On the other side of the development process: is the programmer a software engineer? Is he involved on some type of language transformation?