## Tuesday, February 24, 2009 ... //

Almost everyone in the civilized societies - including my broader family - is using computers and the Internet these days.

However, one can see that the people who were introduced to computers as "users" have a very different type of thinking about the nature and purpose of computer programs than those of us who have looked at computers from different perspectives than just "users".

The history

But I would like to write a more general text about these matters.

Let me begin in the 1980s. As kids, we would attend "SMT" - the station of young technologists. Around 1982, our computer club owned an Ohio Scientific computer with a 6502 microprocessor: you might find this brand surprising in the communist Czechoslovakia but it was there anyway - even though one of our popular instructors, nicknamed the Bear, was the son of the Western Bohemian regional (or Pilsner municipal?) communist boss. ;-)

So we learned some machine code (or assembler - we had to say "language of symbolic addresses") and BASIC.

Later, this got supplemented by Z80 and 8080 (for Sinclair ZX-Spectrum and Czechoslovak computers like IQ-151 and PMD-85) machine codes, and 6502/6510 returned under Commodore 64 that I owned since I was 11 or so. We used to say that the capitalist computers were 15-20 years ahead of the socialist ones but today, I think that the figure was exaggerated: the lag was between 5 and 10 years.

Anyway, I guess that I was not the only high-school freshman among the future members of the TRF community whose English vocabulary consisted of the following words, among a few others:
IF, THEN, ELSE, FOR, TO, NEXT, INPUT, PRINT, LET, PEEK, POKE, GOTO, GOSUB, and RETURN.
BASIC was our third language, after Czech and Russian.

Native speakers might find the list above unimpressive but how many of them understand the word GOSUB? For example, if you GOSUB the subway, you must get off - RETURN to the city - on the same station where you entered the tube. :-)

Although we've made thousands of programs in BASIC, everyone knew that BASIC was not the ultimate programming language. We were soon introduced to modular programming - and PASCAL as the representative of choice. The automatic sorting of the lines of the code made the awkward line IDs unnecessary. Editing and other things have changed.

As a high school student, I didn't touch a single computer at school. That's because my (rather young, attractive, female) instructor in the computer course quickly figured out that it could have been dangerous to have a student who knows more about the subject than she did.

So I was only reintroduced to computers (except for my C64) in the college (Charles University) in 1992 which was really my first active encounter with the IBM PC compatible computers. Modular programming was supplemented by event-oriented programming paradigm and other things, DOS was being gradually replaced by Windows.

Both modular programming and event-oriented programming are philosophical paradigms of a similar type. But you can see that the event-oriented programming is more "real-world-oriented" or "applied" while modular programming is more focusing on the "internal theoretical beauty", if you allow me to use a physics analogy. (I still liked to use non-modular commands, including GOTO, in special cases, e.g. when I had to create an efficient method of deep recursion when drawing the Penrose tilings.)

The classmates majoring in computer science had to learn C++, Java, and many other things. (I was hoping to largely avoid Unix/Linux (except as the OS of web servers storing my web files) because it looked too geeky and obsolete to me - but my four years at Rutgers, 1998-2001, forced me to work with Linux which was the primary OS over there.)

The Internet began to expand in Czechoslovakia of the early 1990s, too. The Faculty of Mathematics and Physics was among the first places in Czechoslovakia to connect its computer networks to the Internet and we also brought the Internet lines to our student hostels - including the drilling and wiring (!).

If you remember those old times around 1992, the Internet meant e-mail, FTP, Telnet, and a few other low-level services. Gopher was the text-based predecessor of the HTTP World Wide Web.

So if I remember well, we were receiving e.g. the arxiv.org (xxx.lanl.gov) listings by e-mail every day. But we could also find something on the Gopher (?) and obtain the papers either by FTP or by sending a request to an automated e-mail service that sent the papers back to us.

The "social communities" of the early 1990s were things like BBS - Bulletin Board Services - and you needed Telnet to connect to them. My favorite BBS was "Liane BBS", bbs.vslib.cz.

Needless to say, all these things were gradually superseded by the World Wide Web which is superior, more compatible with graphics (and multimedia or their future counterparts), and much more flexible, allowing systematic improvements.

What were the available browsers? Well, in 1994, you would use Mosaic that would be renamed as Netscape Navigator. I am somewhat baffled by the timing because I had surely had many web pages back in 1994 although the newer stamp on a surviving copy of my oldest web page says March 3rd, 1995:
Lumo's animated cave
I can no longer edit or delete this page :-). Note that at the beginning of 1995, the commercial sector was very rare on the web and a new domain of Coca Cola or a similar company was a reason to celebrate. ;-) But how many web pages from March 1995 can you find on the Internet? The date looks really old because Netscape Navigator 1.0 was released in December 1994.

Needless to say, some (or many) people used to criticize me for having roughly 5 animated GIFs on that page. That was way too much for them, much like 640 kB used to be enough for everyone according to Bill Gates. Try to realize how many things are moving on typical web pages today ;-) and try to predict how foolish, if not idiotic, the present critics of the TRF design will look in 2020.

By the way, if you click the "reference frame" title or the colorful "feed" icons, you can get to a minimalistic version of this blog.

