Algebra without Arithmetic?

Dootrix
The Reading Room
Published in
5 min readOct 7, 2016

The clamour to ‘teach kids to code’ is masking the real issue. We need to teach them problem-solving first.

Simply teaching how to code is not the answer. Or, at least, it is only a part of the answer. We need to teach more people to engineer.

This time last year we launched our own grandly titled University and took on two school leavers as apprentices. We’ve learnt as much as they have and we’re delighted that it’s worked so well for us all. You can read their thoughts here, but it’s also proved our original rationale correct — bright and able young people aren’t getting some essential foundations from traditional education.

Virtually all teenagers are now horribly titled ‘digital natives’ but it does mean that they are all fully-immersed in technology and use software naturally and without fear. However, as Poul-Henning Kamp points out their enthusiasm and daily exposure doesn’t automatically make them natural software developers.

“Getting hooked on computers is easy — almost anybody can make a program work, just as almost anybody can nail two pieces of wood together in a few tries. The trouble is that the market for two pieces of wood nailed together — inexpertly — is fairly small outside of the “proud grandfather” segment, and getting from there to a decent set of chairs or fitted cupboards takes talent, practice, and education.” [from A generation lost in the bazaar ]

When we teach children art we teach them first to make marks then to control the pencil or brush before encouraging them to try and replicate what they see. We don’t teach children sculpture, photography or abstract expressionism in oils before we teach them to observe and interpret the world around them.

Perhaps, in this case, it’s more apposite to suggest that you can’t expect anyone to tackle algebra without a good grasp of arithmetic.

Of course we agree that more and maybe all children should be taught computer programming, but focussing on just teaching ‘kids to code’ hides a wider issue that we face when we hire young software engineers.

They might have experience and even be fluent in JavaScript, but if they don’t understand the fundamental engineering principles behind ‘good’ software development they’ll never become the fluent problem-solvers that make great software engineers.

In his paper Methodologies for problem solving: An engineering approach, James J Sharp concludes that “Problem solving in a practical setting requires more than analytical skills alone. Understanding and insight are necessary to define the problem and to envisage the constraints which limit the range of potential solutions.”

As a country in the UK, and across the broad range of engineering disciplines, we need to revere and respect engineering and engineering principles again — particularly on our more ‘independent’ place in a post Brexit world.

We seem to forget that software development is an engineering discipline. With all the talk about ‘teaching people to code’ the fundamental engineering skills required are never part of the conversation. But of course, Software Engineers are Engineers. The clue is in the name. They solve problems. We need to be creating these problem solving engineers who can navigate and reduce the complex and often contradictory inputs in order to produce a solution that is precise, defined and elegant.

Mathematicians applaud beautiful equations that communicate complexity simply. E = mc2. It takes a huge amount of skill, understanding and creativity to arrive at such a solution. It takes someone who is hell bent on reducing a massively complex problem into something simple and beautiful. Mathematics teaches us to simplify equations; ‘Coding’ only teaches us to create an end result, by whatever means.

By focusing on ‘coders’ rather than engineers we undermine and devalue the skills that are necessary to develop solutions for today’s hugely complex and interconnected systems and devices.

By teaching people to code, we are teaching people to use new tools to create new things. Maybe this is a good start, but it’s nowhere near what’s needed in the real world. We need to teach people to engineer, and we would argue it is this that should come first. Either way it is a combination of the tools, the approach and the methodology that is required learning today, for our software teams of tomorrow.

In the UK we have a proud history of engineering. We do know how to teach and train great engineers. France and Germany have technical colleges where computer science and software engineering is taught, but in these colleges they teach the fundamental disciplines of engineering approach and problem solving, in a way that we often forget or ignore here in the UK.

As Sharp put it, “When they leave University or College many students will be required to solve problems which are ill defined, where insufficient information is immediately available and where a variety of different alternatives might be satisfactory. Under these circumstances it is necessary for their education to include some exposure to a methodology of problem solving.”

To expand on Poul-Henning Kamp’s carpentry analogy, we think well-engineered code is like a Land Rover; strong and robust and perfect for the job, but easy to work on and repair. The chassis is strong enough to take up-rated shock absorbers and a new exhaust pipe is easy to fit without disrupting performance.

Well engineered software code is not only neat and structured and does its job well, but also is easy to fix, to repair and to replace out-dated parts. To build software on those principles needs to start with a problem-solving mindset, not just a programming skill-set, and that’s what we think is missing from the ‘teach kids to code’ campaign.

In relation to software engineering, coding is the easy part; it’s the last part of the puzzle. Solving the problem is the hard part. Solving the problem and engineering a strong solution is what takes 80% of the effort.

We’re damn good at problem solving and even better at coding, so if you need either or both, please get in touch.

--

--

Dootrix
The Reading Room

Mobile, Cloud & IoT. Product Design. Software Development. Hampshire & Manchester.