ACCU – For the Unknown Unknowns

 

In the previous issue of C Vu the Editor asked the question “What is ACCU for?” I think each of us has different ideas about what they get, and, more importantly, want from being a member of ACCU. As Alan Griffiths has said on a few occasions in his “From the Chair” in C Vu: the ACCU is what we, the members, make of it. Whilst I can’t say for sure what I’d want to change, if anything, what I can say is what it means to me and how I use it. Your mileage will almost certainly vary…

 

I’ve written in these pages before about my own background and how I came to join ACCU [1]. In short, what I was looking for at the time was a replacement for the C/C++ Users Journal and C++ Report as they had both gone the way of the dodo. What I found took me by surprise because not only was there deep knowledge of C++, there was also a lot of discussion about the higher-order aspects of programming in general.

 

Whilst some might consider a detailed discussion [2] of a three-line C++ function that parses the surname from a comma-separated full name to be excessive, I personally found it to be one of the most thoughtful threads on the accu-general mailing list for some time. What it brought home was how much variation there can be in such a simple piece of code. Not only was the method of implementation open to question, with the obvious C++ 98 / C++ 11 dimension, the choice of argument parsing convention and even the function name itself went under the microscope in attempt to establish maximum clarity. Although this was more information than the original poster was after, for (some of) us bystanders it was an interesting code review.

 

In my experience you just don’t get that attention to detail in the usual forums and newsgroups. Admittedly you don’t want every discussion to descend into that level of deconstruction or we’d struggle to even write our supposed industry-standard 10 lines of code per day. But it’s a useful exercise to go through every now and again to remind ourselves of all the various forces that we need to balance in our quest to produce simple, maintainable code.

 

Whilst I’ve reached a level of programming ability that puts “the basics” into the area of Conscious Competence [3] I’m acutely aware that the range of my expertise defined by Conscious Incompetence grows rapidly bigger. At least the good news is that some of that is no longer filed under the more disturbing Unconscious Incompetence (or as it’s more colloquially known: The Unknown Unknowns [4]). And that I largely put down to my membership of ACCU.

 

A common reply to the question of how to learn more about programming is that there are loads of blogs and forums out there – so just google it. It’s a fair point, but it also misses the simple fact that to google something you have to be aware of its existence in the first place. Sometimes, as was the case with “persistent data structures” I thought I knew what they were until Kevlin Henney’s Immutability talk at the ACCU conference last week. There I discovered those people using them as a synonym for “immutable container” were being economical with the truth. Although it’s quite possible they don’t realise it themselves.

 

Take programming idioms for example. One of the best methods to learn about new ways of working is to learn other programming languages, because they force you to solve similar problems in different ways. When you’re the one attempting to establish a new idiom based on some other language it’s easy, but when you’re the maintenance programmer staring at some “weird code” wondering what on the author was thinking it’s a different prospect. Sometimes there can be a fine line between genius and incompetence.

 

Have you ever had a problem, spent hours googling it, found the answer and then tried to google for the answer again based on what you now know and found the answer at the top of the results list? I find one of the biggest hurdles to finding the answer to some of the less technology specific programming questions is knowing the correct terminology to use in the question. What most of my initial googling tends to be is fumbling around trying to find the correct words to use for the right search query; once I have them the answer generally comes fairly quickly, or there are no results and its back to square one.

 

For me ACCU plays a large role in the serendipitous side of programming. My awareness of my programming surroundings comes largely from being a member of this specific organisation. There is also a time and a place for pedantry and I personally believe that more often than not its use within ACCU discussions has a positive rather than a negative effect. I want to understand and use the terminology of our profession (and the ideas embodied within them) with precision and, so far, I think being an ACCU member has been the most valuable way of achieving that.

References

[1] The Downs and Ups of Being an ACCU Member, C Vu 25, March 2013

[2] accu-general thread “Clearest code”, January 2014

[3] http://en.wikipedia.org/wiki/Four_stages_of_competence

[4] http://en.wikipedia.org/wiki/There_are_known_knowns

 

Chris Oldwood

16 April 2014

 

Bio

Chris is a freelance developer who started out as a bedroom coder in the 80’s writing assembler on 8-bit micros; these days it’s C++ and C#. He also commentates on the Godmanchester duck race and can be contacted via gort@cix.co.uk or @chrisoldwood.