An Introduction to Software for non-experts
1. The Code
the nature of code itself, voluminous and difficult to read for the non-expert;
the variety of different programming languages (C++, C#, Java, Python, Perl, Rust etc…) used for different types of applications;
the process of conversion from higher level human-readable, to lower level machine readable and from language to language:
compilers – s/w programs for converting source code from higher level to intermediate levels or lower (binary) level
assembler programs – s/w programs for converting low level source code (intermediate level) to binary machine code
translators – s/w programs for converting one programming language to another
2. The Aggregation of Components and Resources
the variety of things that make up a software program that can be executed (installed and run) on a computer
applications usually need independent independent data/information sources (database programs)
applications usually need to access pre-existing functions or routines to provide additional functionality to make the program work as intended (cheaper to re-use what is already available than to try to build entire functionality from scratch) – such upstream programs are referred to as ‘libraries’
different parts or layers of the computer system need software to provide the necessary connections for a given program to run and function optimally as part of the system – application programming interfaces APIs are used to provide this connection between:
two or more programming languages;
applications and their libraries and databases;
programs residing in the kernel space of the operating system and applications in the user space;
the operating system and the CPU and other peripheral hardware;
systems, in order to be scaled, need to connect to other systems both upwards and outwards thus creating software ‘stacks’ that also need to be controlled by other software programs (‘middleware’)
peripheral devices and their components forming part of the system on which the software program is designed to run will also have software components often in the form of microchip embedded software but also in the form of device software, all of which require not only APIs but also programs (drivers) delivering basic instructions to the s/w embedded on a device chip’s integrated circuitry.
3. The Interfaces
interfacing with other programs (code) at the application level (suite of applications)
interfacing with other code at the operating system (OS) level
interfacing with devices and hardware in the system architecture (see drivers and APIs)
interfacing with sub-components in an executable program (i.e. databases, libraries and other dependencies)
interfacing between device platform software and other applications (e.g. applications for mobile devices)
interfacing with software tools and applications in the build, test and simulation environments
4. The Technical Infrastructure for Installing/Storing/Transferring Software Code
There are a multiplicity of physical media, locations and ways of conveying software code into the architecture of a computer system depending on the nature, size and complexity of the system and on the type of software involved:
storage in computer hard drive
storage in RAM
storage in CPU cache
storage on GPU (graphics card)
storage in data files
embedding into device ASIC
PCL
storage on memory stick and transfer via USB port
storage on floppy disc
storage and transfer by plug-in or extension
remote storage and installation via internet download
remote flashing
linking in executable
linking during run time or on execution