OP said:
> … people who lean on print debugging often have incomplete knowledge of the immense power of modern debugging tools.
I am educated. I have a metric fuckton of incomplete knowledge in all areas of life.
You’re poking at something that wasn’t said.
(Well, other than my own conditional breakpoint features built into the code, doing things like programmatically trigger a breakpoint whenever an object with a specific address (that being settable in the debugger interactively) passes certain points in the garbage collector.)
We have successfully sorted out how to manage both loops, and set effective breakpoints to debug efficiently. We also log extensively.
I know it’s possible because I do it every day.
"Those are all things we had many decades ago"
I didn't claim this is some new invention, though. Though as someone who has been a heavy user of debuggers for DECADES, debuggers have dramatically improved in usability and scenarios where they are useful.
"So please refrain from calling people with different preferences uneducated."
But...I didn't. In fact I specifically noted that graduates of excellent CS programs often haven't experienced how great the debuggers in the platforms they target are.
We all have incomplete knowledge about a lot of things.
Also, what's "modern" about "Walk the call stack! See the parameters and values, add watches, set conditional breakpoints"? Those are all things we had many decades ago (for some languages, at least). If anything, many modern debugging environments are fat and clunky, compared with some of the ones from way back when. What has greatly improved though are time travellers, because we didn't use to have the necessary amounts of memory lots of the time.
So please refrain from calling people with different preferences uneducated. [Ed. I retract this bit, though I think it is not unreasonable to associate lack of knowledge with lack of education (not necessarily formal education!) I don't want to quibble over semantics.]