
If you have never heard of Alan Kay, then at least heard his famous quotes. For example, this 1971 statement:
It is the best way to predict it.
The best way to predict the future is to invent it.
Alan has a very bright career in computer science. He received
the Kyoto Prize and
the Turing Prize for his work on the object-oriented programming paradigm. He was one of the pioneers in the field of personal computers and graphical user interfaces; he developed
Smalltalk , one of the first and most influential programming languages ​​of all time.
')
In
Hexlet , especially in
chat , the question “what is OOP” and “what did Alan Kay really mean” is constantly being raised. This article contains Alan's interesting quotes about the state of the art, OOP and Lisp language.
About software developmentAlan Kay believes that the computer revolution is still ahead (
The Real Computer Revolution Hasn't Happened Yet ), and software development is developing in inverse proportion to Moore's Law: iron improves every year, and software becomes bloated without the need:
the problem is weak, poorly scalable ideas and tools, laziness, lack of knowledge, etc.
This situation is well described by a
short joke :
What Andy giveth, Bill taketh away
Andy gave, Bill took
Andy Groove, CEO of Intel, and Bill Gates, then CEO of Microsoft.
Improving the current state of development was the goal of the
STEPS Toward research project on
Reinvention of Programming (pdf) . The task is to achieve the “Law of Moore” in expressiveness through “reducing the number of necessary code by 100, 1000, 10000 times and more”.
In his report,
Programming and Scaling, which opens his eyes
(video), this topic is considered in more detail. According to Alan, software engineering has died down and is becoming a forgotten science that does not keep pace with hardware, other sciences and engineering disciplines. Large projects have become a dump of code and have reached a point where
no one is able 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) as 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 (complexity). This project, which has less than 20 thousand lines of code, works as a live, dynamic system capable of supporting billions of nodes, and it has never been disconnected since the first launch in September 1969. We just stopped to consider the Internet as a normal software project created by people:
The Internet is so well developed that many treat it as a natural resource, like the Pacific Ocean, and not the fruit of human labor. When was the last time we saw such a stable, clear technology without errors? For comparison, the Web is nonsense. Web created by amateurs.
About object-oriented programmingThe first thing that interested me was his
initial vision of the PLO. His experience in microbiology has played an important role:
I considered objects to be something like biological cells, and / or individual computers on a network that can communicate only 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 linking and powerful LISPa meta-capabilities:
The second phase is the understanding of LISPa and the use of this understanding to create more convenient, 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:
Later linking allows, with less effort, to embed ideas into the project that arose later in the development process (compared to systems with earlier linking such as C, C ++, Java, etc.)
And the potential for change on the go and faster iterations:
One of the key ideas: the system should continue to work while testing about, especially while making changes. Even major changes should be phased and take no more than a split second.
which is absent in
statically-typed languages :
If you use languages ​​with early binding, as most people do, then you lock yourself in the framework of what you have already written. Rephrase with ease is no longer possible.
Surprisingly, his thoughts on OOP were limited to this:
OOP for me are messages, local hold and protection, hiding state and late binding of everything. This can be done in Smalltalk and in LISP.
And nothing about inheritance. This is not the PLO
that we know today :
I'm sorry that I used the term “object” a long time ago for this topic, because of this, many people focus on the smaller of the ideas.
A big idea that modern statically-typed OO languages ​​lack:
The big idea is “messages.”
He believes that it is necessary to focus on messages, weak communication and interaction of modules, and not on the insides of the object:
The key to creating good scalable systems is to work out the communication mechanisms of the modules, and not to work out their internal properties and behavior.
Statically-typed languages ​​seem to him
inferior :
I am not against types, but I am not familiar with any type system that would not cause pain. So I still like dynamic typing.
Some popular languages ​​today use Smalltalk's messaging ideas, late binding,
andNewUnderstand construction:
forwardInvocation in
Objective-C ,
method_missing in
Ruby and
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 this science is similar to building bridges. Someone builds bridges, and someone destroys them and creates new theories. And we need to continue building bridges.
About LISPAlan Kay believes Lisp
the best programming language of all time
And that every graduate in computer science should study it:
Most people who earn CS degrees do not understand the importance of Lisp. Lisp is the most important idea in computer science.
About the right atmosphere and contextHe often recalls the unique atmosphere in
Xerox PARC and
ARPA , where “vision is more important than goals” and “funding people, not projects”.
Point of view gives 80 points IQ.
Alan Kay says:
The history of ARPA / PARC demonstrates how a combination of vision, modest funding, the right context and process can magically generate new technologies that not only affect civilization, but also create tremendous value for society.
And it is true.
Take a look at the impressive list of PARC 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
ARPA created
ARPANET , which became the ancestor of the Internet.
PS Alan Kay answers questions from the Hacker News community .