5.7. Introduction to Computer Science (Mandatory)

5.7. Introduction to Computer Science (Mandatory)

  • Semester: 2nd Sem. Credits: 3
  • Hour of this course: Theory: 2 hours; Practice: 2 hours;
  • Syllabus:

    Español

    English
    - htmlonly
  • Prerrequisites: None
Figure 5.7: Connection Map. CS100 Introduction to Computer Science

5.7.1. Justification ↑ Back to top

This course serves as the foundation for understanding the fundamental concepts of computational thinking applicable across various professions.

The course provides, starting from ground zero, a panoramic view of: introductory computational thinking, data storage, computer architecture, operating systems, networks and the Internet, algorithms, sorting methods, software engineering, databases, data structures, software engineering, computer graphics, artificial intelligence among others.

Designed as an introductory course to Computer Science, the concepts are presented in a playful manner and using an Active Learning methodology. Throughout the course, active audience participation is encouraged, akin to a theatrical performance.

The related knowledge areas covered are directly aligned with the Computing Curricula ACM/IEEE-CS.

The course does not require any prior knowledge in computer handling topics and can be taken by student from any field.

5.7.2. Generales Goals ↑ Back to top

  1. Introduce the fundamental concepts of Computational Thinking and Computer Science to students from any professional background.
  2. Develop their ability to abstract.
  3. Understand how Computational Thinking is applied in each of their professions.
  4. Apply advanced concepts in a simplified manner in any career.

5.7.3. Contribution to Outcomes ↑ Back to top

AG-C08) Problem Analysis: Identifies, formulates, and analyzes complex computing problems. (Familiarity)
AG-C02) Ethics: Applies ethical principles and commits to professional ethics and the standards of professional computing practice. (Familiarity)
AG-C12) Applies computer science theory and software development fundamentals to produce computer-based solutions. (Familiarity)

5.7.4. Content ↑ Back to top

