Programación Avanzada

AL/Basic Analysis

Core-Tier1 topics [2 hours]:

Core-Tier2 topics [2 hours]:

Learning Outcomes:

  1. [k] Explain what is meant by “best”, “average”, and “worst” case behavior of an algorithm.
  2. [e] In the context of specific algorithms, identify the characteristics of data and/or other conditions or assumptions that lead to different behaviors.
  3. [a] Determine informally the time and space complexity of simple algorithms.
  4. [k] Understand the formal definition of big O.
  5. [k] List and contrast standard complexity classes.
  6. [e] Perform empirical studies to validate hypotheses about runtime stemming from mathematical analysis. Run algorithms on input of various sizes and compare performance.
  7. [k] Give examples that illustrate time-space trade-offs of algorithms.
  8. [a] Use big O notation formally to give asymptotic upper bounds on time and space complexity of algorithms.
  9. [a] Use big O notation formally to give average case bounds on time complexity of algorithms.
  10. [k] Explain the use of big omega, big theta, and little o notation to describe the amount of work done by an algorithm.
  11. [a] Use recurrence relations to determine the time complexity of recursively defined algorithms.
  12. [a] Solve elementary recurrence relations, e.g., using some form of a Master Theorem.

PD/Parallel Algorithms, Analysis, and Programming

Core-Tier2 topics [3 hours]:

[Elective]

Topics:

Learning Outcomes:

  1. [k] Define “critical path”, “work”, and “span”
  2. [a] Compute the work and span, and determine the critical path with respect to a parallel execution diagram
  3. [k] Define “speed-up” and explain the notion of an algorithm’s scalability in this regard
  4. [a] Identify independent tasks in a program that may be parallelized
  5. [k] Characterize features of a workload that allow or prevent it from being naturally parallelized
  6. [a] Implement a parallel divide-and-conquer and/or graph algorithm and empirically measure its performance relative to its sequential analog
  7. [a] Decompose a problem (e.g., counting the number of occurrences of some word in a document) via map and reduce operations
  8. [k] Provide an example of a problem that fits the producer-consumer paradigm
  9. [k] Give examples of problems where pipelining would be an effective means of parallelization
  10. [k] Identify issues that arise in producer-consumer algorithms and mechanisms that may be used for addressing them

AL/Fundamental Data Structures and Algorithms

This knowledge unit builds directly on the foundation provided by Software Development Fundamentals (SDF), particularly the material in SDF/Fundamental Data Structures and SDF/Algorithms and Design. .

Core-Tier1 topics [9 hours]:

Core-Tier2 topics [3 hours]:

Learning Outcomes:

  1. [a] Implement basic numerical algorithms.
  2. [a] Implement simple search algorithms and explain the differences in their time complexities.
  3. [a] Be able to implement common quadratic and O(N log N) sorting algorithms.
  4. [k] Understand the implementation of hash tables, including collision avoidance and resolution.
  5. [k] Discuss the runtime and memory efficiency of principal algorithms for sorting, searching, and hashing.
  6. [k] Discuss factors other than computational efficiency that influence the choice of algorithms, such as programming time, maintainability, and the use of application-specific patterns in the input data.
  7. [a] Solve problems using fundamental graph algorithms, including depth-first and breadth-first search.
  8. [a] Demonstrate the ability to evaluate algorithms, to select from a range of possible options, to provide justification for that selection, and to implement the algorithm in a particular context.
  9. [a] Solve problems using graph algorithms, including single-source and all-pairs shortest paths, and at least one minimum spanning tree algorithm.
  10. [a] Be able to implement a string-matching algorithm.

HC/Designing Interaction

CS students need a minimal set of well-established methods and tools to bring to interface construction.

Core-Tier2 topics [4 hours]:

Learning Outcomes:

  1. [a] Create a simple application, together with help & documentation, that supports a user interface.
  2. [a] Conduct a quantitative evaluation and discuss/report the results.
  3. [k] Discuss at least one national or international user interface design standard.

HC/Foundations

For end-users, the interface is the system. So design in this domain must be interaction-focused and human-centered. Students need a different repertoire of techniques to address interaction design than is provided elsewhere in the curriculum.

Core-Tier1 topics [4 hours]:

Learning Outcomes:

  1. [k] Discuss why human-centered software development is important.
  2. [k] Summarize the basic precepts of psychological and social interaction.
  3. [k] Develop and use a conceptual vocabulary for analyzing human interaction with software: affordance, conceptual model, feedback, and so forth.
  4. [k] Define a user-centered design process that explicitly recognizes that the user is not like the developer or her acquaintances.
  5. [a] Create and conduct a simple usability test for an existing software application.

PL/Object-Oriented Programming

Core-Tier1 topics [4 hours]:

Core-Tier2 topics [6 hours]:

Learning Outcomes:

  1. [e] Compare and contrast (1) the procedural/functional approach—defining a function for each operation with the function body providing a case for each data variant—and (2) the object-oriented approach—defining a class for each data variant with the class definition providing a method for each operation. Understand both as defining a matrix of operations and variants.
  2. [a] Use subclassing to design simple class hierarchies that allow code to be reused for distinct subclasses.
  3. [a] Use multiple encapsulation mechanisms, such as function closures, object-oriented interfaces, and support for abstract datatypes, in multiple programming languages.
  4. [a] Define and use iterators and other operations on aggregates using idioms most natural in multiple programming languages, including taking functions as arguments.
  5. [a] Write basic algorithms that avoid assigning to mutable state or considering object identity.
  6. [a] Write event handlers for use in reactive systems, such as GUIs.
  7. [k] Explain the relationship between object-oriented inheritance (code-sharing and overriding) and subtyping (the idea of a subtype being usable in a context that expects the supertype).
  8. [k] Explain benefits and limitations of static typing.
  9. [a] For multiple programming languages, identify program properties checked statically and program properties checked dynamically. Use this knowledge when writing and debugging programs.
  10. [k] Distinguish a language definition (what constructs mean) from a particular language implementation (compiler vs. interpreter, run-time representation of data objects, etc.).
  11. [k] Explain how programming language implementations typically organize memory into global data, text, heap, and stack sections and how features such as recursion and memory management map to this memory model.
  12. [a] Reason about memory leaks, dangling-pointer dereferences, and the benefits and limitations of garbage collection.
  13. [a] Process some representation of code for some purpose, such as an interpreter, an expression optimizer, a documentation generator, etc.
Generated by ACMgen v1.2 (c) 2012 Allan Lopez Hernandez allanlh (at) Gmail.com