Daily Archives: December 30, 2008

Thirty years of software development

Thirty years ago, I was a teenager, living near Buenos Aires, Argentina, trying to decide what to do with my life. I knew some things about digital computers (enough to understand binary notation, logic circuits, 4 bits decimal digit codification…) but I did’t know anything about programming software. In those times, only few had access to a computer, usually IBM mainframes. By chance, I began to read about software, and I took a course on programmin. Then, my first program was written, in COBOL, IBM style.

I still remember the paper sheets that were used to write COBOL programs: rows and columns, comments must begin in column 7, upper case letter. Oh! Data division, procedure division, and the intrincacies of Environment division. Punched cards with inextricable Job Control Language commands, an extinguished (I hope) language with origins in ancient Egypt. PERFORM … THRU… OCCURS…. 01, 02, 88 levels, ooopps… Where is all that stuff now? Still running in many financial and banking systems.

But I had no computer to run the programs. I wrote programs, and test them in paper. It was not easy. All this was in late 1978. At the next year, I found a book about IBM 360 assembly language. I began to dream with BALR (Branch And Link Registers) instructions and macro expansions. Yes, I was a truly software geek.

After school, I went to Universidad de Buenos Aires, to learn more about computers and programming. I learnt about digital computers, Algol-W, BCPL, more IBM 3×0 assembly language but more about mathematics, algebra, calculus, and formal thinking. It was a great time, my mind was open. Since then, formal mathematics are with me, every year of my life. I love math more than software. But in those years, I decided to study computer science: that field was having a raise in acceptance in Argentina job market, and I needed the money… oopss…. what a coincidence…. I still need the money… πŸ˜‰

BCPL was interesing: it was a compiled language, running in IBM mainframe but in other machines too. Its compiler was written in BCPL itself: that idea was lighting to my mind. Self-defined language were (and are) great. I met BCPL after reading a reprint of an old Scientific American, about CPL, a more ambitious attempt that never grew up.

Fortran IV was another language used to learn programming at those days. I still remember Hollerith fields, and the lack of recursion. Mc Craken books were classic best sellers. I didn’t touch Watfor or alike:  only Fortran IV.

All these programs I wrote, ran on the university’s mainframe. I wrote the text of programs in paper, someone else punched the cards. I gave the cards to an administrator on wednesday, and THE NEXT week wednesday, I received the results. If I were committed a mistake, I should redo the work, and wait ANOTHER week to see the new results. I could read the punched cards only “reading” the holes. EBCDIC was a friend (ugly, the letters were not in consecutive places).

Ah! Another language: RPG II. What a language! Five kinds of sheets to fill, most of their fields specialized on cut control to produce reports. Well, RPG stands for Report Programming Generator. Only with RPG III it started to have true languages features, but again, I missed that version.

One day, I bought a recently arrived magazine, Dr. Dobb’s. What a revelation! This was my first encounter with C language: you can write in lower case (as in Algol and BCPL, a C predecessor), you can write anywhere (no comments at column 7).  It supported recursion, pointers, dynamic memory allocation, a true revelation to anyone proficient in COBOL. IBM machines had no notion of dynamic memory or a stack. DEC-like machines and processors were the “early adopters” of those ideas. There was a new set of characters, ASCII, with consecutive letters, wow!

But my first true love was Lisp: I worked with a minimal implementation written by Gregory Chaitin (he had visited my university some years before), where each verb was expressed with only one character. Variables had only one character wide name. It had some polish-like notation. Chaitin wrote his interpreter in Fortran, that in those times it lacked recursion. He used internal arrays to simulate recursion. I sat down, and write my own implementation in 8086 assembly language, hours debugging the stuff… Yes, I was brain damaged, I’m still fighting my illness…. πŸ˜‰

I began to access to personal computers. But before PCs, I worked with mini computers, Microdata ones, that ran Pick operating system. Pick OS was written for a virtual microcode, so it could be ported to any hardware that have an implementation of such “virtual machine”. It’s a shame that Dick Pick died in the 90s. His OS had interesting ideas: memory and disk were the same, without difference. You could have a sector/frame in memory or in disk. Your registers of your process were saved in sector N, and other process had its sectors saved in sector M, and so on. A file could start at sector N+3000, or in any other sector. Console verbs were codified in sectors. So, if command X were in sector 4320, you can rewrite that sector to implement a new version of the command. I don’t remember the exact details, but any command corresponded to the name of the file, and its first line had the sector number assigned to run the command. If you copied the file with another name, you had a command alias. Pick OS had a shell language, and an interesting implementation of basic, called Pick Basic. It was the first language that I had available to create recursive programs. So, I wrote my first Lisp interpreter, but with Pick Basic. It was a weird implementation: the language has no notion of pointers, so I implement lists in strings, CAR was a substring operation, it has no circular list. I was so young! πŸ˜‰

Interesting, Pick Systems had a variant of runoff, the first program I used that generates text manual, with font support. I printed that documentation on Printronix printers, that had hammers to plot points on the paper. Ouch.

With those printers, I could control the print to the pixel, so I could write a drawing program: it read a file with object descriptions, calculate the lines, and plot them as 2D/3D on Printronix. What a way of having fun… πŸ˜‰

There were lot of personal computer branches: Ohio Scientific, Cromemco, Ontel… I remember the Ontel: it used big removable disks, half meter wide. Some day, I brough one Ontel disk to a restaurant, and they denied me the entrance: they thought I had a bomb.

