I've enjoyed C for its ease of use on all processor families. Although in the early years this meant the use of many different vendors' C compilers as nearly every processor family had their own preferred tool chain/compiler version. C allows techniques from data encapsulation to direct device input/output to be explored but has no formal object syntax. In the early hobby days I was writing C applications for print layout and for serial communications for CP/M based systems for my own use and for use of fellow computer club members while I was in Germany and in Omaha, NE. I even created a complete operating system in mixed assembly and C for both Intel and Motorola microprocessors along with the development library and documentation for my fellow team members to use in developing Optical Drive firmware.
When C# arrived it was at first a challenge as the UI Building was simplified and yet much more capable and of course all the traditional libraries had changed. It, however, provided a much stronger development environment once we got acclimated. As a professional software engineers, we are always working to improve our own productivity, our schedule estimation, and so on. C# was intriguing to me in that I measured a 6:1 productivity gain when moving from C++ to C# on Visual Studio when measuring the time to go from concept to fully operational windows applications with full graphical user interfaces. After seeing this difference in my own productivity, C# became my preferred development platform. My first application in the language was a 9CardGolf game I wrote in 2005 and distribute though the web. Since then I've built and helped build network-based install/upgrade systems, multi-media help systems, and even a control application for CAN (controller area network) devices.
C++ allows us to be much stronger in formal object creation allowing better data encapsulation techniques to be used. It also provided for exception handling both of which allowed us to develop much stronger and larger applications. However, the first user interface support was not as easy to use as we have today. Writing applications for Windows using MVC was not a trivial task. I've written c++ command-line tools to flash 8051-based CAN controllers (ATMEL part) with firmware for Amateur Radio Satellites and I've written Windows applications using Microsoft Visual Studio for large scale Windows-based Logic Analyzers.
For over 15 years I've been working on embedded systems, from developing firmware, integrating additional hardware to even writing complete operating systems for custom hardware. I've worked on Embedded Systems while employed by Telos Federal Systems, Optotech, Inc., Hewlett-Packard, and Agilent Technologies, Inc. Additionally, I Volunteer my time to AMSAT-NA & AMSAT-DL for producing firmware for hardware the flys on Amateur Radio Satellites and I design and build custom hardware and software systems for home control. I've working in C, C++ for these systems as well as Assembly langages for many processor families. I am currently working with XBEE and Bluetooth Low Energy Radios, temperature sensors and more on my home control projects. In most of these jobs I helped the younger engineers learn how to work with the systems, the languages and debug tools such as Logic Analyzers, In-circuit Emulators and Oscilloscopes. These engineers I was helping were of many disciplines (Electrical Engineers working with digital signal processors, Software and Computer Science engineers, etc.)
For more than 30 years now I've been writing software in many languages for many types of computers. I've written software in common high level languages such as C, C++, C#, Objective-C but also PL/I, RPG, COBOL and more. And I've written in many assembly languages for processors of all sizes (8-bit to Main-frame, PIC, ARM, Intel processors, Motorola processors, TI Processors, Parallax multi-core). Along the way writing documentation for fellow engineers to use libraries I've written and helping fellow engineers learn the languages or the processors has always been part of the work! Holding classes for groups to learn or helping younger engineers learn is always something I enjoy. Whether it's helping to learn how to create/manipulate data structures, to handling device I/O, to developing better performing algorithms or how to improve the quality of the code we are producing, we all recognize that we must be constantly learning. I've always helped all of my peers to constantly learn our profession. Let's continue this learning, together!
From operating, programming and teaching assembly language for main-frames in the USAF in the early 80's, administrating HP-UX/ Linux and Windows machines, helping R&D teams learn how to improve their quality of software releases through the use of source-code control best-practices with Hewlett-Packard and Agilent Technologies to one on one sessions helping developers new to iOS develop applications for the iPhone/iPad I've been constantly using and helping other people use and program for/on their computers. This is my main passion. I help people learn about computers and technology.