For many people they just except that software exist as some form of stuff that allows you do do things on computers or is hidden inside machines. In a way software can be as hard to physically get hold of as it is to see the flow of electronics in a wire or see the flow of air particles generating a vortex off a wing tip. However software is a important components in nearly everything you touch, from the mouse your scroll around the page with to the hundreds of servers that send you search results when looking for that next holiday. Software engineers are a massive part of the industry but what does software really do and can software really break?
It would be difficult to explain software and how the flow of code works in a modern computer as they have become very complex machine. Instead its possibly more easy to understand the core of what software is and for that we have to go back in time, to a dark time of war and one of our engineering greats – Alan Turing.
Until then machine and I mean big mechanical machine used gears and pulleys to drive mathematical engine’s. In fact that code machines like the German Enigma and the tools the UK were using to crack them were nothing more complex than complex calculators working on fixed hardware driven rules. What Turning realised however that instructions did not have to follow a fixed path like that of solving a mathematical equation. If the instruction could make decisions then the flow could change.
Some of the mechanical machine used a form of linear program already and are most recognised in the form of punch cards or punch tape. These were being used form everything from playing a piano to weaving pattens into fabric. What Turning did what to add some simple instructions that did not effect the output of that machine but the flow of the instructions.
Software engineers now see these commands as IF..THEN..ELSE, GOTO, GOSUB (Or CALL) and RETURN. The IF..THEN..ELSE allowed for simple flow changes in software, IF something is true THEN do x ELSE do y. GOTO allowed the software to jump to a given point and GOSUB allowed access to a function that could be called from anywhere to perform a set task, always RETURNing to where it was called. Along with mathematical functions like adding and subtraction and the ability to store values the first computers were formed. Today computers however complex they are still follow these simple instructions and even modern software today will still run on a Turing Machine.
As electronics advanced we moved away from punch tape to an invisible for of storing computer software in the form of magnetic tape then to magnetic discs (hard drives) and even now to solid state memory and flash drives. Electronics has reduced computers from the 60’s that were the size of a room to computers in the 80’s the size of a shoe box to full systems on chips only a few millimeters across. Software however has grown larger and larger as computers are now able to process the instructions quicker and quicker and store more and more data. In the 1980’s a home computer could run around 250,000 instructions per second and store the content of just this single blog in memory. Now computers massive amount more and run at unbelievable speeds. This has allowed software to make major leaps forward it what it can do – not because its changed what it is, but because the time it takes now is so much smaller.
One great example of high speed hardware and software is something that you have all seen. Computer games. For anyone old enough you will remember ‘pong’ the tennis game. It looked nothing like a tennis game, the ball for square and did not arc across the screen or change pace depending on how hard you hit it. However toady’s Wii tennis game has all that to the level you feel like your in the game taking those shots.
The visual level of graphics and the complex software that stress test components before they are even build. The design tools that you use to draw with and embedded code in our meters are now as complex and often are more complex than the hardware they sit inside of. Software is a massive component.
As such a component you may ask does it break like a over stressed diode or support beam? Well this is one of the beautifully things about software, in its self a well written program will not break, the hardware and mechanical stuff around it can and can miss lead it to think things are different from what they are. However software like all components, electrical and mechanical must be well designed. Its weakness is us the engineers. The following two videos shows what can go wrong in complex systems, are these faults due to the electronics or mechanical failure? no there were both caused by bugs – bugs left undiscovered in the code my humans then engineers. So as software becomes more and more part of the systems we design, we must remember that it also needs just as much testing as any other part of a design.