John Norstad's Autobiography

I was born in 1949 in Fort Dodge, Iowa. My family moved to Minneapolis when I was seven. I moved to Chicago in 1972 and I've lived there ever since.

When I was twelve I discovered a talent and passion for mathematics, and for the next fifteen years it was the most important thing in my life. In sixth grade, we had a famous teacher from the university come to lecture about math for a week. I was in a special "high achievers" class, and we often had guest lecturers. He gave us a puzzle whose solution involved base 2 arithmetic. I didn't know anything about number bases, but I figured it out anyway, essentially reinventing base 2 along the way. I also recall being home sick from school once in sixth grade. To keep me amused, my Dad bought me a copy of a book named Fun With Mathematics. I loved that book. These experiences were so much fun, from that point on I knew I had to be a mathematician when I grew up.

My idea of a good time in high school was curling up with Whitehead and Russell's Principia Mathematica on a cold Minnesota winter night. I saved up my allowance, lawn mowing, and baby-sitting money so I could buy the three volumes from Cambridge University Press. They were $15 each, which seems like nothing now, but was a great deal of money for me at the time. I was very much the supernerd. Bertrand Russell was my god. I remember finding a compilation of his writings on my Dad's bookshelf when I was quite a young teenager. One of the pieces included in the book was the chapter "Definition of Number" from Russell's book Introduction to Mathematical Philosophy. He actually defined the number 1! (as the set of all sets containing a single element). I couldn't believe it. I had to learn more, which is what led me to later buy and read the whole book, and then buy and read the Principia. (Actually, I only read about half way through volume 2, where they finally proved that 1+1=2, at which point I figured I already knew everything useful in the book.) Russell's work led me to read Cantor and Frege and other logicians from the early 20th century.

Reading Principia Mathematica taught me a valuable lesson and started a life-long habit. Whenever I get interested in something new, I like to go straight to the source and read the original works by the people who discovered or invented the topic I'm learning. For example, when I went through the obligatory stage of infatuation with Communism while in high school, I read Marx' Das Kapital. That was a difficult book, but very fascinating.

One summer my family went on a car trip out west. For some reason I can't recall, we stopped at a university in Denver. Naturally, I headed straight to the campus bookstore. I bought a copy of Von Neuman and Morgenstern's The Theory of Games and Economic Behavior. That was another difficult book. I understood and enjoyed the math (game theory), but the economics was beyond me. This is interesting because 30 years later I started reading economics as a hobby.

As these examples illustrate, my interests in high school were eclectic. My reading was essentially random. I had no preconcieved course of study. I spent an enormous amount of time in bookstores just browsing and buying whatever looked interesting, in just about any subject. In addition to math and philosophy, I read lots of literature and intellectual history. For the most part, I didn't know or care whether the stuff I was reading was important to anyone else. I still have this "random curiosity". I recommend it to anyone who is seriously interested in how the world works and why it is the way it is. We all spend too much of our time striving to achieve specific goals, and not enough time dreaming, wondering, and wandering down strange unexplored paths.

Meanwhile, in school, they were doing incredibly stupid and boring "new math", stuff I'd already figured out years ago. In middle school, I read my Dad's old high school algebra book and did all the problems just for fun. Now that was a math book. Then I went to the bookstores and bought calculus texts and taught myself that. School was deadly boring, and I considered it an imposition and a dreadful waste of precious time. I was quite the little know-it-all, and my teachers must have found me quite a handful.

Minneapolis was the headquarters of Control Data Corporation, which at that time (the mid 60s) was the best computer company in the world. They made the fastest mainframe computers for scientific computing. In ninth grade, I was invited to participate in a special program for high school students at CDC. We programmed a GE-15 computer with drum memory using paper tape, then graduated to punch cards and FORTRAN on a CDC 1604 computer. I wrote a program to compute successive approximations to the value of pi using an algorithm I had invented after learning about integration and power series in a book I was reading. It was a crummy algorithm which took forever to converge, but it was my own, so I loved it. I recall being quite concerned about one step in my reasoning, where I interchanged an integral and an infinite summation, and I was very relieved when the actual computation did indeed converge, and converged to the right answer. After the class ended, the instructor pulled some strings so I could continue to hang around at CDC and play with the computers.

This was my introduction to computing, and I was hooked for life. I still thought math was more important, and I still wanted to be a mathematician, but from that point on computing was another large part of my life. At that time, computers were still very new, and very few people had any experience with them. I was very fortunate to have the opportunity to get involved while I was still so young.

