If you had a Sun3 or a Sparcstation, you would have a windowing environment that most of us basically used like having a corral of terminals in front of us (or at least that's what I would do). Actually I think the first Sun I sat at (at the Australian National University in Canberra) was running SunView:
https://en.wikipedia.org/wiki/SunView

At the time, the Sun workstation (and competitors) made the graphics on a PC look pathetic. A PC simply couldn't drive enough dots on the screen to compete with Sun or SGI.

I'm talking about programming a big system in C here but other languages would be similar.

A pile of terminals would be your editors. If you were lucky, you could drag out your window and the editor would still format OK (vi was good at this, emacs sometimes not so good depending on your local sysadmin and what they had installed). Other editors... didn't really do that and you were stuck with whatever the termcap entries on the machine looked like.

There were native "windowed" editors available but they mostly sucked for a programmer as they were more like "point and click" and didn't have all the buffer commands, quick jump to the line you wanted etc. shortcuts that a good programmers editor has. Line numbers are important!

Most non-trivial programs have lots of source files, so you would have half a dozen vi sessions in half a dozen windows running. One window I would use just for running the compiler. The workflow was: compile the program, compiler spits out line number and file where problem is. Likely you already have it open so jump over to that window, fix the problem, :w!, recompile.

Once it compiled, fire up dbx or whatever was installed and run your stuff. dbx was (is?) capable of setting break points, inspecting things etc. You'd find the issue, kill the debugger, fix it, recompile. Happy programmers felt a new freedom compared to being hunched over a vt220 terminal. It was bliss.

Then, Visual Basic turned up. It took all the ideas of something like Turbo Pascal (everything on one screen) and kinda smooshed it together with the workstation windows idea, but instead of little windows all over the place, you have one big window with a pile of little windows inside it. For small screens (say 640x480) it felt a bit like having a Sun. Well, it felt like a Fisher Price toy but for putting together CRUD GUI apps it was pretty much unbeatable.

At that point I had moved onto Smalltalk (VisualWorks) but it was not like Unix. Everything is inside the environment - windows spread out everywhere but no command line stuff whatsoever. For the time it was fantastic (sorry digression).

Eventually, as the capabilities of PC's increased the industry kind of settled on things like Visual Studio where you have one screen, and tabs, and everything you need to do is on a menu somewhere. But having somebody have to program up all those menu items just about kills the release cycle of new features. Every time you add a new feature to the compiler you have to change the properties screen, test it, merge it, roll it into the next release. I understand why Microsoft in particular abandoned that idea for .NET where the importance of a PowerShell window really started to come into play.

Outside of MS you start to get things like Node.js where you need to run a command line tool to set things up. So it became normalised to want a rich CLI and all the nice things like "more" and "grep" suddenly become more useful again. Which is unfortunate if you are running Windows because suddenly you have to install a pile of 3rd party stuff. And along with it the most uselessly named system in the history of uselessly named things: chocalety. Hey whoever named chocalety, go f*ck yourself.

So VSCode is almost back to where I started. It has a bunch of tabs instead of different editor windows, but a lot of the time I'm in a terminal running "code ." and starting another instance of it. The compiler is running in a terminal session within VSCode but you don't have to do things that way and sometimes I don't, I have another terminal open where I do "dotnet start" or "docker run" and just attach to the process rather than using the vscode built-in launch stuff, because I want to drag that output window out nice and long instead of being cramped to 8 lines at the bottom of VSCode.

Onion on belt etc.

edit:
If you really want to know where all the Ctrl-Z, bg, fg etc. stuff came from in the Unix shells, it was programmers who had 10 vi sessions running on a single terminal and were switching around between tasks.