I've actually been thinking at work recently that our work is very much in line with making and testing hypothesis. When we add code or edit existing code, we hypothesize that the program behavior will change in specific ways, and then we test those hypothesis via various means of manual and automated testing.
I would actually add to the above though that I think it's important people learn to approach problem-solving from a mathematical perspective. Unfortunately, a lot of people that get into software engineering don't like math, and they would generally be averse to learning about software engineering this way, but I think a lot of bad code gets written because the person writing it didn't approach the problem with the right structure or rigor.
Where you say "mathematical" I'd suggest "logical".
Also, formal logic (Aristotelian, sentential, predicate...) is distinct from mathematics per se.
Agreed that fundamental problem-solving skills are in too-short supply.
I would actually add to the above though that I think it's important people learn to approach problem-solving from a mathematical perspective. Unfortunately, a lot of people that get into software engineering don't like math, and they would generally be averse to learning about software engineering this way, but I think a lot of bad code gets written because the person writing it didn't approach the problem with the right structure or rigor.