#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.
This philosophy also permeates throughout our organization, too. We hire the best minds we can with the latest experience, and we keep them on the bleeding edge of change.
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.
Personal Development on Day One
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.
A few talks focused on the lack of diversity within the software development industry, the disparity between male and female representatives, but also around color, race, gender, sexuality and other facets of life outside of work. Some of the current online community resources are perceived by many as being the preserve of white males, I’m not entirely certain of that given the environments I’ve worked in, but it does concern me that swathes of people are put off coming into the software industry by this and the stereotype nerdy developer. To be honest, I’ve not encountered many software engineers that fit this stereotype, yet it still exists.
As an antidote to this, one part of the estimated worldwide 4.4 million person C++ community has created a group called #include<C++>, to try to bring together those that feel they want to be part of a more diverse group of peers to discuss the latest and greatest ideas revolving around the C++ world. It is good to talk and share things, this is something I haven’t done so much of over the years as I’ve tended to be quite self-reliant, but it is easy to get into a fixed way of thinking. Exposure of one’s failings to others and acceptance that one rarely knows all the information is how we all learn and grow.
I’m lucky in that 1E has a wide variety of abilities, cultures, genders, sexualities, languages and other traits that our software teams bring together every day to commune on our daily fix of caffeine and bits and bytes within our teams, building world-class software like Tachyon to solve really hard problems. One of the major reasons I joined the company 7 years ago was the enthusiasm I saw in everyone in the company.
I’m very happy for the opportunity to #StayCurrent in my field and keep my finger on the pulse of the C++ world and feed that back into our company and products to help our customers #StayCurrent.