Hi
Frequent checkers of this "abandoned" blog, you may have been wondering what is happening, and when this page would be updated. Also you may be wondering about what has happened to GC Forth.
The GC Forth project is long terminated. At the point where I stopped work on it, I had made it into something that was pretty neat, but ultimately the technical problems became so tiresome (ever try debugging undocumented hardware?) and the added burden of low-level compiler-writing, in ASSEMBLY language, coupled with my VERY limited capacity for systems design from a computer science standpoint, and the sudden realization that distribution of this system was becoming so scarce as to be practically impossible, made this project ultimately a dead end.
No harm done. It was, admittedly, a wild ride.
Now, coming back to this sphere after having learned, seen, and done a lot that is NOT the kind of programming GCForth was about, as well as having used most of my spare time to pursue art, music, and research, and having done a fair share of self-searching in terms of "what is programming?" I would like to say a few things about Forth.
Users of Forth are a shrinking minority, as the plethora of object-oriented languages offshoot into ever more high-level languages, such as the languages of Java, Python, ActionScript, and so on, and I have noticed the tendency, in fact the downright general sense of determination, to concentrate on the goals of making programming languages be ever-more "user-friendly" and ever-more "secure". There is no inherent problem with this in a general sense. Plenty of amazing software has been written using the modern paradigm.
Yet something about Forth continues to attract me. Something in its simplicity, its directness. Something about the way it seems to obliterate so many problems that I have come to recognize again from a different angle. I have done research on this unusual and engimatic language, from happily scanning the Wikipedia entry to navigating the piles of FIG Forth pages, old Forth Dimensions magazine articles, Chuck Moore interviews, and, Heaven forbid, actual source code. But I have been learning other languages too, partially, perhaps subconsciously, in an attempt to answer this question that begs answering simply because I don't feel that anyone has answered it with the proper completeness: why Forth?
I will start to tackle this question by illustrating what I feel to be the general feeling among the most modern programming languages, which seems to be that the development of software must be a collective effort, and that the ultimate goal of this "project", so to speak, is that of, for lack of a better term, a kind of "optimal virtualization".
It all started with some rather dumb hardware. Take for instance the first "personal computers". You have a 1 dimensional array of bytes, a means of reading from and writing to it, and some numbered wires that control input and output circuitry, which in turn can save a range of these bytes for later recall, make a light blink or detect the motion of a stylus. That setup worked beautifully - on the small scale foundation on which it was built. Furthermore, there were fewer computers, and they were more than a little expensive. $3000 non-inflated, was the common price in the early 80's for, say, an integrated computer setup for printing invoices - and nothing else. At the time, the achievement of an addressable memory of 16K from a technical standpoint was enough of a breakthrough, that programmers, their garage-office employers, and their nascent industry were in more than a hurry to program it. Thus began what I feel to be the road to virtualization, which is what the human race has been on since.
Now, it seems that the goal of the collective "free software" development movement, on the mainstream platform, which is the consumer desktop computer, is to create a virtual world that is liberated from the computer in its real state. The demand for ever increasing performance has even caused this inclination to leech into the design of the hardware itself; on top of a flat addressable memory, the good folks at Intel implemented virtual address space support on the chip in order to make programs like Windows possible.
It is impossible to measure, but no-one would argue that there are at least a million programs in existence on the planet, and no doubt terabytes upon terabytes of code. Then, multiply by 10 for all the English-language articles that have been written to explain and document and manage all of this code. One who says that the computer industry has "bloomed" wouldn't be wrong.
So what do we have? A lot of code, even more documentation, and billions and billions of IC's, all built on top of, or, maybe more accurately, around, that tiny of seed of a principle, the microprocessor-ram-i/o combination.
It is a lot of code, yet we are basically all using the same exact hardware, and more or less, doing the same stuff. Most of the code is there simply to make the identical software work on all of it. Stripped of all contingencies, it is all there to translate keywords into hardware addresses.
We have programming languages now, that turn a computer into something completely different. One is, supposedly, not supposed to know or care about the physical attributes of his actual computer, but rather, to treat memory as "virtually" unlimited, to use "application programmer's interfaces", rather than actual hardware, because, in theory, that hardware is undefined. And more alarmingly, what we are building, because of its nature as software, is something that is completely untethered to the world of real objects, or the realm of physics and electro-magnetism, or the world from which the quaint abstractions of files, icons, and menus were originally, and imaginatively, derived.
It is so out-of-touch, in fact, that we now have some rather strange abstractions, such as "scroll bars", "hyperlinks", and "XML Document Object Model"s. Should we consider it a blessing that our ability to abstract upon abstraction ad nauseum has enabled us to concoct such bizarre and increasingly "virtual" tools? A question with an implication, but still a worthwhile question.
What has it led to? Where is it heading? Apache servers, OLPC, the Unity Game Engine, .NET, AJAX, Flex, XBOX Live Arcade, Facebook, Google Reader. All of these, wonderful, beautifully complex, and remarkable achievements of the collective human mind.
There is a school of thought that looks critically at the state of modern programming languages and considers with mind-blowing attention to detail and precision of logic, alternatives for the present and the future, with a certain sympathy for user-friendliness, programmer effectiveness, and "thinking out of the box".
I suppose that is the root of my concern, that last statement. To be "out of the box". The phrase is heard so often that it really has no meaning anymore; we do not "know" what computers are for anymore. And this, perhaps, is because we now consider them to be simply for anything we choose them to be. Regardless of their actually appropriateness, practicality, or effect on "real" culture, the one that involves children, food, wildlife, microbes, natural disasters, and urban development. Ever more fetishism for making life "digital" and more "technological", and I am indeed talking about the one represented by the luxury class in Manhattan, makes it harder and harder to see life as anything more than a game. Computers are luxury. They represent the very essence of convenience; the power to get things done without doing any work at all. No wonder we are so obsessed with making them do more and more for us!
I think there is a growing belief regarding computers that they can be the stage for the great "model" of our human world, in which we can rearrange it with great ease and with such power that it is actually beginning to affect and seep into our daily lives. I am and may remain cynical to this idea. It may be against common thought but I will always believe that it is the physical world from which actual problems and their solutions must originate, not an abstract dream world with its own rules rooted in an offshoot from the idea of recording information. The idea of the Net being the means by which we change the world is an echo of how people felt in the 1950's; that they could do the same thing through chemistry. Where it has actually gotten us is up to debate.
However, the Net has given us a lot to talk about and has turned our attention back towards reality. It has turned mine, at least. Now that computers have reached a wider mainstream (I.E. so-called "non-techies") through the Internet, it seems that all of the code is justified, that it had a point and still does.
Which is perhaps why I have no problem with it today.
However, I have officially recognized that today I am no longer a programmer. I do not feel that today's programming in any way resembles the programming that I fell in love with. These were the languages that I built my programming foundation on: LogoWriter and QuickBasic. Like Forth, dreadfully under-powered languages, but simple. They did not need to get complicated, to "grow", to do more; they just needed to be customized. (Only, they just couldn't.) I find that my instinct tells me that the same is true of a number of pieces of software, where whenever I see that the programmers are again stuffing into a program more features that I have already seen elsewhere in many other programs, I immediately think, "hey! They're just creating bloatware again!!!" My customary reaction these days is to just shrug and say, "no one has figured it [programming] out yet." Because that's the truth - no one has figured it all out yet. And until someone does, we will not understand programming, because its design and application is inseparably rooted in the real world. All ideas come from the real world of real things; including the tools that we made out of the materials of the earth, things that were honed and evolved over centuries of human experience, of disaster, discovery, and unrivaled ingenuity.
Forth originated at a point in time when someone sat with a small computer and an idea to accomplish, and asked "what can I do with this thing?" While at the same time, somewhere else, some people were standing around the same type of computer, with a lot of problems on their minds, and asked each other "what can we MAKE this thing do?" The mainstream computer has, as a consequence, not progressed, from an engineering standpoint, simply by the nature of it as an industry - someone needed to make money by making this pathetic instrument do as much as possible, be as multi-purpose as possible; because someone realized that, unlike the staple gun or the totem pole, it could.
But only in a virtual reality. I am not really writing anything, no pen or typewriter is making a mark on any piece of paper, no fingers will ever flip through any pages containing these words, I am merely recording my thoughts so that I can share them with others. It's a more direct route.
It is easy to appreciate the system that we have in place for what it gives us on the surface. It is even easier to get excited about the possibilities without realizing how naive a "user" actually is about the details that hide underneath the surface of their favorite applications.
All of this shows that, increasingly, programming needs to become less about computers than it is about the world, which is what computers were invented to make better anyway.
In that sense, because computers are real objects in the world, I do not agree with OOP principles because the virtual world it professes does not actually exist, and is therefore dangerous. I like classic Forth because it is unpretentious. It provides a close, simple map to the real computer, or the operating system. For my own personal quirks and tastes, and based on my early "training", probably already crystalized forever, Forth's flavor and lack of complicated rules seem to suit me.
Even though I love Forth, I don't have any immediate plans to program in it, or in any other language, because Forth is unsupported, and I don't like other languages, and the ones I used to like are underpowered or ran on machines that for all practical purposes, don't exist anymore. And I am tired of "trying out" languages. For the time being, I'm going to steer clear from coding and scripting.
But I will definitely continue thinking about programming, about Forth and other programming languages, and about applications and related subjects. Maybe one day I will come up with a well-formed idea that I'll have the determination to code myself. That would be cool.
