Coding

Software Quality and the Danger of Professional Code Monkeys

“Software Engineer”, “Computer Programmer” or “Developer” – these terms seem to be used interchangeably these days right? I suppose it is a step up from “the IT guy” but to consider these as the same role is rather missing the point. For many years I have discussed the merits and challenges in trying to differentiate the terms. In recruiting I insist that we are looking for “Software Engineers” which in my mind means something quite specific but given the applicants I see does not necessarily mean the same across the board. In fact the most vociferous response I had to that moniker was from engineers in other disciplines. “That’s not engineering!” they said, “There is no certification, no accountability and no rigorous standards you adhere to”.

The sad thing is – I think they are right. If we, as software engineers (or professional developers if you prefer) wish to be taken seriously then we have to listen to these criticisms. Engineering requires standards, it requires life long learning and it requires true accountability for actions. Think about a civil engineering project – nobody stands for a complete failure of a building or a bridge – but software issues are both expected and largely ignored. If we expect to be taken seriously then we need to hold ourselves to similar standards. It is a sad reflection on the state of the software industry that “Have you turned it off and back on again?” is globally understood as the remedy to most issues. Yes computer systems are complicated and yes the number of variables at play can seem daunting but does anyone truly believe that we are dealing with more complicated systems than the real world? At least computers do precisely what they were programmed to do – if we can’t explain what happened then we’re probably not very good at our job.

In my mind this is at least partly due to the considerable effort put into “lowering the barrier to entry” within the software world. The idea is an important one but it has led to a generation of software that can literally be put together by copying lines from popular Q&A sites and pasting into a development environment. If the code runs and seems to work the we’re done. Well no, not really. Is it tested? Is is easy to use? Does it conform to the design criteria or specifications? What happens if a user enters unexpected information or commands? What if the internet goes down or there is a failure in some subsystem? (A rhetorical question of course, as we will turn it off, back on and try again.)

There is no wonder that software gets a bad reputation when you look at what we expect people to put up with. User experience is touted as a glorious new concept – but how can we defend the creation of software that made no sense to the uninitiated? Do automotive manufacturers expect people to read a user manual before stepping into a new car? Can washing machine or dish-washer designers expect folk to attend a training event at a local store? The very idea that people are scared to try new software or upgrade what they have indicates the fragility of the ecosystem that we have all been complicit in creating.

Whether it was an intentional move to improve the recruitment pipeline or if it was implied in the requirements of a young software company there is a new push for “fast tracking” a software engineering career. At a recent meeting of the ScotlandIS software engineering leaders forum we discussed this very topic and around the table nearly 80% of the attendees thought we should be able to take a graduate level computer programmer and accelerate them to a senior software engineer in 18 months to 2 years. Can this really be an expectation that people have? My experience has shown that, even with a world class academic institution or phenomenal technical organisation behind you, it’s more likely to take 5 to 10 years to attain a high level of discipline in this field. Even if the “hard skills” can be learned in a compressed time-frame it will still take a large amount of practice to understand how these concepts apply in different situations.

The only source of knowledge is experience.
– Albert Einstein

Like it or loathe it there are various movements aiming to improve the stability and professionalism of our beloved software ecosystem. Test Driven Development may be the marmite of the software development world (you either use it religiously or are adamant that your team can’t spare the time) but it understands that quality is an issue for software creation. If we are to be taken seriously by engineering organisations, professional bodies and the populace at large then we need to think hard about these standards. Perhaps the British Computer Society are on to something with their push to get chartered status for software professionals? Such a move may be an additional hurdle to professional status but that does not have to mean it’s any harder to get started in the industry. If we can successfully champion the importance of separating learning and exploration from the creation of consumer and business products then perhaps we can actually raise the bar for software quality and earn our engineering status.

(Image from Code Monkey animation – visuals by idleambition, original song by Jonathan Coulton)

That’s a Fyne deck of cards

I wanted to start looking at other uses for vector graphics in an application as I develop Fyne further. Then it came to me, a card game!

I managed to find a great public domain set of graphics and whipped up a card back from the fyne logo. From there laying out a simple solitaire board was a piece of cake by just implementing fyne.Layout :).

I’ll upload this to the examples repository once it is a little more complete – I didn’t think that a gloried screenshot justified the code push. But for those who want that screenshot here it is 🙂

More to come soon I hope!

Back home at CodeBase

Although it feels like only yesterday I realised this week that I moved out of CodeBase pretty much a year ago. In that time I have missed the community spirit and light-hearted competitiveness of the various individuals and teams working to build the next big thing. Whilst I have enjoyed my time working on various coding contracts and technical leadership consultancy placements (most recently through Intuitus) it seemed time to push myself to start a new venture.

And so here I am again! The kind folks at CodeBase managed to find me a desk in their co-working space which plays host to many companies, most of which I had never met before. While I guess I was never too far away (I tried to keep the CTO group running during the last year) it is great to officially be back in the building, bootstrapping and learning alongside some of Edinburgh’s brightest young business sparks.

If you’d like to know more about my plans then you can watch this space, or that of the brand that I’m developing named FossFish. The plan is to do something big in the open-source-meets-business arena which I’m excited to share more about soon. In the meantime we are working on some enabling technologies including Fyne and others which will be announced later.

If you’re in the neighbourhood please stop by and say hi 🙂

The First 10 Days of Fyne

Wow it’s been a busy few days getting the Fyne project up and running. It’s been well received by a large number of people already – gaining more people on our chat channel in 1 week than the Edi IDE project gained in almost 2 years!

To mark the occasion of 10 days I added a blog post (and blog page 🙂 ) to the website summarising what we’ve done so far. If you just want to check out the details then check out the github project.

Go is proving to be a powerful and quick to learn language – check it out!

Interview with TalentSpark

Recently I spoke to Ewan Anderson from TalentSpark about how I got into software and where I see things going. We chat about company culture and how to choose who to work with too. I hope it helps to inspire a few more into joining a tech startup!

If technology is the future and computers are ubiquitous then software must be the building blocks of our society. Don’t we owe it to ourselves and to each other to make that freely available to everyone?

Multi-touch on Enlightenment

At FOSDEM yesterday I was demoing the Enlightenment IDE that I have been working on. My laptop is a touchscreen and I had it in tablet mode for the demo, so far so good. Until a couple of sharp attendees noted that there was no multi-touch. Huh, neither it does.

Enter rasterman – “Did you enable xinput2.2?”, erm no, no I didn’t…

Passing –enable-xinput22 to the efl ./configure fixed it! magic 🙂 The image above shows 2 taps simultaneously in the elementary_test Gesture Layer 2 demo.

Job done. Now to fix a couple of multi-touch gesture bugs I have found :(.