Jesse M. Heines, Ed.D., Professor Emeritus

University of Massachusetts Lowell

Richard A. Miner School of Computer & Information Sciences

UMass Lowell Dept. of Computer Science
Descriptions of Undergraduate Courses

The information on these pages is in the process of being updated, but we provide here for reference the best available information as of Friday, August 26, 2022 at 4:03 PM.  Students should check the list of courses being offered this semester for more up-to-date information.

Students are kindly requested to report any errors on this page to Prof. Jesse M. Heines at heines@cs.uml.edu.  Likewise, professors are kindly requested to send updates to Prof. Heines so that these pages can be kept as useful as possible.  Thank you.



 

Required Computer Science Courses

Elective Computer Science Courses

Computer Science Courses for Non-CS Majors





Descriptions of Required Computer Science Courses


ENGL-2200 -- Oral and Written Communication  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

Students develop communications skills for professional environments. Course includes preparation and delivery of presentations and practice in various forms of business writing as it relates to the computer industry. Limited to Computer Science majors.


COMP-1010 -- Computing I  [top]

Credits:  4
Prerequisites:   (none)
 
Description:  

The course requires students to build solutions to programming problems using the C programming language in a UNIX environment.  Students will learn the C programming language and how to use the UNIX operating system.  The course provides an introduction to computer science as a discipline with a bias toward algorithms and computer architecture issues.

Topics:  
  1. C Basics
  2. Functions
  3. I/O
  4. Flow of control
  5. Arrays
  6. Strings
Outcomes:  Upon completion of this course, students should be able to:
  1. State an object’s type by reading a declarator using the Right Left Walk Method.
  2. State how many bytes of storage are reserved by a variable definition.
  3. State exactly where storage is allocated.
  4. Correctly fill out memory templates for a variety of small C programs thereby demonstrating knowledge of the execution environment.
  5. Identify which of C’s 45 operators cause a side-effect and which do not.
  6. Convert an integer decimal value into its equivalent unsigned binary representation.
  7. Convert an integer decimal value into its equivalent signed magnitude representation.
  8. Convert an integer decimal value into its equivalent one’s complement representation.
  9. Convert an integer decimal value into its equivalent two’s complement representation.
  10. Convert a real decimal value into its IEEE 754 Single Precision Floating Point equivalent.
  11. Create 10-250 line C programs after reading a short problem description.
  12. Create programs that rely upon simple recursion (factorial, Ackermann’s function, Fibonacci).
  13. Create programs that rely upon a recursive divide and conquer strategy (quicksort, maximum sum subvector, tromino tiling).
  14. Write at least one program that relies upon a recursive backtracking strategy (knight’s tour).
  15. Write short, relatively simple makefiles.
  16. Use the GDB debugger to debug small programs using the following commands: list, step, next, display, break, run, and backtrace.
  17. Use the UNIX operating system to create, store, and print files, to build an executable image, and to navigate about the file system.
  18. Sort a list of integers using any one of the following sorts: bubble sort, insertion sort, selection sort, shell sort, and quick sort.
  19. Write C programs that rely upon dynamic memory allocation via the function malloc.
  20. Read and understand a program that implements a linked list polymorphic data structure that relies upon pointers to functions and pointers to a void.
  21. Build an executable image from a collection of header and C source files.
  22. Demonstrate how C’s dereference operator is used to access data.
  23. Demonstrate how C can achieve “call by reference” by passing the address of an operand.
  24. Write C programs that include single and multi-dimensional arrays, including passing such arrays as parameters to a function call.
  25. Write small C programs that rely upon structs and typdefs.


COMP-1020 -- Computing II  [top]

Credits:  4
Prerequisites:  COMP-1010 Computing I
 
Description:  

This course covers all eight chapters of Esakov and Weiss’s data structures book. Students will learn how polymorphic data structures are implemented. Ideally, all case studies of example C code found in Esakov’s book will be discussed. Students will obtain a much clearer view of pointers, pointers to functions, and recursion. Beyond this, students will be given ample opportunity to practice reading for detail and discovering within themselves that they can achieve much more academically than they have to date. One of our goals is to have all students emerge as very confident C programmers that have an appreciation of basic data structures and algorithms. The topics covered in this course will be: a review of C Programming, recursion, data abstraction, sorting, divide and conquer, big O notation, using pointers to functions and pointers to data to implement polymorphic data types, linked lists, hashing, circularly linked lists, doubly-linked lists, stacks, queues, trees, tree traversal, binary search trees, AVL trees, n-ary trees, heaps, graphs, and sets.

Topics:  
  1. Big O Notation
  2. C Programming
  3. Sorting (bubble, selection, insertion, shell, radix, quicksort, heapsort, mergesort, topological)
  4. Recursion (tail, divide and conquer, backtracking)
  5. Data Abstraction
  6. Linked Lists
  7. Programming Tools (gcc, make, gdb, emacs)
  8. Sets
  9. Hashing
  10. Circular and Doubly Linked Lists
  11. Queues
  12. Trees - Binary and N-Ary
  13. Tree Traversal
  14. Binary Search Trees
  15. AVL Trees
  16. Graphs
Outcomes:  Upon completion of this course, students should be able to:
  1. Fill out a memory template by manually executing C programs that include: recursion, malloc’ed up space, passing of arrays, and functions calls.
  2. Write C programs that use pointers to functions and pointers to generic data to build polymorphic data structures.
  3. Write C programs that use recursion.
  4. Write C programs that implement the following sorting algorithms: bubblesort, selectionsort, insertionsort, shellsort, and radix sort.
  5. Write C programs that implement the following sorting algorithms: quicksort, heapsort, and mergesort.
  6. Explain data abstraction in writing.
  7. Write small makefiles.
  8. Use the GDB symbolic debugger to walk themselves through a program that spans multiple files by using the following GDB commands: bt, break, s, n, display, list, and print.
  9. Write three C programs that use backtracking as a programming methodology. The three programs are: Eight Queens, Knight’s Tour, and Four in a Row.
  10. Write five C programs that use a divide and conquer strategy. The programs are: quicksort, maximum sum subvector, mergesort, recursive Tiling, and Strassen’s Matrix Multiply.
  11. Write a C program that creates and prints an AVL tree by using polymorphic tree primitives previously built.
  12. Write a C program that relies upon a sequential, dynamic array, and polymorphic implementation of sets.
  13. Write a C program that relies upon a sequential, linked list, and polymorphic implementation of sets.
  14. Write a C program that implements Dijkstra’s shortest path algorithm.
  15. Write a C program that creates polymorphic binary search trees and traverses them inorder, preorder, postorder, and breadth first order.
  16. Given a binary search tree, produce the inorder, postorder, preorder, and breadth first order traversal of that tree.
  17. Write a C program that relies upon polymorphic circularly linked list.
  18. Write a C program that relies upon polymorphic queues.
  19. Write a C program that relies upon polymorphic doubly linked lists.
  20. Write a C program that relies upon polymorphic linked lists.
  21. Identify the average case complexity, expressed in Big O notation, of sorting algorithms.
  22. Write a C program that relies upon a hashing implementation of polymorphic sets.
  23. Score at least 85% on the final exam.


COMP-2010 -- Computing III  [top]

Credits:  4
Prerequisites:  COMP-1020 Computing II
 
Description:  

This course builds upon the basic elements of programming as learned in Computing I and II, and provides an introduction to object-oriented software programming using C++.  Topics for the course include an introduction to object-oriented design and analysis, object decomposition, C++ language extensions such as class hierarchy and inheritance, and polymorphic object behavior that supports the object-oriented paradigm.  We also discuss software reuse and the use of C++ class libraries.  The main objectives of this course are to develop basic object-oriented software development skills and to learn the object-oriented features of C++.

Topics:  
  1. Introduction to Object-Oriented Design and Analysis
  2. The Object Model
  3. Review of C and introduction to C++
  4. Classes and data abstraction
  5. Operator overloading
  6. Inheritance
  7. Virtual functions and polymorphism
  8. C++ stream I/O
  9. Templates
  10. Exception handling
