Welcome to Software Systems Development: Software Concepts
Welcome to this foundational chapter of AS 1: Introduction to Object Oriented Development! Whether you are writing a simple C# console program or building a complex database system, understanding what software is and how it interacts with computer hardware is essential. Don't worry if computer architecture and software classification seem a bit technical at first—we will break everything down into bite-sized, real-world pieces.
1. What is Software?
A computer without software is like a musical instrument without a musician—it has great potential, but it cannot produce anything on its own. Hardware refers to the physical, touchable components of a computer (like the CPU, RAM, and hard drive), whereas software consists of the sequences of instructions and data that tell the hardware exactly what to do.
Software is broadly split into two primary categories:
• System Software: Manages and controls the hardware directly, providing a platform for other software to run.
• Application Software: Allows the end user to perform specific, productive, or entertaining tasks.
Analogy Time: Think of a computer system like an orchestra. The Hardware is the collection of instruments. The System Software is the conductor and stage crew setting everything up and keeping time. The Application Software is the actual sheet music being played for the audience.
Key Takeaway: Hardware is physical; software is virtual instructions. Software splits into System Software (hardware management) and Application Software (user tasks).
2. System Software
System software sits between the hardware and the user applications. Its job is to manage the computer's resources, maintain the system, and provide a stable environment for application software.
A. The Operating System (OS)
The Operating System (OS) is the most critical piece of system software. Without an operating system (such as Windows, macOS, or Linux), you cannot run other programs.
The core functions of an Operating System include:
• User Interface (UI): Provides a way for humans to interact with the computer. This can be a Graphical User Interface (GUI) using windows, icons, menus, and pointers (WIMP), or a Command Line Interface (CLI) where typed text commands are used.
• Memory Management: Allocates blocks of RAM to active programs and ensures that different programs do not overwrite each other's data in memory. When RAM fills up, the OS manages Virtual Memory on secondary storage.
• Processor Scheduling (Process Management): Decides which running task gets CPU time and for how long. It creates the illusion of multitasking by rapidly switching the CPU between tasks (a technique called time-slicing).
• File Management: Organises files and folders on storage drives, tracking where files are physically saved and enforcing access permissions.
• Device / Peripheral Management: Communicates with external hardware (like printers, keyboards, and graphics cards) using specialised software helpers called Device Drivers.
• Security and User Management: Controls user login credentials, tracks access privileges, and prevents unauthorized access to system resources.
B. Utility Programs
Utilities are system software tools designed to help maintain, optimize, and protect the computer system. They perform specific housekeeping tasks.
Common utility programs include:
• Disk Defragmenter: Over time, files saved on traditional magnetic hard drives become fragmented (split into scattered pieces across the disk). A defragmenter reorganizes these physical sectors so that file pieces are stored contiguously, speeding up read/write times. (Note: SSDs do not need defragmentation!)
• Backup Utilities: Creates copies of files and directories to secondary storage or the cloud, allowing recovery if original data is lost or corrupted.
• File Compression: Reduces the physical file size of data (e.g., ZIP files) to save storage space and make network transmission faster.
• Anti-malware / Antivirus: Scans storage drives and active memory to detect, quarantine, and remove malicious software like viruses, worms, and ransomware.
C. Library Programs
Library programs are collections of pre-compiled routines, functions, and classes that developers can include in their own software. Instead of writing code from scratch to handle common tasks (such as mathematical calculations or drawing windows), programmers call ready-made routines from libraries (such as Dynamic Link Libraries, or .dll files).
Key Takeaway: System software includes the Operating System (core controller), Utilities (system maintenance and security), and Library Programs (reusable code packages).
3. Language Translators & Code Types
Computers only understand one thing: electrical on/off signals represented as binary code (\(1\)s and \(0\)s), known as Machine Code. However, humans write software using human-readable programming languages. We need Translators to bridge this gap.
Levels of Programming Languages
• High-Level Languages (HLL): Languages like C#, Java, and Python. They use English-like keywords (e.g., if, while, class) and mathematical symbols. They are easy for humans to read, write, and debug, and are machine-independent (portable).
• Low-Level Languages:
1. Assembly Language: Uses short mnemonic codes (like ADD, MOV, SUB) that correspond directly to machine architecture. It requires deep knowledge of CPU registers.
2. Machine Code: Raw binary instructions (\(01101001...\)) executed directly by the CPU. Very fast, but virtually impossible for humans to write efficiently without errors.
Types of Translators
A translator is system software that converts source code into machine code. There are three main types:
1. Assembler
Translates low-level Assembly Language mnemonics into binary Machine Code. It has a one-to-one relationship between assembly instructions and machine instructions.
2. Compiler
Translates the entire high-level source code into machine code (or intermediate object code) all at once before the program is executed.
• Advantages: Once compiled, the resulting executable file runs very quickly; the original source code does not need to be distributed to end users (protects intellectual property); no translator is needed on the user's computer to run the program.
• Disadvantages: Finding bugs can be harder during development because a list of errors is only generated after trying to compile the whole file; initial compilation takes time.
3. Interpreter
Translates and executes high-level source code line-by-line in real time.
• Advantages: Excellent for debugging and learning—if an error occurs on line \(42\), execution stops immediately at that exact point; code can easily run on any machine that has the interpreter installed.
• Disadvantages: Execution is significantly slower because every line must be translated every time it is run; the source code must be supplied to the user; the user must have the interpreter installed.
Modern Hybrid Approach: Bytecode and Virtual Machines
Modern Object-Oriented languages like C# and Java use a clever combination of both compiling and interpreting:
1. The compiler first translates high-level code into an intermediate format called Bytecode (or Intermediate Language / IL in .NET).
2. At runtime, a Virtual Machine (like the Common Language Runtime in .NET or the Java Virtual Machine) translates this bytecode into native machine code using a Just-In-Time (JIT) compiler.
Benefit: This achieves "Write Once, Run Anywhere" portability without sacrificing execution speed!
Memory Aid:
• Compiler = Complete translation before running.
• Interpreter = Instant, line-by-line translation.
Key Takeaway: High-level source code must be translated into binary machine code. Compilers translate the whole program upfront; interpreters translate line-by-line; assemblers handle assembly language.
4. Application Software
Application software is designed to help end users perform specific tasks, solve problems, or interact with multimedia.
Categories of Application Software
• General Purpose Software: Can be used for a wide variety of unrelated tasks. Example: A spreadsheet application can be used to track personal fitness, manage a business budget, or generate statistical charts.
• Special Purpose Software: Designed to perform one specific single-purpose task. Example: A web browser, a fingerprint attendance scanner, or an automated payroll system.
Software Sourcing: Off-the-Shelf vs Bespoke Software
When an organisation needs software, they must decide whether to buy existing software or build their own from scratch.
Off-the-Shelf (Packaged) Software
Pre-made software available immediately to the general public (e.g., Microsoft 365, Adobe Photoshop).
• Advantages: Cheaper upfront because development costs are shared among many buyers; available immediately with no development delay; widely tested and stable with fewer bugs; extensive documentation, online tutorials, and community support available.
• Disadvantages: May contain complex features you do not need (bloatware); may lack specific features your business requires; you cannot modify the source code to suit unique workflows.
Bespoke (Custom-Written) Software
Software tailored and developed specifically to meet the unique requirements of a single client or company.
• Advantages: Meets the exact requirements of the client with no unnecessary extras; can integrate seamlessly with the company's existing legacy hardware and systems; provides a competitive edge over rivals.
• Disadvantages: Significantly more expensive to develop; long development time; potential for unique bugs since it has not been tested by thousands of global users; client must pay extra for ongoing updates and support.
Key Takeaway: Application software is either general purpose or special purpose. Organisations choose between Off-the-Shelf (quick, affordable, shared) and Bespoke (customised, expensive, tailored).
5. Quick Summary & Exam Checklist
Make sure you can confidently answer the following review points before moving to the next chapter:
• Define the difference between Hardware and Software.
• Differentiate between System Software and Application Software.
• List at least four major roles of an Operating System (Memory, Processor, UI, File, Device Management).
• Give examples of Utility Software (Defragmenter, Compression, Backup, Antivirus).
• Explain the differences between a Compiler, an Interpreter, and an Assembler.
• Compare the advantages and disadvantages of Bespoke vs Off-the-Shelf software.