I have been working on some educational software–nothing revolutionary,, and nothing ready to show just yet. It is interesting to see how different the software world is from when I left it in 1999. I’ll put the rest of this post, which is mostly off-topic, below the fold.Back then, it was Web 1.0. A typical web application consisted of a sequence of screens. The web server gave the user one screen, then the user typed in some input, clicked a submit button, got another screen, etc. You still see this process if you make an airline reservation, and you get one screen to select your destination, then another screen to choose the outbound flight, then another screen to select the return flight, and so on. The standard approach was CGI, and those of us who were really cutting-edge used Java Servlets.

It seems that I slept through Web 2.0. Here, a typical web application is on one screen, with a lot of back-and-forth between the user and server going on behind the scenes. Think of something like an autocomplete feature when you do a search. The standard approach is often called AJAX.

What I think of as Web 3.0 is app-like web applications. Here, as a user you are not necessarily going to be connected to the Internet while you run the application. Instead, you might download it and run the thing off line. That is what you do with many apps. (Obviously, there are apps that by their nature require constant communication. Those would be exceptions to what I term as Web 3.0. To some people, they might *be* Web 3.0.)

Compared to when I went to sleep, HTML (the language that codes web pages) is much more flexible and has more elements that can be programmed. In the old days, document.write() was about the only tool you had for changing the content of a page. Now, every element of what is now called the DOM (document object model) can be manipulated. It is that flexibility that makes it possible to design an application where all the action takes place on a single screen, rather than a sequence of screens.

Another new development that intrigues me about HTML these days is SVG, or scalable vector graphics. It strikes me as a tool for allowing users to manipulate graphical elements. My guess is that if it had been around 15 years ago, people would use it a lot more. But so many people have learned to use proprietary tools that do not rely on the SVG standard (the tools may support SVG, but that is not the same thing) that SVG may never come to dominate in terms of mindshare. One frustration I have about SVG is that all of the Android versions up through g, which includes the Kindle Fire and most of the Droid phones in the market, do not have a browser that supports SVG.

Compared to when I went to sleep, there are a zillion open-source “tools” that are designed to solve some problem in application development. I find these a mixed bag. Sometimes they solve the easy parts of the problem, and you are still stuck with the hard parts. Sometimes they create more problems than they solve. I have a bias against these tools, a bias which borders on the irrational (besides me, who else in the 21st century does not like jQuery?). The other thing that these tools create is bitter arguments among developers over what the “technology stack” ought to or ought not to include.

Compared to when I went to sleep, you don’t need to have a book sitting next to you while you try and figure out code. You just ask Professor Google how to, say, enable the user to delete a row in a table that you have created, and you can almost always find the answer.

Perhaps the biggest surprise is that JavaScript is alive and well as a language. One reason for that is that JavaScript has always had useful functions for manipulating HTML. But there may be deeper reasons. See Douglas Crockford. (Much of this talk goes over my head, but I get something out of it.)

For me, the biggest adjustment has been to thinking in JavaScript terms, or more properly, in JSON terms. Before I went to sleep, we thought that it was a bug to have an array without a predefined dimension or an object without a predefined scheme. Now, those look like features. Similarly, before I went to sleep, one thought in terms of relational databases. Now, I just think in terms of chains of these undimensioned arrays and unpredefined objects.

There are those who argue that XML is better in theory than JSON. And then there are those of us who do not follow the theory and see JSON as a grab-and-go solution.

Another adjustment that I have to make is that connection speeds are a lot higher than before I went to sleep, so that web sites think nothing of putting a megabyte worth of stuff on a page. So when I think of jQuery as bloated, I am being somewhat stupid, because it is only about 100K. The amount of CPU effort and bandwidth that you can afford to waste nowadays is just phenomenal. The more you make a fetish out of writing code that works efficiently the sooner Moore’s Law is going to turn you into a dinosaur.