I was fascinated by computers long before I ever got my hands on one, even going so far as to study boolean algebra and the electronics of switching circuits on my own during high school days in rural Michigan. Despite this interest, when I went off to college it was originally with the intention of studying Physics.

Fortunately, I immediately found part-time work assisting in an experimental physics laboratory. Exposure to the day-to-day grind of cutting-edge physics in action soon had me questioning my calling to the field, and conveniently enough the lab had a reasonably high-powered computer system (by the standards of the day - I think it ran about 100K FLOPS, and had about 128KB of main magnetic memory along with a massive 500KB hard drive for swapping). I was soon writing programs to graph data for graduate students, and within a few months made the transition to writing systems software for the lab computer. My test project to prove myself as a system programmer was replacing the old bootstrap loader read in off punch cards with a more compact version. Debugging the program by stepping through instructions using the console switches and lights was an experience I've never forgotten, and one that has given me a deep appreciation of high-level programming languages and development tools.

As to the college degree, I switched from Physics to a program called "Social Sciences - Multidisciplinary." This allowed me to take basically all the computer courses I wanted without following the dictates of anyone else's curriculum ideas, along with a variety of other interesting material. In terms of the number of credits, I ended up with the equivalent of a major in Computer Science and a minor in Economics.

I'd become a full time employee of the physics laboratory before graduating from college, but then moved to Southern California for my first job in the wider industry. My early experience after college focused on data communications and networking for various minicomputer systems, generally working for the manufacturers. As part of this I eventually got to participate in the IEEE 802.2 committee that standardized logical link control for local area networks, which gave me an early exposure to the political problems involved in developing industry standards (in particular the Ethernet vs. TokenRing conflict, which ultimately led to both being adopted). Through this time I was mainly using assembler language.

With the takeoff of the personal computer industry in the early 80s I moved over to working on PCs, using first 808x assembler and later C (as soon as a decent compiler became available) for programming. When the Apple™ Macintosh was released I thought the user interface was wonderful, but found Mac programming tedious. It wasn't until the release of the Commodore™ Amiga that I found a personal computer system which offered the kind of potential I expected from computers, with a sophisticated windowing system built on top of a multithreading OS (basically the equivalent of Microsoft™ Windows 95, but delivered in 1985). That inspired me to write my first commercial product (everything I'd done up to that point had been systems or embedded software), the widely used MetaScope debugger for the Amiga. Unfortunately - for both the industry as a whole and me personally - business and marketing failures led to the abandonment of the Amiga. I moved back to PC programming using first C and (as soon as decent compilers were available) C++.

As the entire industry seemed to be increasingly focused around Microsoft I moved up to Seattle in 1995 to work as a contract developer on some of the Microsoft Home CD-ROM products. This was at the same time the Internet was achieving "tidal wave" status, and the CD-ROM products were natural candidates for conversion to online versions. I moved into the planning for these conversions, and became development lead for the Music Central Online Store. This project was distinguished as the first Microsoft-owned webfront providing realtime commercial transactions (as opposed to just recording order information in a database for batch processing), communicating with partner companies to verify order availability at time of purchase and to schedule shipping. After the Music Central project I also helped out on several other Microsoft web sales sites, including the Expedia travel site.

By 1997 it was apparent to me that Java™ was a much better choice for software development than C++, so I ended my work for Microsoft and switched to Java work. My next several projects involved both client and server-side Java development, with XML becoming an increasingly large factor by 1999. Since then I've specialized in first XML and then Web services and SOA work in Java.

My current activities include consulting, software development, and training services for clients, along with a high level of involvement in open source software. Over the last few years I've also participated in the Java community through technical articles for industry publications (see the Articles page), presentations for conferences and user groups (see the Presentations section of this site), and membership in the Java Community Process (JCP) JAXB 2.0 and JAX-RPC 2.0 expert groups. On the open source front, I'm the primary developer of the JiBX XML data binding project, the originator of several lower-profile projects (see the projects section of this site), and also a committer for the Apache Axis2 Web services project.