Outcomes:  Upon completion of this course, students should be able to:
  1. Use g++ to compile and link single or multiple C++ programs.
  2. Understand basic C++ syntax.
  3. Write C++ programs that use string and iostream classes to print to standard output and read from standard input.
  4. Write C++ programs with object-oriented design using both structs and classes, separating header and implementation files.
  5. Write C++ programs that use sequential containers, vector, list, and deque, and their iterators.
  6. Write C++ programs that use pointers to iterate through arrays.
  7. Write C++ programs that use functions with reference parameters.
  8. Explain differences of three sequential containers and be able to decide which one to use for specific applications.
  9. Write C++ programs that use type-independent generic algorithms.
  10. Write C++ programs that use both function and class templates.
  11. Explain data abstraction and encapsulation and how they are enforced in C++.
  12. Explain differences of three access labels and their inheritance restrictions.
  13. Write C++ programs that use three components of copy control.
  14. Write C++ programs that use smart pointers.
  15. Write C++ programs that use overloaded input/output, arithmetic, relational, assignment, subscript, member access, and increment/decrement operators.
  16. Explain three fundamental concepts of Object-Oriented Programming (OOP).
  17. Understand when dynamic binding is triggered.
  18. Identify which (virtual) function is called in a base and derived class hierarchy.
  19. Write C++ programs that use class inheritance and virtual functions.


COMP-2030 -- Computer Organization and Assembly Language  [top]

Credits:  4
Prerequisites:  COMP-1020 Computing II
 
Description:  

In this course, students will learn how to program using the MIPS assembly language, the components of a computer and their organization, the hardware/software interface, and how to measure and compare performance. Students will study learn how to design the central components of a computer from combinational and sequential logic components. Students will also learn about current issues and tradeoffs in computer design.

Topics:  
  1. The hardware/software interface
  2. Instruction set architectures
  3. RISC vs. CISC
  4. Stored program concept
  5. Execution time
  6. Performance
  7. Speedup
  8. Benchmarks
  9. Amdahl’s law
  10. Representation of numbers and strings
  11. Simple programming
  12. The SPIM simulator
  13. Input and Output and Syscalls
  14. Complete assembler programs
  15. Control structures
  16. Procedures and stacks
  17. Manual assembly
  18. MIPS addressing styles
  19. Memory layout: global data, dynamic data, OS, stack, and text
  20. Representation and manipulation of integers
  21. Mathematical and logical operations
  22. Representation and manipulation of floating point numbers
  23. Gates, truth tables, and logic equations
  24. Combinational logic
  25. Designing an ALU
  26. Ripple-carry adders
  27. Carry-lookahead adders
  28. Multiplication algorithms
  29. Sequential logic
  30. Clocks and timing methodologies
  31. Gates, latches, flip-flops
  32. Introduction to memory organization
  33. Single-cycle control
  34. Finite state machines
  35. Multi-cycle control
  36. Microcode control
Outcomes:  Upon completion of this course, students should be able to:
  1. Write programs in the MIPS assembly language that include the following features: assignment statements, input and output, strings, conditional execution, procedures, arrays, records, and recursion.
  2. Discuss and describe the basic components of a computer.
  3. Discuss and describe how memory is organized.
  4. Discuss and describe how peripherals operate and interface with a computer.
  5. Demonstrate and discuss how combinational logic components may be used to build an Arithmetic Logic Unit.
  6. Demonstrate and discuss how combinational and sequential logic components may be used to implement a simple single-cycle computer.
  7. Demonstrate and discuss how combinational and sequential logic components may be used to implement a simple multi-cycle computer.
  8. Evaluate a computer’s performance.
  9. Compare the performance of two computers.
  10. Demonstrate and discuss tradeoffs in computer design and how they affect performance.
  11. Discuss current issues in computer organization.


COMP-2040 -- Computing IV  [top]

Credits:  3
Prerequisites:  COMP-2010 Computing III
 
Description:  

This is the fourth course in our core CS sequence.  It is typically taken by second semester sophomore computer science majors after they have had a solid two semesters of exposure to basic computing concepts using the C programming language in Computing I and II, including study of all the basic C language data structures.  Students are then required to take Computing III, which is an introduction to object-oriented programming (OOP) using the C++ language.

Computing IV builds on the prior three courses by:

  • deepening students’ knowledge of OOP and C++ through additional examples, constructs, and techniques
  • exposing students to professional tools and professional practices, particularly integrated development environments, and documentation standards
  • as time permits, looking at additional professional techniques and tools such as using C++ patterns and storing code in repositories with version control
  • introducing students to OOP in at least one other language, showing alternative object models, and providing additional experience with APIs

Topics:  
  1. Object-oriented software development
  2. Object-oriented design
  3. Object relationships
  4. Exceptions
  5. Class and Inheritance
  6. Documentation
  7. Regular expressions
  8. Parsing
  9. Integrated Development Environments
  10. Streams
  11. XML and JSON
  12. Use and Design of Large APIs
Outcomes:  Upon completion of this course, students should be able to:
  1. Set up, configure, and use a professional IDE, including its debugging capabilities.
  2. Document code in a professional manner using industrial quality documentation tools.
  3. Manage code and share it with others using a repository with version control.
  4. Describe the differences between writing small programs and ones that are part of a large software project that involves multiple people.
  5. Use and create industrial quality application programmer interfaces (APIs).
  6. Develop programs that implement general algorithms driven by data stored in files rather than hard-coded.
  7. Understand basic features of scanning and parsing.
  8. Appreciate the advantages of industry standards in coding and data file formats.
  9. Not only recognize a truly elegant computer program when they see one, but also be able to produce such programs themselves.


COMP-3010 -- Organization of Programming Languages  [top]

Credits:  3
Prerequisites:  COMP-2040 Computing IV
 
Description:  

We will study programming languages using Scheme. You’ll learn about features of various programming language paradigms including the imperative, functional, logical, and object-oriented approaches. Key concepts include: building abstractions, computational processes, higher-order procedures, compound data, data abstractions, controlling interactions, generic operations, self-describing data, inheritance and message passing, streams and infinite data structures, meta-linguistic abstraction, interpretation of programming languages, machine model, compilation, and embedded languages.

Topics:  
  1. Introduction to Scheme
  2. Substitution model
  3. Orders of growth
  4. Recursion and iteration
  5. Higher-order procedures
  6. Compound data
  7. Aggregate data
  8. Symbolic data
  9. Henderson picture language
  10. Data structures
  11. Multiple representations of data
  12. Generic operators
  13. State
  14. Environment model
  15. Object-oriented programming
  16. Mutable data
  17. More mutation
  18. Streams
  19. Metacircular evaluator
  20. MC eval: lazy evaluation
  21. Logic programming and pattern matching
  22. Memory management and garbage collection
Outcomes:  Upon completion of this course, students should be able to:
  1. Evaluate Scheme expressions.
  2. Create pair structures in Scheme and diagram them on paper using box and pointer diagrams.
  3. Perform manipulations of lists and trees.
  4. Differentiate between normal and applicative order evaluations.
  5. State the order of growth of a procedure in terms of time and space.
  6. Write procedures that generate both iterative and recursive processes.
  7. Manipulate higher-order procedures by passing procedures as arguments and returning procedures as values of other procedures.
  8. Differentiate between the Scheme comparison operators eq?, eqv?, and equal?.
  9. Write a procedure given its specifications and sample results.
  10. Write procedures to maintain state in local environments for later applications.
  11. Describe the meaning of mutation and be able to implement it in procedures.
  12. Create environment diagrams describing the evaluation of Scheme code and understand existing environment diagrams.
  13. Write object-oriented code in Scheme.
  14. Describe the characteristics of various garbage collection algorithms.
  15. Define procedures that create and manipulate infinite streams.
  16. Demonstrate understanding of the metacircular evaluator by adding new statements and modifying the behavior of existing statements.
  17. Use the metacircular evaluator to understand different methods for evaluating arguments: applicative order, normal order, the analyze evaluator, and the lazy evaluator.
  18. Demonstrate creative application of ideas in the course to other domains.


COMP-3040 -- Foundations of Computer Science  [top]

Credits:  3
Prerequisites:  COMP-1020 Computing II
MATH-3220 Discrete Structures II
 
Description:  

