Think about this question. Being an Engineer myself, the obvious and immediate answer is… “of course we have original ideas”.
I ran across this quote the other day however that really struck me (admittedly in the wrong way):
“A good scientist is a person with original ideas. A good engineer is a person who makes a design that works with as few original ideas as possible. There are no prima donnas in engineering.”
That was a quote by Freeman Dyson. As an Engineer I must admit that this strikes me odd. An engineer is someone who “works with as few original ideas as possible”? How can an engineer not have original ideas? How can an engineer accomplish its designed tasks without having original ideas?
Well – let’s take a step back so we can analyze this without being offended. After thinking about this in depth I actually do agree with the statement – although it took me a while to reach the conclusion.
What does an engineer do? Let’s take the example of a software engineer. They create things using a structured language. Programming languages allow an engineer to declare variables, create objects and otherwise build virtual representations of things. However all of the work they are doing resides within a set of rules. The rules of the programming language. The syntax defines how the code can be organized and written. The process flow defines how the code is executed and interpreted. As Engineers we are creating things… but we are doing so within a defined set of rules and directions.
What about the field of computer science then? What makes them so unique to have the word science attached to it versus calling it computer engineering. Computer scientists focus more upon the rule structure and interpretation engines. These are the ones who are actually creating how things should be interpreted when no current rule structure exists.
So… do Engineers have original ideas? Well, I believe that they do. I know you may be thinking that earlier in this post I said that I agree with the quote that says a good Engineer does not have original ideas. So let me explain myself.
To be successful as an Engineer you need to understand rules and directions. You need to understand those so that you can make educated and appropriate decisions to achieve the specified goal. A good engineer has such an in-depth knowledge of their domain that they are able to make a decision based upon several possible choices. They can weight the pros and cons of each and come to a rational conclusion. An inexperienced engineer only has a small amount of experiences to rely upon and thus makes poor judgement simply because all of the possible solutions have not been exposed to them. When an engineer makes a decision that is their own – rather then one backed by reason and rational evaluation, that is when a feature is done incorrectly and will break in the long run.
I believe that Software Engineers are not just Software Engineers. To truly be a good programmer you need to have both an Engineering and a Scientific brain. The Engineering side understands how the rule and syntax structures of languages and processes work. They are able to write code that adheres to that ruleset and achieves the desired result. Engineers are able to draw upon several possibilities and reach a rational conclusion based upon fact or evidence. The Scientific side needs to be able to evaluate where and how the given solution should be implemented. Should it be written in this language or that? Should it be implemented in this fashion or not.
Do Engineers have original ideas? Of course they do. They have them when they are exercising the Scientific part of their brain. Successful Engineers however also know when it is time to put that part of their brain aside and make something work given the rules, syntax and restraints that they have to work with. More often then not rational based software engineering wins the day.