Brief Introduction: Alan Kay, a renowned computer scientist and a key figure in the development of Smalltalk, begins his presentation by acknowledging the early morning hour and the unusual setting of a bathroom for his talk. He reminisces about his absence from Uppsala since the first conference and contemplates the significance of his invitation coinciding with the 25th anniversary of Smalltalk.
Historical Context: Kay mentions the 25th anniversary of Smalltalk and shares his decision not to give a historical talk, having already fulfilled that obligation at the history of programming languages conference. He expresses his desire to provide a brief historical glimpse for those who may be unfamiliar with the past 25-30 years of computing.
Xerox PARC and the Early Days of Smalltalk: Kay introduces a set of images dating back to 1973 and 1974 at Xerox PARC. These images showcase the first children that they worked with, using Smalltalk. The music accompanying the clip, titled “The Happy Hacker,” was composed by Chris Jeffers, a member of their group.
Technological Innovations: Kay highlights the significance of the Alto computer, which was the forerunner of workstations and the Macintosh. He emphasizes that the Alto achieved real-time FM synthesis without additional sound synthesis hardware, demonstrating the potential of a well-designed computer.
Audience Participation: Kay engages the audience by asking those who participated in the Xerox PARC Smalltalk experience between 1971 and 1983 to stand up. He acknowledges their presence and requests that they remain standing.
Historical Clip: Kay proceeds to play a historical clip, offering a glimpse into the early days of Smalltalk and the interactions between children and the technology.
00:05:07 OOP: From Simple Mechanisms to Complex Architectures
OOP and Math: Kay argues that computers form a new kind of math that doesn’t fit well into classical math. He criticizes those who try to judge computers by classical mathematical standards, calling it a form of “masturbation.”
OOP and Beauty: Kay believes that OOP should strike a balance between beauty and practicality. He criticizes those who are willing to sacrifice either one, arguing that they don’t understand the essence of computing.
OOP and Smalltalk: Kay created the term “object-oriented” but did not have C++ in mind. He believes that the important aspects of Smalltalk and similar languages lie beyond the syntax and superclass library.
OOP in the 1960s: In the 1960s, programs were small and mechanical, with a sense of simple mechanism. Kay likens these programs to doghouses, which can be easily constructed but cannot be scaled up without collapsing.
The Problem of Scaling Up: Kay warns against the common practice of scaling up simple structures without understanding the consequences. He emphasizes that when something is scaled up by a factor of 100, its mass increases by a factor of a million, while its strength only increases by a factor of 10,000, leading to weakness.
Two Choices: When scaling up fails, one can either acknowledge the failure and try a different approach or attempt to cover up the problems and claim that the failure was intended. Kay believes that the latter approach is responsible for the structure of many modern operating systems.
Architecture as a Solution: Kay proposes architecture as a solution to the problem of scaling up complex structures. Architecture involves the designing and building of successful arches, which are non-obvious, non-linear interactions between simple materials that result in non-obvious strength and stability.
Understanding Complexity: Architectures often dominate material in complex systems, leading to a focus on optimization rather than innovation. OOBE emphasizes architecture’s importance as complexity increases.
The Pink Plane Metaphor: Thoughts can be viewed as ants on a pink plane, limited by the context of the plane. Creative acts involve transitioning to different contexts, leading to new insights. Blue ideas are novel concepts that arise from unexpected contexts.
Data Abstraction in the Air Force: An early example of data abstraction was developed in the Air Force in 1961. Data was organized into records with pointers to procedures for handling the formats. This approach allowed for easy processing of complex data without requiring a specialized browser.
HTML’s Limitations: HTML’s reliance on browsers is a step backward in terms of complexity management. Browsers should not be required for data processing. Distributing knowledge of data formats is essential for effective data handling.
Ivan Sutherland’s Sketchpad: Sketchpad was an early object-oriented system with advanced concepts like classes, subclasses, and polymorphism. It demonstrated the potential of object-oriented programming.
The Significance of Simula: Simula’s introduction of relationships between computational states and procedures was groundbreaking. It offered a more general and powerful approach than ALGOL 60’s own variables.
Simula’s Connection to Biology: Alan Kay’s background in molecular biology influenced his understanding of Simula. Simula’s concepts resonated with the idea of morphogenesis, or the development of form in biological systems. Molecular Biology of the Gene provided a framework for understanding Simula’s potential.
00:29:57 Complexity and Speed in Living Systems and Computers
Complexity of E. coli Bacterium: E. coli bacterium is incredibly complex, with 120 million components that interact informationally. Each component carries a significant amount of information, similar to Ops 5 pattern matching. The computational state involved is about 100 gigabytes, equivalent to 100 modern desktops.
Speed of Computation: The rapidity of computation in living organisms rivals that of computers, especially in parallel processing. A protein molecule the size of a Volkswagen can move its own length in just two nanoseconds, four times the speed of light at our scale. The thermal agitation in living organisms is extremely violent, making it difficult to observe their internal processes.
Cell Division and Reproduction: A bacterium can completely duplicate itself in 15 to 18 minutes. Human cells are 1,500 times larger than bacteria and have about 60 billion informational components. A human body consists of 10^12 to 10^13 cells, yet only 50 cell divisions occur during a nine-month pregnancy. Over-proliferation, testing, and trimming are used to create a viable organism during embryological development.
Comparison with Computers: To a biologist, computers may seem slow, small, and stupid compared to the complexity and speed of living organisms. The challenge is to enable computers to realize their potential and match the capabilities of living systems.
00:35:47 Biological Metaphor for Building Complex Systems
The Biological Metaphor: The shift from mechanical to biological metaphors in computing is due to the scalability and adaptability of biological systems. Cells, unlike mechanical objects, can scale by factors of a trillion because they encapsulate their internal processes and maintain a selective interface with the external environment.
The Ma Concept: The Japanese word “ma” refers to the “stuff in between” objects, the unseen processes and relationships. Western languages, with their focus on nouns and verbs, struggle to express the process-oriented nature of systems.
Encapsulation and Abstraction: Encapsulation, with a clear interface between the inside and outside of an object, allows an object to act like anything. This powerful abstraction enables the creation of virtual machines and operating systems that provide a consistent and isolated environment for each user.
Scalability and the Unix Process Overhead: The Unix process overhead of 2,000 bytes made it challenging to create lightweight processes. This issue highlights the need for scaling solutions in object-oriented systems.
The Promise of Genetic Engineering: Genetic engineering techniques, such as modifying cold viruses to carry a defective gene, offer potential solutions for treating genetic diseases like cystic fibrosis. Reprogramming an organism’s DNA after birth is a powerful and complex technique.
Objects as Servers and Polymorphism: Objects can be thought of as servers, providing services to other objects. Polymorphism, or generic procedures, allows for the creation of classes of these servers, enabling flexible and reusable code.
Growing Systems: Unlike mechanical systems, biological systems can grow and adapt over time. The challenge of growing complex systems, such as aircraft, highlights the limitations of mechanical metaphors in computing.
00:44:33 Metaprogramming and Interoperability in Object-Oriented Languages
Challenges with Traditional Development Systems: Alan Kay criticizes the cycle of compiling, reloading, and modifying code, even with faster methods like virtual cafe, as a dead end for complex system development. This approach hinders the understanding of interoperability possibilities with existing systems.
The Metamorphosis of the ARPANET: Kay emphasizes the remarkable transformation of the ARPANET, later becoming the internet, which expanded 100 million times while changing every atom and line of code. This continuous evolution without interruption serves as a metaphor for the need for adaptable programming systems.
The Reflective Model of LISP and Java’s Shortcomings: Kay highlights the groundbreaking reflective model of LISP, captured in a half page of code, as a profound insight into metaprogramming. He expresses disappointment in Java’s lack of metaprogramming capabilities, considering it a missed opportunity to address future changes and interoperability requirements.
Metaprogramming and the Tyranny of Single Implementation: Kay advocates for metaprogramming as a means to liberate programmers from the limitations of a single implementation. By allowing the language to see its own structures, metaprogramming enables more flexible and adaptable systems.
The Inevitability of Semantic Interoperability: Kay envisions a future where dozens of different object systems coexist, each with unique pragmatic details but similar semantics. He asserts that semantic interoperability is possible by internalizing local pointers to any object regardless of its origin.
The Need for a Universal Interface Language: Kay proposes the development of a universal interface language to facilitate the exchange of information about an object’s capabilities. This language would allow objects to experiment with each other safely and automate the discovery of interoperability possibilities.
Rewriting the Book on Object-Oriented Programming: Kay lauds a specific book on object-oriented programming but criticizes its Lisp-centric and exclusive approach. He encourages a rewrite to make the book accessible to the general object-oriented community, offering a “Limoges balloon” as an incentive.
Abstract Data Types and the Persistence of Assignment-Centered Thinking: Kay criticizes the dominance of abstract data types, which maintain an assignment-centered approach to programming. He argues that this approach limits the potential for more expressive and flexible programming paradigms.
The Folly of Short-Term Efficiency: Kay cautions against prioritizing short-term efficiency at the expense of long-term viability. He cites the example of an operating system project that aimed for completion in two years using C++ for efficiency, ultimately leading to a decade-long development cycle.
The Perils of Single Points of View: Kay emphasizes the dangers of adopting single viewpoints and treating them as religions. He cites the example of Smalltalk and Schopenhauer’s observation that ideas progress through stages of denunciation, obviousness, and false claims of invention.
Smalltalk’s Stagnation After Commercialization: Kay expresses disappointment that Smalltalk ceased to evolve significantly after its commercialization, despite having four major versions and numerous releases during its development at Xerox PARC.
Smalltalk as a Bootstrapping Mechanism: Kay emphasizes the importance of Smalltalk as a tool for bootstrapping new ideas in systems building. He laments that this aspect of Smalltalk was largely overlooked by universities, commercial entities, and even the Smalltalk community itself.
Need for Constant Innovation in Systems Design: Kay asserts that we don’t yet fully understand how to design systems effectively. He cautions against turning our limited knowledge into a dogmatic religion and advocates for continuous thinking and exploration to reach higher levels of abstraction in systems design.
Squeak as a Platform for Innovation: Kay introduces Squeak, a project aimed at creating a bootstrapping mechanism for something better than Smalltalk. He encourages users to think of Squeak as a means to obsolete itself through its own mechanisms, leading to the development of future versions.
E. Power Biggs’ Lesson on Playing Grandly: Kay shares an anecdote about E. Power Biggs, a renowned pipe organist, who inspired him with his approach to playing music. Biggs’ advice to play grandly, even on a small organ, serves as a metaphor for embracing the future and pushing the boundaries of what systems can achieve.
Abstract
Updated Article: The Evolution of Programming: Reflections from Kay to Dijkstra and the Future of Computing
The Inception of Smalltalk and the Cultural Divide in Computing
In the realm of computing, the development of Smalltalk stands out as a pivotal event, sparking significant debates and discussions. During the celebration of Smalltalk’s 25th anniversary at Xerox PARC, Alan Kay offered a nostalgic look back by sharing images and a historical clip that captured the early interactions of children with Smalltalk. His presentation also acknowledged the contributions of those involved in the Xerox PARC Smalltalk experience. Meanwhile, Edsger Dijkstra’s paper highlighted a contrasting cultural approach to computing between Europe and the United States. Europe’s emphasis on mathematical rigor sharply contrasted with the U.S.’s practical and experimental orientation, setting the groundwork for diverse computing philosophies.
Kay’s Rebuttal: A New Kind of Mathematics
Alan Kay responded to this cultural divide by proposing that computers introduced a novel form of mathematics. He criticized the tendency to evaluate computers using classical mathematical standards and underscored the importance of balancing large-scale structures with practical concerns of correctness and completeness. This balance, according to Kay, is pivotal for understanding both the evolution of programming languages and their future applications.
The Beauty and Practicality of Object-Oriented Programming (OOP)
Alan Kay offered deep insights into Object-Oriented Programming (OOP), advocating for a blend of beauty and practicality. He criticized the tendency to prioritize one aspect over the other, emphasizing that this balance is crucial for developing robust and efficient software systems.
Early OOP and the Fallacy of Scaling Simple Structures
Kay reminisced about the early days of OOP, which were characterized by simplicity, akin to interlocking gears. He used the metaphor of scaling a doghouse to a cathedral to demonstrate the error in assuming that simple structures could be easily scaled up without considering their structural integrity and complexity. This metaphor underscored the importance of architecture in software development.
Responses to Structural Failures and Key Points in Kay’s Philosophy
In response to the collapse of simple structures upon scaling, two approaches emerged: disguising the failure or developing new concepts. Kay strongly advocated for the latter, emphasizing the significance of architecture over material and the necessity of creative, “blue ideas” for problem-solving. He touched upon the early forms of data abstraction in the Air Force, critiqued the limitations of HTML in managing complexity, and underscored the importance of Simula’s object-oriented concepts, drawing parallels to biology and morphogenesis.
Complexity of E. coli Bacterium:
The E. coli bacterium is a model of complexity, comprising 120 million components that interact informationally. Each component is informationally dense, akin to Ops 5 pattern matching, and the computational state involved in their interaction is about 100 gigabytes, equivalent to 100 modern desktops.
Speed of Computation:
Living organisms, including bacteria, exhibit astonishing computational speeds, rivaling that of computers, especially in parallel processing. For example, a protein molecule, comparable in size to a Volkswagen, can move its own length in just two nanoseconds, a speed four times that of light at our scale. Moreover, the internal thermal agitation in these organisms is incredibly intense, posing challenges to observation.
Cell Division and Reproduction:
The replication capabilities of bacteria are remarkable, with a bacterium capable of duplicating itself in 15 to 18 minutes. In comparison, human cells, which are 1,500 times larger than bacteria, contain about 60 billion informational components. A human body, comprising 10^12 to 10^13 cells, undergoes only 50 cell divisions during a nine-month pregnancy. This process involves over-proliferation, testing, and trimming to create a viable organism, demonstrating the complexity of embryological development.
Comparison with Computers:
In the eyes of a biologist, computers may appear slow and simplistic compared to the complexity and speed of living organisms. The challenge lies in enabling computers to realize their full potential and match the capabilities of biological systems.
Encapsulation, Abstraction, and the Internet
Kay drew parallels between the principles of encapsulation and abstraction in OOP and biological systems, highlighting their scalability and adaptability. He proposed that every internet object should have its own unique identifier, akin to a server, reflecting a vision for a more interconnected and efficient internet.
The Biological Metaphor:
The shift from mechanical to biological metaphors in computing is attributed to the scalability and adaptability of biological systems. Cells, unlike mechanical objects, can scale enormously because they encapsulate their processes and maintain a selective interface with their environment.
The Ma Concept:
The Japanese term “ma,” which refers to the space or processes between objects, illustrates the challenge Western languages face in expressing the process-oriented nature of systems, focusing primarily on nouns and verbs.
Encapsulation and Abstraction:
Encapsulation, by defining a clear interface between the inside and outside of an object, enables an object to function in various capacities. This form of abstraction is powerful, facilitating the creation of virtual machines and operating systems that offer consistent and isolated environments for users.
Scalability and the Unix Process Overhead:
The Unix process, with its overhead of 2,000 bytes, highlights the challenges in creating lightweight processes and underscores the need for scalable solutions in object-oriented systems.
The Promise of Genetic Engineering:
Genetic engineering, exemplified by techniques like modifying cold viruses to carry a defective gene, presents potential solutions for genetic diseases like cystic fibrosis. The ability to reprogram an organism’s DNA after birth is both powerful and complex.
Objects as Servers and Polymorphism:
In computing, objects can be conceptualized as servers, offering services to other objects. Polymorphism, or the use of generic procedures, enables the creation of classes of these servers, leading to flexible and reusable code.
Growing Systems:
Biological systems, in contrast to mechanical ones, have the ability to grow and adapt over time. The challenge of developing complex systems, such as aircraft, highlights the limitations of mechanical metaphors in computing.
Metaprogramming and the Future of the Internet
Metaprogramming, the capability of a system to modify its structure and behavior, is deemed essential for the future of the internet. Kay envisioned a world where objects could reference any other object globally, advocating for a universal interface language to enable deeper interoperability.
Challenges with Traditional Development Systems:
Kay critiqued the traditional cycle of compiling, reloading, and modifying code in system development, even with faster methods like virtual cafe, as a dead-end approach for complex systems. He stressed the importance of understanding interoperability with existing systems.
The Metamorphosis of the ARPANET:
Kay highlighted the ARPANET’s transformation into the internet, which expanded 100 million times while undergoing complete changes in its code and structure. This evolution serves as a metaphor for adaptable programming systems.
The Reflective Model of LISP and Java’s Shortcomings:
Kay praised the reflective model of LISP, captured in half a page of code, as a profound insight into metaprogramming. He expressed disappointment in Java’s lack of metaprogramming capabilities, viewing it as a missed opportunity for future adaptability.
Metaprogramming and the Tyranny of Single Implementation:
Kay supported metaprogramming as a way to free programmers from the constraints of single implementations. By enabling languages to recognize their own structures, metaprogramming allows for more flexible and adaptable systems.
The Inev itability of Semantic Interoperability:
Kay envisioned a future with multiple object systems, each with unique details but similar semantics. He believed that semantic interoperability could be achieved by internalizing pointers to any object, regardless of origin.
The Need for a Universal Interface Language:
Kay proposed developing a universal interface language to facilitate object interaction and information exchange. This language would enable objects to safely experiment and automate the discovery of interoperability possibilities.
Rewriting the Book on Object-Oriented Programming:
Kay praised a specific book on object-oriented programming but called for its rewrite to make it more accessible to the broader object-oriented community. He offered a “Limoges balloon” as an incentive for this endeavor.
Abstract Data Types and the Persistence of Assignment-Centered Thinking:
Kay critiqued the dominance of abstract data types, which maintain an assignment-centered approach, limiting the potential for more expressive and flexible programming paradigms.
The Folly of Short-Term Efficiency:
Kay warned against prioritizing short-term efficiency over long-term viability, citing an operating system project that, aiming for a two-year completion using C++, ended up taking a decade.
The Perils of Single Points of View:
Kay emphasized the risks of adhering to a single viewpoint, treating it as an unassailable truth. He used the example of Smalltalk and referenced Schopenhauer’s observation that ideas often go through stages of rejection, acceptance as obvious, and false claims of originality.
Rethinking Abstract Data Types and the Challenges of Single Points of View
Kay’s critique of abstract data types and the initial skepticism towards C++ underscored the dangers of rigid adherence to a single technological perspective. He cautioned against turning limited knowledge into dogma, stifling innovation and diversity.
Smalltalk’s Evolution and the Importance of Innovation
Kay took pride in Smalltalk’s evolution, emphasizing its role in fostering new advancements. He stressed the need for continuous innovation and exploring higher levels of abstraction.
Squeak: A Platform for Future Developments
Squeak, a free version of Smalltalk, served as Kay’s tool for bootstrapping the next generation of programming languages. It represented a step towards more advanced, adaptable, and efficient systems.
Embracing a Grand Vision in Systems Design
Kay likened his approach to systems design to playing an organ grandly. This metaphor highlights the need for an expansive, innovative mindset in computing, ensuring that future systems are not just functional but also adaptable, scalable, and reflective of the complexities they are designed to manage.
Alan Kay’s Critique of Smalltalk and His Vision for Squeak
Alan Kay expressed disappointment that, following its commercialization, Smalltalk did not undergo significant evolution, despite its development and multiple versions at Xerox PARC. He emphasized Smalltalk’s role as a bootstrapping tool for new systems, lamenting its underutilization by universities, commercial entities, and even the Smalltalk community. Kay highlighted the need for constant innovation in systems design, cautioning against rigid adherence to limited knowledge. Squeak, his project, aimed at creating a tool for surpassing Smalltalk, encouraging users to view it as a stepping stone towards future advancements. He shared a lesson from E. Power Biggs, a renowned organist, about the importance of embracing a grand approach, even on a smaller scale, serving as a metaphor for pushing the boundaries of what systems can achieve.
Alan Kay, a pioneer in object-oriented programming, emphasized the significance of holistic approaches, creativity, architectural integrity, and continuous innovation in programming. Smalltalk's influence extends beyond syntax and libraries, embodying architectural principles and structural integrity, akin to the construction of the Chartres Cathedral....
Alan Kay's vision for personal workstations emphasized powerful tools for creativity and learning, leading to milestones like Smalltalk and the graphical user interface. His Dynabook concept aimed to provide information access anywhere, inspiring the development of modern portable devices....
Alan Kay, a Turing Award laureate, advocates for a practical, hands-on approach to computer science education, emphasizing simplicity, systems thinking, and a beginner's mindset. He calls for a shift from theoretical rigor to practical problem-solving, preparing students to contribute to the advancement of computing....
Programming has evolved from basic code instructions to advanced system simulations, with languages like eToys enabling live coding and intuitive object manipulation. Higher-level languages and innovative research can simplify programming and address the challenge of complex legacy systems....
Insights from pioneers like Alan Kay and Joe Armstrong reveal the evolution of computing, emphasizing the importance of learning, scaling, and addressing unsolved problems. Computer scientists should think like scientists, considering scaling aspects early and embracing failure to drive innovation....
Alan Kay's revolutionary concepts, such as the Dynabook and Smalltalk, shaped modern computing and inspired future innovations, while his emphasis on open knowledge and transformative teaching fostered creativity and critical thinking in his students. His insights into early computers and programming languages laid the groundwork for modern object-oriented programming and...
Alan Kay's insights into the interplay of creativity, technology, and education challenge conventional thinking, emphasizing the need for transformative technologies and a holistic approach to computing inspired by molecular biology. He proposes a vision for the future where these elements converge, redefining reality and potential....