1. 7
  1.  

  2. 3

    Object-oriented programming, as originally put forward, wasn’t a bad thing. The key insight was local interpretation.

    Object, in a logical sense, usually means “thing of which I have incomplete knowledge”. Or, alternatively, an uninterpreted symbol (an urelement in set theories, a symbol in a formal language alphabet). Object-oriented programming came about as people realized that they needed to work with things (e.g. files, sockets, complicated data structures) of which they had incomplete knowledge. Likewise, an actor is a (possibly state-carrying) system of which one has incomplete knowledge.

    It went bad when programmers started thinking that complex object hierarchies and inheritance (which turned out to be a mistake) were “the way to do programming”. Also, OOP has been sold to bad actors as a way to replace expensive expert programmers with interchangeable peons… but that’s not Alan Kay’s fault or a problem with Smalltalk.

    Intelligent OOP can be a reasonable way to do certain kinds of stateful programming. It’s good when circumstances require you to work with assets whose implementations may be extremely complex but ought to be abstracted away. Corporate OOP (VisitorFactory and the culture of mediocrity that’s grown up around much of Java) is, on the other hand, a total disaster.