5.7.4.1. Computational Thinking (Part I) (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

Bibliography: (Brookshear and Brylow, 2019b)

Topics

  1. Explanation of the evaluation system.
  2. General course instructions.
  3. Definition of Computing.
  4. Computing as a Human-Computer binomial.
  5. Distortions in the definition of computing.
  6. Computing as the automation of abstraction.
  7. Computing and Engineering: similarities and differences.
  8. Algorithmic problem-solving.
  9. Dynamics: Understanding the execution of an algorithm at human speed.

Learning Outcomes

  1. Apply the fundamental concepts of computing in real-life situations. [Usage]
  2. Identify distortions of Computing in real-life situations. [Usage]
  3. Clearly identify at least 3 contexts of using the word``Engineer" in English. [Assessment]
  4. Identify the limitations of humans in solving computational problems. [Usage]
5.7.4.2. Computational Thinking. Part II (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

Bibliography: (Brookshear and Brylow, 2019b)

Topics

  1. Decomposition (Breaking a problem in smaller pieces)
  2. Abstraction (Focus on important things)
  3. Pattern recongnition (Identify similar sequences based on previous problems)
  4. Designing algorithms

Learning Outcomes

  1. Apply Computational Thinking to real-world problems. [Usage]
5.7.4.3. General concepts (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

Bibliography: (Brookshear and Brylow, 2019b)

Topics

  1. Binary vs. decimal numbering.
  2. Character representation: the ASCII table.
  3. Binary search.
  4. Computational complexity of an algorithm.

Learning Outcomes

  1. Apply various numbering systems to real-world problems. [Usage]
  2. Understand the internal representation of characters in the ASCII and UTF-8 tables. [Familiarity]
  3. Apply Divide and Conquer algorithmic strategy. [Usage]
  4. Determine basic analysis of algorithmic complexity. [Usage]
5.7.4.4. Machine-Level Data Representation (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

Bibliography: (Brookshear and Brylow, 2019b)

Topics

  1. Overview and history of computer architecture
  2. Bits, bytes, and words
  3. Unsigned, signed and two's complement representations
  4. Numeric data representation and number bases:
    1. Fixed-point
    2. Floating-point enumerate
    3. Representation of non-numeric data
    4. Representation of records, arrays and UTF data types

    Learning Outcomes

    1. Discuss why everything in computers are data, including instructions [Debate]
    2. Explain how fixed-length number representations can affect accuracy and precision [Explain]
    3. Describe how negative integers are stored in sign-magnitude and two's-complement representations [Describe]
    4. Discuss how different formats can represent numerical data [Debate]
    5. Explain the bit-level representation of non-numeric data, such as characters, strings, records, and arrays [Explain]
    6. Translate numerical data from one format to another [Translate]
    7. Describe how a single adder (without overflow detection) can handle both signed (two's complement) and unsigned (binary) input without "knowing" which format a given input is using [Describe]
    5.7.4.5. Program Abstraction and Representation (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

    Bibliography: (Brookshear and Brylow, 2019b)

    Topics

    1. Programs that take (other) programs as input such as interpreters, compilers, type-checkers, documentation generators
    2. Components of a language:
      1. Definitions of alphabets, delimiters, sentences, syntax, and semantics
      2. Syntax vs semantics enumerate
      3. Program as a set of non-ambiguous meaningful sentences
      4. Basic programming abstractions: constants, variables, declarations (including nested declarations), command, expression, assignment, selection, definite and indefinite iteration, iterators, function, procedure, modules, exception handling
      5. Types of variables: static, local, nonlocal, global; need and issues with nonlocal and global variables.
      6. Scope rules: static vs dynamic; visibility of variables; side-effects.
      7. Environment vs store and their properties
      8. Data and control abstraction
      9. Mechanisms for information exchange between program units such as procedures, functions, and modules: nonlocal variables, global variables, parameter-passing, import-export between modules
      10. Low level instruction representation such as virtual machine instructions, assembly language, and binary representation

      Learning Outcomes

      1. Illustrate the scope of variables and visibility using simple programs [Apply]
      2. Illustrate different types of parameter-passing using simple pseudo programming language [Apply]
      3. Explain side-effect using global and nonlocal variables and how to fix such programs [Explain]
      4. Explain how programs that process other programs treat the other programs as their input data [Explain]
      5. Describe a grammar and an abstract syntax tree for a small language [Describe]
      5.7.4.6. Cryptography Fundamentals (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

      Bibliography: (Brookshear and Brylow, 2019b)

      Topics

      1. Basic concepts on Cryptography
      2. Public-keys, Private-keys

      Learning Outcomes

      1. Explain the role of cryptography in supporting security and privacy [Explain]
      2. Discuss the risks of inventing one's own cryptographic methods [Debate]
      3. Discuss the importance of prime numbers in cryptography and explain their use in cryptographic algorithms [Debate]
      4. Implement and cryptanalyze classical ciphers [Implement]
      5.7.4.7. Memory Management (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

      Bibliography: (Brookshear and Brylow, 2019b)

      Topics

      1. Review of physical memory, address translation and memory management hardware See also: Memory Hierarchy , Discrete Mathematics
      2. Impact of memory hierarchy including cache concept, cache lookup, and per-CPU caching on operating system mechanisms and policy See also: Memory Hierarchy , Latency, Cache and Memory Hierarchy , Virtualization and Isolation
      3. Logical and physical addressing, address space virtualization. See also: Memory Hierarchy , Discrete Mathematics
      4. Concepts of paging, page replacement, thrashing and allocation of pages and frames
      5. Allocation/deallocation/storage techniques (algorithms and data structure) performance and flexibility
        1. Arenas, slab allocators, free lists, size classes, heterogeneously sized pages (huge pages) enumerate
        2. Memory caching and cache coherence and the effect of flushing the cache to avoid speculative execution vulnerabilities. See also: Functional Organization , Memory Hierarchy , Latency, Cache and Memory Hierarchy , Virtualization and Isolation
        3. Virtual memory: leveraging virtual memory hardware for OS services and efficiency

        Learning Outcomes

        1. Explain memory hierarchy and cost-performance tradeoffs [Explain]
        2. Summarize the principles of virtual memory as applied to caching and paging [Summarize]
        3. Evaluate the tradeoffs in terms of memory size (main memory, cache memory, auxiliary memory) and processor speed [Evaluate]
        4. Describe the reason for and use of cache memory (performance and proximity, how caches complicate isolation and virtual machine abstraction) [Describe]
        5.7.4.8. Role and Purpose of Operating Systems (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

        Bibliography: (Brookshear and Brylow, 2019b)

        Topics

        1. Operating systems mediate between general purpose hardware and application-specific software.
        2. Universal operating system functions (e.g., process, user and device interfaces, persistence of data)
        3. Influences of security, networking, multimedia, parallel and distributed computing

        Learning Outcomes

        1. Understand the objectives and functions of modern operating systems [Explain]
        2. Evaluate the design issues in different usage scenarios (e.g., real time OS, mobile, server) [Evaluate]
        3. Understand how evolution and stability are desirable and mutually antagonistic in operating systems function [Explain]
        5.7.4.9. Principles of Operating System (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

        Bibliography: (Brookshear and Brylow, 2019b)

        Topics

        1. Operating system software design and approaches (e.g., monolithic, layered, modular, micro-kernel, unikernel)
        2. Abstractions, processes, and resources
        3. The evolution of the link between hardware architecture and the operating system functions
        4. Leveraging interrupts from hardware level: service routines and implementations. See also: Assembly Level Machine Organization
          1. Timer interrupts for implementing time slices
          2. I/O interrupts for putting blocking threads to sleep without polling enumerate

          Learning Outcomes

          1. Understand how the application of software design approaches to operating systems design/implementation (e.g., layered, modular, etc.) affects the robustness and maintainability of an operating system [Explain]
          2. Categorize system calls by purpose [Categorize]
          3. Apply OS techniques for isolation, protection, and throughput across OS functions (e.g., starvation similarities in process scheduling, disk request scheduling, semaphores, etc.) and beyond [Apply]
          5.7.4.10. Fundamentals of Networks and Communications (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

          Bibliography: (Brookshear and Brylow, 2019b)

          Topics

          1. Importance of networking in contemporary computing, and associated challenges. See also: Digital Equity and Accessibility , Social Impact and AI , Civil Liberties and Expression , Data, Surveillance and Privacy Technology , Privacy Philosophical Foundations and Legislation
          2. Organization of the internet (e.g., users, Internet Service Providers, autonomous systems, content providers, content delivery networks)
          3. Layers and their roles (application, transport, network, datalink, and physical)
          4. Network elements (e.g., routers, switches, hubs, access points, and hosts)
          5. Basic queueing concepts (e.g., relationship with latency, congestion, service levels, etc.)

          Learning Outcomes

          1. Articulate the organization of the internet [Articulate]
          2. List and define the appropriate network terminology [List]
          3. Describe the layered structure of a typical networked architecture [Describe]
          5.7.4.11. Networked Applications (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

          Bibliography: (Brookshear and Brylow, 2019b)

          Topics

          1. Naming and address schemes (e.g., DNS, and Uniform Resource Identifiers)
          2. Distributed application paradigms (e.g., client/server, peer-to-peer, cloud, edge, and fog). See also: Communication , Coordination
          3. Diversity of networked application demands (e.g., latency, bandwidth, and loss tolerance). See also: Communication , Sustainable Design and Pervasive Computing , Environmental Footprint of Computing Systems , Systemic Effects and Social Context , Digital Equity and Accessibility , Social Impact and AI
          4. Coverage of application-layer protocols (e.g., HTTP)
          5. Interactions with TCP, UDP, and Socket APIs. See also: Programs: Distribution , Programs: Execution Properties , GPU Programming , Programs: Implementation Mappings , Programs: Declarative Parallelism , Programs: Starting Activities

          Learning Outcomes

          1. Define the principles of naming, addressing, resource location [Define]
          2. Analyze the needs of specific networked application demands [Analyze]
          5.7.4.12. Complexity Analysis Framework (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

          Bibliography: (Brookshear and Brylow, 2019b)

          Topics

          1. Complexity Analysis Framework:
            1. Best, average, and worst-case performance of an algorithm
            2. Empirical and relative (Order of Growth) measurements
            3. Input size and primitive operations
            4. Time and space efficiency enumerate
            5. Empirical measurements of performance
            6. Time and space tradeoffs in algorithms

            Learning Outcomes

            1. Prepare a presentation that explains to first year students the basic concepts of algorithmic complexity including best, average, and worst-case algorithm behavior, Big-O, Omega, and Theta notations, complexity classes, time and space tradeoffs, empirical measurement, and impact on practical problems [Explain]
            2. For each algorithm in the Foundational Data Structures , Foundational Algorithms , Advanced Algorithms unit, explain its runtime complexity class and why it belongs to this class [Explain]
            3. Informally evaluate the foundational complexity class of simple algorithms [Evaluate]
            4. Develop empirical studies to determine and validate hypotheses about the runtime complexity of various algorithms by running algorithms on input of various sizes and comparing actual performance to the theoretical analysis [Create]
            5. Explain examples that illustrate time-space tradeoffs of algorithms [Explain]
            6. Explain how tree balance affects the efficiency of binary search tree operations [Explain]
            5.7.4.13. Asymptotic Notation and Complexity Classes (1 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

            Bibliography: (Brookshear and Brylow, 2019b)

            Topics

            1. Asymptotic complexity analysis (average and worst-case bounds):
              1. Big-O, Big-Omega, and Big-Theta formal notations
              2. Foundational Complexity Classes and Representative Examples/Problems:
                1. \(O(1)\) Constant (e.g., array access)
                2. \(O(\log_2 n)\) Logarithmic (e.g., binary search)
                3. \(O(n)\) Linear (e.g., linear search)
                4. \(O(n \log_2 n)\) Log Linear (e.g., mergesort)
                5. \(O(n^2)\) Quadratic (e.g., selection sort)
                6. \(O(n^c)\) Polynomial (e.g., \(O(n^3)\) Gaussian elimination)
                7. \(O(2^n)\) Exponential (e.g., Knapsack, Satisfiability (SAT), Traveling Sales-Person (TSP), all subsets)
                8. \(O(n!)\) Factorial (e.g., Hamiltonian circuit, all permutations) enumerate enumerate

                Learning Outcomes

                1. Using examples, explain each of the foundational complexity classes in this unit [Explain]
                2. For each foundational complexity class in this unit, explain an algorithm that demonstrates the associated runtime complexity [Explain]
                3. Explain to a non-technical audience the significance of tractable versus intractable algorithms using an intuitive explanation of Big-O complexity [Explain]
                5.7.4.14. Complexity Analysis: Recursion, Amortization, and Tight Bounds (1 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                Bibliography: (Brookshear and Brylow, 2019b)

                Topics

                1. Little-o, Little-Omega, and Little Theta notations

                Learning Outcomes

                1. Given a problem to program for which there may be several algorithmic approaches, evaluate them and determine which are feasible, and select one that is optimal in implementation and run-time behavior [Evaluate]
                5.7.4.15. Foundational Data Structures (3 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                Bibliography: (Brookshear and Brylow, 2019b)

                Topics

                1. Abstract Data Type (ADT) and operations on an ADT:
                  1. Dictionary operations (insert, delete, find) enumerate
                  2. Arrays:
                    1. Numeric vs non-numeric, character strings
                    2. Single (vector) vs multidimensional (matrix) enumerate
                    3. Records/Structs/Tuples and Objects
                    4. Linked lists (for historical reasons):
                      1. Single vs Double and Linear vs Circular enumerate
                      2. Stacks
                      3. Queues and deques:
                        1. Heap-based priority queue enumerate
                        2. Hash tables/maps:
                          1. Collision resolution and complexity (e.g., probing, chaining, rehash) enumerate
                          2. Trees:
                            1. Binary, n-ary, and search trees
                            2. Balanced (e.g., AVL, Red-Black, Heap) enumerate

                            Learning Outcomes

                            1. For each ADT/Data-Structure in this unit:
                              1. Explain its definition, properties, representation(s), and associated ADT operations.
                              2. Explain step-by-step how the ADT operations associated with the data structure transform it. enumerate [Explain]
                              3. Explain how collision avoidance and collision resolution is handled in hash tables [Explain]
                              4. Explain the heap property and the use of heaps as an implementation of a priority queue [Explain]
                              5.7.4.16. Foundational Algorithms (3 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                              Bibliography: (Brookshear and Brylow, 2019b)

                              Topics

                              1. Graphs (e.g., [un]directed, [a]cyclic, [un]connected, and [un]weighted):
                                1. Graph representation: adjacency list vs matrix enumerate
                                2. Search algorithms:
                                  1. \(O(n)\) complexity (e.g., linear/sequential array/list search)
                                  2. \(O(\log_2 n)\) complexity (e.g., binary search)
                                  3. \(O(\log_b n)\) complexity (e.g., uninformed depth/breadth-first tree search) enumerate
                                  4. Sorting algorithms (e.g., stable, unstable):
                                    1. \(O(n^2)\) complexity (e.g., insertion, selection)
                                    2. \(O(n \log n)\) complexity (e.g., quicksort, merge, timsort) enumerate
                                    3. Graph algorithms:
                                      1. Shortest path (e.g., Dijkstra's, Floyd's)
                                      2. Minimal spanning tree (e.g., Prim's, Kruskal's) enumerate
                                      3. Sorting algorithms:
                                        1. \(O(n \log n)\) complexity heapsort
                                        2. Pseudo \(O(n)\) complexity (e.g., bucket, counting, radix) enumerate
                                        3. Graph algorithms:
                                          1. Transitive closure (e.g., Warshall's)
                                          2. Topological sort enumerate

                                          Learning Outcomes

                                          1. For each algorithm in this unit explain step-by-step how the algorithm operates [Explain]
                                          2. For each algorithmic approach (e.g., sorting) in this unit apply a prototypical example of the approach (e.g., merge sort) [Apply]
                                          3. Given requirements for a problem, develop multiple solutions using various data structures and algorithms. Subsequently, evaluate the suitability, strengths, and weaknesses selecting an approach that best satisfies the requirements [Create]
                                          4. Explain factors beyond computational efficiency that influence the choice of algorithms, such as programming time, maintainability, and the use of application-specific patterns in the input data [Explain]
                                          5.7.4.17. Advanced Algorithms (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                          Bibliography: (Brookshear and Brylow, 2019b)

                                          Topics

                                          1. Cryptography algorithms (e.g., SHA-256)
                                          2. Parallel algorithms

                                          Learning Outcomes

                                          1. An appreciation of quantum computation and its application to certain problems [Explain]
                                          5.7.4.18. Core Database System Concepts (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                          Bibliography: (Brookshear and Brylow, 2019b)

                                          Topics

                                          1. Purpose and advantages of database systems
                                          2. Components of database systems
                                          3. Design of core DBMS functions (e.g., query mechanisms, transaction management, buffer management, access methods)
                                          4. Transaction management
                                          5. Normalization
                                          6. Approaches for managing large volumes of data (e.g., NoSQL database systems, use of MapReduce)
                                          7. Distributed databases/cloud-based systems
                                          8. Use of a declarative query language

                                          Learning Outcomes

                                          1. Identify at least four advantages that using a database system provides [Analyze]
                                          2. Enumerate the components of a (relational) database system [Enumerate]
                                          3. Defend the value of data independence [Defend]
                                          4. Compose a simple select-project-join query in SQL [Compose]
                                          5. Describe the advantages for eliminating duplicate repeated data [Describe]
                                          6. Outline how MapReduce uses parallelism to process data efficiently [Outline]
                                          5.7.4.19. Object-Oriented Programming Fundamentals (4 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                          Bibliography: (Brookshear and Brylow, 2019b)

                                          Topics

                                          1. Imperative programming as a subset of object-oriented programming.
                                          2. Object-oriented design:
                                            1. Decomposition into objects carrying state and having behavior.
                                            2. Class-hierarchy design for modeling. enumerate
                                            3. Definition of classes: fields, methods, and constructors.
                                            4. Subclasses, inheritance (including multiple inheritance), and method overriding.
                                            5. Dynamic dispatch: definition of method-call.
                                            6. Object-oriented idioms for encapsulation:
                                              1. Privacy, data hiding, and visibility of class members.
                                              2. Interfaces revealing only method signatures.
                                              3. Abstract base classes, traits and mixins. enumerate

                                              Learning Outcomes

                                              1. Enumerate the differences between imperative and object-oriented programming paradigms [Enumerate]
                                              2. Compose a class through design, implementation, and testing to meet behavioral requirements [Compose]
                                              3. Use object-oriented encapsulation mechanisms such as interfaces and private members [Use]
                                              5.7.4.20. Version Control and CI/CD (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                              Bibliography: (Brookshear and Brylow, 2019b)

                                              Topics

                                              1. Software configuration management and version control: Software Development Practices
                                                1. Configuration in version control, reproducible builds/configuration.
                                                2. Version control branching strategies. Development branches vs release branches. Trunk-based development.
                                                3. Merging/rebasing strategies, when relevant. enumerate
                                                4. Release management.
                                                5. Software process automation:
                                                  1. Build systems - the value of fast, hermetic, reproducible builds, compare/contrast approaches to building a project.
                                                  2. Continuous Integration (CI) - the use of automation and automated tests to do preliminary validation that the current head/trunk revision builds and passes (basic) tests.
                                                  3. Continuous Deployment (CD) - the use of automation to automatically release every change that passes the automated tests to the production environment, ensuring frequent and reliable deliveries.
                                                  4. Dependency management - updating external/upstream dependencies, package management, SemVer. enumerate
                                                  5. Tool integration concepts and mechanisms. Software Development Practices
                                                  6. Use of modern IDE facilities - debugging, refactoring, searching/indexing, ML-powered code assistants, etc. Software Development Practices

                                                  Learning Outcomes

                                                  1. Describe the difference between centralized and distributed software configuration management [Describe]
                                                  2. Describe how version control can be used to help manage software release management [Describe]
                                                  3. Identify configuration items and use a source code control tool in a small team-based project [Analyze]
                                                  4. Understand the use of CI/CD systems as a ground-truth for the state of the team's shared code (build and test success) [Explain]
                                                  5. Demonstrate the capability to use software tools in support of the development of a software product of medium size [Demonstrate]
                                                  5.7.4.21. Requirements Engineering (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                                  Bibliography: (Brookshear and Brylow, 2019b)

                                                  Topics

                                                  1. Describe functional requirements using, for example, use cases or user stories.
                                                    1. Using at least one method of documenting and structuring functional requirements.
                                                    2. Understanding how the method supports design and implementation.
                                                    3. Strengths and weaknesses of using a specific approach. enumerate
                                                    4. Requirements elicitation.
                                                      1. Sources of requirements, for example, users, administrators, or support personnel.
                                                      2. Methods of requirement gathering, for example, surveys, interviews, or behavioral analysis. enumerate
                                                      3. Non-functional requirements, for example, security, usability, or performance, also called as Quality Attributes. Sustainable Design and Pervasive Computing , Environmental Footprint of Computing Systems , Systemic Effects and Social Context
                                                      4. Risk identification and management, including ethical considerations surrounding the proposed product. Ethics Codes and Legal Accountability , Professional Responsibility and Public Policy , Professional Values, Nature and Continuing Development , Ethical Dissent and Cultural Context , Workplace Ethics
                                                      5. Communicating and/or formalizing requirement specifications.
                                                      6. Prototyping a tool for both eliciting and validating/confirming requirements.
                                                      7. Product evolution: when requirements change, how to understand what effect that has and what changes need to be made.
                                                      8. Effort estimation:
                                                        1. Learning techniques for better estimating the effort required to complete a task;
                                                        2. Practicing estimation and comparing it to how long tasks take;
                                                        3. Effort estimation is quite difficult, so students are likely to be way off in many cases, but seeing the process play out with their own work is valuable. enumerate

                                                        Learning Outcomes

                                                        1. Compare different methods of eliciting requirements along multiple axes [Compare]
                                                        2. Identify differences between two methods of describing functional requirements (e.g., customer interviews, user studies) and the situations where each would be preferred [Analyze]
                                                        3. Identify which behaviors are required, allowed, or barred from a given set of requirements and a list of candidate behaviors [Analyze]
                                                        4. Collect a set of requirements for a simple software system [Analyze]
                                                        5. Identify areas of a software system that need to be changed, given a description of the system and a set of new requirements to be implemented [Analyze]
                                                        6. Identify the functional and non-functional requirements in a set of requirements [Analyze]
                                                        7. Estimate the time to complete a set of tasks, then compare estimates to the actual time taken [Estimate]
                                                        8. Determine an implementation sequence for a set of tasks, adhering to dependencies between them, with a goal to retire risk as early as possible [Determine]
                                                        9. Write a requirement specification for a simple software system [Write]
                                                        5.7.4.22. Machine Learning Fundamentals (1 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                                        Bibliography: (Brookshear and Brylow, 2019b)

                                                        Topics

                                                        1. Definition and examples of a broad variety of machine learning tasks:
                                                          1. Supervised learning:
                                                            1. Classification
                                                            2. Regression enumerate
                                                            3. Reinforcement learning
                                                            4. Unsupervised learning:
                                                              1. Clustering enumerate enumerate
                                                              2. Fundamental ideas:
                                                                1. No free lunch theorem: no one learner can solve all problems; representational design decisions have consequences.
                                                                2. Sources of error and undecidability in machine learning enumerate
                                                                3. A simple statistical-based supervised learning such as linear regression or decision trees:
                                                                  1. Focus on how they work without going into mathematical or optimization details; enough to understand and use existing implementations correctly enumerate

                                                                  Learning Outcomes

                                                                  1. Describe the differences among the three main styles of learning (supervised, reinforcement, and unsupervised) and determine which is appropriate to a particular problem domain [Explain]
                                                                  2. Differentiate the terms of AI, machine learning, and deep learning [Evaluate]
                                                                  3. Explain how machine learning works as an optimization/search process [Explain]
                                                                  5.7.4.23. Neural Networks and Ethics (1 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                                                  Bibliography: (Brookshear and Brylow, 2019b)

                                                                  Topics

                                                                  1. Basic neural networks:
                                                                    1. Fundamentals of understanding how neural networks work and their training process, without details of the calculations
                                                                    2. Basic introduction to generative neural networks (e.g., large language models) enumerate
                                                                    3. Ethics for Machine Learning:
                                                                      1. Focus on real data, real scenarios, and case studies
                                                                      2. Dataset/algorithmic/evaluation bias and unintended consequences enumerate
                                                                      3. Deep learning:
                                                                        1. Deep feed-forward networks (intuition only, no mathematics)
                                                                        2. Convolutional neural networks (intuition only, no mathematics)
                                                                        3. Visualization of learned feature representations from deep nets
                                                                        4. Other architectures (generative NN, recurrent NN, transformers, etc.) enumerate
                                                                        5. Ethics for Machine Learning:
                                                                          1. Continued focus on real data, real scenarios, and case studies
                                                                          2. Privacy
                                                                          3. Fairness
                                                                          4. Intellectual property
                                                                          5. Explainability enumerate

                                                                          Learning Outcomes

                                                                          1. Describe the neural network training process and resulting learned representations [Explain]
                                                                          2. Visualize the training progress of a neural network through learning curves in a well-established toolkit (e.g., TensorBoard) and visualize the learned features of the network [Apply]
                                                                          3. Given a real-world application of machine learning, describe ethical issues regarding the choices of data, preprocessing steps, algorithm selection, and visualization/presentation of results [Apply]
                                                                          5.7.4.24. Fundamental Concepts of Graphics and Interactive Techniques (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                                                          Bibliography: (Brookshear and Brylow, 2019b)

                                                                          Topics

                                                                          1. Overview of computer graphics pipeline and interactive systems
                                                                          2. Basic rendering concepts: rasterization, ray tracing, shading models
                                                                          3. Color theory and color spaces
                                                                          4. Coordinate systems and transformations
                                                                          5. Basic interaction techniques: input devices, event handling
                                                                          6. Advanced rendering concepts: global illumination, physically based rendering
                                                                          7. Graphics hardware and acceleration techniques
                                                                          8. Human perception and visual cognition

                                                                          Learning Outcomes

                                                                          1. Explain the basic stages of the computer graphics pipeline [Explain]
                                                                          2. Describe basic rendering techniques such as rasterization and ray tracing [Describe]
                                                                          3. Apply color theory to design visually effective graphics [Apply]
                                                                          4. Implement coordinate transformations for 2D and 3D graphics [Implement]
                                                                          5. Design basic interactive applications using common input devices and event handling [Design]
                                                                          6. Compare advanced rendering techniques such as global illumination and physically based rendering [Compare]
                                                                          7. Analyze the role of graphics hardware in accelerating rendering tasks [Analyze]
                                                                          8. Explain how human perception influences graphics and interaction design [Explain]
                                                                          5.7.4.25. Applied Rendering and Techniques (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                                                          Bibliography: (Brookshear and Brylow, 2019b)

                                                                          Topics

                                                                          1. Ray tracing: acceleration structures, sampling, shading
                                                                          2. Texture mapping and filtering

                                                                          Learning Outcomes

                                                                          1. Implement rasterization algorithms for primitive rendering [Implement]
                                                                          2. Implement basic ray tracing with acceleration structures [Implement]
                                                                          5.7.4.26. Closure Class: How Does a Search Engine Like Google Work? (2 hours) [Skills AG-C02,AG-C08,AG-C12] ↑ Back to top

                                                                          Bibliography: (Brookshear and Brylow, 2019b)

                                                                          Topics

                                                                          1. Problem analysis
                                                                          2. The index does not grow linearly with the size of the indexed information.
                                                                          3. Response time does not depend on the size of the ``database."
                                                                          4. Response time does not depend on the number of occurrences found.
                                                                          5. Combining various data structures to reach a solution.
                                                                          6. Analyzing the scalability of the solution.

                                                                          Learning Outcomes

                                                                          1. Understand the principles under which a search engine is created [Usage]
                                                                          2. Correctly apply data structures to solve the problem [Usage]
                                                                          3. Apply concepts related to algorithmic complexity in a search engine [Usage].

                                                                          5.7.5. Bibliography ↑ Back to top

                                                                          Brookshear, J. G. and Brylow, D. (2019b). Computer Science: An Overview. Pearson, global edition edition.

                                                                          Spotted a typo, an outdated course, a broken link, or have a suggestion? Let us know.

                                                                          Scan to open on your phone