I managed to sleep through most of my high school courses, studying math and philosophy on my own and continuing to mess around with computers. I participated in two National Science Foundation summer programs in math and computing, which were tremendous fun, and placed first in the state on the annual MAA high school math competition. I recall writing a FORTRAN program to invert matrices at one of the NSF programs. I was quite proud of it, and must not have realized that professional programmers had already solved that problem with little difficulty. Or perhaps I just didn't care.

I had the opportunity to play a bit with a computer called the "BITRAN 6", which I think must have been one of the world's first portable computers. It was used for training hardware engineers, and was programmed using binary switches on the front panel. The logic boards were removable, and fit in vertical slots. It was by far the coolest toy I ever had as a child. I remember a program I wrote to test operations on three elements for the associative property. The program had lots of nested loops, which I though was pretty cool.

I wasn't a total social misfit in high school. I had friends, I got an athletic letter in tennis, I was in the drama club, and I dated a bit. But most of my life was devoted to solitary pursuits - math, philosophy, and literature. My friends were all oddball self-styled snotty pseudo-intellectuals too, and the other kids treated us as the social outcasts we were.

Adolescence and math were a strange combination. In my senior year in high school, I got a job as an usher in a movie theater. We had a game where the ushers collected tickets, which had seven digit numbers. When you collected 21 tickets where the digits all added up to 21, you got a kiss from one of candy counter girls. After the kisses wore off, I began to wonder about the problem of determining the probability of the digits in a random n digit number adding up to some number m. It turned out to be a difficult problem, and I worked on it all night. The next morning, we had a surprise test in English. Instead of working on the test, I continued trying to figure out the equations, and I turned in an empty exam paper, which got me in some trouble. I finally did solve the problem, though. I really don't remember which was more fun - the kisses or solving the problem. I do know that the trouble I got into for turning in the empty exam paper didn't bother me at all.

I went to the University of Minnesota for my undergraduate work, majoring in math and minoring in philosophy. I was there from 1967 through 1972. This was rather an exciting time to be a college student. My interests were math, computers, philosophy, the hippie counter-culture, and radical politics, in that order. I managed to get myself tear-gassed twice, once from a helicopter by the Minneapolis police tactical squad, and once by the National Guard on the steps of the Pentagon. I also spent a night in jail in the drunk tank with a few dozen other protesters. After they let us out on bail in the morning, we discovered that one of the fellows in jail with us was the person who had recently bombed the computer center in Madison and killed a grad student. He was on the FBI's most wanted list, and the police never even knew they had him in jail! He disappeared, and wasn't found and arrested until much later. Heady stuff. Immature and naive, yes, but also important and correct (but not the bombing). I think you had to be there to understand and appreciate the enormity of the experience.

I continued to be intensely interested in mathematical logic and the philosophy of mathematics, and read the classic works in the field: Gödel, Wittgenstein ("the world is all that is the case", one of the greatest sound bites in the history of philosophy), Kleene, etc. I examined out of the first two years of calculus, and kept a few years ahead of schedule in my math classes. By the time I graduated I had already taken the first graduate level courses in logic, real and complex analysis, and abstract algebra. I placed first in the state on the annual Putnam math competition for college students.

I had a National Merit Scholarship, but it is was only $500 per year, about enough to cover tuition at Minnesota. To support myself, I worked as an operator, consultant, and programmer at the computing center. My mentors were Larry Liddiard and Jim Mundstock, authors of the Minnesota FORTRAN compiler ("MNF") for CDC computers. MNF was the standard compiler for teaching programming at universities all over the world in those days. Larry and Jim taught me a great deal about what it means to be a serious programmer. I wrote mathematical library functions and the run-time formatted I/O package for MNF in CDC 6600 assembly language.

I graduated Magna Cum Laude with a B.A. in mathematics in 1971. I decided to take a year off before graduate school. I worked full time at the computer center as the system manager for a new timesharing system named "Kronos" for CDC computers. Timesharing was brand new and very exciting. Interacting in real time with the computer instead of using batch jobs with turnaround times of up to a full day was a radical change in the way we did computing. I remember how excited I was when my 110 baud teletype with yellow rolls of paper was upgraded to 300 baud. I was in heaven, and thought I'd never need anything faster. (The young punks these days who think UNIX is so cool have no idea what "tty" really means.) I also remember the first fixed hard drives, which were taller than I was and had vertical platters. The cabinets rocked ominously when the drives spun up to speed. Keeping permanent data files on disk instead of on magnetic tape was marvelously convenient.

