About This Site
ExperienceIn terms of jobs held, I can describe my experience pretty quickly.
In terms of experience with computers, though, the story is a bit longer.
In sixth grade, I took a computer class somewhere or other that got me as far as writing little adventure games in BASIC. The story really begins a year or two later, though, when my folks got us an Apple II+. I started out programming in BASIC again, but soon moved on to 6502 assembly language—or, rather, machine language, since I didn't have an assembler. That kept me busy all through junior high and high school. I made lots of useless little things, possibly the best of which was a binary file that was set up to load on top of the DOS routine responsible for loading binary files, so that it took control of its own loading.
Then, when I was in high school, my folks got us another computer, an original Macintosh, and soon I was making more useless little things. The best one, this time, was a game I wrote early in college. It was a two-player game, played on two computers connected via null modem … and one of the computers was the Apple II! To handle the graphics, which included a hex grid, I made up a simple Logo-like language and wrote interpreters for it on both computers.
I didn't do much else with computers during school. In my senior year of college, just for fun, I jumped in and took an upper-level course on the theory of programming languages, and learned Scheme, among other things; then during grad school I gradually became familiar with Unix and C; but that's about it.
So, that's where things stood when I started work at Princeton Consultants, mainly as a developer, and mainly under Windows.
The first project I worked on involved writing specialized client software to connect to an existing database server. Or, rather, rewriting—a first version had been written and tested, but had been found to require some substantial design changes. So, the first thing I had to do was read and understand a large body of existing code. That was when I came to understand the value of a good comment! After that, with some guidance, I worked out a nice object-oriented architecture in C++, then three of us sat down and wrote the whole thing in about three months.
The second project I worked on was much larger, and occupied several developers for almost two years. It involved writing two tiers of a three-tier system, the third tier being a database. I was responsible for most of the architecture (in C++) of the middle tier, which ended up being essentially an object database, with transactions and everything.
Early on in that project, when we needed to document the proposed design so that the client could review it, we set up a system that allowed us to collect information in a database and generate beautiful cross-referenced documentation from it. That was when I began to understand that almost any kind of information can be put into a database.
After that, I worked on a few other projects, but the only thing that's noteworthy is that I got a bit more involved in planning and management. And then I left.
Since then, I've been self-employed, and have worked on a few more projects.
One early project involved writing both a client and a server, with the server coordinating the operation of several other components. The code was all written in Java, and turned out to be gratifyingly reliable.
The longest and most interesting project so far also involved a client-server system. The servers were web servers where customers could place orders. I wrote a client in Java that talked to the web servers over HTTP, downloaded the orders, and then under user control through a UI sent the orders to various local devices for fulfillment. That client was deployed at roughly two thousand locations.