Bret Victor Warns Coding Dogma Blinds Industry to Proven Breakthroughs

Bret Victor   The Future of Programming — Joey Reid

Joey Reid

Programmers risk blinding themselves to revolutionary computing models because mistaking conventional sequential text files for settled science halts creative progress.

AI-assisted summary of Bret Victor The Future of Programming — original source. Check the original for full context.

Source published:

Key ideas

  • Presenting from the persona of a 1973 engineer, Bret Victor argues that while computer hardware advances exponentially, human adoption of fundamentally new paradigms is severely hindered by cognitive inertia and dogma. (0:20)
  • The presentation surveys four foundational alternative paradigms from the 1960s and 1970s: direct manipulation of data, goal-directed declarative programming, spatial information display, and natively concurrent Actor-based systems. (5:26)
  • Victor warns that the software industry's greatest danger is intellectual dogma—mistaking narrow, settled procedural conventions for finished science rather than recognizing that programming and computing remain fundamentally unsolved. (29:38)

Detailed notes

## Background Published on YouTube by Joey Reid on July 31, 2013, this video captures Bret Victor's presentation delivered at Dropbox's DBX conference on July 9, 2013. According to the description, Victor adopts the persona of a 1973 IBM systems engineer using an overhead projector to revisit the fertile, dogma-free era of early computer science, arguing that believing you know what you are doing blinds you to alternative ways of thinking.

## TL;DR Speaking from the fictional vantage point of 1973, Bret Victor looks forty years ahead to imagine the year 2013 through four revolutionary paradigms emerging from 1960s and 1970s research: direct data manipulation, goal-directed declarative programming, spatial two-dimensional representations, and massively parallel computing models. He contrasts these breakthroughs with the historical resistance faced by assembly language and Fortran, demonstrating how easily human minds cling to familiar sequential text conventions. Through ironic prophecies dismissing brittle modern staples like text-based code files, fixed APIs, and thread-and-lock concurrency, Victor reveals how the software industry has largely stalled into dogma. He concludes that true creative freedom requires admitting that we still do not fundamentally know what programming or computing is.

## Atmosphere & style The presentation is executed as an elaborate, dryly comedic conceptual performance, complete with retro overhead transparency slides and earnest deadpan projections that satirize contemporary computing practices. A warm, professorial delivery keeps the audience laughing at Victor's knowing dramatic irony while quietly delivering a stinging critique of modern software stagnation. The emotional arc transitions from historical nostalgia to a sobering philosophical warning, leaving viewers with an inspiring, perspective-shattering call to intellectual humility.

## Bulletin - [00:20](https://www.youtube.com/watch?v=8pTEmbeENF4&t=20s) Presenting from the persona of a 1973 engineer, Bret Victor argues that while computer hardware advances exponentially, human adoption of fundamentally new paradigms is severely hindered by cognitive inertia and dogma. - [05:26](https://www.youtube.com/watch?v=8pTEmbeENF4&t=326s) The presentation surveys four foundational alternative paradigms from the 1960s and 1970s: direct manipulation of data, goal-directed declarative programming, spatial information display, and natively concurrent Actor-based systems. - [29:38](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1778s) Victor warns that the software industry's greatest danger is intellectual dogma—mistaking narrow, settled procedural conventions for finished science rather than recognizing that programming and computing remain fundamentally unsolved.

## Key takeaways - [00:20](https://www.youtube.com/watch?v=8pTEmbeENF4&t=20s) Hardware advances predictably and exponentially via Moore's law, but intellectual and conceptual progress requires deliberate unlearning and is met with severe human resistance. - [02:32](https://www.youtube.com/watch?v=8pTEmbeENF4&t=152s) Historical breakthroughs like assembly language (SOAP) and Fortran were initially met with dismissive hostility from established programmers and figures like John von Neumann, who insisted raw machine binary was sufficient. - [06:42](https://www.youtube.com/watch?v=8pTEmbeENF4&t=402s) Ivan Sutherland's 1963 Sketchpad demonstrated direct manipulation and dynamic constraint relaxation, building complex parametric behaviors without procedural code. - [09:41](https://www.youtube.com/watch?v=8pTEmbeENF4&t=581s) Declarative, goal-directed systems—such as Carl Hewitt's Planner, Prolog, and regular expressions—allow developers to specify what they want while leaving the execution path to the machine. - [12:50](https://www.youtube.com/watch?v=8pTEmbeENF4&t=770s) Distributed networks cannot scale if systems rely on brittle, manually hardcoded APIs; autonomous programs must instead negotiate dynamic goals and shared semantic protocols directly. - [16:29](https://www.youtube.com/watch?v=8pTEmbeENF4&t=989s) Systems like Douglas Engelbart's NLS, RAND's GRAIL, and Xerox PARC's Smalltalk showed that two-dimensional visual displays should replace linear, one-dimensional text files inherited from punched cards and teletypes. - [20:44](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1244s) Early interactive environments demonstrated that sub-second, tactile responsiveness was achievable even on minicomputers, underscoring that user interface latency is an architectural failure rather than an unavoidable physical reality. - [21:57](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1317s) The von Neumann architecture leaves the vast majority of silicon memory idle and forces software into a sequential bottleneck that does not reflect physical silicon reality. - [25:28](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1528s) Managing hardware concurrency through threads and mutual exclusion locks is a fundamentally broken dead end; software requires natively concurrent paradigms like Hewitt's Actor model, Hoare's CSP, and Kahn process networks. - [29:38](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1778s) The 1960s and early 1970s fostered tremendous innovation because practitioners recognized they did not yet know what computing was, leaving them free from dogma and authority. - [30:50](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1850s) The most dangerous thought for a creative person is believing they already know what they are doing, because premature certainty blinds practitioners to superior alternative models.

## Detailed walkthrough ### [00:20](https://www.youtube.com/watch?v=8pTEmbeENF4&t=20s) Looking Forty Years Ahead: The Nature of Adopting Ideas

Speaking warmly to an audience of fellow programmers of “automatic computing machines,” Bret Victor sets the stage in the persona of an engineer speaking from the vantage point of 1973. He observes how rapidly computing is altering society, noting that there are now literally thousands of computers operating worldwide across business accounting, scientific experimentation, and emerging frontiers. Machines that once occupied entire halls have shrunk to remarkably compact proportions while steadily dropping in cost. Because computing is undergoing such swift transformation, Victor proposes looking ahead forty years to consider what programming might look like around the year 2013, guided by pioneering research conducted over the previous ten years.

Before unveiling the four primary breakthroughs from this research, Victor pauses to examine how human beings adopt new ideas. The central tension of progress is that while technology evolves at an exponential clip, the human mind adapts at a much slower pace, making it easy to adopt novel machinery but excruciatingly difficult to embrace fundamentally new ways of thinking. He highlights Gordon Moore at Intel, who nearly a decade earlier noted the exponential growth of computing capacity over time. That hardware trajectory has remained completely on target, meaning that speed and capacity can largely be taken for granted simply by waiting. In contrast, conceptual shifts will never happen automatically through the passage of time.

```mermaid flowchart LR accTitle: Technology Versus Human Paradigm Shift accDescr: Comparison between exponential hardware progress and human cognitive friction in adopting new paradigms. subgraph TechProgress["Hardware Evolution"] M["Moore's Law"] -->|"Passive passage of time"| S["Faster, smaller, cheaper computers"] end subgraph HumanAdoption["Paradigm Shifts"] O["Familiar Dogma"] -->|"Cognitive inertia & resistance"| U["Unlearning & new mental models"] end ```

- Computing hardware has transitioned from room-sized installations to compact enclosures, with thousands deployed across commercial and scientific domains. - Gordon Moore's empirical rule demonstrates that computing power expands exponentially, assuring continued technological gains without active philosophical effort. - Victor notes the fundamental asymmetry between machinery and mindset: “Technology changes quickly, people's minds change slowly.”