We had one of the first CDC Kronos systems in the field. One of the chief architects of the system, Greg Mansfield, came over from CDC to spend time with me every week. Greg was a brilliant systems programmer and OS designer, one of the true gods at CDC. In those days, commercial operating systems came with full source code, and the innermost guts of Kronos was mostly Greg's code. I learned systems programming by studying his code and modifying and extending it. We had great geeky conversations, once I got over being nervous about being in the presence of an immortal. I often wonder if Greg remembers me. I sure remember him.

In 1972, I moved to Chicago to start graduate school at the University of Illinois at Chicago (called "Chicago Circle" back in those days). Circle had strong graduate programs in mathematical logic and group theory, which were my two main interests at the time. They also offered enough financial assistance so that I could afford to go there. Princeton turned me down. Berkeley accepted me, but I applied too late for financial assistance, so I couldn't afford it. I could have continued at Minnesota, but I felt it was time to move to a different city and make a big change in my life.

Graduate school was fascinating, fun, and incredibly stimulating. I immersed myself in mathematics. The faculty at Circle were great. We were friends, studied and partied together, and talked about nothing but math. I continued my studies in mathematical logic, and also took advanced courses in algebraic topology, finite group theory, analysis, algebra, and algebraic and analytic number theory. I remember when I first saw and understood a proof of the famous prime number theorem. I had never seen anything so beautiful in my life.

I was a University Fellow, which covered my tuition and provided a little bit of income. After my first year, I also had to become a teaching assistant to make ends meet. I taught calculus and introductory programming courses. I discovered that I liked teaching a great deal, and I was good at it, but I also discovered that it wasn't something I wanted to do for a living.

After three years at Circle, my thesis advisor, Robert Soare, left Circle to join the faculty at the University of Chicago, and he took me with him. By that time, I had finished my course work, had my Master of Arts degree, had passed my preliminary exams, and only had my thesis left to complete.

I didn't know anyone at U of C. Because I wasn't taking any classes, I didn't get to know any of the other students. The faculty were all much too important to spend time with graduate students, much less be friends with them like the faculty at Circle. I found U of C to be a cold place. I had also come to realize by this time that although I was a very good student of mathematics, and I had a talent for it, I did not have the amount of talent it takes to be a top research mathematician. Even more important, I finally learned that I definitely did not have the patience or the kind of creativity needed for original work in pure math.

I started spending more and more time with computers. This was a great way to avoid working on my thesis. My thesis topic was "The undecidability of the elementary theory of the lattice of recursively enumerable sets", which I never solved but I believe someone else eventually proved to be true. During a summer at Cornell University in 1975, just before starting at U of C, I discovered the Pascal programming language and the writings of Niklaus Wirth and the other proponents of "structured programming". I was very excited about their work, which dramatically changed the way I thought about and did programming. This led to research on the theory of formal languages and compiler design. I spent most of the 75-76 academic year at U of C working on a Pascal compiler for the IBM 370 computer, based on a very efficient assembly language SLR(1) constructor and table-driven parser. That was great fun, even though I never came close to finishing the program.

I had a horrible experience at U of C in an oral qualifying exam with a famous logician. I completely froze and made a total fool of myself. The famous logician informed my advisor that there was no way I would ever get a job at a research university. I was devastated. It was an enormous failure.

I was also an instructor at U of C. I had fantastic students. I taught FORTRAN and IBM 370 assembly language. There was a great deal of resistance to computers in the math department in those days. Many of the faculty felt it was beneath the department to teach a "trade" like programming. I was caught in the middle of this ruckus a little bit.

In the summer of 1976, I had the great pleasure to teach a class on automata theory at the U of C as part of a National Science Foundation program for high school students (the same kind of NSF program I had participated in when I was in high school). I had to work very hard to keep ahead of the students. They were very precocious, incredibly eager, and lots of fun. They wrote some great Turing Machine programs, and they were great at proving hairy theorems.

Many years later, one of my students from my classes at the U of C dropped by my office at NU. He had just been hired to join the faculty at our Kellogg Graduate School of Management. He told me that my class was what got him interested in computers and got him started on his career, and he thanked me. I was profoundly moved by this. Corny, but true.

In 1975 I met Robin, my wife. She was a student at Circle and needed a trig tutor. We were married in June of 1976. We had two children, Andrea in 1981 and Jeremy in 1986. Robin died suddenly and unexpectdly of undiagnosed heart disease on June 22, 2012, just five days short of our 36th anniversary. I miss her terribly. For the last 13 years of her life, Robin suffered from serious depression and anxiety. Those were difficult years for everyone in the family, but we never stopped loving each other.