Foundations of Computer Science provides a survey of the mathematical foundations of Computer Science.  It has two basic goals:

  1. To give you an understanding of fundamental concepts in computing, including common models for computation such as finite automata and Turing machines. There will be some effort to convince you that this technology is important for implementing a variety of the latest types of systems and software.
  2. To give you a sense of how to reason formally about computing, how to prove theorems about computation, and how to tell a rigorous proof from wishful thinking.
This course covers finite automata and regular languages, stack acceptors (pushdown automata), context-free languages, Turing machines, recursive and recursively enumerable sets, and decidability.  It involves no computer programming.

Topics:  
  1. Mathematical preliminaries
  2. DFAs and NFAs
  3. DFA/NFA equivalence and regular expressions
  4. Non-regular languages and pumping lemma
  5. Context-free grammars and languages
  6. Pushdown Automata
  7. Non-context free languages and pumping lemma
  8. Turing machines and variants
  9. Algorithms and the Church-Turing thesis
  10. Decidability, undecidability, and diagonalization
  11. Reducibility
  12. A natural undecidable problem
  13. P and NPNP completeness
Outcomes:  Upon completion of this course, students should be able to:
  1. Understand finite state automata, push-down automata, and Turing machines in terms of memory resources.
  2. Describe basic properties of languages accepted by these models.
  3. Understand basic construction (programming) techniques of these models.
  4. Read and write regular expressions and context-free grammars.
  5. Write a convincing formal proof about basic properties of regular languages, context-free languages, and recursively enumerable languages.
  6. Recognize a bogus proof.
  7. Put algorithmic problems in relation to computational models.
  8. Explain the concept of undecidability and understand reducibility.
  9. Understand time complexity measurement and its relationship to models.


COMP-3050 -- Computer Architecture  [top]

Credits:  3
Prerequisites:  COMP-1020 Computing II
COMP-2030 Computer Organization and Assembly Language
EECE-2650 Logic Design
 
Description:  

This three credit course provides an examination of the basic functional components of a computer system including the CPU, memory systems, and I/O systems. Each of these three areas will be developed in detail with a focus on the system design and component integration. Topics will include CPU control and ALU operation, computer timing, data address and I/O bus activity, addressing model, programmed and DMA I/O, and instruction sets and microcode.

Topics:  
  1. Digital I/O
  2. Analog-to-Digital Conversion
  3. Interfacing with Digital Logic
  4. Instruction Set Design
  5. CPU Registers
  6. Memory Mapping and Address Decoding
  7. Timing and Cycle Counting
  8. Serial Interfaces
  9. Design of Algorithms that Account for Cache Memory Configurations
  10. How C Compilers Translate into Machine Code
  11. Optimizing Code for Performance
Outcomes:  Upon completion of this course, students should be able to:
  1. Explain the architecture of a simple 8-bit microprocessor.
  2. Write assembly language programs that access digital I/O and external digital logic.
  3. Write assembly language programs that interface to analog signals using analog-to-digital converters.
  4. Design hardware that performs address decoding and memory mapping for I/O peripherals and write assembly language programs that access these I/O peripherals.
  5. Analyze assembly language programs to determine execution time and evaluate efficiency.
  6. Explain how instruction sets are designed to simplify hardware decoding and maximize processor performance.
  7. Explain the architecture of a simplified Pentium processor.
  8. Write assembly language programs that map to sequential and pipelined implementations of a simplified Pentium processor.
  9. Identify and eliminate control and data hazards from assembly language programs targeted to a pipelined implementation of a simplified Pentium processor.
  10. Write assembly language programs that maximize the effectiveness of the branch prediction used in a pipelined implementation of a simplified Pentium processor.
  11. Explain the performance degradation inherent in the use of memory.
  12. Write assembly language programs that minimize code execution time through the use of registers instead of memory for storage of program variables.
  13. Identify hardware elements would enhance software performance if added to the architecture of a simplified Pentium processor.
  14. Perform a size-cost-speed tradeoff analysis to determine the viability of adding hardware elements to the simplified Pentium processor.
  15. Design direct-mapped and set-associative caches that maximize code performance while balancing the additional cost incurred by fast memory elements.
  16. Select appropriate cache and memory update policies.
  17. Perform a size-cost-speed tradeoff analysis of different cache architectures.
  18. Understand how C compilers translate C code into assembly language code.
  19. Write C code to maximize the performance of the translated assembly language code for the Pentium III architecture.
  20. Identify and eliminate C code blockers that prevent C compilers from fully optimizing the targeted C code for the Pentium III architecture.
  21. Identify alternative C coding methods and styles that facilitates the generation of fast and efficient assembly language code for the Pentium III architecture.
  22. Write C code that eliminates resource allocation conflicts when targeting the Pentium II architecture.
  23. Identify hardware elements would enhance software performance if added to the architecture of the Pentium III.
  24. Perform a size-cost-speed tradeoff analysis to determine the viability of adding hardware elements to the Pentium III.
  25. Identify suites of benchmarks that may be used to test the efficiency of C code targeting the Pentium III.


COMP-3080 -- Introduction to Operating Systems  [top]

Credits:  3
Prerequisites:  COMP-3050 Computer Architecture
 
Description:  

This course introduces and develops the major components of operating systems, including the process and thread abstractions, concurrency and synchronization mechanisms, deadlock management strategies, processor allocation, memory management, I/O device and file management, and distributed processing. The course also presents techniques for operating system design, implementation, and evaluation.

Topics:  
  1. What is an operating system?
  2. The evolution of operating systems
  3. What is an operating system
  4. The evolution of operating systems
  5. The process model
  6. Systems and system states and transitions
  7. Processes and address space layouts
  8. Computational progress and process/thread organization
  9. Process and operating system interfaces
  10. System call and exception based kernel access
  11. The need for process/thread synchronization
  12. Synchronization techniques and mechanisms
  13. Process scheduling and dispatching
  14. General address space issues and memory management introduction
  15. Process/thread sharing of physical memory
  16. Virtual memory paradigm
  17. Fetch, placement and replacement requirements
  18. Page replacement algorithms
  19. Page fault performance issues and modeling techniques
  20. General design issues for paging systems
  21. UMA, NUMA, and NORMA system architectures
  22. Introduction to file systems
  23. Name space issues
  24. File system security and protection mechanisms
  25. General device level IO control
  26. Device driver models
  27. Synchronous vs. asynchronous driver interfaces
  28. Resource management and deadlock
  29. Requirements for deadlock
  30. Prevention, avoidance, and detection and recovery deadlock strategies
  31. Introduction to distributed systems
  32. General distributed system design issues
  33. Communication in distributed systems
  34. The general client-server model
  35. The remote procedure call paradigm
  36. The need for data consistency between heterogeneous systems
Outcomes:  Upon completion of this course, students should be able to:
  1. Explain the general function of an operating system.
  2. Explain the organization and attributes of traditional processes and threads.
  3. Write a Linux based application to create processes and exchange information among processes using inter-process communication mechanisms and signals.
  4. Identify single and multiple processor requirements for execution path synchronization.
  5. Write a Linux based application that demonstrates two way data exchange with a standard Unix/Linux command using pipes.
  6. Explain the use of synchronization primitives, including semaphores, event counters and sequencers and monitors.
  7. Write a Linux based application to manage a set of singly threaded producer and consumer processes that exchange information through shared memory using semaphore synchronization.
  8. Describe the synchronization primitives of the pthread API.
  9. Write a Linux based application to manage a multiply threaded process consisting of producer and consumer threads that synchronize with mutex and condition variable constructs.
  10. Describe the differences between real and virtual memory management.
  11. Explain the organization of a process address space and its various memory objects.
  12. Write an application to simulate flat memory management by first fit and best fit linked list methods and by Knuth’s buddy system method.
  13. Explain the use of page tables, page mappings and table walks in virtual memory systems.
  14. Describe the organization of a translation lookaside buffer.
  15. Explain the need for TLB shootdown on heavy weight context switching.
  16. Describe the watermark processing used with free list management.
  17. Differentiate between stack based and non-stack based page replacement algorithms.
  18. Explain the need for and typical content of a system page frame table.
  19. List the necessary conditions for deadlock.
  20. Demonstrate the ability to reduce a general resource allocation graph, and reach a conclusion about any deadlock in the graph.
  21. Explain the difference between safe and unsafe states in a deadlock avoidance scheme.
  22. Differentiate among contiguous, linked and indexed file systems.
  23. Describe the architecture of the basic Ext2 type Unix/Linux file system.
  24. Explain the organization of an inode, and the use and need for indirect pointers.
  25. Explain the process/object protection model used in Unix/Linux systems.
  26. Write a Linux based application to report information on any Linux file object in a fashion similar to the standard Unix/Linux ls command.
  27. Describe client-server computing and the deployment of a distributed service.
  28. Explain the organization of a remote procedure call.
  29. Explain the need for synchronization in a distributed environment.


