There’s little doubting the effect computers, technology, and the internet have had on modern life. From businesses crunching Big Data right down to us as individuals on our cell phones and mobile devices, computers have transformed our modern lives. Computers and, in particular, the internet are now the driving force behind almost everything we do – from how we shop to how we communicate and search for information.
However, computers on their own would be largely worthless to most of us. Rather, what makes our devices useful and usable is the software they run.
What is software?
The word software in computing terms relates to a set of instructions developed to tell a computer what to do. Software makes a computer programmable – or, in other words, capable of carrying out a useful purpose. There are three main types of software (with a fourth recently gaining increasing importance).
- Programming software (the development tools): Programmers use a range of specific languages learned over many years to communicate what they want a computer to do. These languages, while appearing like nonsensical text to the untrained eye, are actually highly structured and logic-based and give coders the ability to write complex statements, which can then be interpreted by machines to create useful actions. Programmers will typically work in text editors, compilers, and debugging software to write and test code prior to release to ensure it runs without issue and without posing a security threat. Most commonly, dev teams will run application security tests at the compilation stage of development to check that their code runs efficiently and safely across different environments.
- System software (the bare-bones base of all devices): Probably without realizing it, you already rely on system software for pretty much everything you do across your full spectrum of devices – computer, laptop, tablet, cell phone, etc. System software encompasses core function software such as Operating Systems (OS), hardware managers and drivers, disk tools and utilities, etc. You could consider system software to be the foundation required to run all the other programs you commonly use in your day-to-day life.
- Application software (the interesting, fun stuff we all use): Application software (now more commonly known as applications or apps) allows us to use computers to perform tasks. Pretty much all the things you do on your tech devices will require an app – everything from your common office applications to media players like VLC or Windows Media Player. The term ‘app’ has, more recently, become associated with the small programs we use on mobile devices, e.g., the Facebook app, Instagram, or any other application you downloaded and installed from the relevant stores. However, in truth, applications cover things as diverse as the security program you use to complex Customer Relationship Management (CRM) programs. They cover most of the productivity, fun, and engaging tools we use every day.
- Embedded software (the next big thing): As our tech has become significantly more powerful with programmable options appearing in everything from toothbrushes to automated vacuum cleaners, so the need has arisen for the development of embedded software to control these devices – plus other machines we wouldn’t normally consider computers. Examples include standalone software built entirely for purpose, to control telecom networks, manufacturing robots, our intelligent home tech, cars, and even things as diverse as traffic control and monitoring programs. As the Internet of Things (IoT) grows in prominence and scale, this type of software will become increasingly important in our lives.
Who develops software?
In truth, it’s rather difficult to draw distinct lines between the specific roles typically seen in software development since there is such an overlap of skills between the disciplines. However, as a basic guide, most development teams will consist of the following:
Software engineers: A software engineer is typically involved at the start of a project to devise workable solutions to identified problems by applying the accepted principles of software engineering. Much like engineering in the real world, these solutions must be proven to be workable and reliable through rigorously interrogating and testing the modeling language.
Software developers: The role of a software developer can be extremely diverse depending on a project’s requirements and can include anything from managing teams and their processes to getting hands-on writing code. Other common tasks include taking project briefs to find ways to make them into features of the software through to general maintenance and testing responsibilities. In essence, software developers can be involved in any aspect of the entire development cycle.
Programmers: Also frequently referred to simply as coders, programmers are at the sharp end of the development process, writing code that delivers the aims and goals of projects defined by the software engineers and developers above them. Programmers write the source code that drives the functionality of the software we all use – anything from secure online ordering systems to displaying images or passing information to databases. There is a huge range of languages available to programmers (some of the more common are C++ and Java). In the main, software engineers/developers will have already decided the best languages and programmers to deploy at the start of each individual project.