So you see, it's really true that you never know when math might come in useful. Getting married and having a family taught me that there are more important things in life than just math and computers. I turned into what I never thought I could possibly become - a solidly middle-class and middle-aged suburban husband and parent. I'm still not a Republican though, thank God.

Back to the story...

By this time (the fall of 1976), it was very clear that computing was my true professional calling, and I very reluctantly and very painfully gave up my dream of becoming a research mathematician. I decided to drop out of graduate school and look for a job. I knew that they used CDC computers at Northwestern, because I had heard of the world championship CDC chess program written by Dave Slate and Larry Atkin at NU. So I took the elevated train up to NU, asked where the computer center was, and dropped by to see if by chance they might happen to have a job opening. They did, I was hired, and the rest is history.

I remember meeting Dave Slate for the first time. I was in his office, glanced up, and noticed two boxes of punch cards perched precariously on top of his bookshelf labeled "Ruy Lopez 1 of 2" and "Ruy Lopez 2 of 2". Awesome. Dave was just one of a large ragged cadre of very talented systems programmers at NU in those days. Sadly, there isn't much serious systems programming done at universities these days, and all those people left long ago for other jobs.

Despite the fact that I did not become a mathematician, and I never use any of the math I learned in school in my computer work, and I forgot all of my math long ago, I am convinced that I owe nearly all of what ability I possess as a software designer and developer to my early rigorous training in pure mathematics. I consider myself to be fortunate that computer science did not exist as an academic discipline when I was a student. I'm convinced that today's younger programmers would be much better at their jobs if they had studied serious math instead of computers in school. There's nothing that teaches you how to think rigorously better than studying pure math, and there's nothing more important to being a good programmer than knowing how to think rigorously.

The NU computer center was called "Vogelback Computing Center" when I started. It's now called "Information Technology" (IT). I did just about every kind of computer work and computer programming as part of my job. I worked on CDC mainframes running several different operating systems, including a wonderful monster we designed, wrote, and maintained ourselves called "SYS/NUCC". I also worked on VAX/VMS and IBM VM/CMS systems. I worked on core operating system code, systems software for data communications front end computers, scientific FORTRAN libraries, graphics programs and libraries and device drivers, a 35,000 line text editor all in assembly language, a text formatter named "Prose" in Pascal, and many other projects. I also did systems management, consulting, training, and all the other things technical slaves at the bottom of the hierarchy do at university computer centers.

I've always worked on projects in my spare time that have nothing to do with my work in school or on a job. Most of the time, these spare time projects are more interesting than what I do officially.

My most interesting spare time project was a Modula-2 compiler I wrote for the DEC VAX/VMS system in 1982 and 1983. I wrote it in Modula-2 just for the fun of it. I didn't have access to a Modula-2 compiler, so I wrote the entire compiler from scratch without ever being able to compile or test any of the code. I worked on the project off and on for about a year, and ended up with about 10,000 lines of code. This was my first Modula-2 program. The only experience I had with the language was from reading Wirth's book about it. I had never actually compiled and run a Modula-2 program on any kind of computer.

When I finished the first draft of the full compiler, I laboriously hand-translated the entire program into Pascal. After a month or two of hard work, I got the Pascal version working, used it to compile the Modula-2 version, then threw away the Pascal version because I didn't need it anymore. Once I got my Modula-2 compiler bootstrapped in this way so that it could compile itself, I lost interest, and I never used it again or released it for anyone else to use. This is the only time in my life I've written a 10,000 line program just to get it to run once and then throw it away!

My work on the Modula-2 compiler was the purest kind of programming - programming solely for the pleasure of programming itself, not for money or fame or even because the end result is something useful. I had no customers or bosses or anything else to interfere with the pleasure of writing the program. As a result, I think I had more fun writing that program than any other software I've ever developed. It was also one of the best programs I've ever written.

At NU, because I had to document the software I created, I also had to learn how to write English, and much to my surprise I discovered that I actually liked it. This makes me a very strange programmer. Over time, I even became reasonably competent at technical writing. My father was a wonderful writer, and did it for a living as both a journalist and a technical editor. I was shocked to discover relatively late in life that I had inherited at least a small part of his talent.

In early January of 1984, I went to a see a preview of a new kind of computer called the "Macintosh" at the local Chicago offices of Apple Computer. I was totally overwhelmed by the experience. It was one of those truly transcendental moments. I'd been involved with computing for 20 years by this time, and I had never dreamed of anything even remotely like the Mac. I sat through the short demo with my jaw on the floor. I knew I had to get my hands on one of these toys and learn how to program it. I was obsessed. Within two months I had quit my job at NU and joined a small software company named "Odesta" in the Chicago area.

