logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·31.10.26
← Back to news

IDE Nostalgia (2022)

Original article
davidsmaynard.com|32 points|0 comments|by dmaynard|Aug 14, 2026

IDE Nostalgia (2022)

By David Maynard
Originally published January 6, 2022 | Updated August 12, 2026


A Half-Century of Code

I have spent over 50 years immersed in the world of programming. My journey has spanned a vast technological evolution, including:

  • Mainframes and 8-bit CPUs
  • Early home computers and massive servers
  • Modern mobile devices and high-end development laptops
  • Professional experience with 30+\text{30+}30+ different programming languages

Despite the advancements of the last five decades, I recall using a code editor in 1972 that felt more fluid and efficient than almost anything available today. This was the NLS (oNline System), developed within Doug Engelbart's Augmentation Research Center at the Stanford Research Institute (SRI) in Menlo Park, California.

The Hardware Constraints

It seems impossible by modern standards, but NLS operated on a PDP-10 with the following specifications: CPU Speed=1 MHz\text{CPU Speed} = 1 \text{ MHz}CPU Speed=1 MHz Total Memory (Real + Virtual)=1 MB\text{Total Memory (Real + Virtual)} = 1 \text{ MB}Total Memory (Real + Virtual)=1 MB

How could such primitive ancient hardware outperform modern IDEs? The answer lies in the visionary UI design crafted by Doug Engelbart and his team.

Engelbart keyset: One handed chorded keyboard Photograph © Mark Richards courtesy of Computer History Museum


The Synergy of Mouse and Keyset

The secret to NLS's speed was the simultaneous use of a mouse and a keyset. While the team patented the mouse, they discovered the keyset was actually based on a telegraph input device from the 1860s.

What is a Keyset?

The keyset is a specialized five-key interface. Instead of traditional typing, the user "plays" keys or "chords" (pressing multiple keys at once) to trigger commands in a modal interface. For example:

  • c →\rightarrow→ Copy
  • d →\rightarrow→ Delete
  • i →\rightarrow→ Insert

Crucial Distinction: The keyset was not a replacement for the standard keyboard. Continuous prose is best handled by touch-typing with both hands. However, by using the keyset with one hand and the mouse with the other, users developed muscle memory for editing and navigation, allowing them to keep their eyes fixed on the data.

The NLS Workflow Logic

The system operated on a strict Verb →\rightarrow→ Noun architecture.

Core Efficiency Attributes:

  • Consistent Command Structure: Verbs (copy, jump, transpose) were entered via keyset; Nouns (the target text) were selected via mouse.
  • Dynamic Selection Counts:
    • Copy required two clicks (source →\rightarrow→ destination).
    • Delete/Jump required only one click.
  • Noun Optimization:
    • Branch/Link →\rightarrow→ 1 click.
    • Text/Group →\rightarrow→ 2 clicks.
  • Hierarchical Organization: A strictly tiered file system.
  • Viewspecs: On-the-fly commands to filter, fold, or expand views.

The Experience of "Flow"

As a system programmer, I used NLS to edit its own source code—a practice known as bootstrapping.

Keyset Keyboard and mouse for NLS in 1968 Image courtesy of SRI International © SRI International

When the PDP-10 load average was low (typically late at night, load<2\text{load} < 2load<2), navigating the information space felt supernatural.

"It was as if the coefficient of sliding friction between the text and the display was zero."

Example: Adding a New Command

To implement a new feature, I would follow this rapid sequence:

  1. Locate: Find a similar existing command.
  2. Filter: Hold a mouse button and chord the x viewspec to see a top-level outline of all procedures.
  3. Duplicate: Chord cb (Copy Branch).
    • Prompt: "Copy Branch from:" →\rightarrow→ Click source.
    • Prompt: "To:" →\rightarrow→ Click destination.
    • Prompt: "OK?" →\rightarrow→ Click to confirm.
  4. Rename: Chord rw (Replace Word), click the procedure name, and type the new name.

This entire process took less than two seconds. Because my eyes never left the code, I remained in a state of deep cognitive flow.


Technical Deep Dive: Viewspecs

Viewspecs (View Specifications) were single-character parameters that altered the display of text and hierarchy without changing the actual file content.

The Shift State Logic

The system used mouse buttons as "shift keys" to expand the keyset's capabilities:

Mouse Buttons PressedCaseResulting Character Set
000Case 0Lowercase letters (Standard Viewspecs)
010Case 1Uppercase letters
100Case 2Numbers & Special Characters
110Case 3Advanced Viewspecs

Viewspec Lookup Table

The following table maps the 5-key chords (where X is pressed and 0 is unpressed) to their actions:

5-Key ChordCase 0 (000)Case 1 (010)Case 2 (100)Action / Description
0 0 0 0 XaA!Show one level less
0 0 0 X 0bB"Show one level deeper
0 0 0 X XcC#Show all levels
0 0 X 0 0dD$Show top level only
0 0 X 0 XeE%Current statement level
0 0 X X 0fF&Recreate display
0 0 X X XgG'Branch show only
0 X 0 0 0hH(g off
0 X 0 0 XiI)Show content pass
# Conceptual representation of a Viewspec trigger
def apply_viewspec(chord, mouse_state):
    if mouse_state == "000":
        return lookup_table[chord]["case0"]
    elif mouse_state == "010":
        return lookup_table[chord]["case1"]
    # ... and so on