I think it is a bit of a shame that software developers, and technical folks in general, do not study more philosophy. It turns out that many of these old stuffy guys have thought about many of the things that we actually run into on an ongoing basis.
Even the vocabulary that the ancient philosophers have defined resembles our own. They talk about systems made up of events and entities. They talk about features of a system. They even talk about the “non-functional” attributes of a system.
Philosophers have been discussing for hundreds of years the things that we think are new or novel ideas. Does past state matter? Does current state matter? Does intent matter? Does anything matter?
Digging into one specific example that came up in my realm recently: Accidental vs Essential complexity. “Accidental” is a property of a thing that does not define it, it is not essential to that thing. The thing may happen to have that property, or it might not. On the other hand, an “Essential” property is a property that a thing must have. It cannot be called the thing if it does not have this property. Take for example a fox’s bushy tail. Is this an essential attribute of a fox, or accidental? If a fox for some reason lost its tail, would it still be a fox? If the tail no longer was bushy, would it still be a fox? Yes, so this is an accidental property of that fox. So if we are talking about the complexity of something, like an algorithm, that complexity may be essential to the algorithm, or it could be accidental. The complexity could be accidental in that the code implementing the algorithm is very unclear, or unnecessarily convoluted. The complexity could be essential if the problem domain happens to dictate such complexity, perhaps as in the case of calculating movements of bodies in space.
The “soft” skill of philosophy has much to offer us, if we just spend some time to dig into it.