Introduction to Computer Science and Software Systems
Course Overview, Prerequisites, and Objectives
Target Audience & Prerequisites:
- Designed for students with little or no prior programming experience.
- Requires students to develop and understand a computational approach to problem solving.
- Requires strong foundational mathematical skills.
Course Objectives:
- Provide students with comprehensive computational problem-solving skills.
- Enable students to analyze complex problems and implement structured solutions using the C++ programming language.
Course Policies and Assessment Structure
Quiz Policy:
- Quizzes are administered strictly on the designated due date and time.
- Retakes are strictly prohibited for any missed quizzes under any circumstances.
Assignment Policy:
- Assignments must be submitted on or before the specified due date and time.
- Submissions after the deadline are not accepted.
Grading & Mark Allocation Policy:
- Evaluation operates on a strict binary standard (Pass or Fail).
- Marks awarded are absolute (e.g., scoring in sessional exams and in the final exam results in exactly and marks).
- Instructors will not award extra marks or grace points.
- Sessional and final examinations are separate evaluation components; students must pass each component individually without transferring marks between sessional and final totals.
- All individual requests or excuses for mark increases will be denied.
Attendance Requirement:
- A minimum attendance threshold of is mandatory to qualify for the final examination.
Assessment Weightage Breakdown:
| Assessment Component | Quantity / Count | Weightage / Total Marks |
|---|---|---|
| End-Semester Exam | ||
| Mid-Semester Exam | ||
| Quizzes | ||
| Assignments | ||
| Complex Computing Problem | ||
| Total |
Recommended Literature
- Primary Textbooks:
- Introduction to Programming with C++ (2nd Edition) by Y. Daniel Liang, Pearson.
- C++ How to Program (Ninth Edition) by Paul Deitel & Harvey Deitel.
Introduction to Computers and Data Processing
Definition of Computer:
- An electronic device that accepts data as input, processes it, and generates results as structured information (output).
- Any calculating device capable of automating computational tasks.
- A general-purpose programmable machine capable of executing arbitrary sequences of arithmetic or logical operations automatically.
Fundamental Data Processing Model:
- Data processing follows a strict linear pathway: Input (Data) Data Processing Output (Information).

- Major System Components:
- Hardware
- Software
Computer Hardware and Software Fundamentals
- Computer Hardware:
- Defined as the total collection of physical, visible, and tactile elements forming a computer system.
- Includes key components such as the Central Processing Unit (CPU), monitor, keyboard, mouse, printer, speaker (multimedia kit), scanner, video camera, CD-ROM, floppy disk drive, zip drive, and notebook enclosures.

Computer Software:
- Defined as a program or set of machine-readable instructions that directs a computer's processor to perform specific operational tasks.
- Serves as the non-physical operational component of the computer system.
Hardware and Software Relationship & Interdependence:
- Hardware cannot perform useful tasks independently without software instructions.
- Software cannot be executed without supporting hardware devices.
- Both components are strictly interdependent and complementary: hardware acts as the physical body/heart, while software functions as the operational mind/soul.
- Hardware represents an initial capital expense (former expense), whereas software development is complex, expensive, and constitutes an ongoing operational cost (continued expense).
- The same underlying hardware can run different software packages to execute fundamentally different tasks.
- Software functions as an interface connecting human users to the underlying physical hardware.


Categorization and Types of Software