COMP-4040 -- Analysis of Algorithms  [top]

Credits:  3
Prerequisites:  COMP-2010 Computing III
MATH-3220 Discrete Structures II
MATH-3860 Statistics for Scientists/Engineers
 
Description:  

In this course, we distinguish between an abstract data type (such as a list, stack, queue, tree, or hash table) and a data structure that represents how the abstract data type is represented and stored in the computer’s memory. We learn about algorithms for manipulating information in a variety of fundamental abstract data types and data structures. Information tasks such as searching, retrieving, inserting, updating, sorting and deleting arise frequently in Computer Science problems that are central to many computer applications. We focus on algorithms to correctly and efficiently accomplish these types of core tasks. Algorithms are described using high-level pseudocode. Running time and storage requirements are quantified using asymptotic analysis.

Outcomes:  Upon completion of this course, students should be able to:
  1. Use big O, omega and theta notation to give asymptotic upper, lower, and tight bounds on time and space complexity of algorithms.
  2. Determine the time complexity of simple algorithms.
  3. Express simple algorithms using pseudocode conventions.
  4. Justify the correctness of an algorithm.
    1. “Mechanical,” e.g., no infinite loops or recursion, remaining within array bounds
    2. “As advertised,” e.g. optimal answer is actually found by an optimization algorithm; sorting algorithm results in correct ordering of elements.
  5. Given a computational problem begin to learn how to:
    1. Recognize its underlying structure
    2. Identify aspects of the problem relevant to time & space complexity (e.g., problem size, distribution of inputs)
    3. Develop intuition about it using worst-case, best-case and average-case inputs
    4. Determine if a known solution exists
    5. Adapt a solution to a closely related problem
    6. Design an algorithm from scratch by appropriately selecting an algorithmic paradigm and making of abstract data type and implementation choices.
  6. Given a list of functions of a single variable, order them according to asymptotic growth.
  7. Perform worst-case, best-case and average case asymptotic analysis.
  8. Deduce the recurrence relations that describe the time complexity of recursive algorithms, and solve simple recurrence relations using Master Theorem, recursion trees and induction/ substitution.
  9. Design algorithms using the following paradigms, and recognize when each is appropriate:
    1. Greedy
    2. Divide-and-conquer
    3. Dynamic programming
  10. Design and analyze simple randomized algorithms.
  11. Solve problems using sorting algorithms:
    1. Comparison-based sorting algorithms
      1. Insertion Sort
      2. Merge Sort
      3. Heap Sort: Execute operations that preserve the heap property
      4. Quick Sort
    2. Non-comparison and hybrid sorting algorithms.
      1. Counting Sort
      2. Radix Sort
      3. Bucket Sort
  12. Assess the impact of choices of abstract data type and implementation on running time and storage requirements.
    1. Stacks
    2. Queues
    3. Linked Lists
    4. Trees: Binary search trees and balanced binary search trees
      1. Apply left and right rotations that preserve the binary search tree property
    5. Hash Tables, including collision avoidance strategies
    6. Graphs, including both adjacency matrix and adjacency list representations
  13. Understand the operation of the following graph algorithms.
    1. Depth-First Search
    2. Breadth-First Search
    3. Topological Sort
    4. Minimum Spanning Tree: Prim and Kruskal
    5. Single-Source Shortest Paths: Dijkstra


EECE-2650 -- Logic Design  [top]

Credits:  3
Prerequisites:  COMP-1010 Computing I
MATH-1320 Calculus II
 
Description:  

Number systems and computer codes. Switching algebra. Canonical and fundamental forms of switching functions. Minimization of switching functions. Two-level and multi-level digital circuits. Decoder, encoders, multiplexers, and demultiplexers. Design of combinational circuits using SSI, MSI and programmable logic devices. Latches and flip-flops. Registers and counters. Analysis and synthesis of synchronous sequential circuits. Design of more complex circuits: datapath and control.

Topics:  
  1. Number Systems and Computer Codes
  2. Boolean Algebra
  3. Computer Arithmetics
  4. Switching Functions
  5. Analysis of Combination Circuits
  6. Karnaugh Maps
  7. Programmable Logic Devices (ROM, PLA, PAL)
  8. Decoders, Encoders, Multiplexers, Demultiplexers
  9. Synthesis of Cominational Circuits
  10. Memory Elements, Latches and Flip-flops
  11. Registers and Counters
  12. Analysis of Synchronous Sequential Circuits
  13. Synthesis of Synchronous Sequential Circuits
  14. Control Circuit and Data Path
  15. Design of Arithmetic Processor


MATH-1310 -- Calculus I  [top]

Credits:  4
Prerequisites:   (none)
 
Description:  

A first calculus course. Functions, limits, continuity, derivatives, rules for differentiating algebraic and transcendental function; chain rule, implicit differentiation, related rate problems, max/minproblems, curve sketching; integrals and areas.

Topics:  
  1. Function Representations
  2. Exponential Functions
  3. Inverse Functions and Logarithms
  4. The Tangent and Velocity Problems
  5. Limits
  6. Continuity
  7. Tangents, Velocities, Rates of Change
  8. Derivatives
  9. The Derivative as a Function
  10. Derivatives of Poly. and Exp. Functions
  11. Product and Quotient Rules
  12. Derivatives of Trig. Functions
  13. Chain Rule
  14. Implicit Differentiation
  15. Derivatives of Logarithmic Functions
  16. Differentials
  17. Related Rates
  18. Maximum and Minimum Values
  19. Derivatives and Shapes of Curves
  20. L'Hospital's Rule
  21. Newton's Method
  22. Antiderivatives


MATH-1320 -- Calculus II  [top]

Credits:  4
Prerequisites:  MATH-1310 Calculus I
 
Description:  

A continuation of Calculus I. Volume, arc length, surface area, pressure and force. Differentiation and integration of trigonometric, inverse trigonometric, exponential, logarithmic, and hyperbolic functions. Improper integration, infinite series, Taylor and MacLauren series.

Topics:  
  1. Antiderivatives
  2. Areas and Distances
  3. The Definite Integral
  4. Evaluating Definite Integrals
  5. Defining Inverse Trig. Functions
  6. Derivatives of Inverse Trig. Functions
  7. The Fundamental Theorem of Calculus
  8. The Substitution Rule
  9. Integration by Parts
  10. Additional Techniques of Integration
  11. Using Integration Tables
  12. Approximate Integration
  13. L'Hospital's Rule
  14. Improper Integrals
  15. More about Areas
  16. Volumes
  17. Average Value of a Function
  18. Applications to Physics and Engineering
  19. Sequences
  20. Series
  21. The Integral and Comparison Tests
  22. Other Convergence Tests
  23. Power Series
  24. Representing Functions as Power Series
  25. Taylor and Maclaurin Series
  26. Applications of Taylor Polynomials


MATH-3210 -- Discrete Structures I  [top]

Credits:  3
Prerequisites:  MATH-1310 Calculus I
 
Description:  

The primary goal of the course is to improve your ability to think mathematically and learn some of the mathematics that you are likely to need in your career as a computer scientist. As you proceed through the CS curriculum you will find that the line between mathematics and computer science is blurred and nobody ever learns ALL of the mathematics that they ultimately may need. The real objective of this course is to help prepare you to be capable of learning new areas of mathematics when you need them. The only specific request that we, the mathematics department, have received from the CS department is that you be exposed to a much theory, including mathematical proofs, as possible.

