Current Reading Material: BDD, C++ Metaprogramming and ARM Cortex Processors
Just an update on books I've been reading lately. Shown in the images below are "BDD In Action", "Practical C++ Metaprogramming" and "The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors".
Behavior Driven Development (BDD) is something I've been interested in for a while now. I've been reading John Ferguson Smart's "BDD In Action" for a few weeks and have just about completed it. I really like the ideas around code itself being the source of project documentation where prudent.
I think any software engineer with a decent amount of experience has been in the position of examining documentation that is outdated and doesn't match the software currently in production. Software projects continue to mature and often original documentation does not get updated.
A new engineer assigned to the project might be referred to documentation which ends up causing more confusion than assisting them in getting up to speed. Even if this isn't the case, who wants to maintain two separate sets of documentation? (The actual documents and the code itself)
It seems BDD is a possible solution to this as far as requirements and acceptance testing. BDD allows business analysts, software engineers and quality assurance professionals to work closely together to develop test examples in a non-technical specification.
This "non-technical specification" is an actual language meant to be human readable. Gherkin is an example. Behind the scenes it ties into the actual test suites and product software. User experience friendly tools allow both non-technical and technical people to easily and clearly see what requirements have been met and if any regression issues exist.
With BDD you also get the benefits of test-first development (just like Test Driven Development) but seemingly on a larger scale than just unit tests. It seems like the product itself is developed with a test-first approach rather than just the code. Overall, I really like the idea and plan to experiment with it in my current and future projects.
I'm about halfway through "Practical C++ Metaprogramming" by Edouard Alligand and Joel Falcou. I'm really enjoying this book. C++ template metaprogramming is essentially an extensive language all its own within the C++ language. Its syntax is often not trivial, but the performance and flexibility it can provide are awesome.
With some other books I've read on this topic, I've found myself contemplating how often I can actually use what I'm being taught. Sometimes they seem like neat tricks, but I'm not sure how practical they are. I'd say "Practical C++ Metaprogramming" lives up to its name.
I really like the example they walk through in chapter 2. It's a very real world example of tying together two large existing code bases. One of these is a more modern C++ code base while the other is monolithic and written in C. The solution they come up with by using template metaprogramming is nothing short of awesome.
I'll be interested to see how much template metaprogramming causes C++ to catch on in the world of embedded systems in the coming years. It's pretty clear C is still the language of choice for the vast majority of embedded projects. It seems like embedded software engineers often site things like exception handling and random dynamic memory allocation of containers as reasons to avoid C++ for embedded development.
However, not only can template metaprogramming create better performing code, it also usually results in a binary of smaller size. In embedded development, it seems like both performance and code space are among some of the highest concerns.
I just recently started reading "The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors" by Joseph Yiu. I'm fairly new to embedded systems and processors. I first started learning about them (specifically the ARM Cortex-M4) just last July.
As I work more and more with this processor, writing code and doing projects with it, I'm progressively becoming more and more interested in it and embedded systems. I'm trying to learn as much as possible about the architecture of the ARM Cortex-M4 and how best to make use of the processor's resources.
As mentioned in my blog post last month on Elecia White's book "Embedded Systems", the writing styles of embedded books vary greatly. I'm only on chapter 5 of Joseph Yiu's book but I'm enjoying the writing style and content.
The information in this book is definitely technical, but it's presented in a manner that keeps it interesting. I'm really looking forward to chapters 21 and 22 which involve digital signal processing.