[02:32](https://www.youtube.com/watch?v=8pTEmbeENF4&t=152s) The History of Resistance: Binary, Assembly, and Fortran

To illustrate human reluctance toward intellectual shifts, Victor revisits early programming history using the IBM 650—IBM's first mass-produced, general-purpose machine that many in the room cut their teeth on. In the earliest days, programming meant writing absolute binary, painstakingly authoring raw numeric operation codes instruction by instruction. When Stan Poley subsequently created the Symbolic Optimal Assembly Program (SOAP), introducing mnemonics like `ADD` and symbolic variable names rather than hardcoded memory addresses, productivity rose and errors plummeted. Yet the original binary practitioners were utterly unmoved, completely failing to see any value in assembly.

This skepticism often hardened into outright hostility among senior authorities. Even the legendary John von Neumann insisted that raw machine code was entirely sufficient and became furious when one of his students wrote an assembler, berating him for squandering valuable machine time on clerical tasks that humans ought to perform manually. The identical pattern repeated shortly thereafter when John Backus and his team developed Fortran, allowing algorithms to be written using mathematical formulas and loop structures. Rather than welcoming the leap, seasoned assembly programmers dismissed it out of hand because it violated their conception of the craft.

- The IBM 650 initially required programmers to memorize and input numeric machine codes directly for memory locations and machine instructions. - Stan Poley introduced SOAP (Symbolic Optimal Assembly Program), establishing symbolic labels and mnemonic operational words. - When confronted with assembly, absolute binary coders exhibited complete disinterest: “They just weren't interested at all, they just didn't get it, they didn't see any value in doing this stuff.” - John von Neumann actively opposed symbolic abstraction, asserting: “I don't see why anybody would need anything other than machine code.” - Fortran encountered the exact same institutional resistance from assembly coders who could not imagine abandoning low-level machine registers for algebraic notation.

[05:26](https://www.youtube.com/watch?v=8pTEmbeENF4&t=326s) Four Big Ideas: An Overview of Recent Paradigms

Victor urges the audience to keep this historical blindness in mind as he introduces four transformative ideas emerging from recent lab work. When an engineering culture believes it already understands what programming is, practitioners instinctively dismiss anything outside that boundary as illegitimate. Today's conventional programming revolves around typing procedural lists of instructions as lines of text inside files, executed sequentially on a single central processing unit. The experimental frontier, however, is dismantling every one of these baseline assumptions.

The four paradigms emerging from current research challenge the core mechanics of authoring software: 1. **Direct Manipulation of Data:** Rather than drafting abstract lists of commands in source code, programmers manipulate visual and structural representations of data directly, allowing the underlying program to build itself implicitly. 2. **Goal-Directed Programming:** Instead of detailing explicit, imperative operational procedures step-by-step, the programmer states desired outcomes, leaving the machine's internal solver to determine the operational steps. 3. **Spatial Representations on Video Displays:** Abandoning linear text streams in favor of two-dimensional CRT displays, leveraging human spatial cognition to arrange and understand computational relationships. 4. **Massively Parallel Models:** Moving beyond single-threaded, sequential instruction dispatch to accommodate hardware architectures featuring widespread concurrency.

- Current programming orthodoxy remains tethered to sequential imperative instructions written as plain lines of alphanumeric text. - Emerging hardware advances will inevitably require parallel programming semantics rather than sequential execution loops. - Victor warns of the cognitive trap that stalls adoption: “People over here, they think they know what they're doing, they think they know what programming is: this is programming, that's not programming, and so there's going to be a lot of resistance to adopting new ideas.”

[06:42](https://www.youtube.com/watch?v=8pTEmbeENF4&t=402s) Direct Manipulation: Ivan Sutherland and Sketchpad

Victor delves into the first idea—direct manipulation—by demonstrating Ivan Sutherland’s 1963 MIT doctoral thesis project, Sketchpad. Using a CRT display and a light pen, Sutherland demonstrated how an operator could draw directly on the screen. Victor walks through Sutherland attempting to sketch a mechanical rivet: the initial strokes are crooked, misaligned, and distinctly sloppy. Sutherland then holds down an interface switch to signal a constraint, commanding the lines to become mutually perpendicular. Sketchpad’s built-in iterative relaxation solver immediately adjusts the geometry, rotating the strokes into a precise, clean rectangle.

The breakthrough is that Sketchpad possesses no intrinsic definition of a rectangle; the shape arises strictly because the user imposed geometric constraints directly on the drawn data. What turns this drawing into a true program rather than static artwork is that the relationships remain dynamically maintained. When Sutherland grabs a corner of the rivet with the light pen and drags it to resize the structure, the solver continuously runs in real time, recalculating vertices to ensure every perpendicular constraint remains satisfied. Sutherland extended this concept to sophisticated structural physics, building an interactive bridge simulation where hand-drawn trusses display numeric mechanical tension and deform under applied hanging loads without the core system knowing anything specifically about bridges.

With pointed historical irony, Victor projects how this technique will surely dominate the future. Looking four decades ahead, he speculates that if the world ever invents a universal document format distributed across an interconnected computer network, authors will naturally build those layouts through visual direct manipulation rather than raw text codes.

```mermaid flowchart TD accTitle: Sketchpad Constraint-Based Direct Manipulation accDescr: How direct visual manipulation and dynamic constraints yield procedural behavior without writing code. A["Operator draws sloppy strokes with light pen"] --> B["Operator selects lines & declares constraints"] B --> C["Iterative relaxation solver adjusts geometry"] C --> D["Parametric object formed (e.g. perfect rectangle)"] D --> E["User manipulates element dynamically"] E -->|"Constraints preserved continuously"| C ```

- Ivan Sutherland developed Sketchpad at MIT using a Lincoln TX-2 computer, pioneering interactive computer graphics via a light pen and CRT screen. - Sketchpad relied on an iterative numerical relaxation solver to balance simultaneous geometric constraints applied directly to lines and vertices. - Complex assemblies, including an animated truss bridge displaying real-time tension values under variable loads, were constructed without procedural structural programming. - Victor highlights the perceived absurdity of text-encoded markup for visual layouts: “I'm sure we're gonna be creating all those documents by direct manipulation; there won't be any markup languages or stylesheet languages, right? That would make no sense; Ivan Sutherland showed us how to do it back in 1962, so it's all gonna be direct manipulation in the future, and it's going to be fantastic.”

[09:41](https://www.youtube.com/watch?v=8pTEmbeENF4&t=581s) Goal-Directed Programming: Planner and Prolog

Victor transitions to the second paradigm: programming using goals rather than prescriptive procedures. Sketchpad provided an early glimpse of this philosophy because Sutherland never dictated the arithmetic steps for drawing a rectangle; he simply stated the desired geometric condition, leaving the constraint solver to calculate coordinate placements. Victor details how this declarative approach was formalized into general-purpose computation through Carl Hewitt’s recent creation of the Planner language.

Planner operates bidirectionally, capable of executing procedural steps forward while also reasoning backward from specified goals. If the system is given the assertion that an apple is red, it can deductively confirm an apple's color when asked; conversely, if commanded to find an object that is red, it searches backward through its knowledge base to propose an apple. While Planner allows developers to interleave procedural heuristics to optimize subgoals, later developments like Prolog distill this mechanism into pure backward-chaining logic programming. In this paradigm, developers articulate only the target state and semantic relations, delegating the search, resolution, and execution pathways entirely to the machine.

- Carl Hewitt designed Planner at MIT to unify procedural execution with goal-oriented backward reasoning. - Prolog stripped out procedural branching mechanisms to focus exclusively on backward deduction and automated resolution search. - The fundamental shift of logic programming lies in liberating the programmer from micro-managing execution paths. - Victor emphasizes the core philosophical breakthrough of the paradigm: “What's important is expressing your program as what you want, not a set of instructions on how to do it.”

[11:21](https://www.youtube.com/watch?v=8pTEmbeENF4&t=681s) Pattern Matching and Goal-Directed Systems

Continuing his survey of declarative approaches, Bret Victor highlights pattern matching as another prime manifestation of goal-directed programming. He reminds the audience of SNOBOL, the string manipulation language designed specifically so programmers could throw text at a script and let built-in matching facilities do the heavy lifting. More recently, Ken Thompson over at Bell Labs—working on an experimental operating system known as Unix (“I know, right? Unix,” Victor quips knowingly)—adopted Stephen Kleene’s concept of regular expressions for matching text. Instead of forcing a developer to hand-write a tedious, step-by-step procedural parser to chew through unstructured strings, regular expressions allow the programmer to simply supply a template describing the shape of the data they want, leaving the underlying engine to deduce how to execute the match.

Victor unifies these historical breakthroughs into a single philosophical throughline spanning Ivan Sutherland’s Sketchpad constraints, Carl Hewitt’s Planner, Prolog, and regular expressions. In every case, the paradigm shift is identical: humans specify high-level intents and outcomes, and the machine deduces the operational steps. While this philosophy is beginning to surface in optimizing compilers, Victor predicts it will dominate software development decades into the future. Describing this foundational mindset, Bret Victor states: “All these examples—Sketchpad's constraints, Planner, Prolog, pattern matching—again, they're all examples of giving the computer high-level goals, saying, 'Here's the sort of thing I'm looking for,' and letting the computer itself figure out how to do it.”

- **SNOBOL**: Designed with native, first-class pattern-matching capabilities for arbitrary text manipulation. - **Regular Expressions**: Conceptualized mathematically by Stephen Kleene and brought into Unix utilities by Ken Thompson to eliminate manual procedural parsing. - **Goal-Directed Synthesis**: Compilers and interpreters take over the procedural burden, letting programmers declare constraints, relationships, or target states.

---

[12:50](https://www.youtube.com/watch?v=8pTEmbeENF4&t=770s) The "Communicating with Aliens" Problem and the Impossibility of APIs

Victor connects goal-directed programming directly to the rise of computer networking, championed by J.C.R. Licklider at ARPA. Licklider envisioned connecting all the world’s computers into an “Intergalactic Computer Network”—deliberately aiming for the galaxy, Victor jokes, because engineers notoriously deliver the bare minimum and might therefore deliver a worldwide network instead. With ARPANET rapidly evolving into what people are starting to call an “internet,” Victor points out that distributed computing introduces an existential coordination dilemma. Quoting J.C.R. Licklider directly, Victor reads: “The problem is essentially the one discussed by science fiction writers: how do you get communication started among totally uncorrelated sapient beings?”

In this vast network, disparate programs will be authored at completely different times, by different people, in different languages, running disparate protocols. Eventually, one program will discover it requires a service provided by another remote program. Procedural programming cannot bridge this gap because human authors cannot foresee remote specifications across time and space. The only scalable solution is for autonomous programs to negotiate dynamically: probing one another, establishing a shared semantic language on the fly, and solving compatibility goals cooperatively.

Victor then contrasts this vision with an absurd counter-proposal, inventing a mock acronym to ridicule it: the "API" (Application Programming Interface). Under an API regime, human engineers would manually hard-code integrations against brittle, fixed external interfaces. Victor dismisses this as an unworkable disaster: it couples systems inextricably, breaks downstream clients whenever a remote provider alters a single endpoint, and forces human beings to act like low-level glue code. Projecting total confidence from his 1973 vantage point, Bret Victor argues: “I'm pretty confident this will never happen; we're not going to have APIs in the future, where we are going to have are programs that know how to figure out how to talk to each other, and that's going to require programming goals.”

```mermaid flowchart TD accTitle: Dynamic Goal Negotiation vs Fixed Brittle APIs accDescr: A comparison between autonomous goal negotiation across networks and the brittle API model.

subgraph Scalable ["Goal-Directed Intergalactic Model"] P1["Program A (Unknown Language)"] P2["Program B (Unknown Service)"] P1 <-->|"Dynamic semantic probe & negotiation"| P2 P1 -.->|"Discovers alternative services autonomously"| P3["Program C"] end

subgraph Brittle ["The Supposed 'API' Anti-Pattern"] H["Human Programmer"] -->|"Hand-codes low-level glue"| API["Rigid Remote Endpoint"] API -->|"Any remote change breaks client"| Broken["System Failure"] end ```

---

[16:29](https://www.youtube.com/watch?v=8pTEmbeENF4&t=989s) Spatial Representation of Information: NLS, GRAIL, and Smalltalk

Turning to his third major theme, Victor examines how programming representations must change as hardware evolves beyond paper tape, punched cards, and teletype printers. Linear strings of code made sense when physical media was linear, but the advent of interactive cathode-ray video terminals transforms the computer into a dynamic, two-dimensional sheet of paper. Victor points to Douglas Engelbart’s work at SRI and his NLS (oN-Line System), famously showcased five years earlier in 1968. NLS introduced not only the mouse—a curious rolling desktop artifact that allows users to point directly to items on screen to inspect deeper structures—but also dynamic re-views, where tabular lists of structured data flip effortlessly into two-dimensional spatial diagrams.

Victor shows an even more radical visual system: the GRAIL system developed at the RAND Corporation in 1968. Operating on a video display coupled to a RAND tablet and stylus, GRAIL allowed developers to program directly via flowchart diagrams. Victor narrates archival footage showing an engineer freehanding a rough box on the tablet. GRAIL instantly recognizes the geometry, snaps it into a clean flowchart symbol, reads the engineer's handwritten alphanumeric characters, renders them as crisp text labels, and accepts freehand scribble gestures to delete connecting lines. Stepping beyond purely graphical visual languages, Victor points to Xerox PARC, where researchers are developing Smalltalk. Smalltalk uses text, but eschews monolithic text files entirely; code is organized spatially through a multi-pane browser dividing classes, protocols, and methods into navigable, modular hierarchies. Rejecting the flat file format as an archaic relic of punched paper, Bret Victor declares: “I'm totally confident that in 40 years we won't be writing code in text files, right? We've been shown the way.”

- **Douglas Engelbart's NLS (SRI, 1968)**: Pioneered screen-based spatial information navigation, mouse-driven pointing, and real-time alternative data projections. - **RAND Corporation's GRAIL (1968)**: Supported direct-manipulation flowchart programming using stylus tablets, real-time geometric shape recognition, handwriting recognition, and gesture deletion. - **Xerox PARC's Smalltalk**: Replaced flat text files with structured system browsers, partitioning software into navigable visual panes of classes, method categories, and source routines.

---

[20:44](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1244s) Interactive Computing and the Myth of UI Lag

These spatial computing environments—NLS, GRAIL, Smalltalk, and the PLATO system at the University of Illinois—share a core breakthrough: real-time interactive computing. Unlike batch-processing mainframes, these systems were engineered from the hardware up to guarantee immediate feedback. The interface behaves like a tactile physical object: when a user manipulates an on-screen element, the response is instant and frictionless.

Victor uses this historical fact to make another wry, tongue-in-cheek prediction. Because researchers in the 1960s and early 1970s already proved that sub-second, zero-latency feedback is essential for human thought—and managed to achieve it on primitive, resource-constrained minicomputers—future systems will naturally eradicate delay altogether. Projecting forward to an era where processors will run millions of times faster, Bret Victor deadpans: “Obviously there's no reason to have any kind of delay or lag in the operating system in the user interface, so that's going to be really exciting.”

---

[21:57](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1317s) Parallel Programming and the Von Neumann Bottleneck

Victor introduces his fourth topic: parallel programming. Modern software remains overwhelmingly sequential—a rigid checklist where the machine executes instruction A, then B, then C. Victor explains that this conceptual bottleneck is not an intrinsic property of human logic or problem-solving, but an artifact of computer engineering history: the Von Neumann architecture.

Under the Von Neumann paradigm, a solitary central processing unit fetches instructions and words of data serially across a bus from a shared pool of memory. Because the hardware processor can only perform a single operation at any given instant, human programming languages adopted a matching step-by-step imperative syntax. Framing this mechanical constraint, Bret Victor notes: “So the sequential programming model makes sense when you just have one processor; the processor can only do one thing at a time, you give it a list of things for the processor to do, and it just kinda does each one of those.” Victor prepares to challenge whether software should stay tethered to this single-threaded assumption.

[22:47](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1367s) Silicon, Microprocessors, and the Inevitability of Massively Parallel Hardware

The fundamental weakness of the von Neumann architecture is that most of the computer’s memory sits completely idle almost all of the time. While a small processor is churning away as fast as it can, only a single word of memory is ever accessed at any given moment; the rest simply waits. In an era when processors were assembled from bulky, costly vacuum tubes or relays, and memory consisted of expensive magnetic core or rotating magnetic drums, this separation made economic and mechanical sense. However, the advent of the semiconductor integrated circuit completely shifts that balance. With Intel introducing the microprocessor—placing an entire processing unit onto a single silicon die—both processors and memory are reduced to identical building blocks: microscopic transistor patterns etched into silicon.

```mermaid flowchart TD accTitle: von Neumann Bottleneck vs Massively Parallel Silicon accDescr: Contrasting a single CPU with vast idle memory against an array of tiny interconnected processors on a single silicon die.

subgraph VN["Von Neumann Architecture"] direction TB CPU["Single Fast Processor<br>(transistor intensive)"] IdleMem["Vast Memory Array<br>(mostly idle transistors)"] CPU <-->|"one word at a time"| IdleMem end

subgraph MP["Massively Parallel Silicon Array"] direction TB P1["Node (CPU + State)"] <--> P2["Node (CPU + State)"] P3["Node (CPU + State)"] <--> P4["Node (CPU + State)"] P1 <--> P3 P2 <--> P4 end ```

When evaluated from the perspective of silicon real estate, the von Neumann design squanders vast numbers of transistors that do no computation whatsoever. To maximize the compute power achievable per unit area of silicon, hardware naturally wants to become an array of numerous tiny computers, each equipped with its own processor and local state, communicating directly with its neighbors. Such architectures scale effortlessly: as transistors shrink and silicon dies grow larger, designers simply pack more independent processing units onto the die. Victor delivers a dry, knowing quip to his audience: this massively parallel future will arrive inevitably, “unless, you know, unless Intel somehow gets a stranglehold on the microprocessor market and pushes this architecture forward thirty years, but that’s not gonna happen.”

- Microprocessors unify processing elements and memory into the exact same medium: transistors etched into silicon. - The von Neumann bottleneck wastes the vast majority of silicon real estate on passive, idle storage. - A cellular array of independent, communicating micro-nodes scales linearly with Moore's law improvements in die size and transistor density.

[25:28](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1528s) Concurrency Models: The Dead End of Threads and Locks vs. the Actor Model

Faced with hardware composed of massive arrays of independent processors, software requires a matching programming model. The contemporary convention of managing concurrency through sequential threads and mutual exclusion locks is fundamentally broken. Multiplexing a handful of sequential threads across a processor to simulate parallelism while forcing them to lock one another out of shared memory does not scale to thousands of nodes. Programmers cannot reasonably verify or debug hundreds of concurrent threads constantly colliding over a shared address space. Victor pulls no punches regarding this paradigm: “I think in forty years if we're still using threads and locks we should like pack up and go home, cuz we've clearly failed as an engineering field.”

Instead of brute-forcing sequential constructs into parallel contexts, alternative paradigms treat computation like physical systems. Carl Hewitt—who also created Planner—introduced the Actor model, drawing inspiration from physics where independent particles possess local state, execute autonomous actions, and interact solely by sending messages to their immediate surroundings. Similar mathematical foundations for concurrency are emerging simultaneously across Europe: Gilles Kahn’s Kahn process networks in France, Tony Hoare’s Communicating Sequential Processes (CSP), and upcoming work by Robin Milner. Victor tosses in a playful aside that it would be quite strange if Hewitt's Actor model ended up being picked up by a Swedish telephone company—an inside reference to Ericsson and Erlang. The critical takeaway is that massively parallel hardware demands an equally sound, message-driven parallel programming model rather than sequential illusions.

- Shared-memory threads and locks are a dead-end abstraction that cannot scale to massive hardware concurrency. - Carl Hewitt's Actor model models computation as asynchronous, independent processes managing their own internal state and exchanging discrete messages. - Contemporary theoretical work from the early 1970s—including Hoare’s CSP and Kahn’s process networks—provides rigorous foundations for distributed, lock-free computation.

[27:46](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1666s) The Four Paradigms of 1973

Victor pauses to tie together the four revolutionary technical directions explored throughout the presentation, each offering a radical departure from procedural code in linear text files:

```mermaid flowchart TD accTitle: The Four Computing Paradigms of 1973 accDescr: Summary of the four key computing ideas from the 1960s and early 1970s highlighted by Victor.

subgraph Paradigms["Four Alternative Computing Foundations"] direction TB P1["1. Direct Data Manipulation<br>(Sketchpad, interactive graphics)"] P2["2. Goals and Constraints<br>(Prolog, Planner, pattern solvers)"] P3["3. Spatial Representations<br>(2D visual displays over flat text)"] P4["4. Fundamentally Parallel Models<br>(Actors, CSP, message passing)"] end ```

First, direct manipulation of data, exemplified by Ivan Sutherland’s Sketchpad, where programmers draw and interact with dynamic structures directly rather than typing symbolic instructions. Second, declarative programming using goals and constraints—as seen in Sketchpad’s constraint satisfaction, Hewitt's Planner, Prolog, and regular expressions—where the programmer specifies what needs to be true and delegates the execution strategy to internal solvers. Third, spatial representations of information, leaving behind the one-dimensional legacy of punched cards and teletype text files to structure program logic across two-dimensional visual displays. Fourth, fundamentally parallel architectures and programming abstractions that abolish sequential execution and locking mechanisms.

Acknowledging the impossibility of predicting how technology will drift over four decades, Victor reflects on how ideas merge, diverge, and drift in and out of cultural fashion. Yet he emphasizes the intellectual loss if the software industry fails to build on these breakthroughs: “I think that would suggest we didn't learn anything from this really fertile period in computer science.” Failing to adopt these ideas would be a tragedy, but seeing future practitioners encounter them with genuine surprise would be even more disheartening.

- Direct manipulation replaces code authoring with direct, visual modification of underlying data models. - Constraint- and goal-based programming frees humans from micromanaging step-by-step sequential procedures. - Spatial layouts leverage modern graphical displays rather than preserving the flat formatting constraints of paper teletypes. - Native parallel models reflect the physical reality of silicon hardware far better than sequential control threads.

[29:38](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1778s) Dogma and the Real Tragedy: Forgetting How to Think

The gravest danger facing the future of software is not merely that superior paradigms might go unused or forgotten, but that developers might forget that alternative models of programming can exist at all. Victor charts out the worst-case generational trap: the next wave of engineers is raised on a single procedural, sequential framework. They polish its rough edges, implement every marginal optimization, and mistake that narrow framework for a finished science. They then pass this settled perspective on to the subsequent generation as dogma. That second generation matures under the illusion that the core questions of computing have been solved, completely losing the ability to imagine alternatives.

The extraordinary intellectual burst of the 1960s and early 1970s occurred because of a unique historical alignment: computing machinery had finally become fast and capable enough to build real interactive systems, yet remained young enough that no orthodoxy had crystallized. Pioneers possessed the freedom of knowing they did not know what programming was supposed to look like, prompting them to experiment wildly with whatever they could conceive.

```mermaid flowchart LR accTitle: The Cycle of Dogma versus Creative Openness accDescr: How assuming one knows what programming is breeds blindness, whereas acknowledging ignorance enables creative freedom.

subgraph Dogma["The Cycle of Dogma"] D1["Assume 'we know what we're doing'"] --> D2["Stop looking for other ways"] D2 --> D3["Blindness to new paradigms<br>(e.g., rejecting compilers for binary)"] end

subgraph Openness["The Cycle of Creative Freedom"] O1["Acknowledge total ignorance:<br>'We don't know what programming is'"] --> O2["Free to experiment and question basics"] O2 --> O3["Invent entirely new modes of thought"] end ```

Victor draws a direct comparison to early engineers who were so convinced that real programming meant toggling raw binary code that they dismissed assembly language and Fortran as frivolous or irrelevant. Certainty breeds blindness. Delivering the central moral of his retro-styled talk, Victor leaves the audience with a challenge:

> “The most dangerous thought that you can have as a creative person is to think that you know what you're doing. Because once you think you know what you're doing, you stop looking around for other ways of doing things and you stop being able to see other ways of doing things. You become blind.”

To retain the creative audacity of computing's early pioneers, engineers must dismantle their assumptions about the tools they use every day. Victor concludes: “We don't know what programming is. We don't know what computing is. We don't even know what a computer is. And once you truly understand that, and once you truly believe that, then you're free, and you can think anything.”

- The 1960s and 1970s flourished because technology was capable enough to build dynamic systems, but early enough that dogma had not set in. - Premature certainty closes minds to paradigm shifts, just as early binary programmers rejected high-level languages like Fortran. - True creative freedom in computer science begins with admitting that computing, programming, and hardware remain fundamentally unsolved concepts.

## Notable quotes > [29:38](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1778s) The most dangerous thought that you can have as a creative person is to think that you know what you're doing. — Bret Victor

> [25:28](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1528s) I think in forty years if we're still using threads and locks we should like pack up and go home, cuz we've clearly failed as an engineering field. — Bret Victor

> [00:20](https://www.youtube.com/watch?v=8pTEmbeENF4&t=20s) Technology changes quickly, people's minds change slowly. — Bret Victor

> [09:41](https://www.youtube.com/watch?v=8pTEmbeENF4&t=581s) What's important is expressing your program as what you want, not a set of instructions on how to do it. — Bret Victor

> [29:38](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1778s) We don't know what programming is. We don't know what computing is. We don't even know what a computer is. And once you truly understand that, and once you truly believe that, then you're free, and you can think anything. — Bret Victor

## Mentioned ARPANET, Carl Hewitt, Communicating Sequential Processes (CSP), Douglas Engelbart, Ericsson, Erlang, Fortran, Gilles Kahn, Gordon Moore, GRAIL, IBM 650, Intel, Ivan Sutherland, J.C.R. Licklider, John Backus, John von Neumann, Ken Thompson, NLS (oN-Line System), Planner, PLATO, Prolog, RAND Corporation, Robin Milner, Sketchpad, Smalltalk, SNOBOL, Stan Poley, Stephen Kleene, Symbolic Optimal Assembly Program (SOAP), Tony Hoare, Unix, Xerox PARC

## Video description "The most dangerous thought you can have as a creative person is to think you know what you're doing." Presented at Dropbox's DBX conference on July 9, 2013. All of the slides are available at: http://worrydream.com/dbx/

For his recent DBX Conference talk, Victor took attendees back to the year 1973, donning the uniform of an IBM systems engineer of the times, delivering his presentation on an overhead projector. The '60s and early '70s were a fertile time for CS ideas, reminds Victor, but even more importantly, it was a time of unfettered thinking, unconstrained by programming dogma, authority, and tradition. 'The most dangerous thought that you can have as a creative person is to think that you know what you're doing,' explains Victor. 'Because once you think you know what you're doing you stop looking around for other ways of doing things and you stop being able to see other ways of doing things. You become blind.' He concludes, 'I think you have to say: "We don't know what programming is. We don't know what computing is. We don't even know what a computer is." And once you truly understand that, and once you truly believe that, then you're free, and you can think anything.'"

[Source](https://www.youtube.com/watch?v=8pTEmbeENF4)

中文简报

Bret Victor警告:编程教条让行业对成熟的突破性技术视而不见 程序员可能会对革命性的计算模型视而不见,因为将传统的顺序文本文件误认为是已成定论的科学会阻碍创造性进步。 Bret Victor以虚构的1973年视角展望四十年后的2013年,探讨了20世纪60和70年代研究所催生的四种革命性范式:直接数据操纵、面向目标的声明式编程、空间二维表示以及大规模并行计算模型。他将这些突破与汇编语言和Fortran曾遭遇的历史阻力进行对比,展示了人类思维是多么容易执着于熟悉的顺序文本惯例。通过反讽性地否定诸如基于文本的代码文件、固定的API以及线程与锁并发等脆弱的现代基石,Victor揭示了软件行业在很大程度上已停滞于教条之中。他总结道,真正的创造自由需要我们承认,自己从根本上仍未弄懂编程或计算到底是什么。 Bret Victor以一位1973年工程师的身份演讲,指出尽管计算机硬件呈指数级发展,但人类对根本性新范式的接纳却受到认知惯性和教条的严重阻碍。 (0:20) 演讲审视了20世纪60和70年代的四种基础性替代范式:数据的直接操纵、面向目标的声明式编程、空间信息展示以及原生并发的基于Actor系统。 (5:26) Victor警告称,软件行业最大的危险是思想教条——将狭隘、既定的过程式惯例误认为是成熟的科学,而未能认识到编程和计算从根本上仍未被完全解决。 (29:38)

Reading summary

Speaking in the persona of an engineer in 1973 looking forty years ahead, Bret Victor argues that while computer hardware scales exponentially, human cognition adapts slowly, leaving the software field vulnerable to procedural dogma while overlooking pioneering breakthroughs in direct manipulation, declarative logic, spatial interfaces, and parallel architectures. Hardware Acceleration Versus Conceptual Inertia (0:20) Victor observes that Gordon Moore's empirical rule assures continuous exponential gains in processor speed, density, and cost efficiency simply with the passive passage of time. In contrast, conceptual leaps require deliberate intellectual adaptation and face systemic resistance. Historical transitions illustrate this cognitive inertia: early binary practitioners on the IBM 650 rejected Stan Poley's Symbolic Optimal Assembly Program (SOAP), John von Neumann opposed symbolic assemblers as a wasteful diversion of machine cycles to clerical work, and assembly programmers subsequently dismissed John Backus's Fortran compiler. Victor cautions that when an engineering community assumes it already understands what programming is, it instinctively rejects fundamentally different models. Because hardware advances automatically while human thinking remains anchored to familiar conventions, the primary bottleneck in computing is human unwillingness to unlearn established habits. Direct Manipulation and Spatial Program Representations (6:42) Victor challenges the assumption that programming must consist of typing sequential text lines into files. Highlighting Ivan Sutherland’s 1963 Sketchpad system at MIT, Victor demonstrates how an operator using a CRT screen and light pen could construct dynamic mechanical assemblies. Instead of hand-coding procedural steps, the user sketched elements and applied simultaneous geometric constraints, which an internal relaxation solver balanced continuously in real time to simulate structural tension in a bridge or produce parametric shapes. Simultaneously, alternative systems moved beyond the linear legacy of paper tape and punched cards. Douglas Engelbart’s NLS (1968) introduced mouse-driven spatial navigation, the RAND Corporation’s GRAIL (1968) allowed developers to draft flowcharts and write code via tablet-based handwriting and gesture recognition, and Xerox PARC’s Smalltalk partitioned software into multi-pane class browsers rather than flat files. Victor suggests that with sub-second interface response times demonstrated on early minicomputers, preserving sequential text files and interface lag in future systems would represent an engineering failure. Goal-Directed Logic and Dynamic Network Negotiation (9:41) Rather than forcing programmers to micromanage operational execution, goal-directed computation requires developers only to articulate the desired target state. Victor unifies Sutherland’s constraint solver with Carl Hewitt’s Planner, Prolog’s backward-chaining inference engine, and pattern-matching systems like SNOBOL and Ken Thompson’s regular expressions in Unix. In each instance, the programmer specifies high-level criteria, delegating search paths, parsing routines, and resolution logic to internal runtime solvers. Victor links this paradigm directly to distributed networks, citing J.C.R. Licklider’s vision of an Intergalactic Computer Network. In a global network spanning disparate systems authored at different times, Victor asserts that programs cannot rely on rigid human-coded integration glue, which he mockingly terms 'APIs' (Application Programming Interfaces). Instead, Victor argues that scalable network communication demands autonomous programs capable of dynamically probing remote endpoints and negotiating shared goals and semantic protocols at runtime. Massively Parallel Silicon and Concurrency Models (21:57) Victor criticizes the sequential von Neumann architecture as a mechanical relic of an era when processors were costly vacuum-tube assemblies and memory was expensive magnetic core. Because a single CPU accesses only a single memory word at any given instant, the von Neumann design leaves the vast majority of silicon transistors completely idle. As integrated circuits place both execution units and memory onto the same silicon die, Victor contends hardware naturally scales as cellular arrays of small, independent processors communicating with adjacent nodes. To drive such hardware, Victor rejects shared-memory threads and locks, characterizing them as an unworkable dead end that cannot scale across thousands of concurrent nodes. Instead, he points to message-passing concurrency models formulated in the early 1970s—chiefly Carl Hewitt's Actor model, Tony Hoare’s Communicating Sequential Processes (CSP), and Gilles Kahn’s process networks—which model computation as autonomous entities with local state exchanging discrete, asynchronous messages. Victor concludes that the greatest danger in computer science is premature certainty. The 1960s and early 1970s yielded radical breakthroughs precisely because pioneers operated with the creative humility of knowing that computing remained fundamentally undefined. Victor warns that if subsequent generations polish a single procedural framework into rigid dogma, practitioners will mistake local optimizations for a completed science and forfeit the ability to imagine alternative foundations.

精炼阅读摘要

Bret Victor在演讲中化身1973年的工程师审视未来计算,指出硬件能力的指数级增长与人类认知范式的缓慢演化存在显著落差。他论证称,软件工程正被顺序文本代码等早期物理限制所束缚,若因教条主义而遗忘1960与1970年代萌芽的直接操纵、目标导向与大规模并行等前沿突破,将构成计算领域的重大智力倒退。 硬件飞跃与认知惯性:早期抽象的阻力 (0:20) Victor指出,摩尔定律揭示了计算硬件的指数级飞跃,设备体积不断缩小、性能持续增强,此类硬件红利仅凭时间推移即可被动获取;但人类思维模式的转变远落后于技术步伐。接纳新型机械轻而易举,但破除既有心智模型并接受全新的编程思维却异常艰难。 Victor以IBM 650为例梳理了这种认知阻力:当Stan Poley开发出符号汇编程序SOAP并引入助记符时,习惯编写纯二进制机器码的工程师漠不关心;先驱约翰·冯·诺依曼(John von Neumann)亦公开斥责汇编语言,认为这是在机器上浪费人类应手动完成的杂务。随后John Backus团队推出Fortran并引入代数符号与循环结构时,同样遭遇了汇编群体的制度性抵制。Victor借此强调,一旦工程文化自满地认为已经掌握了“编程的本质”,任何跳出旧框架的探索都会被本能地拒之门外。 直接操纵与空间呈现:突破线性文本 (6:42) Victor阐述了直接操纵数据如何颠覆传统编码。以Ivan Sutherland在1963年开发的Sketchpad为例,操作员使用光笔在CRT屏幕上绘制粗糙线条,系统通过数值松弛求解器施加几何约束,令线段实时收敛为精确矩形;拖动顶点时,系统能动态维持约束关系,甚至支持无需过程式编码的桁架桥受力仿真。Victor反讽指出,既然1960年代已证明可通过直接视觉操纵构建动态系统,未来若出现通用的跨网络文档格式,绝无理由倒退回手写标记语言或样式表。 同时,交互式视频终端的出现使程序表达不再局限于穿孔纸带时代的线性文本流。道格拉斯·恩格尔巴特(Douglas Engelbart)在1968年展示的NLS系统引入了鼠标与多维视图;RAND公司的GRAIL系统支持在手写板上用手势与几何框图直接绘制逻辑;施乐PARC的Smalltalk则通过分窗浏览器在空间维度编排模块。Victor认为,在早期极度受限的设备上尚且能做到零延迟与空间化交互,未来算力大幅提升后,界面卡顿与平铺文本文件理应被彻底淘汰。 目标导向编程:从过程控制到自主求解 (9:41) 针对传统编程对微观执行步骤的指令化描述,Victor倡导“声明目标而非过程”的范式。Carl Hewitt设计的Planner语言与随后的Prolog将这一思想形式化为逻辑编程:开发者只需界定目标状态与语义关系,由系统推理引擎自动反向推导求解路径。这一逻辑同样贯穿于SNOBOL及Ken Thompson引入Unix的正则表达式——开发者只需提供目标结构模板,免去手动编写解析器的繁复操作。 Victor将目标驱动机制进一步拓展至分布式网络。针对J.C.R. Licklider提出的星际计算机网络设想,Victor指出未来网络充满跨时期、跨语言构建的异构系统,人类不可能提前硬编码所有交互协议。他借此讽刺性地虚构出“API”(应用程序编程接口)概念,批评依赖人工硬编码脆弱端点将导致整个架构因单点变动而崩溃;在他看来,成熟的分布式系统必须依托目标导向,由程序自主探测并动态协商语义。 冯·诺依曼瓶颈与大规模并行硅片模型 (21:57) Victor剖析了现代软件过度依附单线程顺序执行的硬件渊源:冯·诺依曼架构。在该体系下,单一CPU通过总线串行访问共享内存,导致绝大部分存储单元在运算时处于闲置状态。微处理器将运算单元与存储阵列全部归并为硅片上的晶体管,继续沿用冯·诺依曼设计是对芯片物理面积的严重浪费。硬件演进的必然方向,是由大量自带局部状态的微型处理器组成的大规模并行阵列。 硬件并行化迫切呼唤与之匹配的软件模型。Victor断言,未来若继续依赖共享内存、线程和互斥锁来处理并发,将是工程领域的彻底失败,因为人工调试多线程锁竞争无法横向扩展。他指出,Carl Hewitt的Actor模型将计算抽象为拥有局部状态并通过异步消息通信的自治实体,结合Tony Hoare的CSP与Gilles Kahn的进程网络,方能为真正的大规模并发提供兼具严谨性与扩展性的理论基石。 警惕教条主义:承认无知以保留探索自由 (29:38) Victor警告,计算领域最大的潜在悲剧并非先进技术的暂时搁浅,而是工程师丧失对替代范式的想象力。若新一代开发者成长于单一的过程式、顺序化体系中,将局部修补后的狭隘范式误认为终极真理,并将其作为不可动摇的教条代代相传,整个行业便会陷入集体失明,正如早期二进制程序员顽固排斥编译器一样。 Victor强调,1960与1970年代之所以迎来计算机科学的思想繁荣,恰恰是因为先驱们深知自己尚不明确编程与计算的终极定义;正是这种免受既成教条束缚的自由,激发了无限的创造潜能。他总结道,作为创造者最危险的念头就是自以为懂得如何行事;唯有坦承对计算本质的无知,才能真正打破思维枷锁,重获自由探索新工具的勇气。 Victor以逆向反讽与历史溯源揭示了软件工程在工业化繁荣背后的范式停滞,但演讲并未深入探讨直接操纵与逻辑求解在应对超大规模工程时所面临的调试透明度、性能开销与形式验证等现实挑战。演讲留下的核心追问在于:当既有工业体系因巨大的沉没成本而将局限范式固化为标准时,计算科学应当如何打破认知闭环,唤醒根本性的范式创新。

Detailed notes — zh

## Background 该视频由 Joey Reid 于 2013 年 7 月 31 日发布在 YouTube 平台上。页面描述指出,这是布雷特·维克多(Bret Victor)于 2013 年 7 月 9 日在 Dropbox 举办的 DBX 大会上发表的演讲;维克多身着 1973 年 IBM 系统工程师的制服并使用高射投影仪,通过带领观众穿越回 1973 年,反思 60 至 70 年代初计算机科学领域不受教条束缚的自由思考与前沿思想,警示人们在技术创作中自满于已知经验的危险性。 ## TL;DR 布雷特·维克多立足于 1973 年的技术视角,系统梳理了当时涌现出的四大颠覆性计算构想:数据的直接操纵(如 Sketchpad)、基于目标与约束的声明式编程(如 Planner 和 Prolog)、信息的空间化表征(如 NLS 与 Smalltalk)以及脱离冯·诺依曼瓶颈的大规模并行与消息传递模型(如 Actor 模型)。他借历史推演反讽现代软件工程重新退回至编写扁平文本文件、死守脆弱 API 与滥用多线程互斥锁的倒退现状。维克多深刻指出,技术的真正悲剧在于后人彻底遗忘了思维原本拥有的多元可能,唯有打破将狭隘范式奉为教条的自满心态,承认自己“根本不知道什么是编程与计算”,才能重获探索未来的思想自由。 ## Atmosphere & style 整场演讲呈现出一种精妙绝伦的反讽戏剧感与冷幽默:维克多全程沉浸于 1970 年代工程师的复古装扮与投影胶片演示中,语气一本正经却处处借古讽今,引发台下心领神会的阵阵笑声。随着议题从具体的技术演示逐步升华至对认知惯性、群体盲目与行业教条的批判,现场氛围逐渐从欢快的历史穿越转向严肃深沉的智识震撼。观众在感受黄金时代先驱们惊人创造力的同时,也不可避免地体验到一种对现代软件技术停滞与思维退化的冷峻审视和思想解放。 ## Bulletin - [00:20](https://www.youtube.com/watch?v=8pTEmbeENF4&t=20s) 布雷特·维克多在2013年以1973年IBM系统工程师的身份发表演讲,指出硬件性能可依赖摩尔定律自然提升,但人类思维模式与范式的转变却极为缓慢且阻力重重。 - [05:26](https://www.youtube.com/watch?v=8pTEmbeENF4&t=326s) 演讲梳理了20世纪60至70年代初的四大计算前沿探索:数据直接操纵、基于目标与约束的声明式编程、空间化信息表征,以及契合大规模并行硬件的并发模型(如Actor与CSP)。 - [12:43](https://www.youtube.com/watch?v=8pTEmbeENF4&t=763s) 维克多辛辣反讽了当代软件工程的倒退,批评40年后的开发者依然深陷纯文本文件编写过程式代码、硬编码API,以及使用不可扩展的线程与互斥锁等旧泥潭中。 - [29:48](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1788s) 技术创新的最大障碍是陷入自以为是的教条主义,维克多警示称创造者最危险的想法就是自认为知道自己在做什么,唯有承认对编程本质的无知才能重获思考自由。 ## Key takeaways - [01:33](https://www.youtube.com/watch?v=8pTEmbeENF4&t=93s) 硬件算力能靠等待摩尔定律自然增长,但认知跃迁却始终面临阻力,历史上的汇编语言与FORTRAN都曾遭到自视权威的程序员顽固抵制。 - [06:42](https://www.youtube.com/watch?v=8pTEmbeENF4&t=402s) 伊万·萨瑟兰在1962年开发的Sketchpad证明了数据直接操纵的可行性,系统通过松弛迭代求解器动态维持几何与物理约束,而非依赖预设的绘图硬编码。 - [09:41](https://www.youtube.com/watch?v=8pTEmbeENF4&t=581s) 从Planner、Prolog到模式匹配与正则表达式,编程范式展现了从详述底层执行步骤(How)向声明高层目标与约束(What)的重大跃迁。 - [12:43](https://www.youtube.com/watch?v=8pTEmbeENF4&t=763s) 面向网络化计算的‘星际网络’必然面临跨系统通信困境,未来的系统应当具备自主协商协议的能力,而不是依赖脆弱且僵化的硬编码API。 - [16:29](https://www.youtube.com/watch?v=8pTEmbeENF4&t=989s) 以打字机和打孔纸带为代表的串行媒介限制了人类思维,而NLS、GRAIL以及Smalltalk的多栏浏览器早已开创了信息的二维乃至多维空间化表达。 - [20:37](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1237s) 交互式计算早在硬件资源匮乏的20世纪60年代就苛求即时响应以模拟物理质感,现代系统坐拥百万倍算力却依然存在UI卡顿是技术膨胀的讽刺。 - [22:47](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1367s) 冯·诺依曼架构让单核处理器疲于奔命而海量存储芯片大多处于闲置状态,微处理器与集成电路技术理应催生出由微型核心组成的大规模并行阵列。 - [25:17](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1517s) 共享内存下的线程与互斥锁无法支撑高并发且超出人脑推演极限,如果40年后业界仍在用锁,说明软件工程作为一门学科已经彻底失败。 - [26:15](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1575s) Carl Hewitt的Actor模型与Tony Hoare的CSP通过无共享状态和显式消息传递,为并行硬件提供了远比加锁机制更健壮、契合物理规律的并发方案。 - [27:46](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1666s) 技术未被采纳并非最严重的后果,真正的悲剧在于后世彻底遗忘了曾经存在过的替代构想,使得整个行业失去了重新想象编程范式的认知视野。 - [29:48](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1788s) 下一代开发者若在单一范式下缝缝补补,就会将技术教条误认为编程的终极形态,从而丧失看到其他可能性的能力并沦为盲人。 - [32:08](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1928s) 创造性思维的核心前提是承认‘我们压根不知道什么是编程与计算’,只有打破理所当然的执念,思维才能挣脱锁链去思考任何未来。 ## Detailed walkthrough ### [00:20](https://www.youtube.com/watch?v=8pTEmbeENF4&t=20s) 穿越回1973年:站在技术剧变的十字路口 布雷特·维克多(Bret Victor)身着20世纪70年代典型的IBM系统工程师白衬衫与领带,站在一台老式高射投影仪旁,以完全沉浸的历史角色扮演拉开了演讲的序幕。他热情地向台下的“自动计算机程序员们”问好,并将现场带入到1973年的技术语境中:当时全世界已经拥有数千台计算机,它们不仅被广泛用于商业记账,还深入到前沿的科学实验中。计算机的体积正在经历惊人的缩水,从过去占据一整间大厅的庞然大物,迅速缩小为紧凑的设备,成本也大幅下降。身处这样一个瞬息万变的计算机时代,维克多提出一个大胆的构想:立足于1973年当下已知的技术成果,向前展望40年,推测2013年左右的编程将会演变为何种形态。 维克多指出,过去十年(即20世纪60年代至70年代初)涌现出一批极富启发性的前沿研究,这些研究揭示了未来编程的崭新方向。他梳理出四个即将深刻改变计算形态的“核心构想”。然而在正式展开之前,他强调必须先正视一个更根本的认知规律:新思想被采纳与推广的艰难本质。正如维克多所言:“技术变化得很快,但人们的思想转变却很慢。”(“Technology changes quickly, people's minds change slowly.”)这种反差决定了技术工具的升级往往轻而易举,但思维模式的跃迁却阻力重重。 ### [01:33](https://www.youtube.com/watch?v=8pTEmbeENF4&t=93s) 摩尔定律的确定性与思维定势的顽固阻力 维克多通过戈登·摩尔(Gordon Moore)及其创立的英特尔公司(Intel)举例说明。摩尔在近十年前观察到,计算机的处理能力随着时间呈指数级增长。从当时的数据推演至今,这一预测分毫不差。维克多风趣地解释道,硬件性能的提升是完全可以“坐享其成”的,只要耐心等待,机器自然会越来越快、功能越来越强;但人类观念的转变绝不可能通过被动等待自然发生。为了证明这一点,他回顾了编程史上的两次典型抵制: ```mermaid flowchart TD accTitle: 编程范式演进与认知阻力 accDescr: 展示从绝对二进制到汇编再到高级语言的发展过程及各阶段遭遇的思想阻力 subgraph Phase1 ["第一阶段:机器代码"] A["绝对二进制 (Numeric Code)<br/>IBM 650 编程主流"] end subgraph Phase2 ["第二阶段:符号汇编"] B["汇编语言 (SOAP)<br/>Stan Poley 发明符号指令与变量"] end subgraph Phase3 ["第三阶段:高级语言"] C["FORTRAN<br/>John Backus 等人引入数学公式与循环"] end A -->|"遭遇阻力:<br/>被视为无价值的闲招"| B B -->|"遭遇阻力:<br/>汇编程序员拒绝接受"| C D["冯·诺依曼等权威的质疑:<br/>'机器时间极其宝贵,汇编纯属浪费时间的文书杂务'"] -.-> B ``` - **IBM 650与汇编语言的诞生**:早期程序员在IBM首款量产通用计算机IBM 650上全部使用“绝对二进制”(Absolute Binary)编码,逐个手写指令数字代码。当斯坦·波利(Stan Poley)发明SOAP(符号优化汇编程序),允许用“ADD”等单词和符号变量代替生硬的内存地址时,那些写纯二进制的资深程序员却毫无兴趣,甚至完全无法理解其价值。 - **冯·诺依曼的愤怒**:计算机体系结构奠基人约翰·冯·诺依曼(John von Neumann)曾断言人类只需要机器码。当他的一名学生私下编写了一套汇编器以提高编程效率时,冯·诺依曼勃然大怒,斥责他浪费了极其宝贵的机器时间去运行本应由人工完成的“文书杂活”。 - **FORTRAN被冷落**:当约翰·巴克斯(John Backus)等人推出能够书写数学公式和循环结构的FORTRAN高级语言时,汇编程序员们同样报以冷眼,拒绝走出舒适区。 维克多警示观众,当人们自以为精通技术时,便会陷入教条:“他们认为自己知道自己在做什么,他们自认为了解什么是编程——‘这就是编程,那不是编程’;因此对于接纳新思想,总是存在巨大的阻力。” ### [05:26](https://www.youtube.com/watch?v=8pTEmbeENF4&t=326s) 四个颠覆传统编程范式的宏大构想 维克多借1973年研究前沿的视角,提炼出正处于萌芽期、足以彻底颠覆编程现状的四个技术方向: 1. **直接操纵数据(Direct Manipulation of Data)**:打破“写一连串代码指令让机器去执行”的陈规,转而直接在图形界面上操纵数据结构,由系统在后台隐式生成相应的程序。 2. **基于目标的声明式编程(Programming Using Goals)**:改变传统“手写实现步骤(Procedure)”的习惯,程序员仅需告诉计算机最终“想要什么”(目标与约束),由机器自身求解并推导具体实现步骤。 3. **基于图形界面的空间化信息表达(Spatial Representations of Information)**:摆脱在纯文本文件中编写一行行线性字符的枷锁,利用外接显示器将程序与数据进行二维乃至多维的空间化呈现。 4. **大规模并行硬件与并发编程模型(Massively Parallel Programming Models)**:面对单核顺序执行的物理极限,未来的硬件必将走向大规模并行,软件必须建立可靠的并行并发逻辑,而非单纯依赖顺序指令队列。 ### [06:42](https://www.youtube.com/watch?v=8pTEmbeENF4&t=402s) 构想一:直接操纵数据与动态约束求解(Sketchpad) 在展开第一项构想时,维克多重点介绍了伊万·萨瑟兰(Ivan Sutherland)约十年前在麻省理工学院完成的博士论文成果——Sketchpad系统。维克多在投影仪上展示了萨瑟兰当年的操作录像:萨瑟兰手持光电笔在阴极射线管屏幕上绘制零件图。为了绘制一个机械铆钉,他随手用光电笔在屏幕上画出几条倾斜、粗糙且变形的四边形线段。 随后,萨瑟兰按下一个物理开关,用光电笔拾取这些线段,向系统声明约束条件:要求这些线段相互垂直。Sketchpad随即启动内置的松弛迭代求解器(Relaxation / Iterative Solver),线段在屏幕上实时微调颤动,瞬间转变为一个几何意义上完美的矩形。维克多特别强调:“系统本身对‘矩形’的概念一无所知;他是通过直接施加一组约束条件,促使系统画出了一个矩形。” ```mermaid flowchart LR accTitle: Sketchpad 约束求解机制 accDescr: 从草绘线段到施加几何约束并由松弛迭代求解器动态维持矩形的流程 A["光电笔随手草绘<br/>(歪斜四边形)"] --> B["交互拾取线段<br/>施加几何约束 (互斥垂直)"] B --> C["松弛求解器介入<br/>(迭代调整端点坐标)"] C --> D["完美矩形呈现"] D -->|"交互拖拽变形"| E["动态实时求解<br/>(保持垂直约束不变)"] ``` 更令人震撼的是,这绝非单纯的静态绘图软件,而是一段“程序”。因为这些约束关系是**动态维持**的:当萨瑟兰拖动并调整铆钉一角的大小时,迭代求解器再次实时介入,始终确保其保持矩形几何特征。此外,萨瑟兰还展示了桥梁物理应力模拟:他在屏幕上手工绘制桥桁架,系统标注出每根构件所承受的张力数值;当萨瑟兰在桥底挂上重物并改变荷载时,整座桥梁随之动态形变,而Sketchpad本身并未硬编码任何桥梁工程知识,一切皆源于通用的几何与力学约束模型。 讲到此处,维克多用极具反讽意味的口吻设想未来:“我可以想象在三四十年后,人们通过直接操纵数据结构来进行编程,并让系统自动生成底层代码;尤其是对于视觉或物理相关的系统。假如几十年后,我们在某种由计算机互联的网络上拥有了某种文档格式,我相信我们一定会通过直接操纵来创建所有这些文档,绝对不会出现任何‘标记语言’或‘样式表语言’,对吧?那样做毫无道理,伊万·萨瑟兰早在1962年就已经展示了正确的做法。”维克多的讽刺引来全场会心的笑声。 ### [09:41](https://www.youtube.com/watch?v=8pTEmbeENF4&t=581s) 构想二:基于目标与逻辑的意图编程(Planner与Prolog) 进入第二个构想,维克多指出编程正在从“指定执行流程”走向“指定目标逻辑”。在传统过程式编程中,程序员需要事无巨细地指挥计算机每一步该怎么做;而Sketchpad的约束机制已经初露端倪——萨瑟兰告诉计算机“我希望线段互相垂直”(What),而不是教计算机“如何一步步把点移动过去”(How)。 维克多介绍了当时人工智能领域的最新突破:卡尔·休伊特(Carl Hewitt)开发的Planner系统。Planner的精妙之处在于它兼具双向推理能力: - **前向过程式推理(Forward Reasoning)**:当系统得知“苹果是红色的”,输入一个苹果,它能向前推导出“它是红色的”。 - **后向目标式推理(Backward Reasoning)**:向系统声明目标“我想要一个红色的东西”,系统会自动向后追溯并提议“我们来试试苹果”。 这种模式允许程序员用程序最终期望交付的“结果目标”来定义代码,同时在需要时辅以特定的过程策略。维克多接着提到,受此启发,阿兰·科尔梅劳埃(Alain Colmerauer)等人最近提炼出了纯粹基于后向目标推导的Prolog语言。在Prolog中,程序员完全基于逻辑目标描述问题,系统通过内置的搜索树自主推演求解路径。这开创了被称为“逻辑编程”(Logic Programming)的新范式。 维克多总结道,具体采用哪种语言并不关键,核心范式的转移在于认知层次的跃迁:“真正重要的,是将你的程序表达为你‘想要什么’,而不是给计算机下达一组关于‘如何去做’的具体指令。”(“What's important is expressed your program as what you want, not a set of instructions on how to do it.”) ### [11:21](https://www.youtube.com/watch?v=8pTEmbeENF4&t=681s) 模式匹配与面向目标编程的兴起 在探讨让计算机自主寻找解决路径的理念时,模式匹配(pattern matching)是一个极具代表性的典型范例。早在文本处理语言 SNOBOL 中,就内置了强大的模式匹配特性,程序员无需编写繁琐的过程式解析逻辑,只需向系统传入包含匹配模式的脚本,系统就会自动完成对文本的检索与处理。不久之后,正在贝尔实验室(Bell Labs)研发 Unix 系统的肯·汤普森(Ken Thompson)引入了正则表达式的概念来进行文本匹配。面对海量文本的消化与解析,开发者不再需要逐步书写过程式的解析器,而是直接提供一个模板或范式,声明自己想要寻找的内容,由计算机底层自行推演具体的匹配逻辑。 无论是 Sketchpad 的约束求解系统、Planner、Prolog,还是文本层面的模式匹配,它们背后的核心逻辑高度统一:向计算机交付更高维度的目标,由机器自主推算执行机制。这种“面向目标”(goal-directed)的编程范式目前在优化编译器中已现端倪。Bret Victor 站在 1973 年的视角指出,这种让计算机自我推演的能力将在未来数十年内变得无处不在,而推动这一趋势迅速爆发的关键力量,正是当时初见雏形的计算机网络互联构想。 - SNOBOL 语言原生内置模式匹配功能,摆脱了传统文本处理逐行编写解析器的限制。 - 肯·汤普森在 Unix 开发中采纳了正则表达式,确立了通过声明模板匹配文本的范式。 - 从 Sketchpad、Planner 到 Prolog,计算的核心正在从“详述步骤”转向“声明目标”。 --- ### [12:43](https://www.youtube.com/watch?v=8pTEmbeENF4&t=763s) “星际网络”与不可避免的“外星人通信”难题 当计算机开始跨越物理距离相联时,面向目标的编程思路就成为了不可或缺的基石。当时掌管美国国防高级研究计划局(ARPA)的 J.C.R. 利克莱德(J.C.R. Licklider)极力推动将全球计算机互联的构想,并戏称其为“星际计算机网络”(Intergalactic Computer Network)。利克莱德幽默地解释道,工程师往往只会交付底线标准,因此只有要求建设一个跨越银河系的网络,最终才有可能真正收获一个覆盖全球的 ARPANET(即正在孕育中的“Internet”)。然而,一旦建立起这种全球网络,系统就会迎面撞上利克莱德所说的“与外星人通信问题”(communicating with aliens problem)。 Bret Victor 引用了利克莱德在论著中的原话来说明这一困境:“The problem is essentially the one discussed by science fiction writers: how do you get communication started among totally uncorrelated sapient beings?”(这个问题本质上就是科幻作家讨论的问题:你如何在完全互不相关的智慧生命之间开启通信?)在未来的网络环境中,某人使用某种语言和协议写就的程序,必须与另一个在未知时间、由未知人员使用截然不同语言写就的远程程序进行交互。两个程序彼此一无所知,却需要调用对方的服务。在这种尺度下,唯一可扩展且行之有效的解决方式,就是让程序之间自主协商、动态探测并即时达成共识语言,进而协同完成人类开发者赋予的高层目标。 ```mermaid flowchart TD accTitle: 动态协商与硬编码接口对比 accDescr: 对比面向目标的动态协议协商模式与脆弱的硬编码API模式 subgraph DynamicGoal ["面向目标:自主协商(可扩展)"] P1["程序 A<br/>(独立时间/语言编写)"] P2["程序 B<br/>(提供所需服务)"] P1 <-->|"动态探测 / 协议协商"| P2 end subgraph RigidAPI ["过程式接口:硬编码 API(脆弱、不可扩展)"] H["人类程序员"] EP["固定接口 (API)"] H -->|"手动对接底层规范"| EP EP -->|"一旦变动即全面崩溃"| Broken["系统脆弱中断"] end ``` 针对这一挑战,Bret Victor 以反讽的口吻构想并猛烈抨击了一种假设中的错误路径——他现场生造了“API”这个词,并预言这种人工硬编码接口的模式绝对不可能成为未来:“So I'm pretty confident this will never happen: we're not going to have APIs in the future, where what we are going to have are programs that know how to figure out how to talk to each other.” 在他看来,如果让人类程序员针对远程程序暴露的固定接口死板地编写对接代码,不仅要求程序预先知晓彼此,还将两者牢牢锁死;一旦远程接口稍作调整,下游系统就会全面崩溃。这种让脆弱的人工操作陷入底层琐碎细节的做法,本质上就是“机器码问题”在网络层面的重演。 - 利克莱德将全球互联网络命名为“星际计算机网络”,期望通过设立极高目标来确保全球互联的实现。 - 异构系统在互不了解的情况下进行协作,构成了网络化计算中最严峻的语义鸿沟。 - Bret Victor 断言硬编码的“API”模式过于脆弱且无法扩展,未来的网络通信必然依赖程序间的动态语义协商。 --- ### [16:29](https://www.youtube.com/watch?v=8pTEmbeENF4&t=989s) 空间化信息表征:告别线性打孔纸带与代码文本 Bret Victor 提出的第三个关键范式转变,是从线性文本向空间化信息表征(spatial representation of information)的跃迁。在 1973 年,主流编程依然被束缚在纯文本之中——程序表现为成卷的打孔纸带、堆叠的穿孔卡片或是磁带上的连续字符,而打字机(teletype)的物理构造也决定了它只能一行行向外吐出文字。但是,随着视频显示器被接入计算机,屏幕完全可以被视为一种极具动态特性的“动态纸张”,信息可以在二维空间中获得更加自由、直观的展示。 这种空间维度的革新在当时的先驱系统上已经展现得淋漓尽致。道格·恩格尔巴特(Doug Engelbart)在斯坦福研究所(SRI)研发的 NLS 系统通过一种“在桌面上滑动并指示屏幕位置”的奇特装置——鼠标,允许用户自由指向屏幕中的信息并展开深层数据;更重要的是,NLS 实现了多维视图切换,同一份数据既能以线性列表呈现,也能一键转变为二维图表。与此同时,兰德公司(RAND Corporation)开发的 GRAIL 系统则展示了更加惊人的手势与图形交互:开发者手握触控笔在平板上自由徒手绘制,系统在 1968 年就能精准识别手绘方框并自动转换为流程图节点,识别手写字母并转为文本,甚至支持直接用划线将模块相连或用涂抹手势擦除线条。 哪怕是依然依赖代码文本的系统,也在朝着空间结构进化。施乐帕洛阿尔托研究中心(Xerox PARC)研发的 Smalltalk 没有将源码堆砌在冗长单调的平铺文本文件中,而是开创了基于多栏分类的空间浏览器(System Browser)。开发者可以在平铺展开的分类、类、协议和方法面板间自如跳转,将代码作为空间网络进行探索。基于这些突破,Bret Victor 针对 40 年后的软件工程现状留下一句极具讽刺意味的断言:“I'm totally confident that in 40 years we won't be writing code in text files; right, we've been shown the way.” - 早期线性代码组织形式受限于穿孔卡、磁带与打字机等物理媒介的串行输入限制。 - 恩格尔巴特的 NLS 系统(1968 年“所有演示之母”)确立了鼠标交互、指针定位及多维度数据视图切换。 - 兰德公司的 GRAIL 系统在 1968 年即实现了手写识别、自由手绘流程图转换及直接手势擦除操作。 - Smalltalk 摒弃了平铺的大型文本源码文件,通过多列窗口浏览器将对象、协议与方法组织为空间化层级。 --- ### [20:37](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1237s) 交互式计算的黎明与对“零延迟 UI”的乐观测想 从 NLS、GRAIL、Smalltalk 到伊利诺伊大学开发的 PLATO 系统,这些先驱平台掀起了交互式计算(interactive computing)的浪潮。与传统的批处理作业截然不同,用户坐在屏幕前与机器展开的是实时的双向对话。为了验证这一全新交互哲学的可行性,早期系统的设计者们自底层软硬件架构起就苛求系统的即时响应性,力求让界面对每一次点击和输入做出无缝反馈,以此在屏幕上模拟操控实体物理对象的质感。 正是基于这一软硬件协同的演进轨迹,Bret Victor 再次向台下观众抛出了一个基于历史假定的冷幽默预言:“And so if interactive computing takes off, and I think it will, then I think it's pretty obvious that in 40 years our user interfaces, if you interact with them, you'll never experience any kind of delay or lag.” 他调侃道,既然先驱者们早在 20 世纪 60 年代受限的硬件条件下都证明了即时响应交互界面的必要性,那么 40 年后当计算速度提升百万倍时,操作系统和应用界面中理所当然不应存在任何延迟与卡顿。 - PLATO 与 NLS 等系统确立了人机实时交互的基本标准,强调界面如同物理实体般的即时触觉响应。 - 先驱系统在计算资源极为匮乏的 60 年代即通过软硬件优化实现了低延迟的人机闭环。 - 演讲借由“未来的计算机速度将提升百万倍,因此不可能再有 UI 卡顿”的推论,讽刺了现代软件膨胀导致的性能倒退。 --- ### [21:57](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1317s) 打破顺序执行:冯·诺依曼架构下的并行思考 在探讨了目标驱动、网络自主协商和空间表征之后,Bret Victor 引入了当天的第四个重大课题——并行编程(parallel programming)。在当时的软件世界中,绝大多数程序本质上都被编写为一连串严格有序的指令序列,计算机被迫机械地执行“先做这个,再做那个,随后再执行下一步”。 这种高度顺序化的思维惯性并非出自人类思维的天性,而是受制于底层的冯·诺依曼体系结构(Von Neumann architecture)。在该架构中,一个单一的处理器与庞大的内存相连,周而复始地从中读取字长数据并串行处理;由于处理器在同一瞬间只能执行单一任务,人类只能将现实世界的复杂逻辑强行裁剪为线性的任务清单。然而,这种将计算局限于单一时间轴的顺序模型,正在成为限制软硬件释放潜力的巨大瓶颈。 - 传统的命令式编程将算法抽象为线性的单线程指令序列。 - 冯·诺依曼架构中“单处理器不断从主存读取数据”的机制,是顺序编程范式形成的技术诱因。 - 将现实世界的并发本质压缩进单处理器的串行时钟周期,埋下了计算体系架构升级的必然伏笔。 ### [22:47](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1367s) 冯·诺依曼架构的物理局限与微处理器的集成电路革命 冯·诺依曼体系结构(Von Neumann architecture)存在一个极其低效的根本缺陷:大部分内存处于绝大多数时间的闲置状态。系统的一端是一个竭尽全力飞速运转的处理器,但每次操作其实只访问内存中的一个字(word),其余庞大的内存空间仅仅是留在那里干坐着等待。在计算机早期,当处理器是由昂贵庞大的电子管或继电器构成,而内存采用磁芯或旋转磁鼓(同样体积庞大、成本高昂)时,这种分离设计尚可勉强接受。然而,技术正在发生一场颠覆一切的变革——半导体集成电路(integrated circuit)的诞生。 以 Intel 推出的“微处理器”(microprocessor)为例,整个处理器如今可以完整容纳在单片硅晶圆上。从微观角度看,处理器纯粹由数以万计的晶体管构成,而晶体管本质上就是刻蚀在硅片上的微小图案。更关键的是,未来的计算机内存同样将由硅片上的晶体管构成,两者在底层材质上完全一致。以这种视角审视冯·诺依曼架构,荒谬之处显而易见:一边是少数拼命运转的晶体管,另一边则是占据大面积硅片、大部分时间无所事事的大量晶体管。为了最大化利用硅片单位面积的计算潜能,计算机架构必须演进为由成千上万个微型计算机组成的庞大阵列——每个节点都拥有独立的处理器和内部状态,通过相互通信协同运作。这种架构极易横向扩展,随着晶体管不断缩小、晶圆面积不断增大,多出来的空间直接填入更多微型处理器即可。 ```mermaid flowchart LR accTitle: Von Neumann versus Massive Parallel Silicon Architecture accDescr: Comparison of traditional idle-memory Von Neumann bottleneck and modern tile-based multi-core silicon layout. subgraph VN["传统冯·诺依曼架构(效率瓶颈)"] P1["单核处理器<br/>(高负荷运转)"] <-->|"单字读写瓶颈"| M1["海量存储阵列<br/>(大部分晶体管闲置)"] end subgraph MP["理想硅片并行架构(全晶体管利用)"] direction TB subgraph Row1["计算节点网格"] C1["微核心 + 局部状态"] <--> C2["微核心 + 局部状态"] C2 <--> C3["微核心 + 局部状态"] end subgraph Row2["横向可扩展阵列"] C4["微核心 + 局部状态"] <--> C5["微核心 + 局部状态"] C5 <--> C6["微核心 + 局部状态"] end Row1 <--> Row2 end ``` - 冯·诺依曼瓶颈的核心矛盾:处理器在全力计算,绝大部分存储晶体管却处于等待闲置状态。 - 集成电路统一了逻辑与存储的物理介质,硅片利用率的核心在于让每一个刻蚀出的晶体管都参与计算。 - 晶体管尺寸微缩与芯片面积增大带来的红利,最自然的利用方式是成倍堆叠独立微型计算机节点,而非死守单一流水线。 --- ### [25:17](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1517s) 线程与锁的死胡同:迈向 Actor 与消息传递并发模型 Bret Victor 带着反讽的语气预言,这种微计算机网格才是未来的硬件归宿——“除非 Intel 某种程度上卡死了微处理器市场,硬生生把现有架构往前推进三十年,但那显然不可能发生”。在面对注定高度并行的硬件时,软件工程面临着严峻的编程模型重构。当时的业界做法普遍依赖线程与互斥锁(threads and locks):启动几个顺序控制线程,通过在单核微处理器上时间复用(multiplexing)来伪装出并行,并让这些线程在争夺共享资源时互相锁死。 Bret Victor 直言这种模型根本不可扩展,工程师的大脑完全无法推演数百个线程同时争抢、撞击同一块共享内存时的混沌状态。针对这一技术死局,他做出了坚决的论断:“因此我认为,四十年后如果我们还在使用线程和锁,我们就该收拾行李回家了,因为作为一门工程学科,我们显然已经彻底失败。”(“So I think in forty years if we're still using threads and locks we should like pack up and go home cuz we've clearly failed as an engineering field.”) 要替代线程和锁,学术界在 1970 年代初涌现出了崭新的探索。曾提出 PLANNER 语言的 Carl Hewitt 提出了 Actor 模型(Actor model)。该模型深受物理学启发:正如宇宙中无数微观粒子彼此独立、保有自身状态,并仅与周围环境发生相互作用一样,Actor 之间异步运行,各自维护内部状态,完全通过消息传递(message passing)解耦。与此同时,法国的 Gilles Kahn 正在探索数据流网络,Tony Hoare 也即将提出通信顺序进程(Communicating Sequential Processes, CSP),Robin Milner 亦将展开相关研究。Bret Victor 调侃道,如果将来 Actor 模型被“瑞典电话公司(暗指爱立信与后来的 Erlang)”之类的机构采纳,那场景想必会很有趣;但无论具体由哪套实现胜出,告别锁竞争、转向契合硬件特性的健壮并行模型已是大势所趋。 - 共享内存多线程模型的致命缺陷在于不可预测性,无法支撑大规模核心扩展。 - Actor 模型的核心机制:无共享状态(share nothing)、完全异步执行、通过显式消息传递触发行为。 - 并发理论在 1970 年代初的集中爆发包括 Carl Hewitt 的 Actor、Tony Hoare 的 CSP 以及 Gilles Kahn 的 Kahn 进程网络。 --- ### [27:46](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1666s) 四大思想回顾:反思技术倒退与思维遗忘的真正悲剧 Bret Victor 系统的总结了全场演讲所梳理的 1960 至 1970 年代初计算机科学的四大前沿探索维度: 1. **数据的直接操纵(Direct manipulation of data)**:如 Ivan Sutherland 的 Sketchpad,允许开发者在屏幕上动态作画并添加几何约束,直接在交互中修改数据结构,而非机械地编写一行行操作指令; 2. **基于目标与约束的声明式编程(Programming using goals and constraints)**:如 Sketchpad 的约束求解、PLANNER、Prolog 以及正则表达式等模式匹配,开发者只需阐明“想要达成什么”,由计算机内部的求解器(solver)去推导“如何实现”; 3. **信息的空间化表征(Spatial representations of information)**:告别单维度的打孔纸带与文本文件(text files),利用阴极射线管图形显示器,在二维乃至多维视觉空间中表征逻辑与信息流; 4. **本质上的并行思维方式(Fundamentally parallel ways of thinking)**:彻底摒弃自冯·诺依曼架构遗留的单步顺序执行思维,全面依托并行硬件与消息传递并发模型,消灭低效且危险的线程与锁。 话锋一转,Bret Victor 指出技术思潮总是分分合合、起起落落,人们无法确切预测未来。“但我确实认为,如果在四十年后我们仍然在文本文件中使用过程式代码、遵循着顺序编程模型来写程序,那将是一种莫大的遗憾。”这说明整个行业完全没有从那个计算机科学最丰饶的黄金时代汲取任何养分。然而,技术没被采纳还算不上真正的惨剧;更大的悲剧是这些激进的构想被后世遗忘,以至于后人重新见到 Sketchpad 时竟然还会感到惊诧;而“真正的悲剧,是人们彻底忘记了‘我们原本可以对编程模型拥有全新的想法’这回事”。 | 历史探索方向(1960-1970年代) | 探索代表案例 | 传统陈旧范式(可能倒退的形态) | |:--- |:--- |:--- | | **数据直接操纵** | Sketchpad 交互式绘图 | 编写非直观的代码指令去间接拼装内存对象 | | **目标与约束编程** | PLANNER、Prolog、正则引擎 | 纯手工命令式(Imperative)逐步骤编写控制流 | | **空间视觉表征** | 屏幕图形化布局、拓扑视图 | 局限于扁平、纯线性的文本文件(Text files) | | **并行交互系统** | Actor 模型、CSP 消息传递 | 单处理器假象下的顺序循环、线程与互斥锁 | --- ### [29:48](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1788s) 破除行业教条:最具杀伤力的思想与未知的自由 Bret Victor 描绘了他眼中软件工程最恐怖的“最坏情境(worst case scenario)”:下一代程序员在成长过程中,从未接触过这些激进且多元的编程范式,他们的认知视野中只被灌输了一种思维路径。他们在这个狭隘的模型里缝缝补补、完善细节,自以为解决了该模型的所有难题,然后将这套单一的知识框架继续传授给再下一代。到了第二代人,他们便会理所当然地认为:“一切都已被彻底搞明白了,我们知道什么是编程,我们非常清楚自己在做什么。” 这种自满标志着技术“教条(dogma)”的形成,而一旦群体深陷教条,思维便极难挣脱。Victor 深刻剖析了为何 1960 年代与 1970 年代初能孕育出如此不可思议的创造力大爆发:因为那时的技术刚好发展到了“人们真正能用计算机做实事”的阶段,但同时又足够早期——“压根没有人知道编程到底应该是什么样子的”。正因为前驱者清醒地知道自己不知道,他们的思想才能完全挣脱锁链,无拘无束地尝试一切可能:“也许我们可以这样编程序?也许可以那样设计系统?” 演讲最后,Victor 指向幻灯片上那些当年坚定认为“打孔纸带输入二进制才是唯一真正编程”的老程序员。当汇编语言、FORTRAN 乃至高级抽象工具呈现在他们眼前时,他们甚至看不懂、全当耳旁风,因为他们顽固地以为自己懂编程,从而彻底错失了更宏大、更强大的思维跃迁。 Bret Victor 借此向全场抛出了振聋发聩的核心命题: > “作为一个具有创造力的人,你能拥有的最危险的想法,就是以为自己知道自己在做什么。”(“The most dangerous thought that you can have as a creative person is to think that you know what you're doing.”) 一旦你认为自己知晓答案,你就会停止向周围探索,甚至丧失识别其他可能性的视觉,沦为思想上的盲人。如果开发者不愿退化成抱残守缺的二进制打孔员,想要重拾创造全新思维体系的能力,第一步就必须谦逊而清醒地承认无知。他在全场掌声响起前掷地有声地总结道:“我认为你必须说:‘我们不知道什么是编程,我们不知道什么是计算,我们甚至根本不知道什么才是计算机。’而一旦你真正理解了这一点,一旦你真正坚信了这一点,你就自由了,你就能去思考任何可能。” ## Notable quotes > [29:48](https://www.youtube.com/watch?v=8pTEmbeENF4&t=1788s) The most dangerous thought that you can have as a creative person is to think that you know what you're doing. — Bret Victor > [00:20](https://www.youtube.com/watch?v=8pTEmbeENF4&t=20s) Technology changes quickly, people's minds change slowly. — Bret Victor > [09:41](https://www.youtube.com/watch?v=8pTEmbeENF4&t=581s) What's important is expressed your program as what you want, not a set of instructions on how to do it. — Bret Victor ## Mentioned Bret Victor, IBM, IBM 650, Gordon Moore, Intel, Stan Poley, SOAP, John von Neumann, John Backus, FORTRAN, Ivan Sutherland, Sketchpad, Carl Hewitt, PLANNER, Alain Colmerauer, Prolog, SNOBOL, Ken Thompson, Bell Labs, Unix, J.C.R. Licklider, ARPA, ARPANET, Doug Engelbart, SRI, NLS, RAND Corporation, GRAIL, Xerox PARC, Smalltalk, PLATO, Gilles Kahn, Tony Hoare, CSP, Robin Milner, Erlang ## Video description "The most dangerous thought you can have as a creative person is to think you know what you're doing." Presented at Dropbox's DBX conference on July 9, 2013. All of the slides are available at: http://worrydream.com/dbx/ For his recent DBX Conference talk, Victor took attendees back to the year 1973, donning the uniform of an IBM systems engineer of the times, delivering his presentation on an overhead projector. The '60s and early '70s were a fertile time for CS ideas, reminds Victor, but even more importantly, it was a time of unfettered thinking, unconstrained by programming dogma, authority, and tradition. 'The most dangerous thought that you can have as a creative person is to think that you know what you're doing,' explains Victor. 'Because once you think you know what you're doing you stop looking around for other ways of doing things and you stop being able to see other ways of doing things. You become blind.' He concludes, 'I think you have to say: "We don't know what programming is. We don't know what computing is. We don't even know what a computer is." And once you truly understand that, and once you truly believe that, then you're free, and you can think anything.'" [Source](https://www.youtube.com/watch?v=8pTEmbeENF4)

Source quotes

[29:48] Bret Victor: The most dangerous thought that you can have as a creative person is to think that you know what you're doing. [0:20] Bret Victor: Technology changes quickly, people's minds change slowly. [9:41] Bret Victor: What's important is expressed your program as what you want, not a set of instructions on how to do it.

Source quotes

[29:38] Bret Victor: The most dangerous thought that you can have as a creative person is to think that you know what you're doing. [25:28] Bret Victor: I think in forty years if we're still using threads and locks we should like pack up and go home, cuz we've clearly failed as an engineering field. [0:20] Bret Victor: Technology changes quickly, people's minds change slowly. [9:41] Bret Victor: What's important is expressing your program as what you want, not a set of instructions on how to do it. [29:38] Bret Victor: We don't know what programming is. We don't know what computing is. We don't even know what a computer is. And once you truly understand that, and once you truly believe that, then you're free, and you can think anything.

Original transcript

[0:20] Good afternoon [0:22] I'm really excited to be a i'm talking to so many programmers of automatic [0:26] computing machines [0:27] as you know computing is becoming more and more important our society this now [0:32] literally [0:32] thousands of computers around the world and they're being used from everything [0:37] from [0:38] business and accounting to scientific experiments and [0:42] who knows what they're going to be used for. so more more computers [0:45] and coming down in price coming down size a computer used to be the size of this [0:50] entire hall and now they've shrunk to really [0:52] tiny proportions so [0:55] is this this time a really rapid change in the field of computing [0:59] so I thought to be interested have a look ahead a little bit to the future [1:02] programming [1:03] and think about given what we know now [1:08] what programming might be like say forty years from now [1:12] so what I'm going to talk about today there's been some really interesting research [1:16] has been done just the last [1:18] ten years or so and i think is have implications for [1:21] what program he might be like in the future so [1:26] there is 4 big ideas kind of 4 big topics that I want to talk about [1:30] um that come out of her recent research but [1:33] before I get to those for big ideas I want to talk about the nature of [1:38] adopting ideas in the first place [1:39] so basically what we've we notice is that [1:43] technology just quickly people's minds change slowly [1:46] so it easier to adopt new technologies [1:50] it can be hard to adopt new ways of thinking so [1:54] technology wise Gordon Moore [1:58] He has this company called Intel and he observed about ten years ago that [2:04] computing capacity was a increasing exponentially over time because [2:07] extrapolate is out to about now and [2:11] he's been right on target and who knows how long will keep going but [2:15] it seem pretty reasonable so the lesson to be drawn from this is that [2:19] we can kinda take this for granted because if we just wait our computer get faster to get [2:23] more capable [2:24] we can just wait and that's just gonna happen what won't just happen if we wait [2:28] is peoplee changing people adopting new ideas [2:32] so as an example that I'm sure you all remember this guy [2:35] the old IBM 650 Steve [2:40] you know IBM's first kind of general purpose mass-produce computer [2:43] a lot of us cut our teeth programming on this guy and [2:46] and in the beginning right we all programmed in [2:50] absolute binary when we code it was literally writing numeric codes [2:54] for each instruction and that those what we did that was programming [2:57] and then afters some years that [3:01] Stan Poley came along and he invented this thing they called an assembler [3:06] so that was the symbolic optimizing [3:09] assembly program this language where you could write [3:13] in words if you wanted the computer to add something about the word add [3:17] you could use symbolic variable names instead of hard coding memory addresses [3:21] it is this much more powerful way of thinking about programming [3:25] you were much more productive made much fewer errors [3:28] assembly was shown to these guys the guys [3:31] coding in a binary and they just weren't interested at all [3:34] they just didn't get it they didn't see any value [3:38] in doing this stuff so there can be a lot of resistance to new ways of working [3:44] that require you to have unlearn what you've already learned and think [3:48] in new ways and there can even be like outright hostility [3:51] so John von Neumann the great scientist [3:54] who invented the von neumann computer architecture that we use and so many other [3:58] things [3:58] he said I don't see why anybody woud need anything [4:02] other than machine code and he [4:05] one-time so he had a bunch of students and students were all kinda coding along [4:09] and [4:09] in binary and one time one of his students took a little time out to write [4:13] out his own little assembler so he could write in assembly [4:15] and by von neumann was furious at him furious that he would waste precious machine time [4:20] doing the assembly that was clerical work that was [4:23] supposed to be for people right and so [4:27] we saw the same story happened just a little bit later [4:31] when john backus and friends came up with us idea they called fortran [4:35] this is so call high-level language where you could write out your formulas [4:39] as if your writing mathmatical notation you could write out loops [4:42] and this was shown to the assembly programmers and once again they just [4:46] they weren't interested [4:47] they don't see any value in that they just didn't get it so [4:50] um I want you to keep this in mind [4:54] as I talk about the four big ideas that I'm going to talk about today that [4:58] it's easy to think that technology technology is always getting better [5:01] because Moore's law because computers are getting [5:03] always more capable but ideas that require people to [5:07] unlearn what they've learned and think in new ways there's often [5:10] enormous amount of resistance people over here [5:14] they think they know what they're doing they think they know a programming is [5:16] this programming [5:17] that's not programming and so there's going to be a lot of resistance to adopting new ideas [5:26] the four ideas I want talk about today this is all coming out a very recent [5:29] research [5:31] the first one is today we writer programs [5:34] in code. We write a basic list of instructions for the computer to do [5:38] there's been some really interesting research on direct manipulation of data [5:42] where you directly manipulate the data structures and that implicitly builds up [5:46] a program [5:47] for the computer to follow second I want to talk about today we [5:50] write procedures basically here's a procedure for computer to do [5:54] um interesting research on go on programming using goals [5:58] telling the computer what you want not how to do it the and the computer itself figures ou how to [6:02] do it [6:04] number three today we program using lists lines of text [6:07] in text files um people are doing something really remarkable just like [6:12] in the last five or ten years they're hooking video displays [6:15] up to computers and when you do that everything changes like start thinking [6:19] about [6:20] spatial representations of information and the fourth thing [6:23] is we program in a sequential programming model is basically [6:27] here's a bunch of instructions computer does them one after the other but [6:30] hardware changing soon we're goona see massively parallel hardware and [6:34] we're gonna need a sound parallel program model to program [6:38] on a hard work so [6:42] the first thing i wanna talk about that direct manipulation of data [6:45] and I'm gonna show this project that [6:49] Ivan Sutherland did PhD thesis about ten years ago [6:53] the system called sketchpad and sketch pad was a system [6:56] that allowed you to draw pictures on a video display [7:00] so he took his light pen and put on the screen and so here try that draw the [7:04] line [7:05] drew that line drew more lines drew this little top [7:08] he's trying to draw a rivet here [7:11] and he's drawing it really sloppily it's kinda tilted off to the side is kinda misshapen [7:16] so what he does is [7:20] he then he holds down a switch and indicates [7:23] a couple these lines to the computer system indicating that he wants these [7:27] lines to be mutually perpendicular [7:29] so the system runs an iterative solver kinda wheels the lines around [7:33] and figures out how to turn them into [7:37] something that mutually perpendicular how to turn them into a rectangle [7:41] so basically he [7:45] the system doesn't know anything about rectangles he was able to get it to [7:48] draw a rectangle [7:49] by directly applying the set of constraints [7:52] and what makes this a program as opposed to just a picture [7:56] is that these constraints are dynamically maintained so [7:59] he's got his rivet that he drew and he resized this corner of it and kinda resize some [8:04] other things [8:05] the solver kicks back in turns back into a perfect rectangle [8:08] so essentially he's created a program [8:12] that draws a rectangle but he didn't do it by writing code he did by [8:15] directly manipulating the data and directly applying [8:18] a set of constraints to them and so this kind of a simple example [8:22] and then he went off and did fancier things like here's a bridge simulation [8:28] so it actually simulates the physics for bridge he drew this by hand [8:32] the um the numbers here represent the tension in those [8:35] particular spans of the bridge and [8:38] he can vary the weight that the load that's hanging off of the bridge and it kinda [8:42] deforms [8:43] and um the system the sketchpad system doesn't know anything about bridges [8:48] he creates this bridge simulation program by directly drawing and [8:52] by directly applying asserts that a um [8:55] very general constraints so [8:59] I definitely see this as something that's going to be really important [9:02] in um 30 40 years from now I can imagine programming [9:06] by directly manipulating data structures and let that build up [9:09] the the code but especially for things that are visual [9:13] or physical like this so if say in a few decades we get some sort of document [9:18] format on some sort of [9:20] web of computers I guess um [9:23] I'm sure we're gonna be creating all those documents by direct manipulation there won't be any [9:27] markup languages or stylesheet languages right? that would [9:31] that would make no sense Ivan Sutherland showed us how to do it [9:34] back your 1962 so it's all gonna be direct manipulation [9:38] in the future and it's going to be fantastic [9:41] so the second thing I want to talk about is [9:45] programming using goals [9:48] so we saw a little bit of this um [9:51] with sketch pads constraint system so [9:55] Ivan Sutherland wanted to draw a rectangle he didn't write a [9:58] procedure to like draw each side of the rectangle he [10:01] apply to set of constraints and the system itself kinda figured out [10:06] how to draw that rectangle so he kinda said what he wanted [10:09] I want things to be mutually perpendicular he didn't say how to do it [10:13] the solver figured out how to do it so another great example of that [10:17] just came up a few years ago Carl Hewitt is doing this system called planner [10:21] which is really great it actually goes in both directions so it can reason [10:25] forward procedurally [10:27] it can reason backwards from goals so if you tell planner that [10:30] apple red then if you get an apple knows ahah [10:34] it's red but you can also say I want something red [10:38] and I'll say oh lets try an apple so you can express your program in terms of [10:42] the goals the results that you want from the program [10:45] but you can also provide procedural strategies for meeting certain [10:48] types of subgoals really um really interesting way of thinking a [10:52] programming [10:53] and this led to another system a few years later called prologue [10:58] which just kept the backwards part of planner so in prologue you can express your program [11:02] as goals [11:03] and the system itself uses a search or whatever to try to [11:06] figure out how to meet those goals so this is leading to a genre of programming [11:10] that's called logic programming [11:11] but that's that's not really important part here [11:15] what's important is expressed your program as what you want [11:18] to not a setup instructions on how to do it [11:21] letting the computer itself figure out how to do it another example of [11:25] that same sorta concept is pattern matching [11:29] so I'm sure you remember on you all remember snobol [11:33] it's the a text manipulation language give a bunch of text you want to shoot it [11:36] throw a snow ball [11:38] script or program at it and [11:41] um snobol had a built in features for pattern matching [11:44] so you can express some patterns that you want to a match against a text [11:48] a little bit later Ken Thompson so is over at bell labs working on this system they [11:52] call Unix [11:53] um I know right? Unix [11:57] but um he adopted ?'s notion of regular expressions [12:00] to do pattern matching on text so [12:04] when you have pattern matching if you want to digest a big bunch of text [12:08] you don't go and write a parser that kinda goes procedurally through it [12:11] you provide a pattern this kind of template this is the sort of thing i'm looking for. [12:15] and the system itself figures out how to match the text [12:19] against that pattern so [12:23] all these examples a sketch pads constraints [12:27] planner prologue pattern matching again they're all [12:30] all examples of giving the computer a high-level goals saying [12:33] here the sort of thing i'm looking for letting the computer itself figure out how to do [12:37] it [12:38] and we're seeing a little bit of that sorta thing in optimizing compilers but I think [12:41] it's gonna be really prevalent [12:43] and few decades from now and the reason that this is going to be [12:47] so important this goal directed stuff has to do [12:50] with this this idea that [12:54] look litres kicking around so [12:57] as you all know Licklider is heading up up ARPA the government funding agency [13:01] and he's been pushing this idea of [13:04] a global network of computers just taking all the computers in the world hooking them up [13:08] to each other [13:09] and he calls it the intergalactic computer network [13:14] because he knows the engineers always deliver the minimum so if he asks for a [13:17] network that spans the galaxy he's hopes to get one that at least spans the world [13:21] and people are calling this [13:24] the ARPANET now its no turning into some sort of [13:27] inter net now it's kinda cute idea [13:31] might work and [13:34] when you have this kind of global network of computers [13:37] you run into what Licklider calls the communicating with aliens problem [13:42] so he put it here the promise is essentially the one discussed by science fiction writers [13:46] how do you get communication started among totally uncorrelated [13:49] sapient beings I'll explain what he means by that [13:57] so say you've got this network of computers [14:00] and you've got some program out here that was written by somebody at some [14:03] time in some language its speaks some protocol [14:06] you've got another program over here written by somebody else some other time [14:09] speaks a totally different language written totally different language [14:13] these two programs know nothing about each other but at some point [14:18] this program will figure out that there's a service needs from that [14:21] program [14:23] that they have to talk to each other so you've got these two programs [14:26] don't know anything about each other written totally different times and [14:29] now they need to be able to communicate so how are they gonna do that [14:34] well only one real answer that scales [14:38] that's actually going to work which is they have to figure out how to talk to [14:42] each other [14:43] right they need to negotiate with each other that the probe each other [14:46] if the dynamically figure out a common language [14:50] so they can exchange information and fulfill the goals [14:54] that the human programmer gave to them so that's why this goal directed stuff is [14:58] gonna be so important when we have this internet [15:00] is because you can't write a procedure it's because we won't know [15:04] the procedures for talking to these remote programs [15:07] these programs themselves have to figure out the features for talking to each [15:10] other [15:11] and fulfill higher level goals so this [15:14] if we have this worldwide network I think that [15:17] this is the only model that's gonna scale what won't work [15:21] would be a total disaster is [15:24] I'm gonna make up a term here API this notion that [15:28] you have a human programmer that writes against [15:31] a fixed interface that's exposed by some remote program [15:35] first of all this requires the programs already know about each other [15:39] right and when your writings this program [15:43] in this one's language now they're tied together so the first program can go out [15:47] and hunt and find other programs that [15:49] implement the same service they're tied together if this one's language changes [15:53] it breaks this one there it's really brittle [15:57] it doesn't scale and worst of all you have [16:00] it is basically the machine code problem you have a human [16:04] doing low-level details that should be taken care of by the machine [16:08] so I'm pretty confident this never happened we're not gonna have [16:12] API's in the future where we are going to have [16:15] are programs that know how to figure out how to talk to each other [16:20] and that's going to require programming goals [16:29] the third big idea that I wanna talk about is [16:32] spatial representation of information so today [16:36] our programs are basically lots of lines of text a big file full of lines of text [16:40] and that makes sense when [16:43] your program is a on a stack a punch cards or it's a paper tape or a magnetic [16:48] tape this [16:48] very linear media makes sense to have your programs have linear form [16:53] if you're using a teletype then a teletype is made for spitting out lines of text [16:57] that's what it does [16:58] so of course your programs are going to be in lines of text but [17:01] as I mentioned people are doing something really wild and crazy right [17:04] now which is hooking video displays [17:07] up computers and when you have a video display hooked up to a computer you can start [17:10] thinking of [17:11] your computers this kind of very dynamic sheet of paper where you can represent things [17:15] spatially so [17:21] Doug Engelbart over SRI [17:25] has this system that he calls on online system that he calls NLS [17:29] He gave a big demo five years ago you might have seen it and [17:33] there's a lot of really remarkable things about this system one the most remarkable [17:36] is this notion of displaying information over a screen over a video [17:40] screen [17:41] so he has this device this um [17:45] this device called a mouse where you kinda rolled around the table it's hard to [17:49] explain [17:50] but you can use this to point to different parts of the screen [17:53] and indicate that you want more information about something that you're pointing to [17:58] and it also has this notion of different views of information [18:02] so you can see here we have some data that's in a list [18:06] and then you can flip that over and look at that same data as this kind of 2 dimensional diagram [18:11] so really start to think about how can we represent information [18:14] dynamic information spatially [18:18] another great system kind of about about the same time coming out of the RAND Corporation [18:23] called GRAIL and this is a system for [18:27] programming using flow charts on a video display [18:30] and the input device here is a a stylus on a tablet [18:34] and that you can drop draw these flow charts [18:38] and let me show you how that works [18:42] the programmer is drawing this box and just totally free handing it [18:46] and he draws a box and the system recognizes that it's a box and turns it [18:50] into a flow chart box [18:52] so assigns semantic meaning to [18:55] these drawings that he's doing he wants to give it a label [18:58] so he just start writing letters [19:01] the system recognizes his handwriting [19:04] 1968 system recognizes handwriting [19:08] turns it into text here he connects up this [19:12] box to that one with the line and so on so it's all very direct [19:17] manipulation [19:18] if he wants to get rid this line he just kinda scruples it out and it goes away [19:21] ands so really thinking about were programming means when you have a video [19:25] display [19:26] when you can express things in two dimensions [19:29] but when i'm talking about spatial representation of information I'm not just [19:32] talking about things like flow charts [19:33] so um xerox has [19:37] a little research center in Palo Alto with some kids over there working on [19:40] something that they call Smalltalk [19:42] and in Smalltalk the source code is [19:46] expressed in text but um [19:49] there's no like big long text file with whole bunch of [19:52] code in it it's organized in a spatial fashion so here's what they call a [19:56] browser [19:57] so in this list here here's all the collection of classes [20:01] here's all the class is that collection here's all protocols in that class here's all the [20:04] method in that protocol [20:06] and here's the source code for that particular method [20:09] so the method definitions are text but they're not [20:13] a one huge line of text they're organized spatially [20:17] so you can get around the system very quickly and see what's going on [20:20] so between Engelbart's NLS Grail [20:24] small talk is very different ways of representing information spatially so [20:29] I'm totally confident than 40 years we won't be writing code in text files [20:34] right we've been shown the way [20:37] and as a side note [20:44] all these system I just showed you and Engelbart's system [20:47] Grail Smalltalk on this thing that's going on at University of Illinois call [20:51] Plato [20:51] also really interesting system these are part of this new wave [20:55] of interactive computing where you sit at the computer and you're [21:00] actually interacting with the computer in real time [21:03] and these guys know that they're trying to prove out this new concept [21:07] and so they've designed the system from the very bottom to have an immediate [21:10] response [21:12] the user interface is always immediately responsive [21:15] you interact with anything you immediately get a response [21:18] so it's kinda of simulating a physical object [21:21] and so if interactive computing takes off and [21:25] I think it will then i think is pretty obvious that [21:29] in forty years our User Interfaces if you interact with them [21:32] you'll never experience any kind of delay or lag [21:36] right because these guys proved [21:39] how important is to have immediate responsive UI and [21:42] they were doing this in the in the sixties so as our computers get a million [21:46] times faster [21:47] obviously there's no reason to have any kind of delay or lag in the operating system [21:50] in the in the user interface so that's gonna be really exciting [21:57] the forth thing that I want to talk about [22:00] is um parallel programming [22:04] so today our programs are basically [22:07] a sequence of instructions computer do this then do that and do that and do [22:11] that [22:11] and one of the reasons that we program in this sequential model [22:17] has to do with the hardware [22:21] so we're we've been using this computer architecture [22:24] called the von neumann computer architecture where you have [22:28] a processor and that's hooked up to a big memory fetching words from memory [22:32] and um so the sequential program model makes sense when you just have one [22:37] processor the processor can only do one thing at a time [22:39] you give us list the things for the processor to do and it just kinda does [22:42] each one of those um one characteristic [22:47] of the von neumann architecture though is that [22:51] most to this memory is idle most of the time [22:55] you've got this little processor over here and it's kind of processing as fast as it [22:58] can [22:58] but only one word memory is ever being accessed [23:01] the rest the memories just kind of sitting there waiting and [23:05] that works when when your processor is made out of [23:09] vacuum tubes or relays and it's kinda of big an expensive and your memory is made [23:14] out of [23:14] core or a rotating drum is also big and expensive [23:18] different then you can kind of get away with that but [23:22] we're starting to see an incredible invention [23:25] coming into the field of computing right now which is I think gonna change [23:29] everything [23:30] and that is the integrated circuit semiconductor integrated circuit [23:35] so this is a thingthat the a company called Intel made [23:39] it's called the microprocessor and it's an entire processor [23:44] on a single piece of silicon so the entire processor is just made out of transistors [23:48] and [23:49] a transistors just a little picture you etch into silicon [23:52] and the entire circuit just like one big complicated picture that you etch into [23:55] silicon [23:56] so our processors are just made out of transistors and silicon [24:00] our memories as well are also going to be made of [24:04] transistors on silicon it's all the same stuff [24:08] so when you look at the von neumann architecture from that perspective [24:11] you've got these transistors over here that are working really hard to process [24:14] things [24:15] it got this huge array of transistors over here most of which are just [24:19] kinda sitting waiting they're not processing [24:23] not doing anything and so [24:26] if you want to put those transistors to work [24:30] you actually want to maximize um the amount of processing that you can get out [24:34] the piece of silicon [24:37] you need to start looking at things that are more like this [24:43] right so what computers want to be on silicon [24:47] is they want to be lots of little computers like a huge array of tiny [24:50] little computers with their own [24:52] processor their own little state doing their own thing communicating with each other [24:55] that's how you maximize the amount of compute per area of silicon [25:00] and it scales so when the transistor gets smaller when the silicon die gets [25:04] bigger [25:05] you have all this extra space you just filled up with more processors [25:09] right done real easy [25:13] this is the kind of architecture we're going to be programming on the in the [25:16] future [25:17] unless you know unless Intel somehow get a stranglehold microprocessor [25:22] market and pushes this architecture forward [25:24] thirty years but that's not gonna happen we're going to programming on these [25:26] things [25:28] and when you have this hardware you have to start thinking about [25:31] how do how do we program on that what's our programming model for this sort of [25:34] hardware [25:36] and the way that we do programming today [25:40] is with threads and locks right you have a few [25:43] sequential thread for control and you can pretend that they're going in parallel by [25:47] multiplex the microprocessor and [25:49] they try to lock each other out from shared resources [25:52] and like this is never gonna work right [25:56] this does not scale you can't reason about hundreds of threads all banging on the same [25:59] shared memory at the same time [26:01] threads and locks they're a dead end [26:05] right so I think in forty years if we're still using threads and locks we should [26:09] like pack up and go home cuz we've [26:10] clearly failed as an engineering field [26:14] if it's not threads and locks then what's going to work [26:17] and Carl Hewitt and that's the same Carl Hewitt that did planner [26:21] came up with this idea that he called the actor model [26:25] so the actor model is a model computation that's [26:28] inspired by physics so in physics you've got all these particles and [26:32] all the particles are just independently doing their own thing and [26:35] they have their own little states and they interact with the ones that are around [26:39] them [26:40] and Carl Hewitt was thinking of computer processes in the same way [26:43] got a whole bunch processes and they're all kind of asynchronously doing their own little thing have their [26:47] own state [26:48] and they're sending messages to each other so [26:51] really interesting really new and exciting way of thinking about programming [26:55] so a lot is kinda heating up right now Gilles Khan and France has [26:59] some ideas I think Tony Hoare getting into it with something he's [27:02] gonna be calling Communicating Sequential Processes [27:05] and maybe even Robin Milner's going to join the party so [27:09] really exciting stuff happening here now for this talk [27:13] the details of these particular models don't really matter [27:16] um I do think it would be kinda cool if the actor models was like [27:21] picked up by the Swedish phone company or something that would be kind of [27:24] weird but [27:28] but what matters here is we are gonna have massively parallel hardware [27:32] we need a sound parallel programming model [27:35] that fits the hardware and something like this [27:38] is is going to be what we're gonna be using [27:46] so those are the four things I want to talk about [27:50] direct manipulation of data [27:54] something like sketch pad where you're drawing pictures dynamically adding [27:58] contraints to those pictures [28:00] directly manipulating the data structures instead of writing [28:02] instructions for the program [28:04] programming using goals and constraints things like sketch pads constraints [28:09] planner and prologue um [28:12] regular expressions other types of pattern matching where you're telling the computer [28:16] what you want to do and the computer itself has solvers the figure out how to do that [28:21] spatial representations of information we're not gonna have text files anymore [28:26] we're going to be representing information spatially cuz we have video displays [28:29] and fundamentally parallel ways of thinking [28:33] parallel hardware parallel program models um no more threads and locks no more [28:37] sequential thinking [28:39] so those are the four things I wanted to talk about [28:44] and you know I've tried to make some predictions about the future and you [28:48] can't really [28:48] predict the future right so these are some good ideas [28:53] I don't know what's gonna happen to them ideas kinda split and merge in [28:56] go in and out of fashion so you know anything could happen [29:01] but I do think that it would be kind of a shame if in [29:05] forty years we're still coding in procedures [29:08] in text files in a sequential programming model [29:13] I think that would suggest we didn't learn anything from this really [29:17] fertile period in computer science [29:19] so that would kinda be a tragedy but [29:24] even more of a tragedy than these ideas not being used [29:27] would be if these ideas were forgotten [29:30] if if anybody were ever to be shown this stuff and actually be surprised by it [29:34] right but even that's not the biggest tragedy [29:38] that's not the real tragedy the real tragedy would be if people forgot that [29:43] you could have new ideas about programming models [29:45] in the first place so [29:48] let me explain what I mean by that the [29:52] here's what I think the worst case scenario would be [29:55] is if the next generation programmers grows up [29:59] never being exposed to these ideas the next generation [30:02] the next generation programmers grows up only being shown one way of thinking [30:06] about programming [30:07] so they work on that way programming they the flesh out all the [30:10] details [30:11] they you know kinda solve that particular model programming [30:15] they figured it all out and then they teach that [30:18] to the next generation so that second generation then grows up thinking [30:23] Oh it's all been figured out we know what programming is [30:26] we know what we're doing they grow up with dogma [30:31] once you grow up with dogma it's really hard [30:35] to break out of it [30:38] do you know the reason why all these ideas and so many other good ideas came [30:42] about in this particular time period [30:44] the sixties early seventies why did it all happen [30:48] it's because technology [30:52] it was late enough that technology had kinda got to the point where you [30:55] actually could do things with computers [30:57] but it's still early enough that nobody knew what programming was [31:03] nobody knew programming was supposed to be and they knew they didn't know so [31:07] they just like tried everything [31:08] their minds were totally free and they just like said maybe we could program [31:11] like this maybe we could program like that [31:13] they just you know tried anything they could think of [31:18] so [31:22] the most dangerous thought [31:25] that you can have as a creative person is to think that you know what you're [31:29] doing [31:31] because once you think you know what you're doing [31:34] you stop looking around for other ways of doing things and you stop being able to see [31:38] other ways of doing things you become blind you become like [31:42] like these guys over here coding along in binary [31:46] someone shows them assembly language someone shows them fortran [31:50] this they can't even see it it just goes right over their head [31:53] because they know what they're doing they know what programming is this is [31:56] programming [31:57] that's not programming and so they totally miss out on this much more [32:00] powerful way of thinking [32:04] so the message of this talk [32:07] you know it's not really it's not really the stuff right [32:10] the message on his talk is if you don't want to be [32:14] this guy if you want to be open and receptive [32:18] to new ways of thinking to invent new ways of thinking [32:22] I think the first step is you have to say to yourself [32:25] I don't know what I'm doing we as a field [32:28] don't know what we're doing I think you have to say [32:31] we don't know what programming is we don't know what computing is we don't even know [32:35] what a computer is [32:37] and once you truly understand that and once you truly believe that [32:43] then you're free and you can think anything [32:47] thank you