Topics:  
  1. Similarities between "algebras."
  2. Logic
  3. Propositional Equivalence
  4. Counting
  5. Predicates & Quantifiers
  6. Nested Quantifiers
  7. Methods of Proof
  8. Sets
  9. Set Operations
  10. Functions
  11. Matrices
  12. Gauss Jordan Eliminations, Network
  13. Analysis
  14. Directed Graphs
  15. Sequences & Summations
  16. Mathematical Induction
  17. Recursive Definitions
  18. Basics of Counting
  19. Pigeonhole Principle
  20. Permutations & Combinations
  21. Binomial Coefficients
  22. Relations and their Properties
  23. Representing Relations
  24. Closures of Relations/Connectivity
  25. Equivalence Relations
  26. Partial Orderings


MATH-3220 -- Discrete Structures II  [top]

Credits:  3
Prerequisites:  MATH-3210 Discrete Structures I
 
Description:  

Graph theory, trees, algebraic systems. Boolean algebra, groups, monoids, automata, finite-state machines, rings, fields. Applications to coding theory, sorting, logic design.


MATH-3860 -- Statistics for Scientists/Engineers  [top]

Credits:  3
Prerequisites:  MATH-1320 Calculus II
 
Description:  

A one semester course in probability and statistics with applications in the engineering sciences. Probability of events, discrete and continuous random variables, density functions, distributions. Estimation, hypothesis testing, regression and correlation.





Descriptions of Computer Science Electives


COMP-3090 -- Database I  [top]

Credits:  3
Prerequisites:  COMP-2040 Computing IV
 
Description:  

The Database I course surveys topics in database systems. The course emphasizes the effective use of database (management) systems. Topics include access methods, data models, query languages, database design, query optimization, concurrency control, recovery, security, integrity, client-server architecture, and distributed database systems.

Topics:  
  1. Database system architecture
  2. Storage Structures
  3. Storage (or Record) Managers and Data Managers
  4. The Relational Model
  5. Relational query languages
  6. Entity-Relationship and Object-Oriented Models
  7. Database Design for the Relational Model
  8. Query Optimization
  9. Concurrency Control
  10. Recovery
  11. Integrity Enforcement
  12. Security
  13. Application Development
  14. Web Application Development


COMP-3100 -- Database II  [top]

Credits:  3
Prerequisites:  COMP-3090 Database I
 
Description:  

While Database I was largely devoted to the effective use of database systems, the subject matter of Database II is the design and implementation of these systems. The student will learn principles underlying the construction of database systems, particularly relational ones, and apply these principles in the project described below. The project is a good sized one, and provides an opportunity for the application of software engineering principles.

Topics:  
  1. Query optimization
  2. Concurrency control
  3. Recovery
  4. Security
  5. Deductive databases
  6. OLAP and data warehouses
  7. Object-oriented database systems
  8. Object relational
  9. Web databases
  10. Distributed database systems


COMP-3210 -- Network and Systems Management  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

This course will cover technical aspects of UNIX and VMS, and will prepare the student to manage a complex, heterogeneous computing environment. Students should expect substantial amounts of experience with all activities related to the management of the Computer Science Department network.


COMP-3300 -- Symbolic Logic  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

This course is an introduction to symbolic logic. Symbolic logic provides a solid foundation in formal reasoning for students preparing for graduate study in philosophy, mathematics, linguistics, cognitive science, computer science, and artificial intelligence. Students will learn the art of deductive reasoning using the formal system known as natural deduction. (Natural deduction is a human-oriented -- as contrasted with a machine-oriented -- formal proof system.) We will study semantic concepts such as truth and validity and their role in justifying natural deduction. We will also learn about alternative means of carrying out and evaluating deductive arguments.

Topics:  
  1. Introduction
  2. Propositional Logic
  3. Atomic Sentences
  4. The Logic of Atomic Sentences
  5. The Boolean Connectives
  6. The Logic of Boolean Connectives
  7. Methods of Proof for Boolean Logic
  8. Formal Proofs and Boolean Logic
  9. Conditionals
  10. The Logic of Conditionals
  11. Introduction to Quantifiers
  12. The Logic of Quantifiers
  13. Multiple Quantifiers
  14. Formal Proofs and Quantifiers


COMP-4010 -- Software Project I  [top]

Credits:  3
Prerequisites:  Permission of Instructor
 
Description:  

The Software Project sequence gives undergraduates an opportunity to design their own project sequence. Though the undergraduate coordinator is the instructor of record, any Computer Science Dept. faculty member can direct the project. A student who wishes to take this sequence must find a faculty member willing to direct his or her project. The directing faculty member must sign a brief project proposal, written by the student. The proposal must be filed with the undergraduate coordinator, who may ask for revisions in the proposal.


COMP-4020 -- Software Project II  [top]

Credits:  3
Prerequisites:  COMP-4010 Software Project I
 
Description:  

The Software Project sequence gives undergraduates an opportunity to design their own project sequence. Though the undergraduate coordinator is the instructor of record, any Computer Science Dept. faculty member can direct the project. A student who wishes to take this sequence must find a faculty member willing to direct his or her project. The directing faculty member must sign a brief project proposal, written by the student. The proposal must be filed with the undergraduate coordinator, who may ask for revisions in the proposal.


COMP-4030 -- Operating Systems Practicum  [top]

Credits:  3
Prerequisites:  COMP-3080 Introduction to Operating Systems
Permission of Instructor
 
Description:  

Construction of real operating systems.  Topics will include case studies of systems such as UNIX, MULTICS, and CP/M; structured design; and performance techniques.  Group projects will be employed to design, build, and evaluate various operating systems modules.


COMP-4050 -- Parallel Processing  [top]

Credits:  3
Prerequisites:  COMP-3080 Introduction to Operating Systems
 
Description:  

A study of parallel architectures and parallel algorithms, including classification of architectures, characterization of performance, design of parallel algorithms, evaluation of parallel software, and languages for parallel processing.  Students will write and execute programs for several different parallel machines.


COMP-4060 -- Compiler Construction I  [top]

Credits:  3
Prerequisites:  COMP-3010 Organization of Programming Languages
 
Description:  

This is a project intensive course. The goal of the primary project will be to implement a compiler for the ZPL data parallel programming language or at least as much as can reasonably be expected. The ultimate target will be to generate C source code with embedded MPI systems calls so that a student’s compiler can run on the Systems Lab’s Beowulf cluster. This is a big, open ended project that can be lots of fun. Testsuites will be given for those students who require more structure to guide their path. I would expect that a minimal submission by a student enrolled in 91.406 will be able to parse the entire ZPL language and generate sequential C code for most of the scalar portions of the ZPL programming language.

Topics:  
  1. Parse ZPL
  2. Parallel Arrays but running in a sequential environment
  3. Parallel Arrays running in a parallel MPI environment


COMP-4110 -- Software Engineering I  [top]

Credits:  3
Prerequisites:  COMP-2040 Computing IV
 
Description:  

Software Engineering I explores techniques for building medium to large-scale software systems.

Topics:  
  1. Understanding, developing, and communicating requirements
  2. Designing object-oriented models from requirements
  3. Decomposing designs into components
  4. Implementing and testing components
  5. Building software from components
  6. Designing software to support extensions, evolution, and reuse


COMP-4120 -- Software Engineering II  [top]

Credits:  3
Prerequisites:  COMP-4110 Software Engineering I
Permission of Instructor
 
Description:  

Software Engineering II explores the use of object-oriented methodologies as the prevailing paradigm to facilitate software design.

Outcomes:  Upon completion of this course, students should be able to:
  1. Master the concepts of object-oriented design.
  2. Understand static and dynamic design patterns.
  3. Learn to identify and apply patterns during design phase.
  4. Implement the design.
  5. Understand code refactoring.
  6. Test and deliver software - unit testing in detail.


COMP-4130 -- Data Communications I  [top]

Credits:  3
Prerequisites:  COMP-2030 Computer Organization and Assembly Language
COMP-3050 Computer Architecture
 
Description:  

This course provides an introduction to fundamental concepts in the design and implementation of computer communication networks, their protocols, and applications. Topics to be covered include: overview of network architectures; applications; network programming interfaces (e.g., sockets); transport, congestion, routing, and data link protocols; addressing; local area networks and network security (if time allows). Examples will be drawn primarily from the Internet (e.g., TCP, UDP, and IP) protocol suite.

