- webwork@(my name).com
Unlike many programmers in the field these days, I don't code because it's potentially lucrative - I do it because it's what I do naturally. I've been knee-deep in computers for more than 30 years now.
I grew up with computers. These days that's pretty common, but I was sitting in front of a DEC "Robin" VT180 in the early 1980s. Soon I was on x86 systems, having my own hand-me-down unit while I was in elementary school. By high school, I was coding in C and dabbling in assembly.
As an outgrowth of BBSing, my friends and I got interested in networking and set about bringing the still-nascent internet to our school. We established the link, built and maintained the Linux-based (yes, this was *early* Linux) gateway systems, wired the various parts of the building that'd be connected, and even administrated the network and systems involved, going so far as being responsible for AUP enforcement. This'd be pretty mundane, except that we did it in the early 1990s.
Building on my high school activities, networking became an increasingly key interest of mine. Again, I deployed a LAN on my dorm floor before networking was available from the school, providing gateway, fileserver, DNS, and additional services to other students who connected to it. This drove me to explore further into network-related programming topics. I set up my own lab environment and experimented with Firewalling, distributed parallel processing, authentication, both select-based and multi-threaded socket servers, tunneling, CGIs, and other such things.
My summer jobs gave me a chance to explore the practical, real-world applications of my interests. One job, at a video game company, allowed me to become familiar with QA techniques and 3D modeling (in SoftImage), but sometimes found me shadowing their network administrator, gaining first-hand exposure to vulnerability remediation, etc. ... not to mention a large number of system types including SGI units and my first exposure to Sun. The following summer, I applied these insights. I got myself a job developing administration tools for the IT group of a large chip manufacturer. I wrote mechanisms in Bash, C / C++, and (if you can believe it) Tcl / Tk to automate storage provisioning, user migration, naming service maintenance, and a number of other tasks, greatly streamlining their existing workflows.
When I started out on my professional life, I wound up working on gateway security software. Initially it was a firewall / VPN server hybrid, though eventually it grew IDS and anti-viral appendages.
Over time I rose from Software Engineer to Senior Software Engineer, and, finally, to Principal Software Engineer, but from the outset I had rather intense duties. Within weeks of starting, I was responsible for large sections of the kernel driver, which took care of network controller interfacing, core firewalling, NAT accounting and transforms, and stateful forwarding of any data streams not being routed to the application proxy suite. As the featureset of the project was expanded, my responsibilities grew along with it. With years passing, I wound up taking care of everything from the installer, to a number of the application-data proxies, to the core libraries, to the clustering system. When the time came to integrate with an IDS solution, I even produced a man-in-the-middle TCP implementation which would allow us to feed that component purely contiguous data while also conditioning the network stream itself.
With this kind of activity now my job, the early 2000s found my hobbies moving toward web work. On my own servers I built PHP / MySQL (LAMP, if you will) applications for managing everything from my photo library and recipes to my DVD collection. The latter even interfaced with IMDb (a bit cumbersome to say the least, given their 2002 codebase) to gather additional data about the movies to drive a basic suggestion mechanism I'd built into it.