THE ARC OF MY CAREER HAS BEEN DEFINED BY THE RISE OF THE COMPUTER AGE. From my earliest software jobs in 1976 until today, I’ve always kept abreast of the latest in software languages, development tools, computer science theories, and professional practices.
The application of my craft has carried me through a diverse industry landscape.
- Internships: 1976—1979
- Hospitality: 1980—1984
- Insurance: 1985—1987
- Hardware: 1988—1992
- Science: 1993—2001
- Internet: 2002—2004
- Ecology: 2005—2008
- Finance: 2009—2011
- Publishing: 2012—2018
The names of companies and organizations mean little, since most have merged or dissolved or changed dramatically. Some have been family owned, while others have been large corporations; some have been start-ups, while others have been around for more than a century.
I’ve had a wonderfully diverse set of professional experiences, while remaining consistently true to my lifelong career with technology.
Several fundamentals have been a mainstay for the duration of my career:
- Project management
- User interface design
- Work flow analysis
- Graphic design
- Database development
- Building tools for the craft
I am a lifetime learner. We all know that technology has changed rapidly in the past couple of decades, and that a “generation” is not defined in 20-year increments, but in 4- or 5-year increments. Keeping on top of this technology curve has required constant study. As I look back over the field of obsolete hardware, software languages, development tools and programming techniques, I see that 80—90% of what I once knew so well, is no longer applicable in today’s profession. The remainder is today’s state-of-the-art.
What transcends these changes are the practices that define the profession: software design, problem solving, regression testing, and attention to detail.
Software design. A well designed piece of software joins the user’s experience with the hardware’s capabilities without stretching the limits of either; thus good software design relies on these two fundamentals: knowing your user’s needs and knowing your hardware’s capabilities.
Problem solving. Technology breaks: in order to keep hardware and software running, good troubleshooting skills are absolutely necessary. I’ve always had an easy time isolating what works from what doesn’t, and find troubleshooting problems to be like solving puzzles.
Regression testing. In order for any large technological project to function, every component much function. Correct execution requires discipline: testing the smallest pieces of software; retesting software components created from those pieces; and retesting again the libraries and assemblies and applications created from those components.
Attention to detail. Without an attention to detail and a methodical approach to creating new software, the chances of succeeding are limited. In practical terms this means pacing yourself, using the correct tools for the job, finishing what you started before going on, being explicit in your documentation, and safeguarding what you’ve created.