Object Oriented Programming
In the early '80s, Xerox gave Steve Jobs a guided tour of their Palo Alto Research Center (PARC) in exchange for some Apple shares. One of the projects that they showed was Smalltalk-80, a complete graphical user interface written in a late-bound, dynamic, object-oriented language.
The GUI itself was the inspiration for the Apple Lisa and later the Macintosh, but the entire system provided the inspiration for NeXTStep (the programming environment for NeXTSTEP, which was also licensed by IBM for use on AIX).
This was a major shift in how applications were developed. The Mac Toolbox contained over 400 public procedures. To write a graphical Mac application, you had to be familiar with a large subset of these. In the NeXT launch presentation, Jobs claimed that application developers told him that they spent 90% of their time doing the GUI programming. Having played with the old Mac APIs, it's a figure I can well believe.
By contrast, the NeXT system shipped with an Application Kit of about 20 objects. Finding your way around this API was very simple. Modern GUI development environments have a similar design. Even purely procedural APIs now tend to have opaque types that encapsulate the same sort of things that NeXT's Application Kit included and functions that operate on these, with clear isolation between the independent parts.
If you learned GUI programming in the mid '90s or later, then it's difficult to realize quite how big a jump this idea was. Pretty much any modern GUI toolkit is heavily inspired — sometimes indirectly — by the NeXT design. If you do any programming on OS X today, then you might be surprised at how many of the AppKit objects and methods that you use were present right back at the start in the NeXT system. Even if you use UIKit on iOS, you'll find that a lot of things in the NeXT system are eerily familiar, and iOS' UIKit is a clean redesign of the application kit to eliminate assumptions that are no longer valid for modern machines.