Developers tend to hone their tool skills to make their job easier and to get it done faster and better. Programmers learn the idiosyncrasies of compilers and operating systems. Hardware designers check out the architecture of the processors and peripherals.
It’s a good idea to improve your expertise in the tools you will use everyday, but don’t forget about exploring new areas. Unfortunately, many engineers tend to explore very close to home.
For instance, working with Windows can be daunting for programmers given the wide range of interfaces available. You could spend all your free time learning this vast array of software.
While there are new architectural features to learn here, even more are hiding in other areas. That’s why it might be a good idea to try something new. The same is true for most environments, including Linux. You never know what you will find.
Take programming languages. Most embedded developers use or are familiar with C. By percentage, C is used by the largest number of developers and in the most projects. It’s hard to argue with success, but C has many deficiencies and limitations. One obvious area C programmers can explore is C++, especially since most programmers will have a compiler that can handle both.
Moving away from these closely related languages, we find Java, which offers many features not found in the two C languages. C and C++ programmers can learn a great deal by working with Java. But many other languages are worth investigating as well.
Ada is a good example of an option many programmers overlook. If you’re looking for programs that have been rigorously designed, tested, and approved, then you’re probably reading Ada. Safety and security standards for more popular languages like Java are based upon features already found in Ada.
Although Ada is conceptually similar to C, C++, and Java, you need a slightly different frame of mind to use it—and that’s a good thing. For example, why should you consider using nested functions and class definitions? How does this improve programming and support? Is partial initialization important? Working with Ada can answer these questions.
Scripting languages such as Python, Perl, Ruby, and PHP also offer a wide range of options. Given improvements in native-mode JIT (just-in-time) compilers, these languages can even be used in embedded applications. Using them will help developers understand how to take advantage of the scripting-language features that aren’t found in Java or C++.
And, check out dynamic typing and different exception handling mechanisms. Improved productivity often results from scripting languages, so it may pay to learn one or more to see how they might be integrated into a future project.
So far, we’ve only hit the tip of the iceberg. Environments like UML (Unified Modeling Language) are vastly different from conventional programming languages. Of course, you can even learn a great deal from environments and languages like Smalltalk, Lisp, and Haskell.
Yes, these environments tend to be rather foreign to many programmers, but shaking up your view of the world can only help. It can also reveal where many of the “neat features” of a more conventional language actually come from. For instance, garbage collection is a Java feature that was heavily used long before its Java incarnation.
Look for operating systems outside the mainstream. Check out Vita Nouva’s Inferno, or, closer to home, BSD. Several other small operating systems provide some interesting features worth playing with when you have the time, too.
Programmers have the advantage in that most compilers and operating systems will run on a PC. Dual-boot or virtual-machine managers like VMware let you evaluate software on a PC without having to worry about getting extra hardware. Still, if hardware is your bag, then you can hone hands-on skills for minimal cost.
Whereas evaluation and open-source software have been around for quite some time, low-cost development kits are hitting the shelves now. Kits cost less than $100, with many coming in under $30 complete with software tools. Now you can check out a new chip instead of just reading the spec sheet.
Three things have been making this possible. The first is open-source software. The second is low-cost debugging tools. Putting a JTAG emulator chip on a kit’s module is now a trivial and low-cost exercise. Finally, USB provides the universal PC interface and power supply.
The bottom line is how much time you have to spend on improving your technical skills and how you are going to do it. What are you waiting for? You might discover something you weren’t even looking for.