Embedded Software Skills: Staying Ahead of the Curve

As embedded software developers, keeping our skills up to date is a continuous challenge, but it’s essential for us to exceed the needs of our customers. New hardware and software tools are introduced at a relentless rate, and it is not easy to predict what will become an industry staple and what will disappear as a fad.

Admittedly, there is often a natural conservatism among embedded software developers to stick to the ‘tried and tested’, mostly due to the demand for embedded systems to be reliable and robust. It is a tendency that can act as a block to discovering creative ways and developing new skills to solve problems.

Whilst continuous professional development (CPD) is the industry standard of addressing the balance between the old and the new, we find CPD time alone is never enough and we have developed our own techniques and resources to help keep our embedded software development skills honed.

Here is a flavour of how we at Pebble Bay stay ahead of the curve:

Investigating new processors

Today there are many low-cost development kits for embedded processors. The days when you needed bench power supplies and debug probes are now (mostly) gone – a USB link to your PC is now the typical way to power and debug the latest generation of evaluation boards. Coupled with the availability of free or very inexpensive tool chains, this means it costs almost nothing to experiment with a new processor.

Like most developers, we like to get our hands dirty with assembly language and find this is a great way to familiarise ourselves with a new instruction set. We also like to learn how to program new peripheral devices that we haven’t used before. Getting to know the hardware itself can be very instructive and we can establish the good and bad points from the software engineer’s perspective.  Accessing peripherals, handling interrupts and support for real-time kernels are some of the aspects that we find most interesting.

Practising embedded code kata

The principle behind code kata is to have a set of self-contained programming exercises that can be repeated many times, each time giving more insight into the nature of the problem and its possible solutions. Whilst general code kata are quite well-known and can be a very good mental exercise, we have not found many aimed specifically at embedded software development.

For example, here are a few we apply to the systems we’re currently working on:

  • If we had to implement a delay using an empty loop, how many iterations would we need for a delay of 1 microsecond?
  • What’s the bandwidth of memcpy()?  What does it depend on?  Is it fixed or might it vary?
  • What’s the memory cost of a call to printf()?  What does this consist of?
  • How long does it take to handle an interrupt?  What does it depend on?  How would you measure it?

There are many more but you get the idea!

Learning new languages

The Pragmatic Programmers popularised the idea of learning a new language every year. Not necessarily because you will use it in your day-to-day work, but because every language has a slightly – or in some cases radically – different slant on how to solve a given problem.

Whether or not this is directly relevant to embedded software development, we think of this as a good mental exercise. We find when we come back to programming in C, or our other languages of choice, we have a renewed appreciation for its good and bad points and can perhaps start using it to solve problems in more interesting ways.

To accelerate the process, we find Bruce Tate’s “Seven Languages in Seven Weeks” very useful and effective at putting you through your paces, much like a military-grade assault course…

Working together

We find a great way to develop our skills is to learn directly from each other and our business partners. Pair programming and code walk-through are good opportunities to do this, and fit naturally into many projects. We find working closely with each other gives us an insight into how another person would tackle a problem and access to tips and techniques we might not have thought of or used before.

Delivering and attending technical presentations

We attend technical presentations to find out about new technologies and to enable us to delve into details that are relevant to us and more importantly to our customers. We find that trade shows such as the Device Developer’s Conference are a good way to immerse ourselves in presentations, and once there we find it easy to go to a presentation we wouldn’t necessarily have visited on its own. We also run many internal technical presentations as a valuable way of hearing other team members present and sharing knowledge.

Using the Internet

Inevitably, the Internet must be on our list! It seems almost impossible to imagine building software without access to the Internet as it’s become so woven into our working lives.  Access to hardware data sheets, open source software, cloud-based tools, and user / technology forums are just a few of the necessities it provides. Of course it is also an essential resource for keeping up to date with new developments.

The resources we find most useful at Pebble Bay include:

  • magazines and newsletters such as embedded.com and Jack Ganssle’s Embedded Muse
  • blogs, especially from Embedded Gurus – they don’t post very often but the articles are always very thought-provoking
  • webinars from hardware and software vendors – if you choose carefully, they can be a very efficient way to get a quick grounding in technologies you aren’t yet familiar with

In a field which is constantly changing, these are some of the ways we at Pebble Bay continue our professional development and grow our technical knowledge. We’re also lucky to work on a wide variety of projects, each of which brings new insights and learning which we can build on for the next piece of work.

If you have any ideas you would like to share about embedded software development skills, please comment and let us know.