optional · CSS study notes
🗄️ OLD — Software Types & Programming Languages (consolidated)
⚠️ SUPERSEDED: This page's content has been split into individual topic pages matching the exact textbook outline. See the main P-I.I. Introduction to Computing index for the current granular pages. Keeping this only for reference.
CSS Computer Science (Optional) — Paper-I, Section-A, Topic I (Introduction to Computing). Covers: Types of Software, Types of Programming Languages.
Types of Software
Software is broadly classified into three categories based on its purpose:
1. System Software
Manages and controls the computer's hardware so that application software can run. It acts as an intermediary between hardware and the user/applications.
- Operating System (OS): the core system software — manages hardware resources (CPU, memory, storage, I/O), provides a user interface, and runs other programs (e.g., Windows, macOS, Linux, Android)
- Device Drivers: small programs that let the OS communicate with specific hardware (printer driver, graphics card driver)
- Utility Software: performs maintenance tasks — antivirus, disk cleanup, backup tools, file compression
2. Programming Software (Programming Tools)
Used by programmers to write, translate, and debug other software. Often treated as a distinct third category since it doesn't fit neatly under "system" or "application."
- Compiler: translates entire source code into machine code before execution
- Interpreter: translates and executes source code line-by-line at runtime
- Assembler: translates assembly language into machine code
- Debugger: helps programmers find and fix errors by stepping through code execution
- IDE (Integrated Development Environment): a bundled toolset combining a code editor, compiler/interpreter, and debugger (e.g., Visual Studio, Eclipse)
3. Application Software
End-user programs designed to perform specific tasks, running on top of system software.
- General-purpose applications: word processors, spreadsheets, web browsers
- Specialized applications: accounting software, CAD software, medical imaging software
- Custom/bespoke applications: built for a specific organization's unique needs
Comparison table
| Aspect | System Software | Application Software |
|---|---|---|
| Purpose | Manages hardware, provides platform | Performs specific user tasks |
| Dependency | Runs independently of applications | Depends on system software to run |
| Examples | Windows, Linux, device drivers | MS Word, Photoshop, browsers |
| User interaction | Mostly indirect (background) | Directly used by the end user |
Types of Programming Languages
Programming languages are classified by generation (how close to hardware they are) and by translation method/paradigm.
By Generation
| Generation | Description | Example |
|---|---|---|
| 1GL — Machine Language | Raw binary instructions the CPU executes directly; no translation needed; extremely hardware-specific | Binary opcodes |
| 2GL — Assembly Language | Uses mnemonic codes (MOV, ADD) instead of raw binary; requires an assembler to convert to machine code | Assembly |
| 3GL — High-Level Language | Human-readable syntax, portable across machines; requires a compiler/interpreter | C, C++, Java, Python |
| 4GL — Very High-Level Language | Task-specific, closer to natural language, often used for database queries/report generation | SQL |
| 5GL — Constraint/Logic-Based | Programs specify goals/constraints rather than step-by-step instructions; the system determines how to achieve them | Prolog |
By Translation Method
- Compiled languages: entire program translated to machine code before execution — faster execution, but must fully recompile after any change (C, C++)
- Interpreted languages: translated and executed line-by-line — easier to debug interactively, but generally slower (Python, JavaScript in early engines)
- Hybrid (bytecode-based): compiled to an intermediate bytecode, then run by a virtual machine (often with Just-In-Time compilation) — combines portability with reasonable speed (Java, C#)
By Programming Paradigm
- Procedural: code organized as a sequence of instructions/procedures (C, Pascal)
- Object-Oriented (OOP): code organized around objects/classes that bundle data and behavior (C++, Java)
- Functional: computation expressed as evaluation of mathematical functions, avoiding changing state (Haskell, parts of Python)
- Logic-based: programs are facts and rules, and results are derived through inference (Prolog)
- Scripting: typically interpreted, lightweight, used for automation and "gluing" systems together (Bash, Python, JavaScript)
MCQ Traps
- Programming/translation tools (compiler, assembler, IDE) form a distinct third category — don't lump them under "system software" even though they support system-level work.
- 1GL needs no translator; 2GL needs an assembler; 3GL+ needs a compiler or interpreter — a very commonly tested sequence.
- Java is not purely interpreted — it compiles to bytecode first, then the JVM interprets/JIT-compiles that bytecode (hybrid model), a frequent trick-question setup.
- SQL is a 4GL, not a 3GL — its task-specific, near-natural-language design is what pushes it up a generation.
Self-Test Questions
- Name the three broad categories of software and give one example of each.
- Differentiate a compiler from an interpreter.
- Place C, SQL, and Prolog into their correct programming language generations.
- Why is Java described as a "hybrid" between compiled and interpreted languages?
- Give one example each of a procedural, object-oriented, and functional language.