I have worked in a variety of environments, often in leadership roles and always learning from every situation.
Before Windows was prevalent, I built a DOS-based educational management system in Borland Pascal that loaded software from other vendors, ran lessons for students, then collected the scores for teachers to assess. Rules were implemented for automatically reviewing tough areas or advancing through easy material. Plowing through a variety of programming languages, such as C, BASIC, FORTRAN, and working with other developers on the team taught incredible lessons in multitasking, quick learning, and flexibility. Plus, wading through the plethora of Novell NetWare manuals taught me more than I wanted to know about networking.
Later, in a support role at a company that built clean rooms for high-tech manufacturing plants, I gained valuable insight into how non-technical people simply wanted to get their job done in spite of the computers they had to use. Synchronizing remote laptops, hooking up printers and fax modems, rebuilding an online job-scheduling web site, and installing the first video conferencing system were all part of the daily task list. I can't say learning Perl or ASP in the line of work was useful for anything more than giving me a greater appreciation of other programming languages, but it did cement the idea I need to be constantly flexible and open to learn whatever environment in which I am placed.
Another role involved working in a team of software developers on a commercially sold Windows application that gave new life to an antiquated telephony system. Having an actual separate test person in the group was a huge benefit to building a very solid application. This position taught a lot about several software development practices being used in larger corporations--and why they are so important. As a manager myself later, this experience helped me build a better programming department.
Most currently, I have worked in the retail sector providing data integration services and extending functionality to commercial POS (point-of-sale) management programs. This position has had more variety and a steeper learning curve than almost anything encountered before. Every business does things differently, whether it needs to charge a second tax for certain provinces in Canada, process gift messages based on a flag in the line item, update a remote inventory database in real time, use a new payment gateway, provide seamless membership management, or require custom-generated tracking numbers on a complex packing list report, retail is a complex and constantly evolving environment. Sometimes a simple export to a web service is all that is required. Other times, the plethora of plug-ins, timed updates, and carefully formatted files can lead to confusion of the most astute. It's always fast-paced as retailers need new ideas implemented quickly to keep up with consumer demand and new ways of doing business!
While DOS and Windows have been the prevalent operating systems to support and work with throughout my career, there have been interesting side-notes in other areas as well. I've modified Business BASIC code in SCO Unix, supported an email server in Red Hat Linux, hosted multiple Linux-based web sites, and even worked with FoxPro for Macintosh many years ago.
My favorite operating system is Linux (which proves, if there was any doubt, my true geekiness), and although it can be frustrating at times if you don't know the right commands, it's also very rewarding when you can craft a script that automates a complex process. A friend of mine once remarked that "Linux is for adults!" and I soon demonstrated by accidentally deleting all the files in an accounting system just because I put in a space where it didn't belong (fortunately, we were able to restore everything from backups before anyone knew!).
But Linux has its place and it is very useful to have around. The Linux server in my office has been a solid file server for several years. And it's good to keep the skills up for when a project comes along where Linux is an integral part of the system.
The most important thing I've learned over the years is that one should never stop learning. Every project is different, every customer important, and no one technological solution is the one answer for everyone.