Ich sehe das auch so wie BlackJack. Informatik ist Mathematik, allerdings von einer anderen Seite betrachtet. Mathematik fragt, was wahr ist, also nach deklarativem Wissen, und Informatik fragt, wie etwas funktioniert, also nach prozeduralem Wissen.
Hal Abelson bringt als Beispiel die mathematische Definition der Quadratwurzelfunktion: sqrt(x) := y | y*y == x. Mit dieser Definition weiß ich zwar nun,
was eine Quadratwurzel ist, aber ich weiß noch nicht,
wie ich eine berechnen kann. Dazu kann ich zB. das Verfahren von Heron von Alexandria verwenden, dh. einen Algorithmus.
Um Informatik zu betreiben braucht man neben Schulmathematik noch mindestens Mengenlehre, Aussagen- und Prädikatenlogik, Graphentheorie und Abstrakte Algebra. Dazu vielleicht noch etwas Modell- und Kategorientheorie und je nach informatischem Teilgebiet mehr. Programmieren ist die Anwendung dieses Wissens. Nicht nur, aber auch.
Was Abstrakte Algebra angeht, halte ich Monoide, Posets und algebraische Verbände für wichtiger, als Gruppen, Körper und Ringe, weil sie einem viel öfter begegnen. Neben der Addition und Multiplikation von Zahlen zB. die Konkatenation von Strings, Listen und Tupeln, zusammen mit deren Identitätselementen "", [] und (). Wenn man Monoide verstanden hat, kann man auch Monaden verstehen. Die Semantik von Programmiersprachen kann man mittels Scott-Domains (also Posets) analysieren. Graphentheorie braucht man, um Facebook zu bauen.
IMO:
In der Schule braucht man davon kaum etwas. Das wichtigste Konzept, das man verstehen muss, ist das der Funktion. Damit hat man das Handwerkszeug, um größere/schwierigere Probleme in kleinere/einfachere zu zerlegen.
divide et impera ist die zentrale Strategie beim Programmieren. Am deutlichsten sichtbar wird das bei rekursiven Funktionen, nur sind diese leider für Anfänger nicht leicht zu verstehen. Wie ich die erkläre, weiß ich noch nicht, aber nachdem ich ein Lisp als Lehrsprache verwende, muss ich mir was einfallen lassen.
Letztlich denke ich, dass man das Hochtheoretische nicht braucht, um einen Einstieg in die Programmierung zu bieten, aber man sollte durchaus zeigen, dass es das gibt und wozu es nützlich ist. Das praktischste ist ja bekanntlich eine gute Theorie.
In specifications, Murphy's Law supersedes Ohm's.