When I was 10 years old, I was given an old computer that was broken, some sort of Xerox terminal that ran CP/M. I took it apart and put it back together, and when I was done it was working again.
Thus began my career in "computers".
I learned Borland Turbo Basic and began writing simple DOS applications that required the user to enter their password. This led me to write a library to do windowing and essentially widgets in text mode for DOS. The library included text inputs, checkboxes, radio buttons, pulldowns, menus, and buttons.
Turbo Basic had the ability to include blocks of assembly, so I got a copy of Peter Norton's Assembly Language Book. My library functions used BIOS calls for keyboard input and screen output, which sped things up considerably. I rewrote this library a number of times, usually because I made a mistake, lost my backup and had to start over.
I stumbled across a Microsoft Press book on QuickC (I think it was called "Learn QuickC") and ended up rewriting my library using Microsoft QuickC. One notable application that I completed in C was a low-level floppy disk editor.
In 1996 I started playing with Linux. I used Linux From Scratch to learn everything I could about how the operating system works. I migrated from pure C on DOS, to C++ on Windows and Linux, to PHP.
In 1997 I began working for Ohio Valley Flooring, a medium-sized private company that distributes flooring products. At first I supported and helped train users, many of whom were long-time salespeople with no computer experience.
While doing support I began to help with other systems, such as the telephone and voicemail system. In my spare time I wrote software for an automated attendant, so that customers calling the company would have the option of entering an extension instead of going directly to the call center. I presented my solution, and management decided to give it a try. After it was implemented, the number of calls that went directly to the call center were reduced by about a third, while the overall call volume grew each month.
My responsibilities grew to include telecommunications, and various other odd tasks that came about.
I worked on many diverse projects, from designing a telecommunications network for the company's many locations to helping to troubleshoot the software on a programmable logic controller for a flooring cutting machine. I designed the data and telephone networking for new offices, gathered bids for service, ordered parts, and did the final installation.
Here's one example of a telecommunications-related project on which I worked.
In 2004, I designed a network to link 6 locations together with VPNs to connect voice calls and data traffic. I learned to configure Cisco routers and Mitel IP telephone systems, how to set up Quality of Service to make sure the voice calls wouldn't be affected by data traffic on the same connection. I configured and installed the equipment for this network at each location, and cut over service one at a time. (This also meant I had to design a way to gradually move service to the new network without downtime.)
In 2005 I decided to pursue a job doing only software development, and I went to work for a company that uses Macs. I became a Mac user permanently after using it as my development platform for a few months.
In late 2006 I moved to Sunnyvale, California to join the team running the Motorola Developer Network, a.k.a MOTODEV. I was the senior engineer on the Developer Programs team, responsible for the software and hardware that runs the website and related systems.
In 2012, Karl Wilbur and I started a collaboration called K & R. We work for various exciting startups building apps, and we don't have time to make a website for ourselves (yet).