Software can be split into two main types - system software and application software or application programs. System software is any software required to support the production or execution of application programs but which is not specific to any particular application. Examples of system software would include the operating system, compilers, editors and sorting programs.
Examples of application programs would include an accounts package or a CAD program. Other broad classes of application software include real-time software, business software, scientific and engineering software, embedded software, personal computer software and artificial intelligence software.
Software includes both source code written by humans and executable machine code produced by assemblers or compilers. It does not usually include the data processed by programs unless this is in a format such as multimedia which depends on the use of computers for its presentation. This distinction becomes unclear in cases such as spread sheets which can contain both instructions (formulae and macros) and data. There are also various intermediate compiled or semi-compiled, forms of software such as library files and byte-code.
The noun "program" describes a single, complete and more-or-less self-contained list of instructions, often stored in a single file, whereas "code" and "software" are uncountable nouns describing some number of instructions which may constitute one or more programs or part thereof. Most programs, however, rely heavily on various kinds of operating system software for their execution. The nounds "code" and "software" both refer to the same thing but "code" tends to suggest an interest in the implementation details whereas "software" is more of a user's term.