The present era: former programmers vs users

I have spent quite some time with this history but my original goal was to write about the present and the future. It seems to me that ex-programmers think that a program is primarily a gadget that does something according to some input, and what it does may be described as its output. For example,
an internet browser is a gadget that shows a web page according to the parameter, the URL.
Clearly, modern browsers are doing many other things these days and the original purpose of the program has been diluted. Even the very fact that the internet browser is a program that must be run became obscure.

You can see how diluted its purpose has become if you observe how the new Internet users treat URLs. The whole address bar is something that they wouldn't pay any attention to. And if they are told an URL, like earth.google.com, they always tend to use a search engine to "find it".

It usually works but yes, it looks stupid to open an URL in this way, doesn't it? ;-)

Of course, the "true" Internet users have never written an actual command in anything that resembles a shell (DOS, UNIX, C64, or anything else): the graphics interface is completely essential for them. And do you know what? I agree with them in 99% of cases. It is just better to control things via a user-friendly interface instead of some low-level commands.

Even when it comes to programming techniques, I have changed my opinion about these matters radically. In the 1980s, I would think that the optimal arrangement would be for the external devices - including the display, printer, and others - to be completely stupid gadgets that blindly listen to the computer's minimalistic commands.

In this setup, all hard reasoning would be done by the microprocessor. I used to be irritated that my Toshiba printer did so many useless moves while printing graphics and I wanted my Commodore 64 to tell "her" how to do it right.

However, after those two decades, I find it obvious that the world has become so complicated that you really need the gadgets - and programming languages - to know a lot of functions that you don't have to write yourself. It's good that cell phones, digital cameras, and printers are somewhat intelligent. It's good to leave many calculations (including the Lorentz transformations) to the graphics card instead of the microprocessor. And it's good to be allowed to use functions and procedures in a programming language that are far from the minimal ones.

User-friendly interfaces and pre-packaged functions and procedures simply make the work more efficient. Efficiency does matter. It partially determines which philosophies are good ones and which are bad ones - because computers are not just some abstract entities that should look for the "ideal simplicity and beauty": they are primarily machines that should help us in the real world as much as they can. Many Linux, TeX, and related fundamentalists misunderstand this point.

Another thing that the opposite category of "true" users misunderstand about the Internet is that it has no "center". In the Czech context, a typical "true" user usually thinks that a particular page, usually seznam.cz, is the beginning of the Internet. It's a great portal by Ivo Lukačovič, a Czech dot-com multi-millionaire whom I slightly know from the "Liane BBS" mentioned previously.

Nevertheless, the Internet has no center - and it contains many more pages than those that are listed on the seznam.cz main page. :-) For many "true" users, this observation is as difficult to grasp as relativity or the absence of the center of the Universe. ;-)

There is one more myth that many "true" users I have met share: they think it is possible to classify (and learn) all possible operations that a computer (or an Internet service) may do, much like it is possible to see all web pages on the seznam.cz main page (and a few web pages linked on it). Their thinking is visually oriented so they always assume that every icon on the desktop (or a web page!) corresponds to one procedure that a computer can perform - and each of them is kind of "equally important".
It is often hard for them to understand that the presence of shortcuts on the desktop is an irrelevant decoration that they can change - and that many functions, potentially useful ones, are hidden deeply in the menus (or are accessible by special commands or keystrokes).

The "true" users also like to ask the question whether the left-clicking at a certain object does exactly the same thing as the right-clicking and choosing a command, and so on. A computer can do basically infinitely many things with the data and one cannot get anywhere unless she asks the question what she actually wants the computer to do instead of what it can do. ;-)

In some sense, their approach is understandable for the "true" users who have been educated by cell phones (or washing machines or anything else of this type). Every function of a cell phone must be visible somewhere in the menus and these functions are fully classifiable. :-)

Well, things are somewhat harder if you want to understand "all functions that a computer can do". The classification problem is only simple if we are satisfied with classifying the functions of a simple enough program only.

The future

I am sure that the generic users and their thinking and habits will be increasingly more important for the philosophy of gadgets and programs, and it is essentially a good development because everyone is thinking as a user (and demanding the services as a user) most of the time.

Cell phones will be getting ever more clever, their interactions with the "ordinary" computers will be increasingly essential, and computers may start to be connected to other devices (including white electronics in the kitchen). Most concepts that programmers have known for years will be increasingly hidden under the surface.

For example, when computers were born, the "physical location" of a file would refer to the actual polar coordinates on the physical disk. ;-) This was the era when the people who could actually use the machines had some idea what the machines were doing at every moment of time.

Later, the "physical location" would be interpreted as the "path", something like "C:\Users\Lumo\Documents\TRF\main.html". However, even this physical location is going to disappear from the discourse. The difference between real files, shortcuts, internet shortcuts, and automatically generated files (both on the local computers as well as servers on the Internet) will continue to evaporate.

In some cases, people will get into some trouble and they will dream about the old-fashioned ability to know the physical location of some information. But in most cases, they will be happier that they no longer have to deal with these "low-level" aspects of the computer activity.

There are many other aspects of programming that would deserve a more detailed discussion but the random rants above have been enough.