It was possible to actually know all the software that you had at your disposal at the byte level.
If you were so inclined you could change any part of it.
You could hook up hardware and access it immediately without any intermediaries, drivers, security or other barriers.
If it didn't work, it was likely your fault, which meant you could fix it.
Bugs in production software were fairly rare because people would test their stuff properly and spend the time required to do so because fixing bugs in production was either hard (or impossible), expensive, or both.
If you wanted speed on a regularly available machine you were programming in assembler.
You probably had access to only two programming languages, a high level one and assembly. If you were lucky you could call the one from the other.
There was no internet, you needed to either find a more knowledgeable buddy or you had to go to the library, read magazines or book.