The file system in Ontel were weird: no FAT (File Allocation Table). Each sector has a pointer to the next sector in the file. I remember one day: my boss and me went to a customer office, on a weekend. We must work creating full days a demo for monday. Then, my boss made a mistake, editing the sectors: all file links were lost. We spent the morning manually relinking the most important files, with the only guidance of sector content. It was like resolving a more-than-thousand-pieces puzzle.

Ontel was programmed in OPL: Ontel Programming Language, a kind of assembly, only one instruction per line. But it has a decent screen editor: the first time I sat in front of an Ontel, I stayed 24 hours (truly) only playing with it (all night/day programming, and listening Queen, a new band from England): after punched card, and a full week cycle to compile/test, an screen editor and a command line compiler were a shock to me.

Ohio Scientific had a gorgeus memory: 64K (I guess my university mainframe had the same capacity). 32K dedicated to the basic interpreter. The other 32k was for my program. Every line had a number. You write the line 10, then the line 20. If you wanted to add more logic between, you must use the intermediate numbers. But contrary to Ontels, Ohios support multiple terminals.

Compiling in those machine made you multitasking: yes, when compiling, you could do other tasks: make coffee, go to bath, chat with young women in customer office… πŸ˜‰ … Compiling could be a lengthly process in some machines.

More machines: I wrote COBOL programs in tape, for NCR small machines. I must split some programs in many pieces, because the compiler exhausted the memory. The screen and report section had their birth in those years.

The first real personal computer was an IBM. It had only one diskette driver. You must boot with one diskette, then retire it, and put another diskette, with edlin editor. GWBasic was the interpreter I used. But before DOS, I programmed with CP/M. Yes, Gary Kildall baby. Oh, my gosh. No directories. Only files. The programs were loaded in fixed memory. No relocation, or relative address. The first 128 bytes were reserved to pointers. The execution started at 100h. 8080 with 4 registers. Then, 8086 bring us AX, AL, AH…. SI, DI stands for source increment, and destination increment… You had to use such registers to copy memory blocks, ough! DS, CS pointed to data and code segments, so now I had relocation, and relative address. A great advance.

I vaguely remember some work with Multiuser CP/M. Yes, had a version then with multi user support. But it was late: DOS had begin to dominate the world.

No database support in DOS. Then, I wrote a full balanced-tree index, to use from GWBasic… yes, again, in assembly language. Now, I just realized I needed medication in those days… ;-). Years later, we’ve got Btrieve, a liberation.

Ah! The Int 21h, a port to heaven in DOS days. To backward compatibility with CP/M programs, the instruction at 0h had a jump instruction to Int 21h. Exe loader fill the exact address to jump.

Did you remember Sidekick? I must rewrite config.sys, and add files=40 to have enough file handles to run Borland’s baby.

And command.com? It resided at upper memory. Whenever it was overwritten, the OS reloaded it. And BIOS? I worked for IBM Argentina, and I had access to one of the ten (yes, 10!) BIOS Reference Manual that were available in my country. It included full source listing, in assembly language. I still remember the clock interrupt, and reading the interrumpt to attend keystrokes.

I used to read Byte, TechJournal, Computer Language magazines, and my favourite, Dr.Dobb’s. I enjoyed reading about Small C and  Cain and Hendrix’ implementation. I was amused on some implementation, as Leo Zorman’s C compilers in CP/M and DOS. I remember the ads from Vrije University, offering a cross compiler (I guess it was Tanenbaum’s work) for u$s 9999.

Thanks to IBM machines, I had my first real encounter with Unix-like system: the venerable Xenix from Microsoft ran on IBM PCs. IBM had another offer: AIX-like on PCs, and a PSystem, Pascal based OS. But DOS took off to gain the market. I made a discovering at IBM local office: they were using a Global Network, to communicate all branches. You could ask something to another product group, for example, in Australia, via an electronic message, and got an answer the same day. It was my first experience with such kind of communication. Now, we have Internet.

I explored the Dialog system: one of my first works involved searching in documents. Dialog was an online system to search papers, books, via keywords. With a team, we wrote a similar system for a government agency of my country, Argentina. It could be considered a Google predecessor…. πŸ˜‰

I learnt Smalltalk, in my free hours; there was no Smalltalk classes in my university. But I only could learn about it, because the hight cost of any machine needed to run the graphics Smalltalk environment uses. The same was with Golden Common Lisp, and some expert systems: too much expensive to me (hardware and software), so I continued to write my own experiments.

I could continue writing commenting those eary years for days. But the point is: it was fun, and it was interesting. Software development is a fascinating topic. Lesson learnt: change is the only constant in this profession and art.

But more important that software and technology, I was lucky: these years, full of activities, gave me the opportunity to meet amazing people. People was the real gain of all these professional years. I want to thanks to everyone, friends, fellow developers, customers, that stand with me, in this long journey. This post is only a fragment of my early memories, only focused in technologies. But the important things were in other place: the people I met. Thanks to all!

Images from
Confessions of an Antediluvian Geek – A personal history of computing
WikiPedia Commons File-Punched_card.jpg
Old Computers Museum
My personal experience with technology, from the early years of computers in the 1970’s to today in 2008

More related links
Historic Documents in Computer Science

Angel “Java” Lopez