Topics:  
  1. What is the Internet?
  2. What is a protocol?
  3. The Network Edge, Core, and Access Networks
  4. Physical Media
  5. Delay and Loss in Packet-Switched Networks
  6. Protocol Layers and Their Service Models
  7. Internet Backbones, NAPs and ISPs
  8. A Brief History of Computer Networking and the Internet
  9. Principles of Application-Layer Protocols
  10. The World Wide Web: HTTP
  11. File Transfer: FTP
  12. Electronic Mail in the Internet
  13. The Internet’s Directory Service: DNS
  14. Socket Programming
  15. Transport-Layer Services and Principles
  16. Multiplexing and Demultiplexing Applications
  17. Connectionless Transport: UDP
  18. Principles of Reliable of Data Transfer
  19. TCP case study
  20. Principles of Congestion Control
  21. TCP Congestion Control
  22. Introduction and Network Service Model
  23. Routing Principles
  24. Hierarchical Routing
  25. IP: the Internet Protocol
  26. Routing in the Internet
  27. What is Inside a Router?
  28. The Data Link Layer: Introduction, Services
  29. Error Detection and Correction
  30. Multiple Access Protocols and LANs
  31. LAN Addresses and ARP
  32. Ethernet
  33. Hubs, Bridges and Switches
  34. Wireless LANs: IEEE 802.11
  35. PPP: the Point-to-Point Protocol
  36. ATM
  37. What is Network Security?
  38. Principles of Cryptography
  39. Authentication: Who are You?
  40. Integrity
  41. Key Distribution and Certification
  42. What is Network Management?
  43. The Internet Network Management Framework
  44. Firewalls
  45. Multimedia Networking Applications
  46. Quality of Service
  47. Wireless Application Protocol


COMP-4140 -- Data Communications II (Distributed Systems)  [top]

Credits:  3
Prerequisites:  COMP-3080 Introduction to Operating Systems
COMP-4130 Data Communications I
 
Description:  

Continuation of 91.413 with selected topics of current interest. Topics will include: SNMP, Network design, Multimedia Communications, Multicast Routing, Security and Privacy and detailed analysis of specific routing protocols. A laboratory with Network Management and packet analysis software will be used to support some of the projects.


COMP-4200 -- Artificial Intelligence  [top]

Credits:  3
Prerequisites:  COMP-3010 Organization of Programming Languages
MATH-3860 Statistics for Scientists/Engineers
Permission of Instructor
 
Description:  

We will cover the basic algorithms forming the core of Artificial Intelligence, heuristic search, knowledge representation and inference, modeling, probabilistic reasoning, and planning. We will study these algorithms using pencil/paper assignments and small programming assignments using the Python programming language. We will also study the history of AI and some philosophical aspects of AI. In addition to the assignments and two tests, you will complete a semester programming project of your choosing. From time to time you will be asked to review paper on current AI topics.

Outcomes:  Upon completion of this course, students should be able to:
  1. Demonstrate understanding of the fundamental concepts and theory of artificial intelligence.
  2. Discuss the ups and downs of the history of AI.
  3. Discuss the successes and failures of AI.
  4. Discuss the characteristics of AI programs.
  5. Discuss and manually execute the algorithms studied in class.


COMP-4210 -- Data Mining  [top]

Credits:  3
Prerequisites:  COMP-4020 Software Project II
 
Description:  

This course provides the students with a comprehensive introduction to data mining techniques including association rule mining, classification, clustering, etc.  Students will also use the WEKA software to do simple data mining tasks.

Topics:  
  1. Input: Concepts, Instances, Attributes
  2. Output: Knowledge Representation
  3. Algorithms: The Basic Methods
  4. Credibility: Evaluating WhatÂ’s Been Learned
  5. Data Transformations
  6. Ensemble Learning


COMP-4220 -- Machine Learning  [top]

Credits:  3
Prerequisites:  Permission of Instructor
 
Description:  

This introductory course gives an overview of machine learning techniques used in data mining and pattern recognition applications. Topics include: foundations of machine learning, including statistical and structural methods; feature discovery and selection; parametric and non-parametric classification; supervised and unsupervised learning; use of contextual evidence; clustering, recognition with strings; small sample-size problems and applications to large datasets.


COMP-4230 -- Computer Vision I  [top]

Credits:  3
Prerequisites:  Permission of Instructor
 
Description:  

(none available at this time)


COMP-4240 -- Computer Vision II  [top]

Credits:  3
Prerequisites:  Permission of Instructor
 
Description:  

(none available at this time)


COMP-4270 -- Computer Graphics I  [top]

Credits:  3
Prerequisites:  COMP-2010 Computing III
MATH-2310 Calculus III
 
Description:  

This course focuses on the concepts and algorithms that underlie the development of modern interactive three-dimensional computer graphics software. Good computer graphics requires effective use of data structures, human factors, algorithms, software engineering, and mathematics. This highly interdisciplinary nature of computer graphics is a fundamental guiding philosophy of the course. In addition to exams and quizzes, the course requires a substantial amount of programming, and assignments that require you to read current computer graphics research literature and write about it.

Topics:  
  1. Graphics Systems and Models
  2. Graphics Programming
  3. OpenGL API
  4. Viewing Concepts
  5. Input and Interaction
  6. Geometric Objects and Transformations
  7. Classical and Computer Viewing
  8. Projections
  9. Shading: Light and Matter
  10. Discrete Techniques: Buffers
  11. Implementation of a Renderer
  12. Hierarchical and Object Oriented Modeling
  13. Curves and Surfaces
  14. Procedural Methods
  15. Visualization


COMP-4280 -- Computer Graphics II  [top]

Credits:  3
Prerequisites:  COMP-4270 Computer Graphics I
 
Description:  

In Computer Graphics I, you were introduced to the fundamentals of computer graphics. In this course, you will have the opportunity to examine a few advanced topics in much more depth. In addition, the course format, which is very different than last semester’s, will provide you experience with class presentations, as well as the opportunity to implement a project.

Topics:  
  1. Visible lines & visible surfaces
  2. Rendering & illumination
  3. Realism
  4. Antialiasing
  5. Raytracing, Volume Rendering, Radiosity
  6. Animation
  7. OpenGL
  8. Java for Graphics and 3D
  9. Java3D vs. Java OpenGL
  10. 3D Graphics and Animation delivery on the Web
  11. Real-Time Rendering


COMP-4300 -- Semantics of Programming Languages  [top]

Credits:  3
Prerequisites:  COMP-3010 Organization of Programming Languages
COMP-3040 Foundations of Computer Science
 
Description:  

Introduction to Semantics of Programming Languages. Axiomatic, operational, denotational, and translational semantics. Program specification. Program proofs using the techniques of Floyd and Hoare.


COMP-4310 -- Computational Logic  [top]

Credits:  3
Prerequisites:  COMP-3010 Organization of Programming Languages
COMP-3300 Symbolic Logic
 
Description:  

Semidecision procedures for first-order logic and their correctness. Tableaus, unification, and resolution. Horn clauses and logic programming. Selected topics in areas such as nonstandard logics and architectures.


COMP-4500 -- Robotics I  [top]

Credits:  3
Prerequisites:  Junior standing in Computer Science or Engineering, with solid knowledge of the C programming language.
 
Description:  

An introduction to robotics, including laboratory. In the lab, students build and program robots. Topics to be covered include sensors, locomotion, deliberative architectures, reactive architectures, and hybrid architectures.


COMP-4510 -- Robotics II  [top]

Credits:  3
Prerequisites:  COMP-4500 Robotics I
 
Description:  

In this course, you will learn about autonomous mobile robots and artificial intelligence. There will be lectures on Tuesdays (held in Olsen 403) and labs on Thursdays (held in Olsen 304). The robots will be programmed in Pyro, which stands for Python robots. The language abstracts the underlying robot control language, allowing you to write code that will run on different types of robots and robot simulators. We will primarily use the Pioneer 2DXE robot platform and its simulator.

The focus of the course will be AI Robotics. We will learn about vision, planning and mapping, machine learning, and multi-agent robotics. The topics learned in lecture will be followed by a lab on that subject.


COMP-4520 -- Diagnostic and Test Software Design  [top]

Credits:  3
Prerequisites:  COMP-2010 Computing III
COMP-2040 Computing IV
COMP-3050 Computer Architecture
 
Description:  

