I
have been programming computers since the early 1980s when I taught myself to program first on CP/M machines and later PCs. Over the years I have learned or experimented with a number of different languages including Pascal, dBase, Clipper, Smalltalk, x86 Assembler, C and C++. I now spend most of my time working in C++ and C#, usually on Intel machines running Win32-based operating systems such as Windows 2000, Windows XP and Windows CE.

I started making a living programming in 1981 when I contracted a few simple projects for friends. That grew into a full time consulting business that lasted for six years, during which I wrote dozens of accounting systems, construction estimators, customer databases and other custom programs for small businesses in the Sacramento area.

In 1988 I was lured to the Silicon Valley and hired by a company called ENSR Health Sciences. A couple of years later I moved to Marketing Resources Plus where I stayed for just over six years. I returned to full-time consulting for a year and then in October of 1997 I joined an Internet start-up called Impulse Buy Network where I worked as Chief Architect.

In April of 1999 Impulse was bought by Inktomi where I took the position of Chief Technologist. Late in 1999 I left Inktomi to help start a new company with my friend from Impulse Richard Ling. For just over 2 years I was Chief Technology Officer for AlterEgo Networks, and Richard was the CEO. In May of 2002 AlterEgo was sold to Macromedia. A short time later Richard and I started another company, Metalincs which is now entering its fourth year and has grown to about 40 people.

Back in the early 1990s I was fortunate to become involved in a project for a PC-based distributed system, one of the earliest of its kind to be sold commercially. Distributed software is designed as a series of modules that reside on different networked computers yet work together to accomplish a specific task. Simple distributed designs are often called Client/Server because they employ a single data server that responds to requests from multiple clients which manage the user interface. The Web is a good example of this architecture with the browser you are looking at now acting as the client. More complex designs have modules that are capable of acting as either clients or servers depending on the task.

I specialize in writing high-performance servers for Win32-based distributed systems. Proprietary servers of this type are necessary when commercially available products like SQL Server or Oracle aren't suited to a specific task. I also do some client-side user interface work which I enjoy, but I tend toward systems-level programming because it's a relatively small group that specializes in that area.  For the last year I've been concentrating on a relatively new client-side technology known as AJAX.

Away from my formal job projects I spend a lot of time studying new languages and technologies. Currently I'm exploring the worlds of Web Services and rich-experience web user interfaces, and programming new classes of computers like PDAs and third-generation (3G) phones.

This is normally where I would put my resume, but rather than posting one of those boring all-text tomes I decided to try something different. Here's a link to my business-card resume. Not every job I've ever held is included but it does give a pretty good overview of my working past.