At Odesta, I worked with two old friends, Larry Atkin and Jon Schneider, both of whom were also former Vogelback systems programmers. Together we designed and developed the first version of "Odesta Helix", a relational database system for the Mac. We tried to make our program look like the Finder. This became an obsession, and we did it whether it made sense or not. In those days we had to do our programming on Lisa computers, using a Pascal development environment based on UCSD Pascal. We'd compile and link on the Lisa, then download the binary over a serial cable to the Mac. We used a second Mac for debugging. Changing a single line of code and doing a recompile, rebuild, and downloading the binary took over an hour! The Mac only had 128K of memory, and only about 70K of it was available to applications. Helix never did run in this tiny amount of memory. I remember getting one of the very first "fat Macs" with 512K of RAM on my desk. Watching Helix stay up without crashing for more than a few minutes was a great thrill. Every month Apple sent us new loose-leaf chapters of Inside Mac, as they were written. One of my jobs was making copies for Larry and Jon. We used to drop everything and read them when they arrived, oohing and aahing and making grand plans to use the new toys as we read. When Apple learned that we had over 100 CODE resources (in a failed attempt to cram everything into that 70K), they couldn't believe it. I couldn't believe it either.

I unfortunately had a horrible time at Odesta, and totally burned out. I learned that the high pressure world of commercial software development was not for me. I never liked our product, and that was the heart of the problem. I only lasted about 9 months, then had to quit or go insane. This was my second major failure, and it was a very unpleasant time in my life.

I returned to NU in late 1984 after being away for only about nine months. I did not use or program the Macintosh for several years. I worked on a very interesting but fatally flawed operating system named "NOS/VE" for CDC computers. I also wrote some accounting code and did other relatively dull work, including an excruciatingly boring part time assignment managing a departmental IBM VM/CMS system. These years were the low point of my career. It took several years to get over my bad experience at Odesta and really get interested in computers again. I did my job, and I did it well, but for the first time in my life I wasn't interested in what I was doing.

By 1988, we had Macs on our desks at Vogelback instead of VT100 terminals, and I was beginning to return to the Mac world, even if it was just for simple word processing and terminal emulation. I remember how pleased I was to discover that the Mac actually had usable hard drives, with a new hierarchical file system cleverly grafted on top of the old flat file system by the hallowed hackers at Apple, and all sorts of other cool new stuff. I had a 1 meg SE at work, and I bought a 1 meg SE for home.

One of my colleagues at Vogelback was Bob Hablutzel. He and I had done lots of VAX/VMS systems programming together, and had become friends. Bob was getting into Mac programming, and I decided to start dabbling again too. We used to write horrible little practical joke INITs and put them in each other's system folders. (Most of them involved obvious but skanky tail patches on GetNextEvent.) I began to look around for some kind of serious Mac programming project to work on in my spare time, just for fun.

In the spring of 1988 Bob and I read a note on the net from some fellow in Texas about a new Mac virus named "Scores". Viruses were just beginning to appear on the Mac. The author of the note was puzzled by a few technical issues concerning the virus, and he put his phone number in his note. Bob and I had the answers to some of his questions, so we called him. We hooked up our Macs over the phone lines so he could send us a copy of an infected file. I spent the next two weeks putting in all-nighters tearing it apart, disassembling it, and testing it until I understood it completely. It was incredibly difficult work, but fascinating. Nobody else had figured it out, including the people working on it behind the scenes at Apple. (To this day, Scores is still by far the most complicated of all the Mac viruses.) I was very proud of myself. I posted my results on the net, with instructions to people telling them how to get rid of it. This led to a long phone call from a mysterious engineer at Apple who argued with me about the dangers of making this kind of information public. The mystery engineer turned out to be Scott Boyd, who later became my first friend at Apple. He was right about the dangers, by the way.

