Nowadays is not different from the old days. People say the same things about investing in programmer productivity now that they did thirty years ago.

There have been some truly great programming systems, and I've been lucky enough to work with some of them. They didn't grow out of any larger, industry-wide push for better programmer productivity, though, because there's never been any such industry-wide push, and they didn't result in any such push.

Rather, every once in a while, the right circumstances arise for the development of a great programming system--we get someone with a vision, and it's the right kind of vision, and for a while, for one reason and another, they have the support of someone with a sufficient budget, and sufficient influence over how it gets spent, and they're able to find the right people to realize the vision, and we get a great programming system. Then we get a Lisp Machine or a Smalltalk-80 or a SK8, and for a while we get a community of users who learn and appreciate this great programming system and come to rely on it. They may come to feel that certain truths of programming have been revealed, and that subsequent work will have to acknowledge those truths, and so progress has been made, and further progress will follow. I know I felt that way.

Then reality sets in. The great programming environment is a creature of its ecosystem. Technology moves on, and platforms with it. The great programming system depends on its ecosystem, is intertwined with it. Indeed, one of the things that makes it great is its ability to subsume and transform its ecosystem, to master it and render it easy for the programmer to master.

These same characteristics, though, mean that it's hard to move it to new ecosystems. The great programming environment is a large, complex project. It is time-consuming to port, the more so because you have to port enough of the ecosystem with it to make it compelling.

Because it's large and complex, it's hard to communicate what makes it great. Its greatness is not self-evident at a glance; in fact, it's challenging to describe. it's not about this feature or that; it's not about a list of features with checkboxes. It's about how the entire suite of features is designed to work together to empower human behavior.

Describing what makes it great is like trying to convey a sense of a complex object graph to someone. If you describe particular objects, your listener shrugs and says, "how is that different from X?" If you try to succinctly summarize the whole thing and its advantages, the listener says, "you're handwaving." They won't understand until they have learned and understood the entire graph, but whether or not to invest the effort to do that is precisely what they're trying to decide.

So your great environment loses its platform and needs to be on a new one. But the new one is inadequate precisely because it's new, and the environment is large and complex. You need investment of time and effort and therefore of money to bring it up on the new platform. To get that you need buy-in from someone who can budget for it. But the people who can budget for it are generally not programmers, and almost certainly not programmers familiar with your great environment, which means they do not understand why the investment might be worthwhile. They might be willing to listen, or even predisposed to trust you, but you have trouble explaining.

Meanwhile, a simple but just-good-enough compiler and standard library and text editor get built for or ported to the new platform for the cost of a few weekends' hobby time, and because it's there and it works, it gets used. Sure, it's utter crap compared to what you know is possible, but works now, and people can make things with it now, and it's like what they've seen before, and they don't have to take a leap of faith and learn some weird and esoteric complicated system that somebody says is great while waving his hands.

Bear in mind that I actually do think that some of these great old programming systems are genuinely great and worth the time to learn, use, and even port or reimplement. But that doesn't change the dynamics that have kept us abandoning great old systems and starting over with stone knives and bearskins once a generation or so, and nothing I see now leads me to believe things will be any different in the future.

If you really want to work with one of these kinds of systems, your best bet is to work on one of these kinds of systems, as a hobby or a mission or whatever you want to call it.

Anybody want to help me reimplement SK8?