System Software:
- Directs low-level computer operations, provides hardware independence, manages system memory, handles process execution, offers networking capabilities, controls access to system resources, manages file systems, and maintains system security.
- Operating System (OS): The primary management software that acts as an interface between user, software applications, and physical hardware (e.g., DOS, Windows, UNIX).
- Device Drivers: Specialized translation programs enabling direct communication between peripheral hardware devices and the central operating system.
- Utility Software: Single-purpose management tools designed for resource optimization (e.g., file compression utilities, disk defragmentation programs).
- Translators: Language translation tools including Interpreters and Compilers.
- System Packages / Development Tools: Operational utilities such as Linkers, Loaders, and Code Editors.
Operational Categories of Operating Systems:
- Single-User OS: Designed for isolated, single-user computing environments (e.g., standard home desktop PCs).
- Multi-User OS: Supports concurrent user sessions on large hardware architectures (e.g., mainframes and supercomputers utilized in financial institutions and large corporations).
- Time-Sharing OS: Allocates precise CPU time slices among multiple active users or concurrent tasks.
- Multitasking OS: Enables concurrent execution of multiple active application processes (e.g., Microsoft Windows).
- Distributed OS: Manages computation across multiple network nodes, allowing shared files and data to be accessed transparently across remote locations.
- Interactive OS: Facilitates direct real-time user input through Graphical User Interfaces (GUI) or Command Line Interfaces (CLI).
Application Software:
- Programs designed to complete specific end-user tasks. Application software cannot run directly on bare hardware and relies entirely on system software for execution.
- General-Purpose Application Software: Mass-market software suites including Word Processors (e.g., Microsoft Word), Presentation Tools (e.g., Microsoft PowerPoint), Spreadsheets (e.g., Microsoft Excel), and Database Management Systems (DBMS, e.g., Microsoft Access).
- Customized / Special-Purpose Software: Tailor-made software built for specialized business domains, such as Hospital Management Systems (HMS), Inventory Management & Purchasing Systems, School/College Management Systems, Payroll Systems, Airline/Train Reservation Systems, and Weather Forecasting Systems.
Software Distribution & Licensing Models:
- Public Domain Software: Uncopyrighted programs that can be used, modified, or distributed without restriction. Distinct from copyrighted free software.
- Shareware Software: Copyrighted software provided free of charge for evaluation over a limited trial period (often with built-in expiration dates, e.g., WinZip). Requires commercial purchase or uninstallation upon trial expiration.
- Freeware Software: Copyrighted software provided free of charge by the developer (e.g., Skype, Adobe Acrobat Reader, Internet Explorer). The author retains full intellectual property rights. Source code is withheld, prohibiting unauthorized modifications, commercial resale, or unauthorized redistribution.
- Middleware Software: Specialized software functioning as "software glue" or "plumbing" between operating systems and distributed applications. It simplifies communication and data transfer across disparate database management systems across network environments. ObjectWeb defines middleware as: "The software layer that lies between the operating system and applications on each side of a distributed computing system in a network."
- Firmware Software: Specialized operational software permanently embedded in non-volatile read-only memory inside hardware hardware devices (e.g., remote controls, calculators, microwave ovens, washing machines, and network-locked mobile phones). Updated periodically through flashing mechanisms.
Computer Processing Environments
Personal Computer Environment:
- Standalone workstation setup where processing, storage, and application software are contained entirely within a single user machine.
Time-Sharing Environment:
- A centralized architecture where multiple user terminals connect to a single central computer, shared central storage array, and shared peripheral output devices (e.g., shared printers). Processing power is divided among connected terminals.

- Client/Server Environment:
- A networked architecture where distinct client machines connect via a central network device (such as a switch or hub) to a host server. The host server processes network commands, manages data storage, and provides central resources to client nodes.

Problem Analysis, Solution Design, and Mathematical Principles

- George Pólya’s Four-Step Problem-Solving Framework:
- Step 1: Understand the Problem (Communication & Analysis):
- Identify all solution stakeholders.
- Determine unknown variables, required input data, necessary functions, and mandatory software features.
- Partition complex problem domains into smaller, manageable subproblems.
- Represent problem spaces visually by constructing analytical models.
- Step 2: Plan a Solution (Modeling & Software Design):
- Identify recurring patterns by comparing the problem against previously solved algorithmic tasks.
- Check for existing software libraries or reusable components implementing needed data routines.
- Formulate subproblem solutions and evaluate whether sub-solutions integrate into a unified system.
- Draft structured design models to guide code implementation.
- Step 3: Carry Out the Plan (Code Generation):
- Translate the design model directly into source code, ensuring total traceability.
- Prove the mathematical correctness of each individual algorithmic component.
- Conduct peer code reviews and formal verification checks.
- Step 4: Examine the Result (Testing & Quality Assurance):
- Systematically test each individual solution component.
- Implement an exhaustive, multi-tier testing strategy.
- Verify that output results strictly match functional requirements.
- Validate software against stakeholder expectations.
Fundamentals of Algorithms and Pseudocode
The Problem-Solving Cycle in Computer Science:
- A structured methodology involving problem identification, domain decomposition, algorithm formulation, program implementation, systematic testing, and debugging.
Definition of an Algorithm:
- A finite, step-by-step sequence of unambiguous, well-defined instructions designed to complete a task or solve a computational problem.
- Acts as a computational recipe transforming input datasets into defined output results.
- Forms the foundational core of computer programming, powering everything from basic numeric operations to complex recommendation engines.
Essential Attributes of an Algorithm:
- Instructions: Clear, concrete commands governing task execution.
- Inputs: Zero or more values fed into the algorithm.
- Processing: Application of explicit logical conditions, arithmetic formulas, and iterative loops.
- Outputs: One or more calculated results solving the target problem.
- Finiteness: Mandatory constraint requiring execution to terminate after a countable number of steps.
Definition of Pseudocode:
- An informal, high-level description of an algorithm's operational logic combining human language with standard programming syntax structures, omitting language-specific compilation rules.
Key Characteristics of Pseudocode:
- Human-Readable: Designed explicitly for human evaluation and peer review.
- Language-Agnostic: Broadly applicable without binding to any single programming language.
- Logic-Focused: Highlights procedural flow while abstracting away low-level syntax constraints (e.g., variable type declarations or header inclusions).
- Structured Conventions: Employs standardized algorithmic keywords such as conditional branching (
IF,ELSE), iteration loops (WHILE,FOR), and variable assignments (SET variable TO value).
Primary Objectives of Pseudocode:
- Algorithm planning and blueprint generation prior to actual implementation.
- Streamlined communication of computational logic across technical teams.
- Decomposition of complex logical problems into clear, modular steps.
- Simplified instruction and learning of core computer science concepts.