Twenty years of computing
Le mardi 30 août 2011 à 22:47 - Lien permanent
The story begins in May 1991. At that time I had already used computers, namely a network of French-made Thomson MO5 6809-based microcomputers hooked up to a PC server, and a bunch of PC clones at the neighboring high school where my father was a teacher. I had shown “polite interest” in the thing, doing a bit of word processing, playing a bit with Logo. Logo was great, but we used it merely like a game. Yet, I had begun to conjecture the existence of “software allowing one to create software”. In short, I thought that computers were interesting devices, that maybe there was more to be found, but I was still not thrilled.
In May 1991 my last year in primary school was wearing out. I had borrowed a book about science and technology at my school's library. Among all the fascinating topics it introduced, I was stricken by the chapter about computers. It was 4 pages long, but it introduced computer programming. The core concepts were roughly explained, and there were one or two examples of programs written in Microsoft BASIC for the Thomson line of computers. This was really basic, but in two hours' time of reading this chapter, I felt I understood the whole point about programming and computers in general. I mean, I really got it. Immediately. I felt a whole new world had opened in front of me, and I felt my whole perspective on life had changed. And that day assuredly did change my life.
From that day on I was literally obsessed with one thing: writing computer programs. When my class was allowed to use the MO5 computers for playing games at the end of that school year, I used the opportunity to reset the machine in BASIC mode and give way to my creativity. My first programs were modest: writing my name on screen, performing binary-ternary-decimal conversions and drawing shapes on screen. Yet I felt utmost excited.
During the 1991 summer holidays, I spent my time on two things. First I wrote programs. I had no computer at home, but it did not matter: I wrote them on paper. Second I felt the urge of owning my own computer, so I spent a lot of time browsing through mail order catalogs, starting to get familiar with microprocessors (at that time the 68k family was still well represented, with several offers from Apple, Comodore-Amiga and Atari), clock speed, floppies and hard drives.
Thanks to the generosity of a grandmother, I was able to place an order in Fall 1991, and one night in November, a shiny Commodore PC 20-III, a 8088-powered PC clone with a 20MB hard disk and a VGA graphics card was delivered to my parents' door. It came with Microsoft Works, but I did not look at it first. It came with GeoWorks Ensemble but I did not look either. I just typed
GWBASIC at the MS-DOS 4 prompt, and I coded for several hours in a row.
Over the next few months I coded, and coded again. I produced graphical “demos”, a timetable program, and I started to work on educational programs as a “subcontractor” for my teacher of a father. I quickly got a good grasp of MS-DOS and GW-BASIC, and I hit the limitations of this mostly-unstructured programming language. But surprisingly enough, it's not really the lack of “modern” features such as clean control structures and proper functions that made me crave for another language. More prosaically, I wanted to call DOS and BIOS interrupts (namely INT 33h, used to control the mouse), and this was cumbersome to do with GWBASIC (one had to write a machine-language snippet to do this, assemble it, or have DEBUG assemble it, and then you could include the hex dump of this into the GWBASIC program).
Therefore for my 12th birthday, I received a QuickBASIC 4.5 IDE. I quickly learnt the new control structures. Incidentally, I remember writing to the organizers of a coding contest, not a long time after taking up QuickBASIC: “Oh, my program does not used advanced features such as procedures and functions, I'm just a 12-year-old kid”, and just after thinking “why the heck am I writing this?”, “why in the first place don't I use advanced features?” Two hours later my program incorporated functions and procedures.
In 1993 I started to look into Windows, which I could not use on my 8088-based PC. Therefore I took advantage of a quite inexpensive deal at a local store to get a new PC, a Bull/Zenith Data Systems 386SX that came with Windows 3.1. At that time I had gotten quite technical: I remember asking at my local computer store a book “that described DOS and BIOS interrupts”. The surprised look of the storekeeper was memorable: “what do you call interrupts?”, “do you want a list of error messages?”. That year I got Visual Basic 3 as a birthday present. Visual Basic was great, but I felt somehow “trapped” into its event-driven model. Plus, I wanted to learn other languages.
First I did a little of assembly using the A86 package that was fine, but I was hindered by two things. First my knowledge of processor hardware was quite limited, so I had difficulties with addressing modes, and second I did not have a good documentation for A86. So I never undertook really interesting projects in assembly. Incidentally, the way I got the A86 distribution is to be noted: I used a Minitel, a dial-up computer terminal that was distributed to landline owners by the then state-run France Telecom. I used to hook up the Minitel to my computer, so I could download software on dedicated sites. By the way I got familiar with the Videotex standard used for Minitel display, and I did a lot of experiments that included displaying my own pictures on the Minitel screen, or moving the Minitel cursor with my PC mouse.
My 1993 letter to Santa included Turbo Pascal 7 and Michael Tischer's fantastic book, PC system programming (in French, La Bible du PC). This book described very thouroughly the hardware and software intrinsics of a PC. I rapidly got onto Pascal programming, so that around April 1994, I thought “Now that I have known Pascal for a long time, let's learn C”. So I ordered a copy of Turbo C 3 for DOS. In the following months and years, I would practice and practice again coding in these two languages.
I started to explore a new area starting at Christmas 1994: I got a Texas Instruments TI-82 programmable and graphing calculator. I had a lot of fun programming on calculators; being able to carry a programmable device along with me was an additional motivation. After the TI-82, I got a 68000-powered TI-92 with symbolic calculation in 1997. I made a lot of crazy things with both machines. For instance, the TI-82 did not have a “string” datatype. But I needed to store strings, and even to create records. So I designed a way to store strings and other random data into matrices. The system was very slow, but I was able to improve it a lot using the relative frequencies of letters in the alphabet. Another time, I hacked on the TI-82 “Picture” datatype, that by default enabled one to store and display screenshots only. I was able to display arbitrary pictures on the tiny calculator screen, including a photo of myself. In high school, I remember the amazement of my Latin teacher when one of my classmates showed him my TI-92 scansion program that was able to correctly determine the rythm of arbitrary Latin verses following the “dactylic hexameter” pattern (1998).
Back in the PC field, I spent some time hacking with an HP-GL plotter (1995) and trying to build a Morse decoder (1995). In itself, the decoder worked well, but I did not know enough electronics and signal processing to build a decent analog to digital converter. My makeshift converter did not have any filtering at all, it captured sound through a loudspeaker-microphone chain, hooked up to an op-amp that used a homemade optocoupler to get into the joystick port of my PC. Morse decoding worked fine provided there was no static and you were very quiet next to the radio transceiver, which was rarely the case!
In 1995 I bought a Pentium-powered PC, and used Windows 95. However, I still spent a lot of time programming on MS-DOS. In my high-school years I focused on more long-term projects and in 1997 I released advanced versions of my educational programs, Dactylo and Resistor, respectively programmed in Pascal (with a little Object Pascal and Assembly) and C (with a little basic C++).
A few days after I finished high-school, I dived into Linux (Summer 1998). I had been exposed to a UNIX book years before, so I was very excited to “have UNIX at home”. From then on I spent a lot of time hacking on Linux.
In Fall 1998 I enroled in scientific “preparatory classes” and at the beginning of 1999 I had my first courses in computer science! We studied Caml, a functional language of the ML family, and it was a new horizon for me. Theoretical foundations were also totally new, so it was really fun.
In 1999 I learnt HTML, and the first version of my website was online. In 2000 I got fed up with Microsoft Office after the program crushed my work, so I learnt LaTeX. In Fall 2000 I entered Supélec, where we had C classes. A C veteran already, this gave me extra time to get into PHP, Perl, SQL and Java. By that time, Linux had become my primary operating system. In 2000-2001 I got involved with Supélec students' residential network, Supélec Rézo, where I became for one year the primary Linux administrator and architect.