Lately in my computing lessons I have been learning about the different types and functions of software. Software refers to instructions which can be understood and executed by the hardware, whilst hardware itself is the physical electronic parts of a computer including a processor and memory. The two main types of software are System Software which runs the hardware, and Application Software which lets the user do non-computer tasks.
The different types of Application Software relate to different functions, and these are simple General Purpose programs like word processors which can perform a variety of tasks, Special Purpose programs like media players or web browsers which only have one primary function, and Bespoke tailor made programs like CCTV systems which are expensive and have one very specific and complex function. On the other hand the four types of System Software are Operating Systems which act as a user interface (e.g. Microsoft Windows) to make the experience of using a computer less complex, Library Programs which store commonly used operations such as programming functions, Utility Programs which maintain the computer such as a program which formats the hard disk, and Translators which translate between different programming languages.
One of the three types of Translators are Assemblers which convert assembly code into machine code which can be understood by processors. Alternatively Compilers that compile high level languages like VB so they can be understood by the hardware (this process is done only once), whilst Interpreters run high level language programs one line at a time, which are slow and this process has to be done every time as they produce no object code, though they are used in software development for debugging because compiling is not necessary.
Additionally I learned about the four different generations of programming languages - which can be categorized as either low level or high level languages. Low level languages are specific to a processor, the most basic first generation language being Machine Code which is comprised of sequences of binary digits that can be understood by processors as instructions, whilst the second generation describes Assembly Code that consists of sequences of numbers and shorthand phrases (e.g. 'ebx') which are translated to Machine Code and executed. Computers can only actually 'run' machine code, and all other languages must be translated to be run. A program written in machine code or assembly code can only be run on that computer, as the way it is written is unique to the processor, meaning that they must be written in a high level language to be distributed. On the other hand, high level languages can be used by any computer, and mean more to humans when read. They may either be Procedural (third generation) such as Virtual Basic and consist of instructional key words (e.g. Answer = Num1 / Num2) or Declarative (fourth generation) such as SQL and specify a problem's nature instead of its solution.