capability. Examples of this type of software include Microsoft Windows, Apple’s iOS, Android and Linux. End users can access the capabilities of this type of software via applications that have been written to use the interfaces made available by the system software. Examples of applications that use the capabilities of the system’s software include Microsoft’s Windows Explorer and Apple’s Finder, both of which give the end user access to the file system which is managed by their respective operating system.
Companies that employ developers to write this type of software tend to be specialist IT or computer-focused industries, the majority of which will be large companies or organisations.
To work as a developer in this area you will generally need a good understanding of hardware and how hardware and software interact, plus an understanding of file systems and interfaces for input/output and data exchange. Working in this area you would be more likely to have formal degree-level education in hardware, software and systems engineering.
Enterprise programming
This type of software is written with a business or organisation in mind; it is designed to help run the business or organisation or to support the business goals. This type of software tends to be aimed at large businesses, sectors or organisations such as government or education.
The type of product created in enterprise programming targets areas such as accounting, payroll, human resources and project management. There are many other types of enterprise software; the key thing they all have in common is that they are not aimed at helping individuals, but organisations more generally.
Companies that employ enterprise developers may be general software development companies or companies that specialise in a particular sector, for example education, and produce software specifically for that sector. In some cases, it could be a large company that has its own IT services department which includes developers who produce software for that company. This could be company-specific or could be sold to other companies in the same sector.
There are also some products in this area that are aimed at small to medium-sized enterprises or companies, which provide some business support software, for example SAGE, which provides accounting software. It sells software with different capabilities and prices based on the size of company it can support.
To work in this area you would often need some knowledge (or need to gain some knowledge) of how these enterprise-level applications work, although you may be able to join a company in a junior development role and learn the business skills on the job depending on the sector.
Application programming
The line between enterprise programming and application programming can be a little blurred because enterprise programs are often considered applications themselves. This definition uses the term ‘application programming’ to try to differentiate development in terms of scale and use. Where enterprise software is designed to help to run a business or to support business goals, application software is designed to support the needs of individuals, which may or may not be work-related. You will doubtless see a crossover with these two types of software, for example social media, originally designed to help individuals stay in touch but now also used by some businesses particularly for things like marketing.
The range of applications is very broad and can encompass products such as games, music players, word processors, social media, fitness trackers and browsers.
This category includes apps that are designed to run on mobile phones or other mobile platforms, such as tablets or watches. These apps are often referred to as ‘native apps’ and are available via an app store, for example, iOS App Store or Google Play.
A very wide variety of companies provide application software; they can be huge corporates with hundreds of employees right down to one-person companies. This can encompass start-ups which will have one or two people with a great idea and that may then grow into larger companies.
Application programming: games
One specialist type of application development is games, which is almost an industry in its own right. All of the skills and knowledge mentioned in this book are still relevant for the games developer but with the addition of imagination and often artistic or graphical flair.
Games can run on many platforms from specialist games consoles to computers running a variety of hardware and operating systems. The games can be single or multi-player and may run over networks or on an individual device.
Specialist games development companies will employ this type of developer for the large gaming platforms such as games consoles, while other companies may employ games developers for educational games or games that may be embedded in a webpage.
Website development
This is where the number of modern development roles has really increased in the past few years. With the advent of the internet, companies (and individuals) have the ability to reach a much wider audience; all they need is some form of web presence. Website developers can give them that web presence, and have the capability to make web-based apps, ecommerce sites and social media sites, plus sites that can leverage mobile device hardware capabilities, for example GPS for mapping and a camera for uploading images.
The developer products described in this section have included software that could be one program, or a system comprising several programs running on a computer that provide a solution or capability. Website development is slightly different in that the product (the website) is designed to run over the internet (or intranet, a company-only network).
When you use a website you usually use a browser, for example Chrome, Edge or Firefox to get the website using a URL (the web address you type in). There could be different code running on the server-side (the computer the URL gets the website from, also known as a web host) and the client-side (that’s the browser on your device). For website developers this gives rise to (at least) three possible roles: client-side (also known as front-end) developer, server-side (also known as back-end) developer and full-stack developer (does both client-side and server-side development). You may also hear about a role called UX (user experience) developer or UX engineer; they specialise in making the user interface (the front-end) of the website better for the user, for example by making the design very easy to use. UX engineers generally differ from front-end developers based on their additional training in UX design and accessibility plus the fact that they may develop components (parts) of a front-end rather than the whole front-end application.
There is no typical type of company that employs web developers; company size could be anything from one person working at home to vast corporations that employ thousands of people. Company type could be in-house developers for a specific company, an agency employing contractors, a software house or other organisation. The location options are equally diverse: developers could work remotely on a freelance basis, from home as either a full-time or part-time employee, on site at a customer’s office or, more traditionally, in a company site or offices.
Embedded, real-time or firmware programming
Embedded, real-time or firmware are all specialist types of software that are used to control hardware in some way. Types of hardware could include, but are not limited to, domestic appliances, mechanical sensors, medical equipment and robots.
Software is described as being embedded when it is effectively installed on the hardware it controls; real-time and firmware are types of embedded software. Embedded software also has a wider description in that it is used to control (run) a specific machine or piece of hardware; for example, you will find embedded software in washing machines and central heating systems.
Real-time software runs within specific time limits, this is important in devices that are timing-specific. Common examples of devices that have real-time software control are heart pacemakers, anti-lock braking systems and fly-by-wire aircraft control systems.
Firmware is embedded software that is permanently stored on a hardware component. It is not generally expected that this type of software will change (hence the name ‘firmware’ is between hardware and software, software will change, firmware could change, hardware won’t change). The firmware will run from its storage location and is