Prerequisite Knowledge Areas
Required to register for any graduate-level Computer and Information Sciences (CSCI/CSIS) course.
Motivation: Start strong and move quickly
There are many types of graduate computing programs out there, but ours are fast-paced and highly technical. For these reasons, all students are expected to begin with a common technical background assured by satisfying our four prerequisite knowledge areas: object-oriented programming, data structures, discrete mathematics, and basic computer architecture. Applicants with undergraduate degrees in computer science or similar disciplines likely have these areas covered, but students from other backgrounds can satisfy them with coursework or work experience.
Object-oriented programming
This means that you can write code in a high-level language like Java, Python, or C++ to solve problems. You should be able to meet all or most of these learning outcomes: analyze and design strategies for solving basic programming problems; use primitive data types, selection statements, loops, and methods to write programs; use arrays to store, process, and sort data; use an IDE to develop programs; understand object-oriented concepts: encapsulation, inheritance, polymorphism, interfaces, abstract classes; use Unified Modeling Language for design, analysis, and documentation of programs; use file I/O and handle exceptions; design and implement object-oriented programs; design recursive solutions.
Data structures
This means that you know how to optimize and reason about the ways you store, retrieve, and process data in a programming solution. It is distinct from database design and is coupled with algorithmic thinking and technique. You should be able to meet all or most of these learning outcomes: Define various data structures such as queues, lists, heaps, balanced trees, hash tables, and graphs; Describe implementation options for various data structures that differ in time and space complexity; Identify and implement a data structure that is useful for modeling a given problem; State some fundamental algorithms for sorting, searching, and graph problems; Describe basic algorithmic strategies, such as divide-and-conquer, dynamic programming, or greedy algorithms; Define the notions of worst-, best-, and average-case running times of algorithms; Analyze a given algorithm and determine its asymptotic running time; Combine fundamental data structures and algorithmic techniques to build a solution to a given problem; Choose the best among several algorithmic solutions to a given problem based on time, space, and implementation complexities.
Basic computer architecture
This means you understand the basics of what is inside the computer case, i.e., how the processor fetches, decodes, and executes machine instructions, and the basics of computer memory. It is distinct from network architecture. You should be able to meet all or most of these learning outcomes: Explain the basic concepts and functional components of computer organization (processor, input/output devices, memory hierarchy, system bus, etc.); Discuss computer organization in terms of the various levels (digital logic level, instruction set level, etc.); Represent numbers in various bases (decimal, binary, hex, octal) and convert between bases; Explain the representation and storage of signed and unsigned numbers in a computer (two’s complement, big/little endian, etc.); Identify and explain the opcodes, addressing techniques, and calling conventions of an assembly language; Create, assemble, debug, test, and execute assembly language programs.
Discrete Mathematics
Discrete math is the theoretical backbone for computer scientists that allows us to precisely describe algorithmic performance. Calculus or pre-calculus are common prerequisites for discrete math courses. You should be able to meet all or most of these learning outcomes: Use truth tables to determine the truth value of compound statements and to determine if two statements are logically equivalent; Use set operations to determine new sets (union, intersection, etc.); Determine a partition of a set; Prove statements using direct proof, contrapositive, cases, contradiction, counterexample, and (strong) induction; Determine and prove the closed form of a recursive sequence; Prove a relation is an equivalence relation and determine equivalence classes; Prove a function is bijective and find the inverse; Determine whether a function is big O, big Ω, or big Θ of another; Convert integer between bases; Use multiplication, addition, inclusion-exclusion, and pigeonhole principles to count tasks; Determine if a graph is Eulerian and/or Hamiltonian; Apply Dijsktra’s, Prim’s, and Kruskal’s algorithms to graphs; Find spanning subtrees; Use Depth-first and breadth-first search to create rooted trees.