Those of us who work with new languages would think much deeper than debugging, etc. We have to consider the likely output of a program, whether you can consider two programs mutually equivalent, working out whether a program will start and terminate, etc. That theory can actually look much simpler than an executable program.
Another theoretical concept which impinges greatly on practical programming is the complexities of algorithms.
Although Sir Tony Hoare and He Jifeng write:-
Hoare and He, Unifying Theories of Programming, Hemel Hempstead: Prentice‑Hall (1998), Preface page ix wrote: As in all branches of engineering, the practice comes first, both in importance and in historical order.
I do not believe you can do the practice correctly without an understanding of the underlying theories. Computer science relies heavily on various branches of maths, including logic. But logic is about three millennia old, as against computer science, which is much older than it was when I first did any programming. Actual programming goes back only about ¾ of a century; before that there was no such machine as a computer. My programming knowledge spans more than half that period, though I did no programming for over thirty of those years.