(Bob now has a successful business of his own doing Mac programming consulting. Scott went on to become one of Apple's best engineers. He was a key member of the famous "blue meanies" team at Apple who helped create System 7.)

During the summer and fall of 1988, the virus problem began to get worse on the Mac. More viruses appeared, and they began to spread widely. We had our first outbreaks at NU. The press was all abuzz about the problem, and industry pundits were making dire predictions of the death of personal computing. Everyone was in a state of panic. Misinformation about viruses outweighed accurate facts by a factor of 100 to 1. Outrageous lies and rumors were spreading around the net at the speed of light. (This still happens, of course.) The existing tools were clumsy, frail, poorly documented, and totally inadequate to effectively fight the problem.

(Henry Norr of MacWeek was one of the few journalists who got the virus story right, by the way. He was calm and responsible and always very concerned that he got the facts correct before publishing anything. My hat goes off to Henry.)

I had found my Mac programming project.

I had inherited a copy of Apple's MPW programming environment. At the time, I was still a Pascal and Modula-2 fanatic, and I hated C on religious grounds. But due to circumstances beyond my control, I only had the MPW C compiler, not the Pascal compiler. So I reluctantly read Kernighan and Ritchie, successfully swallowed my pride, taught myself C, and began work using my SEs (now upgraded to 2.5 megs each) developing the "ultimate" Mac anti-viral tool, which I decided to call "Disinfectant". I worked on it all fall and winter, mostly on my own time at home. I released version 1.0 to the public on March 19, 1989. That version detected and removed the Scores, nVIR, INIT 29, MacMag, and ANTI viruses, the five Mac viruses which existed at the time. It also contained a very thorough online document which clearly and calmly described the Mac virus problem. I made a very serious attempt to demystify the problem and discuss it calmly, avoiding the wild panicky doom and gloom approach taken by most of the press. We realized early on that the document was just as important as the program, and we spent a great deal of time on it.

(I continued to program mostly in C for over ten years, by the way, and I'm still quite disgusted with myself about this. And please don't write telling me how wonderful C++ is, thank you anyway - I've used it, and I'm still disgusted. Java is infinitely superior to C++ for object-oriented programming.)

Disinfectant was an immediate hit all over the world. I found myself suddenly quite famous, at least in the small world of Mac users. Everyone loved my program, and it met a very serious need. I became one of the world's leading experts on Mac viruses, and I started to receive awards, speaking invitations, and requests for magazine and newspaper interviews. I was an instant hero on the net, mostly because I gave the program away for free, but also because it was a damn fine program, thank you very much.

This fame was quite heady stuff, and it was a mixed blessing. Too many people wanted too much of my time, and it was difficult to be constantly polite and accommodating and still get any work done. People expected more of me now, which made it more difficult to be mediocre and make mistakes. I also had to try not to let it all go to my head, and I'm afraid I sometimes found it difficult to remember that I was indeed mortal. Fortunately, friends and strangers alike on comp.sys.mac.comm and elsewhere never tired of reminding me of my mortality, so that helped keep me in line. And Robin put up with absolutely no bullshit from me, which helped most of all. The best part of becoming well known was that it gave me the opportunity to meet, become friends with, and work with some of the best Mac programmers in the world.

My work developing Disinfectant was my first serious introduction to the enormous power and benefits of the Internet. I joined an international team of other Mac anti-viral researchers formed by Werner Uhrig at the University of Texas. I also formed a small "Disinfectant Working Group" of a few dozen people who helped me design and test the program. I quickly realized that it would have been impossible to do this kind of work without the very serious collaboration made possible by the net. The net has had a profound impact on my life. It has expanded my intellectual and professional horizons to extend beyond my immediate friends and family and physically adjacent coworkers to encompass the best minds on the planet who are interested in the same things I am. The virtual communities on the net of which I was a part became my working life. The traditional barriers of time and space which made collaboration difficult in the past have been eliminated by the net.

I had been convinced since 1988 that other people could experience the same profound changes in their lives, and that the most important thing we needed to make this happen (after achieving physical connectivity, of course) was decent tools for personal computers, and the Mac in particular, which were usable by non-technical people. That became my passion and my mission in life for the next 6 or 7 years. It was great to see the net really start to take off when the world wide web appeared. My only regret is that big business, big money, and big government have now taken over the net. It's not the private playground of geeks and computer enthusiasts anymore. This was inevitable, but I am still nostalgic for the good old days.

I continued doing virus-fighting work and improving Disinfectant for another two years after releasing the first version to the public. I developed and released a major new version 2.0 in July of 1990, and I started work on yet another ambitious "System 7 studly" new version. In the spring of 1991, I finally got tired of spending all my spare time working on the program, and I decided to move on to other projects. I abandoned my work on the new version. The virus problem in the Mac world was getting much less serious anyway (partly because of my efforts in conjunction with the other Mac anti-viral people, I'm proud to say).

For many years, I continued to maintain and support Disinfectant, updating it whenever a new virus appeared. Finally, in 1998, I retired the program. By this time, Mac system viruses were old hat, and the new cross-platform Microsoft macro viruses were all the rage and the most serious danger to the Mac community. I never had the resources to attempt to combat the Microsoft macro virus problem.

Mac viruses are intriguing at first, but after you've seen two or three of them, you've seen them all. I soon stopped feeling any sense of excitement when a new one appeared. They really are rather trivial oddities technically, and not very interesting after the initial cheap thrill of discovery. They are also all very poorly written - filled with stupid errors and incredibly bad programming.

Virus fighting and working on Disinfectant was never an official part of my real job at NU. My managers approved of my work on the program, and let me spend some time on it at the office, but only if it didn't interfere with my many other official projects. I did most of my work on the program during my spare time at home.

At about the same time I started work on viruses and Disinfectant in the late 80s, I moved into a new networking group at work, where my real job was to help plan, develop, and support our new and rapidly growing campus computer network. I specialized in Mac networking, both AppleTalk and TCP/IP. I did all kinds of networking jobs, from laying cables and designing and building LANs for departments to configuring and fixing routers to developing software and documentation. I introduced the campus to Eudora and the other early Mac TCP/IP client software. My mission in life was to bring the benefits of the Internet to the masses at NU via Mac client software and Mac networking. This is now an accepted fact of life and mainstream computing at NU, but in those early days it was an enormous struggle making it happen. I remember when I personally knew everyone on campus who was involved in any kind of Mac networking, including almost all of the end users. We started very, very small and grew very, very fast.

As part of my work, I became very interested in the technical details of the protocols used on the net, both AppleTalk and TCP/IP. I did lots of studying and learning. Again, I managed to find the right experts and resources on the net, and the net was an enormous help in my work. After I began to feel that I knew what I was doing, I tried to pay back the community by helping answer questions on comp.protocols.appletalk and other newsgroups. This stuff is all very complicated, especially the AT-in-IP and IP-in-AT tunneling protocols we used to use at NU. It's also very interesting. I don't do any work with this kind of thing anymore, but it was great fun when I was involved with it.

As an early avid (some say rabid) fan of Eudora, I got to know Steve Dorner, the author of Eudora. Steve became one of my closest friends in the Mac programming community. Before he did Eudora, Steve had developed a directory system named "Ph". I became interested, implemented his system at NU, hacked around with his server code, and wrote a nice fully featured Ph client for the Mac. This was my first MacTCP program, indeed my first TCP/IP program of any kind. I think we were the fourth or fifth Ph site on the net. There werre eventually over 300 Ph sites, and mny of them used my program. Today Ph is dead, supplanted by LDAP, but at NU many people still call our LDAP system "Ph".

In the early days, I used Harry Chelsey's "NetNews" HyperCard stack to read Usenet news (before that, I used UNIX readers). It was slow and clumsy due to the inherent limitations of HyperCard, but very nicely designed. Then Steve Falkenburg, a new Apple engineer fresh out of the University of Michigan (the hot school for young Mac programmers), wrote a program named "NewsWatcher". Although the basic design was very nice, and the program was reasonably robust and more than usable, it was very crude, and it was never really intended to be a production program. For example, it didn't even do word wrap! Mac folks on the network were so desperate, however, that they began to use it anyway. So did I.

NewsWatcher worked just fine until one day in the spring of 1992, when it suddenly broke (it crashed on launch) because our full group list at NU grew too big, and it exceeded a limit in the program. I was very busy, and didn't really have the time, but I just couldn't live without the program. I definitely couldn't face the ugly prospect of returning to using the incredibly obtuse UNIX readers. The NetNews stack had stopped working long ago for the same reason - too much data for HyperCard's tiny little brain. So I decided to take just a day or two and go into the code and fix that one problem.

Famous last words. I got hooked. I started an enormous project which lasted for over 3 1/2 years enhancing NewsWatcher. I rewrote all of Steve's original code, and I added billions of features. The work went well, if slowly, and I was happy with the result. NewsWatcher become enormously popular on the net, and I started getting even more mail about it than I did about Disinfectant and viruses, which was quite an accomplishment. In the fall of 1995 I finally got tired of spending all my spare time on NewsWatcher. I retired from the project. I decided it was time to move on to new projects and new areas of computing.

I've always believed strongly in the value of sharing source code with other programmers. That's how I learned to program. As I worked on NewsWatcher, I made my source code freely available on the Internet, and many other programmers used it to produce enhanced versions. Brian Clark's "Yet Another NewsWatcher" and Simon Fraser's "Multi-Threaded NewsWatcher" are major derived versions which became very popular. I was thrilled to see my work live on and be improved by these other talented programmers.

My work on NewsWatcher introduced me to other developers working on Mac TCP/IP software - Peter Lewis, Quinn, Steve Dorner (of course - he's the one who really started all of it for most of us), Amanda Walker, Pete Resnick, Jim Browne, Jim Matthews, Farhad Anklesaria, the Apple MacTCP and Open Transport engineers, and many others. I formed some good friendships with these people, and we worked closely together. We beta tested each other's stuff, and we constantly helped each other with unsolicited strongly-worded "advice" and technical help. Our joint work on projects like the "geturl" Apple event standard, using each other as helper programs, and Internet Config was an attempt to make our software work together in a way which made the collection of our programs greater than the sum of their parts. It was fascinating work.

In the Fall of 1993 my job changed again at Northwestern, when I moved out of the networking group and into a new "Network Applications Development Group". This was a small group devoted to developing new network applications. My NewsWatcher work was one part of my job as part of this group. I also continued to support all of the other Mac networking software, but I no longer had to worry about day-to-day operations of our campus network. This gave me much more time for development work.

Northwestern was a great place to work. Management gave me a tremendous amount of freedom to plan and develop my own projects. One manager once called me a "loose cannon which is fortunately usually pointed in the right direction." This suited me just fine, and I think it suited NU too.

I started working with the World Wide Web in 1994. I had a great time learning about HTML, HTTP, forms, gateways, CGI, MacHTTP (Chuck Shotton's wonderful creation which eventually became the commercial product "WebSTAR"), etc., etc.

One of my first web projects was to develop Mac-based web gateways to provide new cross-platform network services at NU. As part of this work, I developed and released a generic resuable threaded MacHTTP/WebSTAR CGI gateway shell program. One result of this work was a nifty "Mail Tools" gateway to turn mail vacation and forwarding on and off.

In 1995 I worked on an interesting project to design and develop a new architecture for distributing, installing, and maintaining Mac networking software. This turned into our NU "Mac Software Installer" and "Version Checker" programs and our "Mac Software Repository" system. I continued maintaining and devloping this system until it was retired in 2002, when Apple's standard operating system came with all of this stuff built-in.

I like Mac programming because the Mac always puts the user at the center. This was what made the Mac so revolutionary in 1984, and it's still true today. Other systems often introduce more advanced operating system technology in some areas, but none of them are as innovative as the Mac, and none of them hold a candle to the Mac in terms of human interface issues. (They attempt to imitate the Mac by layering "GUIs" on top of their old systems, but they all fail miserably, despite what you might read in the press.) In my programs, I always try to concentrate first on human issues, with technical issues and fancy features coming in a distant second. This is the reverse of how programmers on other platforms work, and it's the reverse of how even most Mac programmers work. The ultimate goal of my work is to make the damned computer disappear, so that ordinary people can work directly with their information and don't even notice the software they are using. I don't care how much code I have to write to make this happen, or how inconvenient it makes my job as a developer, or how long it takes. It's the whole point for me. This is a completely unobtainable goal, of course, and I'm hopelessly clumsy and guilty of terrible hubris in even attempting it. My software sucks just like everyone else's, but I hope that sometimes, by working very hard and writing tons of code, I can make it suck just a little bit less.

We had yet another major reorganization in 1995, when I became part of a new "Emerging Technologies" group. Then in 2000 we had another reorganization and I moved into the "Research Technologies" group.

I now use Java for most of my programming work, primarily on UNIX systems (including Mac OS X). I admire and very much like doing Java programming. In many ways it reminds me of using Pascal and Modula-2 when I was younger. It's clean, simple, and safe. In many ways I feel that Java is to C++ as Pascal and Modula-2 are to C. Java lets you do 95% of what you need to do in object-oriented programming, with 10% of the complexity of more "advanced" languages like C++.

I have received several awards for my work, including a runner-up Eddy award in 1989 for Disinfectant in a special anti-viral tools category, a major award from the Boston Computer Society for Disinfectant, and a very nice and unexpected "Cool Tools" award from Apple Computer's Advanced Technology Group for NewsWatcher. In January of 1994 I was awarded the prestigious MacUser Editor's Choice John J. Andersen Distinguished Achievement Award for my work on Disinfectant and NewsWatcher. I attended a very fancy black-tie awards ceremony in San Francisco and give a speech to industry bigwigs. It was quite a thrill. I thought it was especially nice of MacUser to recognize a freeware author rather than select some major figure from the more traditional commercial part of the Mac world. In May, 1996, I received the Usenet Mac Programming award for best freeware.

In 1998 I became engrossed in a new hobby, studying Finance, of all things. I've written several amateur papers about what I've learned.

I retired from Northwestern on September 30, 2011, after 35 years. I am now enjoying a well-deserved life of leisure.


Last updated: July 14, 2012.

Up to my home page.