
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.
|