Virtually all major hardware products include the design and implementation of diagnostic and verification software as part of the product life-cycle. This course will examine the details of such test software and the diagnostic software for various hardware devices such as disks and tape subsystems.


COMP-4530 -- Real-Time Programming  [top]

Credits:  3
Prerequisites:  COMP-3080 Introduction to Operating Systems
EECE-2650 Logic Design
 
Description:  

A survey of the programming techniques needed for applications in which a computer monitors or controls a process whose logical sequence is asynchronous to that of the computer. Topics covered include polling, single and multiple interrupts, masked and vectored interrupts, synchronization mechanisms, critical sections, hardware interfaces, sampled-data systems, and feedback and control. Students will implement several microprocessor-based applications.


COMP-4560 -- Speech Recognition and Synthesis  [top]

Credits:  3
Prerequisites:  Permission of Instructor
 
Description:  

This course surveys the techniques by which computer systems can generate and recognize human speech. Students will be introduced to all aspects of this interdisciplinary field (including computer science, artificial intelligence, acoustics, linguistics, psychology, physics, and signal processing). Working in teams, students will implement parts of a modern speech system and explore the capabilities and limitations of present day technology.


COMP-4570 -- Computer Security  [top]

Credits:  3
Prerequisites:  This course has been replaced by 91.561.
 
Description:  

This course has two goals. The first goal is to give students an understanding of basic concepts and techniques of modern cryptography and methodologies of writing secure programs. The second goal is implement encryption algorithms and digital signatures at the application layer using Berkley Socket API.

Topics:  
  1. The Data Encryption Standards (DES)
  2. Differential and Linear Cryptanalysis
  3. Block Cipher Design Principles and Modes of Operations
  4. Triple DES
  5. International Data Encryption Algorithm
  6. Blowfish and RC5
  7. Placement of Encryption Algorithms and Key Distributions
  8. Public-Key Cryptosystems
  9. The RSA Algorithm
  10. Key Management
  11. Diffie-Hellman Key Exchange
  12. Message Authentication Codes and Hash Functions
  13. Digital Signatures and Digital Signature Standard
  14. Introduction to Socket API and Client-Server Programming (in C)
  15. Symmetric Encryption Implementation
  16. Digital Signature Implementation
  17. Buffer Overflows
  18. Access Control
  19. Race Conditions
  20. Randomness and Determination
  21. Password Authentication
  22. Trust Management and Input Validation


COMP-4580 -- Computer Performance Evaluation  [top]

Credits:  3
Prerequisites:  COMP-3080 Introduction to Operating Systems
MATH-3860 Statistics for Scientists/Engineers
 
Description:  

The objectives of this course are to provide both analytic and simulation skills useful in evaluating a computer system and to study available techniques of modeling a given system so that meaningful statistics (such as response times) can easily be obtained. The course will cover some major topics such as review of probability theory and statistics, queuing theory, performance of evaluations of time-sharing, batch, or mixed computer systems and last but not the least the performance evaluations of distributed systems. Other topics such as performance measurement techniques, and data analysis will also be covered.


COMP-4590 -- Human Factors in the Design of Interactive Systems  [top]

Credits:  3
Prerequisites:  COMP-2010 Computing III
 
Description:  

This course sensitizes students to the factors one must consider in designing interactive systems. It gives them experience in developing interactive software for use by people other than themselves, and discusses tools and techniques for evaluating the effectiveness of interactive software. Course work consists of readings, class discussions, the researching and writing of a term paper, and the design and implementation of an interactive programming project.


COMP-4600 -- Embedded Systems and Digital Storage Architectures  [top]

Credits:  3
Prerequisites:  Permission of Instructor.
 
Description:  

This course will focus on existing and proposed technologies for storing digital information. Both hardware and software issues will be examined, beginning with device and controller organization and proceeding through aggregation techniques, interconnect architectures and host considerations. At each level, specific components will be evaluated with respect to critical storage criteria.

Topics:  
  1. Storage Device Technology
  2. Device Controllers
  3. Aggregation Methods
  4. RAID Technologies
  5. Interconnect Architectures
  6. Host Side Issues


COMP-4610 -- GUI Programming I  [top]

Credits:  3
Prerequisites:  COMP-2010 Computing III
 
Description:  

This is the first semester of a two-semester senior capstone course. In addition, it is a project course. Putting these two together means that the GUI Programming course sequence is a two-semester experience that is intended to result in your working with other class members as part of a team to implement a program of significant size that adheres to sound user interface and software engineering practices.

The first semester looks at basic Java programming, focusing on the object-oriented nature of the application programmer interface (API). You will learn how to use that API and how to create and document an API yourself. It is important to note that programming style is a large part of what you will be evaluated on in this course. In addition, your work will be scrutinized carefully for robustness.

GUI programming goes far beyond putting windows, icons, mouse controls, and pull-down menus on the screen. (That level of GUI programming is called a “WIMP” interface!) The essence of GUI programming is the U part, that is, the quality of the user’s interaction with the system. My own programs -- the ones that I really put effort into and the ones I get paid to write -- are probably only 10-15% “algorithm” at most. The rest is error-checking, contingency-handling, and documentation. (Yes, I’ve now emphasized documentation twice...) This mix, and the meticulous attention to detail that it involves, helps me create programs that actually work: not only in the sense that they do not crash, but more importantly in the sense that they actually help the user get a job done, even when the user makes mistakes.

Thus you can see that we will cover much more than how to create WIMP interfaces. The philosophy of programming is also important, and this theme will pervade virtually all of our discussions.

Outcomes:  Upon completion of this course, students should be able to:
  1. List at least three benefits of good user interface design and at least three ramifications of bad user interface design.
  2. State at least a dozen commonly-accepted guidelines for good user interface design.
  3. Given a sample program with a relatively sophisticated user interface, identify those aspects of the program that conform to commonly-accepted user interface guidelines and those that do not.
  4. Write clear and concise messages to inform users of a program’s status and improve messages written by others to make them clearer and more concise.
  5. Create Java programs that exhibit proper use of various user interface components.
  6. Correctly document Java code using all features of the Javadoc tool.
  7. Write Java code that exemplifies quality programming practices and software engineering.
  8. Validate user input and identify errors in a professional manner.
  9. Describe how to perform basic usability testing.
  10. Present their work to the class using a computer projector.


COMP-4620 -- GUI Programming II  [top]

Credits:  3
Prerequisites:  COMP-4610 GUI Programming I
 
Description:  

This is the second semester of a two-semester senior capstone course. In addition, it is a project course. Putting these two together means that the GUI Programming course sequence is a two-semester experience that is intended to result in your working with other class members as part of a team to implement a program of significant size that adheres to sound user interface and software engineering practices.

This semester continues work in Java. The first semester looked at basic Java programming, focusing on the object-oriented nature of the application programmer interface (API). You should have learned how to use that API and how to create and document an API yourself. Programming style was a large part of what you were evaluated on in that course and will continue to be a factor in this course. In addition, your work will continue to be scrutinized carefully for robustness.

As demonstrated in 91.461, GUI programming goes far beyond putting windows, icons, mouse controls, and pull-down menus on the screen. The essence of GUI programming is the U part, that is, the quality of the user’s interaction with the system. This semester you will work as part of a programming team to create a program that actually works: not only in the sense that it does not crash, but more importantly in the sense that it actually helps users get a job done, even when those users make mistakes.

Outcomes:  Upon completion of this course, students should be able to:
  1. Work on a project team with other students.
  2. Complete the design, implementation, and documentation of a program of significant size and complexity.
  3. Write a detailed project plan.
  4. Write a detailed description of a specific user population.
  5. Make oral presentations to the class on their work.
  6. Conduct and report on a relevant usability test.
  7. Solve programming and other project-related problems on their own by exploring documentation and other resources.


COMP-4800 -- Honors Project I  [top]

Credits:  3
Prerequisites:  Honors standing and permission of Instructor
 
Description:  

This course provides an undergraduate research experience for Computer Science majors enrolled in the Honors Program. Each student develops a project idea in consultation with the instructor. The student writes a proposal for the project, reads the relevant literature, performs the project, writes a project report or thesis, and makes an oral presentation about the project.


COMP-4810 -- Honors Project II  [top]

Credits:  3
Prerequisites:  Honors standing and permission of Instructor
 
Description:  

