Why is software engineering difficult?: Differences between it and other sciences.
You may feel software engineering is difficult and confuses you. If so, it is due to differences between it and other sciences.
Reason 1: Software is an artifact, that is, an object made by persons. It may be often so large that the creators of it can't understand the whole of it any longer. Thus, only one technology can't solve all problems of software engineering, that is, No Silver Bullet. Though some one may say, "this technology will solve all problems of software engineering", software engineers will know that fact that it is false in almost all case. Thus, they become in skepticism and conservative.
Reason 2: Software isn't under any physical laws and constraints. Thus, it doesn't have any structure in nature. Thus, software tends to be chaotic. It causes difficulty to understand. In addition, it is difficult to make its behavior correct semantically, because even semantics must be defined as software. Thus, software must be forced to be structured, in order to make it easy to understand.
Reason 3: Software is made by persons. It causes that an experiment in software engineering is too difficult to evaluate accurately and strictly. Scientific control experiment should compare its results in the same conditions except for only one condition. However, in software engineering, it is difficult. A person learns from his/her experiments. Thus, he/she can't develop software twice in same conditions. Different persons aren't in same conditions. Thus, it is in different conditions that two different persons or teams develop the same software. It makes it difficult to prove something.
Reason 4: Software engineering is composed of principles that are derived from much experiences gotten during software life-cycle, especially software development. Each principle isn’t proven strictly by mathematics or physics in almost all case, but probability that it’s true is enough much to believe, even though we can’t explain why it’s true. Some principles seem to be inconsistent one another; it may be because some contexts or preconditions are different.
Thus, software engineering is too difficult to understand and solve. However, it will be useful for human being, due to the difficulty and potential of it.