Alan Kay (VPRI Co-founder) – Is Software Engineering Still an Oxymoron? (Nov 2021)


Chapters

00:00:12 Engineering: Aspiring to Understand Hardness and Softness
00:05:39 Software Engineering: Beyond Tinkering and Towards Comprehensive Design
00:13:23 Dunning-Kruger Syndrome and Its Impact on Engineering and Management
00:17:13 Technology's Dangers in an Unwise World
00:21:00 Early Innovations in Human Intelligence Augmentation
00:26:14 Early Computer Graphics: Alan Kay's Sketchpad System
00:30:19 Interactive Computer Graphics and Computer-Aided Design in the 1960
00:34:05 Computer-Aided Design, Simulation, and Fabrication in Engineering
00:40:18 Understanding Cognitive Biases and Their Impact on Decision-Making
00:53:02 Engineering As A Process of Continuous Improvement

Abstract

Software Engineering: Aspiration, Learning, and Understanding

In the ever-evolving field of software engineering, the balance between aspiration, learning, and understanding defines the path of progress. This article explores the multifaceted nature of software engineering, highlighting the significance of comprehensive approaches, the integration of various disciplines, and the recognition of cognitive flaws in shaping the future of technology. Our brains crave stories to understand complex ideas. However, systems, which are prevalent today, lack a clear start and finish, making them difficult to grasp as stories. From the historical backdrop of engineering marvels like the Empire State Building to the modern challenges faced by platforms like Facebook, the journey of software engineering is marked by a constant quest for improvement, necessitating a blend of craftsmanship, science, and innovative thinking.

Main Ideas and Their Expansion

Engineering and Software Engineering

Engineering, at its core, involves designing, creating, and repairing objects and systems in principled ways. Software engineering adheres to these principles, not as a contradiction but as an aspiration. Historically, the construction of monumental structures like the Empire State Building and the Akashi Straits Bridge demonstrate the efficiency and grandeur achievable through engineering. These feats set a benchmark for meticulous design and execution, philosophies that are vitally important in the realm of software engineering.

The Evolution of Software Engineering

Software engineering encounters unique challenges, such as updating legacy systems and addressing bugs, underlining the necessity for careful planning and ongoing maintenance. The field today still largely depends on tinkering, mirroring the early days of engineering and medicine. This calls for a comprehensive approach that prioritizes resilience and robust failure handling mechanisms, as evidenced by incidents like the Facebook outage and other large-scale system failures.

Theoretical Foundations and Inspirations

The transition from mere tinkering and aesthetics to incorporating engineering, mathematics, and science has been critical in advancing technology. The contributions of visionaries like Alan Kay and Doug Engelbart, who emphasized the disconnect between our ancient brains and modern technology and the augmentation of human intellect, respectively, underline the need for a deeper comprehension of technology and its impact.

The Role of Computing and CAD Systems

The evolution of computing, particularly through innovations like Ivan Sutherland’s Sketchpad, brought about a revolution in interactive graphics and object-oriented design. The development of Sketchpad was instrumental in creating CAD systems that allowed design without domain-specific knowledge, employing constraints for dynamic adjustments and problem solvers for automated solutions. It introduced revolutionary user interfaces and interactive computer graphics. Alan Kay further accentuates the importance of a comprehensive approach combining CAD (Computer-Aided Design), SIM (Simulation), and FAB (Fabrication) in various engineering disciplines. This integration is crucial for the efficient functioning of systems, as seen in chip design and advanced modeling techniques.

Cognitive Aspects and System Thinking

Acknowledging and understanding our cognitive biases, such as loss aversion and learning aversion, are essential for informed decision-making in software engineering. Systems thinking requires a holistic perspective, transcending algorithms and data structures, much like the approach in medicine. Our subjective reality, shaped by beliefs and experiences, needs to be challenged through scientific inquiry. Stories, while powerful in conveying concepts, should be viewed as gateways for further exploration rather than conclusive explanations. The field of medicine offers valuable insights for computing, as it encompasses complex procedures beyond simple coding, paralleling the intricate issues in computing.

The Need for a Paradigm Shift in Software Engineering

Early operating systems like PC and Mac OS, as well as VMS and Unix, were not designed for modern computing demands. Simple fixes, or ‘Band-Aids’, are inadequate for complex issues, and innovative ideas often struggle to scale due to discontinuities in development phases.

The Importance of Integration in Engineering

Engineering disciplines, including medicine, have successfully integrated science, math, experimentation, and engineering. This amalgamation enables the effective utilization of knowledge and the development of robust solutions. The Hippocratic Oath in medicine, emphasizing harm avoidance, is particularly relevant in software engineering, given the widespread impact of software. Engineering, too, has a pledge focusing on preventing collapse, failure, and harm, which holds even greater significance in software engineering due to its pervasive nature and potential for damage.

Engineering as a Continuous Process of Improvement

Engineering is a continuous journey of striving for improvement, not a fixed destination. Engineers must persistently seek to enhance their skills and contribute to the advancement of their field, mirroring the dynamic nature of real civilization and engineering.

Conclusion

In conclusion, the field of software engineering stands at a crossroads where the integration of principles, the acknowledgment of cognitive limitations, and the aspiration for improvement define its future. Just like the great engineering feats of the past, software engineering must evolve, embracing a comprehensive approach that includes understanding the human element, system thinking, and the integration of diverse knowledge domains. This evolution is crucial for addressing the increasingly complex challenges of modern technology, ensuring safety, efficiency, and resilience in the systems that increasingly define our world.


Notes by: ChannelCapacity999