The Kids Are Alright

George Moromisato
6 min readNov 24, 2021
A screenful of code.

Every 20 years or so, the kids look at software development and decide, “That’s too complicated; let’s reinvent the world.”

In the 80s, I was one of those kids. All the important software was running on mainframes and minicomputers, but we wrote our programs on PCs because they were so much simpler. I remember the sighs of the old guard: “Why are you wasting time with those toys? Someday you’re going to realize that you need protected-mode programs and preemptive multitasking and then you’ll come crawling back to the mainframe.”

They were right. We did need all those things. But instead of going back to the mainframe we re-built all those features in the PC ecosystem. Into our ecosystem.

In the mid-90s, I was working on Lotus Notes when people started talking about “The Web”. My verdict: it’s just a toy. Sure the web is cool and all, but it’s nothing compared to Notes. Someday they’ll realize that they need rich-text editing, encrypted communications, and distributed storage. And then they’ll come back to Notes. A few year later I started seeing URLs in TV commercials and I knew that the computing world had been reinvented. Again.

PCs beat the mainframe because they were personal. Instead of waiting for your sysop to install some piece of software, you could just install it yourself. You could even write it yourself with any of a number of high-quality development environments: Turbo Pascal, Visual Basic, Lotus Notes, etc. The constrained capabilities of the PC were a strength because they made software development easy. Back then, a pair of programmers could create Lotus 1–2–3 (in assembly language!) and spawn a multi-billion-dollar company.

The web ruled because PCs were too personal. Sharing files with PCs was a nightmare. Before email there was sneaker-net (ask your grandma about that) and even though email allowed you to send files anywhere in the world, now you had a huge version control problem. Historian will never know how many hours were wasted by people editing the wrong copy of a file.

Sure, PC groupware products like Lotus Notes made sharing easy, but only if you connected to a Notes server. And even then, you could only connect to your company’s server. In contrast, the web is truly worldwide.

Moreover, creating web-apps was so easy that you could do it yourself. Type a few dozen lines of code and you could make a chat program. Zuckerberg could create Facebook (in PHP!) and spawn a multi-billion-dollar company.

By this time (2004 or so) the PC ecosystem was well-established. Windows was ubiquitous and its set of APIs was incredibly comprehensive. Plus there were existing libraries for everything you might want to do. And yet Zuckerberg chose PHP to write his app. Why? Why not Windows-based PC software? Because it would have been too hard to build Facebook on Windows.

I remember learning how to program Windows out of Charles Petzold’s book. In just a couple of hundred lines of code you could create a fully functional app. The Windows API was tiny: you could learn 80% of it in a week. In a month you were an expert. But by the time Zuckerberg entered Harvard, the Windows API had exploded into layer upon layer of functionality. Professional developers used higher-level frameworks and libraries which introduced their own complexity and learning curve.

Zuckerberg never bothered to learn to program Windows; PHP and HTML were a thousand times easier for his needs. Once again, the kids had reinvented the world.

But of course, what started clean and simple 20 years ago is now a mass of layers, frameworks, and services. We want our web apps to be responsive, scalable, evolvable, and connected to a dozen existing services. The old days of hacking together something in PHP are long gone. Now you need to master a stack of browser frameworks to write the front-end, build-out a distributed, containerized backend, connect to your favorite flavor of SQL or No-SQL, and string it all together with continuous integration, analytics, and release automation.

How are kids today going to learn all that? They’re not. They’re going to reinvent the world. Again.

As before, the new world is going to start simple, almost toy-like. But it will allow programmers to create what they want without having to learn the complexities of the old world. Roblox is the best example right now, but their platform is too constrained to be a general-purpose development environment. If I were to create such a world today, I would want the following characteristics:

Edit-run symmetry: Today there’s a sharp line between development and production, to the point that each happens on a different environment. But why should we put up with that extra friction? You should be able to seamlessly transition from editing a program to running it. The environment on which programs run should natively support development (rather than development environments running programs in some constrained mode).

Unified programming model: Software engineering is all about abstractions. HTML is an abstraction designed for page layout. SQL is an abstraction designed for database querying. But abstractions turn into silos. Different toolchains, different skillsets, different engineers. What if we could unify these separate abstractions into a single programming model? What if your programming language had page layout, database querying, machine-learning, etc., as built-in concepts?

Grid Abstraction Layer: DOS and Windows succeeded because they provided a Hardware Abstraction Layer. You could program without worrying about the specific brand of computer, monitor, or printer. But today a program runs in the cloud, on top of an arbitrary number of physical computers, and interacts with a wide degree of client hardware, from traditional PCs to phones to IoT devices. What we need is a “Grid Abstraction Layer”, to take advantage of all those devices, without having to worry about the specific physical details.

Program composition: Excel is good at creating graphs; Word does page layout. But what if you want a graph inside a document? Should we add graphing features to Word? No, we just cut-and-paste from Excel to Word. The ability for programs to connect and communicate with each other is the key to creating a vibrant ecosystem. Yet today’s apps have not advanced beyond cut-and-paste, and in some cases they’ve regressed: you can’t copy from Google Spreadsheets and paste into Dropbox. Wouldn’t it be awesome if the users could connect programs together? What if you could write a simple text processing program and connect it to Twitter to filter your notifications?

Forty years ago, when we were programming PCs, we weren’t trying to reinvent the world. We were just trying to do something cool and the easiest development environment was the PC. I believe the software world is ready for another reinvention. We need to create an environment that is as fluid and easy as the early days of the PC and the early days of the web.

For the last year I’ve been working on a project called GridWhale. I’ve started to build the simple development environment that I’ve described. I have no illusions about the likelihood of success (it’s small!) but the more I work on it, the more I excited I feel about creating something new. I feel like a kid again.

In the next installment I’ll demo GridWhale and give you all a chance to try it out.

About: I’m George Moromisato, a software engineer building GridWhale, a new operating environment. Every couple of weeks I’ll post an update about its development. Interested in helping out? Write to me: contact@kronosaur.com.

--

--

George Moromisato

Programmer, game designer, astrophotographer. Working on GridWhale, Transcendence, and Anacreon at Kronosaur Productions.