It’s difficult to believe we’ve been writing articles for 10 years. In that time I’ve written over 90 technical articles on C, C++ and embedded system design.
To celebrate I’ve picked my ‘Top 10’ articles, with a little background into why I enjoyed writing them so much, or the story behind them.
So, sit back, cue up “At the Sign of the Swinging Cymbal“* and enjoy.
(* This really dates me!)
Anyone can take a complex topic and make it completely impenetrable. It takes a lot more effort to find a simple way to explain a potentially complex idea. That’s really our goal with these articles: If you come away from reading them thinking “well, that’s was obvious!” then we’ve done our jobs properly.
Sometimes you start with an idea for a short, simple article and it kind-of runs away from you. Who thought you could write (or even want to write) more than 2000 words on the dot operator?
Coding standards are very commonly written in a dry, formal, “thou-shalt-not” style. Occasionally, it’s good to explore the consequences of disregarding coding guidelines.
The Swiss Cheese model is an idea for effective testing we’ve been extolling for years. The principle is that any verification or validation technique has its strengths and its weaknesses. Applying multiple techniques exploits their strengths and helps alleviate the weaknesses.
Priority, in concurrent systems, is a term where people seem to be able to explain the ‘what’ and even the ‘how’; but very rarely the ‘why’.
I wrote this article to give engineers a more concrete understanding of what priority actually means for a system.
Over the years I’ve developed a bit of a love-hate relationship with use cases. The problem with such a semi-formal technique is that it can go off in all sorts of ‘interesting’ directions; not all of which are necessarily very helpful. Over the years I’ve made all the mistakes and reaped the consequences. I developed a framework of rules (13 of them, hence the title) to make use cases more coherent and more usable. This series of a articles explores these rules.
The idea for this series of articles came from Niall – could I explain the core new features of Modern C++ in articles of 600 words or fewer?
Modern C++ can be described as being “whatever is considered good practice in C++, today”. That not only means new features, but also new ways to do things you could already do. The Bitesize articles predominantly focus on these new ways to do old things. They are the changes you can make to your existing code base to make it more ‘modern’.
Feabhas focuses on the embedded market. Hardware manipulation is our bread-and-butter.
Traditionally, low-level I/O code is the preserve of C programming. This series of articles focuses on hardware manipulation using Modern C++. The aim was to use some of the more sophisticated features of the C++ to produce rich, powerful and flexible interfaces without sacrificing anything in efficiency to C code.
This article changed the way I write technical articles; and teach, too. The review of the first draft came back with the comment: “I understand what you’ve written about lambdas; but why would I use them?”
This is the problem with so much technical content on the Internet: many people can explain – in ferocious detail – the mechanics of software features, but not the value of them. Without knowing why something is important, understanding how it works is pretty much irrelevant.
If you’re an experienced C programmer you’ll know there’s a somewhat complicated – some might say ‘unholy’! – relationship between arrays and pointers. This article came as a result of how I’d been teaching arrays for a number of years.
This is probably the most tongue-in-cheek article I’ve ever written (for example, it explicitly encourages you to name arrays “arr” so you can talk like a pirate!). It was written in an Edward-Snowden-whistleblower-style to give a bit more humour to what is a fairly complex topic.
…and then it got picked up by HackerNews…
Glennan is an embedded systems and software engineer with over 20 years experience, mostly in high-integrity systems for the defence and aerospace industry.
He specialises in C++, UML, software modelling, Systems Engineering and process development.