#StayCurrent is a hashtag that 1E uses to promote our products because this is what we help our customer organizations do. Staying current means being up to date on the latest software patches and practices that many other 1E blogs have covered. Staying current means companies are far less likely to be prone to security flaws within the gazillions of bits that make up the software estate, and therefore less likely to suffer from being successfully attacked by viruses and malicious individuals. Being on the leading edge also avoids the chance of falling into expensive ‘out of support’ contracts for ‘legacy business critical systems’ like everyone’s desktop.
Nowhere is this more important than inside our software development teams that engineer our products. We have training budgets set aside for all employees to help with the massive task of expanding their knowledge and absorbing the latest technologies and practices, whilst doing their day job too.
I work on our Tachyon Agent, which is written in C++ and the code base supports many platforms from Raspberry Pi, Android, iOS, Windows, Linux and other flavors of Unix. Currently, we are writing code to the C++11 standard to support all those platforms, but there is scope to move forward with our code base onto the newer versions.
As part of my personal development this year, I requested to go to ACCU 2018 (pronounce it ‘ack-coo’ rather than ‘ay see see you’, much more friendly). This is a five-day conference for about 500 people to share and exchange ideas and thoughts primarily with a C and C++ focus or leaning, but it also covers software crafting approaches from many levels and exposure to other languages and concepts. There are many famous authors and speakers from around the globe giving and attending talks, all with the primary goal of sharing knowledge and learning from others.
I’ve been using C since 1987 and C++ since 1991. I graduated in 1993. Since then, there have been several C++ standards published. There was a long wait until the first ISO standard in 1998 was published. Followed by an even longer wait until the next major version was published in 2011, but there was also “TR1” an extension or sweetener in-between for those longed-for features. There has been a minor revision in 2014, and a medium revision in 2017.
One massive thing I learned at the conference is that C++ is now on a strict three-year release cycle, so every three years there will be changes to the languages published, and C++ 20 is set to be a massive change to the language.
‘Changes’ includes new features or optimizations (like move semantics and copy elision) as we have come to expect, but as ‘14 and ‘17 have shown it also means deprecations. This is usual for C/C++ in that the standards committee have always tried to make old code compile (although the C99 standard could break things, but that was nearly 20 years ago!).
Now, if a feature is ‘broken’, it not just deprecated, it is removed, meaning that existing C++ source code might need a radical overhaul to bring it into the present. Parts of the library or language have been deprecated in C++14 and in C++17 they have been removed and new parts deprecated, some because in hindsight they have confused rather than enhanced our lives (for instance auto_ptr has gone in C++17), some because they allowed dangerous things to happen and not report any errors when they didn’t work (Unicode character conversions).
I spent an entire day learning C++17 insights from Nicolai Josuttis and the 60 other people in the room including three or four active C++ committee members that I happened to sit between on the front row of desks who were also chipping in with potential upcoming C++20 changes and filling in with facts and trivia on the whys and wherefores. By the time C++ 20 is published and fully available in compilers … I’ll be celebrating my 30th year of working with this amazing language. I am also starting to help my nephew learn this massive language, trying to avoid the old features that I am familiar with and trying to present the new way of doing things.
The remaining four days of the conference were filled with fascinating talks and ideas from many and varied presenters. Below are a few highlights that show the diversity of topics covered.
A topological mathematician talked about the shape of computer programs, how they can be represented in space and visualized, covering branching, looping, pre and post conditions, etc. This is something my brain has always done, I have a very good spatial awareness and often find myself flying around the code-scape in my brain whilst coding and designing solutions.
One speaker led us through how airline pilots react to the high-pressure situation of their airplane failing in-flight and what the manufacturers have learned from the recovered black boxes of how humans react to their inputs under high stress and what simple things this industry has done to help the pilots correct and keep the plane in the sky. A big parallel was drawn with diagnosing production systems that have gone wrong and not being misled by what we perceive we are looking at.
All pilots have access to books of checklists for all known situations the airplane can get into, from preparing to start the engine before a flight to shutting everything down afterward. Apparently, even inflight they usually have quite a lot of time to diagnose issues, if they follow the checklists then it focuses their minds on diagnosing correctly, rather than the two pilots doing equal and opposite things with the controls, the net result being that nothing changes, the situation continues apace with disastrous results. For this presenter, a simple post-it note stuck to their screen with the words “are you on the right server?’ has saved them many times. A warning to produce properly diagnosable systems and plenty of salient documentation, focusing on what the human might see happening and what mitigations or remediations they can make to help. I certainly wasn’t looking for that talk but I’m so glad I attended it.
An author spoke in a lightning talk about a mental breakdown they went through two years back; what lead up to it and how they have changed things in their life to avoid the build-up of pressure again. Something we all could suffer from at any moment. Extremely powerful stuff that reveals that we are all just human at the end of the day and we’re all finding our way, even those we might elevate to a higher plane than ourselves. We need to work together to solve problems rather than an eternal internal debate on our own abilities and fear of failure.
There were introductions to other languages: Kotlin, Rust, Swift, dotnet Core, Docker; Agile practices and pitfalls; approaches to test driven development and not using mocking frameworks; machine learning; people management and lots about personal development.