Craftsman vs Engineer

 

I’ve been searching on the internet about what a software engineer is, and I found different opinions, blogs and articles about it. Some of them said that software development is craft and other said that is was an engineer discipline. For a moment I was almost convinced that it is a craft, but a a part of me was saying that it is an engineer discipline; so I decided to look the meaning at the dictionary and this is what I found:

Retrieved from this dictionary.

Engineer.

The application of scientific and mathematical principles to practical ends such as the design, manufacture, and operation of efficient and economical structures, machines, processes, and systems.

Craft

Skill in doing or making something, as in the arts; proficiency.

In my own definition, software engineer can be both because mathematical principles are necessary to create something. Engineers are problem solvers and, in software, you are free to create (or program) whatever it is need to help you to solve the problem. You can have your imagination to go wild and write anything (with the correct syntax) in any program language using everything you have been taught; and like any other art, is not going to be the same code from another software engineer.