Science essentially means to build a mental model of a system by observing its behavior. While engineering is sort of the opposite. With the scientists mental models in mind you compose new systems. I doubt the two sides are ever pure though. Scientists almost always start by engineering a new tool for observation while engineering requires new mental models to keep producing new things. The two fields are intertwined by a mutual dependency.
Computers, despite having humble foundations can be used to do really powerful forms of information manipulation. In computing we aren't as limited by the rules nature imposes on us to create systems so much as by our ability to conceive them. Ironically then, Computer Science is more about brains than computers. By better understanding how people think and learn we can improve our methods of constructing software. And the best people to help understand software engineers is the software engineers themselves. In computing the relationship between science and engineering is expecially close. Software engineering is introspective.
Software systems are described in terms of their attributes. Each attribute is itself a system, in the same way all words are defined in terms of smaller words. The engineer will look for sub systems which already exist. Though if they do not they must recur and create that one. Once they have all components they compose them to create the original system.
you have to look at a tap very crudely to consider it simply on or off
The systems components should be simple; that is they exhibit only the desired behavior and no more. Extra attributes can only be a liability. However, simplicity is not objective. If you look close enough at any system you will notice it can do more than it says on the tin. For example computers treat electronic signals as simples, either on or off, 1 or 0, but really their value is continuous. Like a tap. It is only due to a certain crudeness in the way signals are observed that they can be treated as simples. These sorts of hacks are very common through the computing stack. Sometimes they allow better performance other times they just weren't noticed till too late. Furthermore, a given system can be simple from one perspective while being complicated from another. Software engineering requires good judgment.
I said software engineers describe systems in terms of other systems. But actually they describe them in terms of other systems that they know. To a certain extent they should spot gaps in their knowledge when working on systems a long way from their experience but they will always tend to use systems they already know. And because everyones experiences differs their description of new systems are also bound to differ. The same is true in most feilds of engineering however an important difference in software engineering is a lack of physical bounds. Computing is cheap so we can afford to waste some. As apposed to fields like aerospace where inefficient where with current designs they are within 5% of not making it to orbit. In software the main driver behind natural selection is how easily a system can be understood by people. Which can only be measured subjectively. Software engineering is creative