Much of my early fascination with computer programming arose from the ability to create tangible working things out of nothing much more than a few ideas.
- Mathematicians create new mathematical models and systems by applying logic and imagination to existing mathematical ideas. Generally, however, these imaginary systems only come to life in the minds of mathematicians. For most people, they are a set of vague concepts or pages of incomprehensible equations.
- Engineers need physical raw materials and manufacturing processes to take their ideas beyond designs on a drawing board.
- Craftsmen need years of practise to perfect the skills required to produce things of beauty from basic materials.
- Great story tellers create new worlds and bring thoughts to life through words printed in a book. However, the contents of a book are static. The book does not react to its reader.
In contrast, as a computer programmer, I can mix ideas and imagination with logical reasoning to design and create software programs that might be used by almost anyone; programs that can react to their users, and whose construction consumes no physical raw materials except for a small amount of electricity needed to power the computer.
At one extreme, I have written programs that play simple games, that display ‘quotes of the day’ on an internet web site, or sort the contents of a book index into the correct order. At the other extreme, I have helped to write computer programs that monitor and control boilers and turbines in electricity power stations, and other systems that automate the complex business processes for telecommunication licenses, commercial loans and corporate insurance policies.
This almost magical ability to create something out of next-to-nothing, from simple games to power station control systems, is only part of the fascination of software development. It does not take much involvement before you realise the amazing variety of knowledge, skills and disciplines required to design and develop really good software. For example,
- to understand what a customer really wants in a new piece of software requires information gathering and analytical skills
- for software to work correctly requires the rigorous application of logical and mathematical reasoning
- if software is to be easy to learn and a pleasure to use, a basic appreciation of psychology and graphic design is needed
- producing good user and technical guides for software needs an ability to communicate well in writing
- working well in larger or multiple teams developing complex information systems has significant project management, coordination, and leadership challenges.
and then there is the ever-increasing array of specialist technical areas: databases, user interfaces, network communication, programming tools, operating systems, etc.
Over the years, I have collected my fair share of software-development-related frustrations and horror-stories. These have occasionally buried it for a time, but the fascination I experienced as a schoolboy learning to program my first computer (a 1982 Sinclair ZX Spectrum with 16Kb of RAM) still remains nearly thirty years later.