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.
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: | - C Basics
- Functions
- I/O
- Flow of control
- Arrays
- Strings
|
Outcomes: | Upon completion of this course, students should be able to: |
| - State an object’s type by reading a declarator using the Right Left Walk Method.
- State how many bytes of storage are reserved by a variable definition.
- State exactly where storage is allocated.
- Correctly fill out memory templates for a variety of small C programs thereby demonstrating knowledge of the execution environment.
- Identify which of C’s 45 operators cause a side-effect and which do not.
- Convert an integer decimal value into its equivalent unsigned binary representation.
- Convert an integer decimal value into its equivalent signed magnitude representation.
- Convert an integer decimal value into its equivalent one’s complement representation.
- Convert an integer decimal value into its equivalent two’s complement representation.
- Convert a real decimal value into its IEEE 754 Single Precision Floating Point equivalent.
- Create 10-250 line C programs after reading a short problem description.
- Create programs that rely upon simple recursion (factorial, Ackermann’s function, Fibonacci).
- Create programs that rely upon a recursive divide and conquer strategy (quicksort, maximum sum subvector, tromino tiling).
- Write at least one program that relies upon a recursive backtracking strategy (knight’s tour).
- Write short, relatively simple makefiles.
- Use the GDB debugger to debug small programs using the following commands:
list , step , next , display , break , run , and backtrace . - Use the UNIX operating system to create, store, and print files, to build an executable image, and to navigate about the file system.
- Sort a list of integers using any one of the following sorts: bubble sort, insertion sort, selection sort, shell sort, and quick sort.
- Write C programs that rely upon dynamic memory allocation via the function
malloc . - Read and understand a program that implements a linked list polymorphic data structure that relies upon pointers to functions and pointers to a
void . - Build an executable image from a collection of header and C source files.
- Demonstrate how C’s dereference operator is used to access data.
- Demonstrate how C can achieve “call by reference” by passing the address of an operand.
- Write C programs that include single and multi-dimensional arrays, including passing such arrays as parameters to a function call.
- 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: | - Big O Notation
- C Programming
- Sorting (bubble, selection, insertion, shell, radix, quicksort, heapsort, mergesort, topological)
- Recursion (tail, divide and conquer, backtracking)
- Data Abstraction
- Linked Lists
- Programming Tools (
gcc , make , gdb , emacs ) - Sets
- Hashing
- Circular and Doubly Linked Lists
- Queues
- Trees - Binary and N-Ary
- Tree Traversal
- Binary Search Trees
- AVL Trees
- Graphs
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Fill out a memory template by manually executing C programs that include: recursion, malloc’ed up space, passing of arrays, and functions calls.
- Write C programs that use pointers to functions and pointers to generic data to build polymorphic data structures.
- Write C programs that use recursion.
- Write C programs that implement the following sorting algorithms: bubblesort, selectionsort, insertionsort, shellsort, and radix sort.
- Write C programs that implement the following sorting algorithms: quicksort, heapsort, and mergesort.
- Explain data abstraction in writing.
- Write small makefiles.
- 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 . - 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.
- 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.
- Write a C program that creates and prints an AVL tree by using polymorphic tree primitives previously built.
- Write a C program that relies upon a sequential, dynamic array, and polymorphic implementation of sets.
- Write a C program that relies upon a sequential, linked list, and polymorphic implementation of sets.
- Write a C program that implements Dijkstra’s shortest path algorithm.
- Write a C program that creates polymorphic binary search trees and traverses them inorder, preorder, postorder, and breadth first order.
- Given a binary search tree, produce the inorder, postorder, preorder, and breadth first order traversal of that tree.
- Write a C program that relies upon polymorphic circularly linked list.
- Write a C program that relies upon polymorphic queues.
- Write a C program that relies upon polymorphic doubly linked lists.
- Write a C program that relies upon polymorphic linked lists.
- Identify the average case complexity, expressed in Big O notation, of sorting algorithms.
- Write a C program that relies upon a hashing implementation of polymorphic sets.
- 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: | - Introduction to Object-Oriented Design and Analysis
- The Object Model
- Review of C and introduction to C++
- Classes and data abstraction
- Operator overloading
- Inheritance
- Virtual functions and polymorphism
- C++ stream I/O
- Templates
- Exception handling
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Use g++ to compile and link single or multiple C++ programs.
- Understand basic C++ syntax.
- Write C++ programs that use string and iostream classes to print to standard output and read from standard input.
- Write C++ programs with object-oriented design using both structs and classes, separating header and implementation files.
- Write C++ programs that use sequential containers, vector, list, and deque, and their iterators.
- Write C++ programs that use pointers to iterate through arrays.
- Write C++ programs that use functions with reference parameters.
- Explain differences of three sequential containers and be able to decide which one to use for specific applications.
- Write C++ programs that use type-independent generic algorithms.
- Write C++ programs that use both function and class templates.
- Explain data abstraction and encapsulation and how they are enforced in C++.
- Explain differences of three access labels and their inheritance restrictions.
- Write C++ programs that use three components of copy control.
- Write C++ programs that use smart pointers.
- Write C++ programs that use overloaded input/output, arithmetic, relational, assignment, subscript, member access, and increment/decrement operators.
- Explain three fundamental concepts of Object-Oriented Programming (OOP).
- Understand when dynamic binding is triggered.
- Identify which (virtual) function is called in a base and derived class hierarchy.
- 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: | - The hardware/software interface
- Instruction set architectures
- RISC vs. CISC
- Stored program concept
- Execution time
- Performance
- Speedup
- Benchmarks
- Amdahl’s law
- Representation of numbers and strings
- Simple programming
- The SPIM simulator
- Input and Output and Syscalls
- Complete assembler programs
- Control structures
- Procedures and stacks
- Manual assembly
- MIPS addressing styles
- Memory layout: global data, dynamic data, OS, stack, and text
- Representation and manipulation of integers
- Mathematical and logical operations
- Representation and manipulation of floating point numbers
- Gates, truth tables, and logic equations
- Combinational logic
- Designing an ALU
- Ripple-carry adders
- Carry-lookahead adders
- Multiplication algorithms
- Sequential logic
- Clocks and timing methodologies
- Gates, latches, flip-flops
- Introduction to memory organization
- Single-cycle control
- Finite state machines
- Multi-cycle control
- Microcode control
|
Outcomes: | Upon completion of this course, students should be able to: |
| - 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.
- Discuss and describe the basic components of a computer.
- Discuss and describe how memory is organized.
- Discuss and describe how peripherals operate and interface with a computer.
- Demonstrate and discuss how combinational logic components may be used to build an Arithmetic Logic Unit.
- Demonstrate and discuss how combinational and sequential logic components may be used to implement a simple single-cycle computer.
- Demonstrate and discuss how combinational and sequential logic components may be used to implement a simple multi-cycle computer.
- Evaluate a computer’s performance.
- Compare the performance of two computers.
- Demonstrate and discuss tradeoffs in computer design and how they affect performance.
- 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: | - Object-oriented software development
- Object-oriented design
- Object relationships
- Exceptions
- Class and Inheritance
- Documentation
- Regular expressions
- Parsing
- Integrated Development Environments
- Streams
- XML and JSON
- Use and Design of Large APIs
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Set up, configure, and use a professional IDE, including its debugging capabilities.
- Document code in a professional manner using industrial quality documentation tools.
- Manage code and share it with others using a repository with version control.
- Describe the differences between writing small programs and ones that are part of a large software project that involves multiple people.
- Use and create industrial quality application programmer interfaces (APIs).
- Develop programs that implement general algorithms driven by data stored in files rather than hard-coded.
- Understand basic features of scanning and parsing.
- Appreciate the advantages of industry standards in coding and data file formats.
- 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: | - Introduction to Scheme
- Substitution model
- Orders of growth
- Recursion and iteration
- Higher-order procedures
- Compound data
- Aggregate data
- Symbolic data
- Henderson picture language
- Data structures
- Multiple representations of data
- Generic operators
- State
- Environment model
- Object-oriented programming
- Mutable data
- More mutation
- Streams
- Metacircular evaluator
- MC eval: lazy evaluation
- Logic programming and pattern matching
- Memory management and garbage collection
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Evaluate Scheme expressions.
- Create pair structures in Scheme and diagram them on paper using box and pointer diagrams.
- Perform manipulations of lists and trees.
- Differentiate between normal and applicative order evaluations.
- State the order of growth of a procedure in terms of time and space.
- Write procedures that generate both iterative and recursive processes.
- Manipulate higher-order procedures by passing procedures as arguments and returning procedures as values of other procedures.
- Differentiate between the Scheme comparison operators eq?, eqv?, and equal?.
- Write a procedure given its specifications and sample results.
- Write procedures to maintain state in local environments for later applications.
- Describe the meaning of mutation and be able to implement it in procedures.
- Create environment diagrams describing the evaluation of Scheme code and understand existing environment diagrams.
- Write object-oriented code in Scheme.
- Describe the characteristics of various garbage collection algorithms.
- Define procedures that create and manipulate infinite streams.
- Demonstrate understanding of the metacircular evaluator by adding new statements and modifying the behavior of existing statements.
- Use the metacircular evaluator to understand different methods for evaluating arguments: applicative order, normal order, the analyze evaluator, and the lazy evaluator.
- 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:
- 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.
- 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: | - Mathematical preliminaries
- DFAs and NFAs
- DFA/NFA equivalence and regular expressions
- Non-regular languages and pumping lemma
- Context-free grammars and languages
- Pushdown Automata
- Non-context free languages and pumping lemma
- Turing machines and variants
- Algorithms and the Church-Turing thesis
- Decidability, undecidability, and diagonalization
- Reducibility
- A natural undecidable problem
- P and NPNP completeness
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Understand finite state automata, push-down automata, and Turing machines in terms of memory resources.
- Describe basic properties of languages accepted by these models.
- Understand basic construction (programming) techniques of these models.
- Read and write regular expressions and context-free grammars.
- Write a convincing formal proof about basic properties of regular languages, context-free languages, and recursively enumerable languages.
- Recognize a bogus proof.
- Put algorithmic problems in relation to computational models.
- Explain the concept of undecidability and understand reducibility.
- 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: | - Digital I/O
- Analog-to-Digital Conversion
- Interfacing with Digital Logic
- Instruction Set Design
- CPU Registers
- Memory Mapping and Address Decoding
- Timing and Cycle Counting
- Serial Interfaces
- Design of Algorithms that Account for Cache Memory Configurations
- How C Compilers Translate into Machine Code
- Optimizing Code for Performance
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Explain the architecture of a simple 8-bit microprocessor.
- Write assembly language programs that access digital I/O and external digital logic.
- Write assembly language programs that interface to analog signals using analog-to-digital converters.
- Design hardware that performs address decoding and memory mapping for I/O peripherals and write assembly language programs that access these I/O peripherals.
- Analyze assembly language programs to determine execution time and evaluate efficiency.
- Explain how instruction sets are designed to simplify hardware decoding and maximize processor performance.
- Explain the architecture of a simplified Pentium processor.
- Write assembly language programs that map to sequential and pipelined implementations of a simplified Pentium processor.
- Identify and eliminate control and data hazards from assembly language programs targeted to a pipelined implementation of a simplified Pentium processor.
- Write assembly language programs that maximize the effectiveness of the branch prediction used in a pipelined implementation of a simplified Pentium processor.
- Explain the performance degradation inherent in the use of memory.
- Write assembly language programs that minimize code execution time through the use of registers instead of memory for storage of program variables.
- Identify hardware elements would enhance software performance if added to the architecture of a simplified Pentium processor.
- Perform a size-cost-speed tradeoff analysis to determine the viability of adding hardware elements to the simplified Pentium processor.
- Design direct-mapped and set-associative caches that maximize code performance while balancing the additional cost incurred by fast memory elements.
- Select appropriate cache and memory update policies.
- Perform a size-cost-speed tradeoff analysis of different cache architectures.
- Understand how C compilers translate C code into assembly language code.
- Write C code to maximize the performance of the translated assembly language code for the Pentium III architecture.
- Identify and eliminate C code blockers that prevent C compilers from fully optimizing the targeted C code for the Pentium III architecture.
- Identify alternative C coding methods and styles that facilitates the generation of fast and efficient assembly language code for the Pentium III architecture.
- Write C code that eliminates resource allocation conflicts when targeting the Pentium II architecture.
- Identify hardware elements would enhance software performance if added to the architecture of the Pentium III.
- Perform a size-cost-speed tradeoff analysis to determine the viability of adding hardware elements to the Pentium III.
- 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: | - What is an operating system?
- The evolution of operating systems
- What is an operating system
- The evolution of operating systems
- The process model
- Systems and system states and transitions
- Processes and address space layouts
- Computational progress and process/thread organization
- Process and operating system interfaces
- System call and exception based kernel access
- The need for process/thread synchronization
- Synchronization techniques and mechanisms
- Process scheduling and dispatching
- General address space issues and memory management introduction
- Process/thread sharing of physical memory
- Virtual memory paradigm
- Fetch, placement and replacement requirements
- Page replacement algorithms
- Page fault performance issues and modeling techniques
- General design issues for paging systems
- UMA, NUMA, and NORMA system architectures
- Introduction to file systems
- Name space issues
- File system security and protection mechanisms
- General device level IO control
- Device driver models
- Synchronous vs. asynchronous driver interfaces
- Resource management and deadlock
- Requirements for deadlock
- Prevention, avoidance, and detection and recovery deadlock strategies
- Introduction to distributed systems
- General distributed system design issues
- Communication in distributed systems
- The general client-server model
- The remote procedure call paradigm
- The need for data consistency between heterogeneous systems
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Explain the general function of an operating system.
- Explain the organization and attributes of traditional processes and threads.
- Write a Linux based application to create processes and exchange information among processes using inter-process communication mechanisms and signals.
- Identify single and multiple processor requirements for execution path synchronization.
- Write a Linux based application that demonstrates two way data exchange with a standard Unix/Linux command using pipes.
- Explain the use of synchronization primitives, including semaphores, event counters and sequencers and monitors.
- 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.
- Describe the synchronization primitives of the pthread API.
- 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.
- Describe the differences between real and virtual memory management.
- Explain the organization of a process address space and its various memory objects.
- Write an application to simulate flat memory management by first fit and best fit linked list methods and by Knuth’s buddy system method.
- Explain the use of page tables, page mappings and table walks in virtual memory systems.
- Describe the organization of a translation lookaside buffer.
- Explain the need for TLB shootdown on heavy weight context switching.
- Describe the watermark processing used with free list management.
- Differentiate between stack based and non-stack based page replacement algorithms.
- Explain the need for and typical content of a system page frame table.
- List the necessary conditions for deadlock.
- Demonstrate the ability to reduce a general resource allocation graph, and reach a conclusion about any deadlock in the graph.
- Explain the difference between safe and unsafe states in a deadlock avoidance scheme.
- Differentiate among contiguous, linked and indexed file systems.
- Describe the architecture of the basic Ext2 type Unix/Linux file system.
- Explain the organization of an inode, and the use and need for indirect pointers.
- Explain the process/object protection model used in Unix/Linux systems.
- Write a Linux based application to report information on any Linux file object in a fashion similar to the standard Unix/Linux ls command.
- Describe client-server computing and the deployment of a distributed service.
- Explain the organization of a remote procedure call.
- 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: |
| - Use big O, omega and theta notation to give asymptotic upper, lower, and tight bounds on time and space complexity of algorithms.
- Determine the time complexity of simple algorithms.
- Express simple algorithms using pseudocode conventions.
- Justify the correctness of an algorithm.
- “Mechanical,” e.g., no infinite loops or recursion, remaining within array bounds
- “As advertised,” e.g. optimal answer is actually found by an optimization algorithm; sorting algorithm results in correct ordering of elements.
- Given a computational problem begin to learn how to:
- Recognize its underlying structure
- Identify aspects of the problem relevant to time & space complexity (e.g., problem size, distribution of inputs)
- Develop intuition about it using worst-case, best-case and average-case inputs
- Determine if a known solution exists
- Adapt a solution to a closely related problem
- Design an algorithm from scratch by appropriately selecting an algorithmic paradigm and making of abstract data type and implementation choices.
- Given a list of functions of a single variable, order them according to asymptotic growth.
- Perform worst-case, best-case and average case asymptotic analysis.
- 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.
- Design algorithms using the following paradigms, and recognize when each is appropriate:
- Greedy
- Divide-and-conquer
- Dynamic programming
- Design and analyze simple randomized algorithms.
- Solve problems using sorting algorithms:
- Comparison-based sorting algorithms
- Insertion Sort
- Merge Sort
- Heap Sort: Execute operations that preserve the heap property
- Quick Sort
- Non-comparison and hybrid sorting algorithms.
- Counting Sort
- Radix Sort
- Bucket Sort
- Assess the impact of choices of abstract data type and implementation on running time and storage requirements.
- Stacks
- Queues
- Linked Lists
- Trees: Binary search trees and balanced binary search trees
- Apply left and right rotations that preserve the binary search tree property
- Hash Tables, including collision avoidance strategies
- Graphs, including both adjacency matrix and adjacency list representations
- Understand the operation of the following graph algorithms.
- Depth-First Search
- Breadth-First Search
- Topological Sort
- Minimum Spanning Tree: Prim and Kruskal
- 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: | - Number Systems and Computer Codes
- Boolean Algebra
- Computer Arithmetics
- Switching Functions
- Analysis of Combination Circuits
- Karnaugh Maps
- Programmable Logic Devices (ROM, PLA, PAL)
- Decoders, Encoders, Multiplexers, Demultiplexers
- Synthesis of Cominational Circuits
- Memory Elements, Latches and Flip-flops
- Registers and Counters
- Analysis of Synchronous Sequential Circuits
- Synthesis of Synchronous Sequential Circuits
- Control Circuit and Data Path
- 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: | - Function Representations
- Exponential Functions
- Inverse Functions and Logarithms
- The Tangent and Velocity Problems
- Limits
- Continuity
- Tangents, Velocities, Rates of Change
- Derivatives
- The Derivative as a Function
- Derivatives of Poly. and Exp. Functions
- Product and Quotient Rules
- Derivatives of Trig. Functions
- Chain Rule
- Implicit Differentiation
- Derivatives of Logarithmic Functions
- Differentials
- Related Rates
- Maximum and Minimum Values
- Derivatives and Shapes of Curves
- L'Hospital's Rule
- Newton's Method
- 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: | - Antiderivatives
- Areas and Distances
- The Definite Integral
- Evaluating Definite Integrals
- Defining Inverse Trig. Functions
- Derivatives of Inverse Trig. Functions
- The Fundamental Theorem of Calculus
- The Substitution Rule
- Integration by Parts
- Additional Techniques of Integration
- Using Integration Tables
- Approximate Integration
- L'Hospital's Rule
- Improper Integrals
- More about Areas
- Volumes
- Average Value of a Function
- Applications to Physics and Engineering
- Sequences
- Series
- The Integral and Comparison Tests
- Other Convergence Tests
- Power Series
- Representing Functions as Power Series
- Taylor and Maclaurin Series
- 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: | - Similarities between "algebras."
- Logic
- Propositional Equivalence
- Counting
- Predicates & Quantifiers
- Nested Quantifiers
- Methods of Proof
- Sets
- Set Operations
- Functions
- Matrices
- Gauss Jordan Eliminations, Network
- Analysis
- Directed Graphs
- Sequences & Summations
- Mathematical Induction
- Recursive Definitions
- Basics of Counting
- Pigeonhole Principle
- Permutations & Combinations
- Binomial Coefficients
- Relations and their Properties
- Representing Relations
- Closures of Relations/Connectivity
- Equivalence Relations
- 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.
|
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: | - Database system architecture
- Storage Structures
- Storage (or Record) Managers and Data Managers
- The Relational Model
- Relational query languages
- Entity-Relationship and Object-Oriented Models
- Database Design for the Relational Model
- Query Optimization
- Concurrency Control
- Recovery
- Integrity Enforcement
- Security
- Application Development
- 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: | - Query optimization
- Concurrency control
- Recovery
- Security
- Deductive databases
- OLAP and data warehouses
- Object-oriented database systems
- Object relational
- Web databases
- 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: | - Introduction
- Propositional Logic
- Atomic Sentences
- The Logic of Atomic Sentences
- The Boolean Connectives
- The Logic of Boolean Connectives
- Methods of Proof for Boolean Logic
- Formal Proofs and Boolean Logic
- Conditionals
- The Logic of Conditionals
- Introduction to Quantifiers
- The Logic of Quantifiers
- Multiple Quantifiers
- 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: | - Parse ZPL
- Parallel Arrays but running in a sequential environment
- 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: | - Understanding, developing, and communicating requirements
- Designing object-oriented models from requirements
- Decomposing designs into components
- Implementing and testing components
- Building software from components
- 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: |
| - Master the concepts of object-oriented design.
- Understand static and dynamic design patterns.
- Learn to identify and apply patterns during design phase.
- Implement the design.
- Understand code refactoring.
- 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: | - What is the Internet?
- What is a protocol?
- The Network Edge, Core, and Access Networks
- Physical Media
- Delay and Loss in Packet-Switched Networks
- Protocol Layers and Their Service Models
- Internet Backbones, NAPs and ISPs
- A Brief History of Computer Networking and the Internet
- Principles of Application-Layer Protocols
- The World Wide Web: HTTP
- File Transfer: FTP
- Electronic Mail in the Internet
- The Internet’s Directory Service: DNS
- Socket Programming
- Transport-Layer Services and Principles
- Multiplexing and Demultiplexing Applications
- Connectionless Transport: UDP
- Principles of Reliable of Data Transfer
- TCP case study
- Principles of Congestion Control
- TCP Congestion Control
- Introduction and Network Service Model
- Routing Principles
- Hierarchical Routing
- IP: the Internet Protocol
- Routing in the Internet
- What is Inside a Router?
- The Data Link Layer: Introduction, Services
- Error Detection and Correction
- Multiple Access Protocols and LANs
- LAN Addresses and ARP
- Ethernet
- Hubs, Bridges and Switches
- Wireless LANs: IEEE 802.11
- PPP: the Point-to-Point Protocol
- ATM
- What is Network Security?
- Principles of Cryptography
- Authentication: Who are You?
- Integrity
- Key Distribution and Certification
- What is Network Management?
- The Internet Network Management Framework
- Firewalls
- Multimedia Networking Applications
- Quality of Service
- 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: |
| - Demonstrate understanding of the fundamental concepts and theory of artificial intelligence.
- Discuss the ups and downs of the history of AI.
- Discuss the successes and failures of AI.
- Discuss the characteristics of AI programs.
- 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: | - Input: Concepts, Instances, Attributes
- Output: Knowledge Representation
- Algorithms: The Basic Methods
- Credibility: Evaluating WhatÂ’s Been Learned
- Data Transformations
- 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: | - Graphics Systems and Models
- Graphics Programming
- OpenGL API
- Viewing Concepts
- Input and Interaction
- Geometric Objects and Transformations
- Classical and Computer Viewing
- Projections
- Shading: Light and Matter
- Discrete Techniques: Buffers
- Implementation of a Renderer
- Hierarchical and Object Oriented Modeling
- Curves and Surfaces
- Procedural Methods
- 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: | - Visible lines & visible surfaces
- Rendering & illumination
- Realism
- Antialiasing
- Raytracing, Volume Rendering, Radiosity
- Animation
- OpenGL
- Java for Graphics and 3D
- Java3D vs. Java OpenGL
- 3D Graphics and Animation delivery on the Web
- 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: | - The Data Encryption Standards (DES)
- Differential and Linear Cryptanalysis
- Block Cipher Design Principles and Modes of Operations
- Triple DES
- International Data Encryption Algorithm
- Blowfish and RC5
- Placement of Encryption Algorithms and Key Distributions
- Public-Key Cryptosystems
- The RSA Algorithm
- Key Management
- Diffie-Hellman Key Exchange
- Message Authentication Codes and Hash Functions
- Digital Signatures and Digital Signature Standard
- Introduction to Socket API and Client-Server Programming (in C)
- Symmetric Encryption Implementation
- Digital Signature Implementation
- Buffer Overflows
- Access Control
- Race Conditions
- Randomness and Determination
- Password Authentication
- 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: | - Storage Device Technology
- Device Controllers
- Aggregation Methods
- RAID Technologies
- Interconnect Architectures
- 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: |
| - List at least three benefits of good user interface design and at least three ramifications of bad user interface design.
- State at least a dozen commonly-accepted guidelines for good user interface design.
- 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.
- 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.
- Create Java programs that exhibit proper use of various user interface components.
- Correctly document Java code using all features of the Javadoc tool.
- Write Java code that exemplifies quality programming practices and software engineering.
- Validate user input and identify errors in a professional manner.
- Describe how to perform basic usability testing.
- 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: |
| - Work on a project team with other students.
- Complete the design, implementation, and documentation of a program of significant size and complexity.
- Write a detailed project plan.
- Write a detailed description of a specific user population.
- Make oral presentations to the class on their work.
- Conduct and report on a relevant usability test.
- 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.
|
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: |
| - Discuss the history of the Internet.
- Access and connect to the Internet.
- Analyze an IP address.
- Identify the components of a Web address.
- Explain the purpose of a Web browser.
- Effectively search for information on the Web.
- Recognize the different types of Web sites.
- Recognize how Web pages use graphics, animation, audio, video, virtual reality, and plug-ins.
- Identify the steps required for Web publishing.
- Identify simple HTML code.
- Create and manage a Blog.
- Create and manage a Wiki.
- Create and manage a Web page.
- Describe the types of e-commerce.
- Explain how email, FTP, newsgroups and message boards, mailing lists, chat rooms, instant messaging, and Internet telephony works.
- Identify the rules of netiquette.
- Identify ways to safeguard against computer viruses, worms, Trojan horses, botnets, back doors, and spoofing.
- Identify ways to safeguard against cookies, spyware, adware, spam, and phishing.
- Discuss techniques to prevent unauthorized computer access and use.
- 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: | - Decide whether a database application is the appropriate solution for a given problem
- Design table (relation) schemes
- Build and populate tables in Microsoft Access
- Formulate queries graphically
- Build and modify forms for tables and queries
- Formulate SQL queries
- Build and modify reports
- Attach macros to forms
- Design a convenient user interface for a database application
- Build simple Visual BASIC for Applications procedures
- Design a convenient user interface for a database application
- 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: | - (Hybrid Core) Historic and contemporary practices in the collaboration of science and technology.
- (Hybrid Core) Problem-solving process of engineering and art -- its commonality and difference.
- (Hybrid Core) Sustainable community through art, science and technology, and education.
- (CS and Robotics Core) Introduction to imperative programming: functions, arguments and return values.
- (CS and Robotics Core) Introduction to real-time systems including sensors, actuators and control loops.
- (CS and Robotics Core) Agent-based models of computing (sense-act loops).
- (CS and Robotics Core) Elements of robotics systems and how to physically create them (e.g., wiring and construction techniques).
- (CS and Robotics Core) Uses of computing in a variety of fields.
- (Art Core) Introduction to New Media Art: Historic background, development and themes.
- (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.
- (Art Core) Traditional visual language -- aesthetics in color, composition, value, texture and material.
- (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: |
| - (CS and Robotics related) Have hands-on experience with embedded computing and digital technology.
- (CS and Robotics related) Gained the ability to formulate structured algorithms and program them.
- (CS and Robotics related) Understand use of sensors and interactive algorithms.
- (CS and Robotics related) Carry out a project from inception to public exhibition that incorporates computing.
- (CS and Robotics related) Understand how computing is used in a variety of fields and applications.
- (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.
- (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.
- (Art related) Have investigated examples of art and technology collaboration especially in public domain.
- (Art related) Evaluate new media art works in various contexts including gallery or public installation.
- (Service Learning related) Deepen the knowledge in the subject matter by teaching and mentoring high school students.
- (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: |
| - Design and code Matlab functions to solve a variety of problems pertinent to SRT.
- Use most of the features of Matlab.
- 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: | - simple recording techniques
- audio editing
- looping software
- properties of various sound file and compression formats
- creating different sound file formats
- recording and sound capturing devices
- musical forms
- using sound on webpages
|
Outcomes: | Upon completion of this course, students should be able to: |
| - Record sound and manipulate those recordings in an audio editor program.
- List differences between various sound file and compression formats.
- Understand the essence of basic music notation.
- Understand and basic musical forms be able to sequence sounds following a basic form.
- Manipulate sounds in a program such as GarageBand or Acid XPress.
- Build a webpage that incorporates sound.
- Build a webpage that allows users to interact with and manipulate sound dynamically.
|