Second semester of a two-semester honors project sequence.


COMP-4900 -- Directed Studies in Computer Science  [top]

Credits:  3
Prerequisites:  Students must submit a proposal to the directing faculty member, obtain his/her signed approval, and forward a copy of the signed proposal to the department chairperson.
 
Description:  

Individual study for a student desiring more advanced or more specialized work. This course may not be taken more than twice and may not be substituted for scheduled offerings.





Descriptions of Computer Science Courses for Non-CS Majors


COMP-1110 -- Everyday Computing  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

A non-technical introduction to computer science. The historical development of computational aids and their use in various cultures and societies. Modern examples of computational aids, including integrated word processing/spreadsheet/database environments. Not for computer science majors.

Note:  This course does not satisfy science requirements for Science majors but may be used as a free elective by Science majors.


COMP-1130 -- Exploring the Internet  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

This course focuses on the primary use of the Internet, namely Web browsing (search engines, portals, etc.), as well as the many other applications of the Internet, such as: e-mail, file transfer, e-commerce, message boards, mailing lists, social networking, chat rooms, instant messaging, and Internet telephony.  Internet security, ethics, and privacy are also discussed including an introduction to Computer Forensics.  Students will complete hands-on exercises, including construction of their personal web page, blog, and wiki.

Outcomes:  Upon completion of this course, students should be able to:
  1. Discuss the history of the Internet.
  2. Access and connect to the Internet.
  3. Analyze an IP address.
  4. Identify the components of a Web address.
  5. Explain the purpose of a Web browser.
  6. Effectively search for information on the Web.
  7. Recognize the different types of Web sites.
  8. Recognize how Web pages use graphics, animation, audio, video, virtual reality, and plug-ins.
  9. Identify the steps required for Web publishing.
  10. Identify simple HTML code.
  11. Create and manage a Blog.
  12. Create and manage a Wiki.
  13. Create and manage a Web page.
  14. Describe the types of e-commerce.
  15. Explain how email, FTP, newsgroups and message boards, mailing lists, chat rooms, instant messaging, and Internet telephony works.
  16. Identify the rules of netiquette.
  17. Identify ways to safeguard against computer viruses, worms, Trojan horses, botnets, back doors, and spoofing.
  18. Identify ways to safeguard against cookies, spyware, adware, spam, and phishing.
  19. Discuss techniques to prevent unauthorized computer access and use.
  20. Recognize issues related to information accuracy, intellectual property rights, and Internet codes of conduct.


COMP-1150 -- Developing Database Applications  [top]

Credits:  3
Prerequisites:   This course requires some Windows (3.1 or later) experience.
 
Description:  

This course teaches its students how to design and implement a complete database application using a modern relational database system. It covers relations; queries; forms; reports; objects and properties; data design and software design; and rapid application development tools.

Topics:  
  1. Decide whether a database application is the appropriate solution for a given problem
  2. Design table (relation) schemes
  3. Build and populate tables in Microsoft Access
  4. Formulate queries graphically
  5. Build and modify forms for tables and queries
  6. Formulate SQL queries
  7. Build and modify reports
  8. Attach macros to forms
  9. Design a convenient user interface for a database application
  10. Build simple Visual BASIC for Applications procedures
  11. Design a convenient user interface for a database application
  12. Build the user interface


COMP-1170 -- Artbotics  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

Artbotics focuses on exploring the intersections between art, computer science, and robotics.  The course is project-driven and includes public exhibitions and service learning.  You will learn founding principles in both the fields of art and computer science, then put them into practice by creating interactive, tangible exhibits that are displayed in public settings. In the service learning component, you will have the opportunity to mentor local high school students participating in an after school program that meets concurrently with the course’s lab session.  The course will also include guest lectures from practitioners in the fields.

Class will consist of two 75-minute lectures each week (Tuesdays and Thursdays 1:00-2:15) and a 2-hour lab (Tuesday or Thursday, 2:45-4:45).  The lab will meet in the Revolving Museum LAB at 181 Market Street in downtown Lowell.  Lab attendance is required; see the attendance policy below.

Topics:  
  1. (Hybrid Core) Historic and contemporary practices in the collaboration of science and technology.
  2. (Hybrid Core) Problem-solving process of engineering and art -- its commonality and difference.
  3. (Hybrid Core) Sustainable community through art, science and technology, and education.
  4. (CS and Robotics Core) Introduction to imperative programming: functions, arguments and return values.
  5. (CS and Robotics Core) Introduction to real-time systems including sensors, actuators and control loops.
  6. (CS and Robotics Core) Agent-based models of computing (sense-act loops).
  7. (CS and Robotics Core) Elements of robotics systems and how to physically create them (e.g., wiring and construction techniques).
  8. (CS and Robotics Core) Uses of computing in a variety of fields.
  9. (Art Core) Introduction to New Media Art: Historic background, development and themes.
  10. (Art Core) Examination of form and content -- use of visual language to support communicative issues such as concept, content and subject matter; the interplay between media and idea.
  11. (Art Core) Traditional visual language -- aesthetics in color, composition, value, texture and material.
  12. (Art Core) New media language -- aesthetics in time, motion, space, interactivity and hybrid media.
Outcomes:  Upon completion of this course, students should be able to:
  1. (CS and Robotics related) Have hands-on experience with embedded computing and digital technology.
  2. (CS and Robotics related) Gained the ability to formulate structured algorithms and program them.
  3. (CS and Robotics related) Understand use of sensors and interactive algorithms.
  4. (CS and Robotics related) Carry out a project from inception to public exhibition that incorporates computing.
  5. (CS and Robotics related) Understand how computing is used in a variety of fields and applications.
  6. (Art related) Acquire the understanding of New Media art and be able to, historically and conceptually, contextualize your own art work in the art world.
  7. (Art related) Have examined principles of aesthetic and conceptual elements in visual art and be able to find strategies for a successful and engaging art expression.
  8. (Art related) Have investigated examples of art and technology collaboration especially in public domain.
  9. (Art related) Evaluate new media art works in various contexts including gallery or public installation.
  10. (Service Learning related) Deepen the knowledge in the subject matter by teaching and mentoring high school students.
  11. (Service Learning related) Recognize art and science education as a way of supporting sustainable community.


COMP-2110 -- Computer Science for SRT Applications  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

An introduction to computer programming, with applications in sound recording technology.  Students will learn Matlab and will write and execute programs that perform operations pertinent to SRT, including audio engineering computations, sound synthesis, and signal processing.

Outcomes:  Upon completion of this course, students should be able to:
  1. Design and code Matlab functions to solve a variety of problems pertinent to SRT.
  2. Use most of the features of Matlab.
  3. Demonstrate knowledge of good programming style.


COMP-2120 -- Sound Thinking  [top]

Credits:  3
Prerequisites:   (none)
 
Description:  

What is sound?  How do we capture, manipulate, and harness it in the digital world?  This course focuses on the intersection of art and technology, exploring how sound is integrated into computer applications.  Students will explore the art and science of digital audio, from the basic end-user applications that promote creative expression and exploration, to the underlying code that allows these programs to run and function. Course projects will provide multiple opportunities to explore, create, and solve problems with music technology.  Broad concepts will be explored for each type of software application being covered from the perspective of the software developer as well as the end-user.

Topics:  
  1. simple recording techniques
  2. audio editing
  3. looping software
  4. properties of various sound file and compression formats
  5. creating different sound file formats
  6. recording and sound capturing devices
  7. musical forms
  8. using sound on webpages
Outcomes:  Upon completion of this course, students should be able to:
  1. Record sound and manipulate those recordings in an audio editor program.
  2. List differences between various sound file and compression formats.
  3. Understand the essence of basic music notation.
  4. Understand and basic musical forms be able to sequence sounds following a basic form.
  5. Manipulate sounds in a program such as GarageBand or Acid XPress.
  6. Build a webpage that incorporates sound.
  7. Build a webpage that allows users to interact with and manipulate sound dynamically.

 


This is document http://jesseheines.com:8080/~heines/courses/courses-v3.jsp.  It was last modified on Friday, August 26, 2022 at 4:03 PM.
Copyright © 2022 by Jesse M. Heines.  All rights reserved.  May be freely copied or excerpted for educational purposes with credit to the author.