Alan Kay, creator of OOP, about development, Lisp and OOP

Alan Kay, creator of OOP, about development, Lisp and OOP

If you've never heard of Alan Kay, you've at least heard of his famous quotes. For example, this statement from 1971:

The best way to predict the future is to invent it.
The best way to predict the future is to invent it.

Alan has a very bright career in computer science. He received Kyoto Prize и Turing Award for his work on the object-oriented programming paradigm. He was one of the pioneers in the field of personal computers and the graphical interface, he developed Small talk One of the first most influential programming languages ​​of all time.

In our Hexlete, especially in chat, the question "what is OOP" and "what Alan Kay really meant" is constantly raised. This post is a collection of interesting quotes from Alan on the state of modern development, OOP, and the Lisp language.

About software development

Alan Kay believes that the computer revolution is yet to come (The Real Computer Revolution Hasn't Happened Yet), and software development evolves inversely with Moore's Law: hardware gets better every year, and software gets bloated unnecessarily:

the problem is weak, poorly scalable ideas and tools, laziness, lack of knowledge, etc.

This situation is well described short joke:

What Andy giveth, Bill taketh away
Andy gave, Bill took

Andy Grove, CEO of Intel, and Bill Gates, then CEO of Microsoft.

Improving the current state of development was the goal of the research project STEPS Toward The Reinvention of Programming (pdf). The goal is to achieve "Moore's Law" in expressiveness by "reducing the amount of code needed by 100, 1000, 10000 times or more."

In his eye-opening report Programming and Scaling (video) this topic is discussed in more detail. According to Alan, software engineering has stalled and is becoming a forgotten science that does not keep pace with hardware, other sciences and engineering disciplines. Large projects have become code dumps and have reached the point where none unable to understand 100 million lines of MS Vista or MS Word code. But in reality, the code in such projects should be an order of magnitude smaller.

Alan considers the Internet, TCP/IP protocols, LISP interpreters, Nile (Math DSL for Vector Graphics) and OMeta (OO PEG) (PDF) examples of elegant software with minimal code.

He calls the Internet (TCP/IP) one of the few large-scale software projects that has been properly designed, and its level of complexity is in balance with the level of complexity (complication vs. complexity). With less than 20 lines of code, this project runs like a living, dynamic system capable of supporting billions of nodes, and has never been shut down since it was first launched in September 1969. We just stopped considering the Internet as a normal software project created by people:

The Internet is so well designed that many view it as a natural resource, like the Pacific Ocean, rather than a product of human labor. When was the last time we saw technology that was so stable, crisp and error-free? By comparison, the Web is bullshit. The web was created by amateurs.

About object-oriented programming

The first thing that interested me was his initial vision of the OOP. His experience in microbiology played an important role:

I thought of objects as something like biological cells, and/or individual computers on a network that can only communicate through messages.

and experience in mathematics:

My experience in mathematics made me understand that each object can have several algebras, they can be combined into families, and this can be very useful.

Ideas for late binding and powerful LISPa meta features:

The second phase is understanding LISPa and using that understanding to create nicer, smaller, and more powerful structures and later binding.

And soon Alan began to support the idea that dynamic languages ​​are the future of software development (pdf). In particular, ease of change is important to him:

Late-binding makes it easier to incorporate ideas that come later in the development process into a project (compared to earlier-binding systems like C, C++, Java, etc.)

And the potential for changes on the go and faster iterations:

One of the key ideas is that the system must continue to work during testing and especially during changes. Even major changes should be incremental and take no more than a split second.

which is missing in statically typed languages:

If you're using early-binding languages, as most do, then you're locking yourself into what you've already written. It's not easy to reformulate.

Surprisingly, his thoughts on OOP were limited to this:

OOP for me is messages, local hold and protection, state hiding and late binding of everything. This can be done in Smalltalk and LISP.

And nothing about inheritance. This is not the OOP which we know today:

I'm sorry that a long time ago I used the term "object" for this topic because it causes a lot of people to focus on the lesser of the ideas.

The big idea that modern statically typed OO languages ​​lack:

The big idea is "messages"

He believes that the focus should be on messages, loose coupling, and module interaction, and not on the internals of an object:

The key to creating good scalable systems is to work out how modules communicate, not to work out their internal properties and behavior.

Static-typed languages ​​seem to him defective:

I'm not against types, but I don't know of any type system that doesn't cause pain. So I still like dynamic typing.

Several popular languages ​​today use Smalltalk's message passing ideas, late binding, and the construct doesNotUnderstandforwardInvocation в Objective-Cmethod_missing в Ruby и noSuchMethod in Google Dart.

Destroy everything and create something better

Alan has an interesting theory about the development of computer science:

It seems to me that there is only one type of computer science, and that science is like building bridges. Someone builds bridges, and someone destroys them and creates new theories. And we need to keep building bridges.

About LISP

Alan Kay considers Lisp

the best programming language of all time

And that every graduate in computer science should study it:

Most people getting degrees in CS don't understand the importance of Lisp. Lisp is the most important idea in computer science.

About the right atmosphere and context

He often recalls the unique atmosphere in Xerox-PARC и HARP, where "vision is more important than goals" and "funding people, not projects."

Point of view gives 80 IQ points.

Alan Kay says:

The ARPA/PARC story demonstrates how a combination of vision, modest funding, the right context and process can magically produce new technologies that not only impact civilization, but create tremendous value for society.

And it is true. Take a look at PARC's impressive list of inventions, many of which have played a very important role in the development of our world. For example:

  • Laser printers
  • Object Oriented Programming / Smalltalk
  • Personal computers
  • Ethernet / distributed computing
  • GUI / computer mouse / WYSIWYG

And in HARP have created ARPANET, which became the progenitor of the Internet.

PS Alan Kay answers community questions Hacker News.

Source: habr.com

Add a comment