Overview
The courses in computer science offered provide a strong foundation for students planning graduate study in computer science or computer engineering; they also serve as preparation for students planning to pursue a technical career in computing or to teach computer science at the high school level. Courses are patterned after the curriculum recommendations of the Association for Computing Machinery. Elective courses allow a student to focus on a particular area of computer science, such as systems software or numerical computation.
Individual course descriptions are given below for all regularly available courses. Other options such as special topics courses and credit for internships may occasionally be available. If you have an interest in these, you should contact your advisor or a computer science faculty member for more information. For each course described the following information is given: the catalog description, a more detailed discussion of the contents, and how the course fits into the overall curriculum. A recent revision of the entire computer science curriculum has shuffled some content to different courses and in some cases new courses have been created. Because of this, the course descriptions given below may vary from the actual course content, however it represents the computer science faculty's current intent for each course.
CS 105 Personal Computing (3-2-3)
Personal computing emphasizing the interrelation of hardware with software on microcomputers. Includes instruction in the use of word processing, spreadsheet, database management, and communications programs. Laboratory graded and credited with course. For non-mathematics majors only.
This course does not fulfill degree requirements for mathematics or computer science majors.
CS 110 Computers and Society (3-0-3)
An introduction to the computer as an information organizing and manipulating tool and to its responsible use. Familiarity with word processors and web browsers is assumed.
This course provides an introduction to computers and computing for a student from any major. Students will leave the course better able to use their own computers as tools, and with a better understanding of how computing power is achieved as well as the limits of what computers can do. This course is not a programming course and presupposes no knowledge of programming on the part of the student. It is designed to prepare majors in the department for courses which follow and to provide an understand of computer uses in other disciplines.
An understanding of what constitutes an algorithm using precise syntax. Common applications will be used to discuss models. For example, Word's text style attributes vs. WordPerfect's begin-end style transforms represent different "languages." Other examples include HTML markup tags and spreadsheets. Other practical information will be covered as well, such as networks, encryption, privacy, digital intellectual property rights, and ethical use of a computer and digital media. This course is a fun and interesting introduction to computer science and should make students a better and more responsible users.
Successful students of this course will be able to answer the questions: How should we rely on computers in our lives? What will this algorithm produce given this input?
CS 120 Programming I: High-Level (3-0-3)
Programming, debugging, and small program development in a statically typed procedural language. Topics include sequential, selective, and iterative control flow, modularity, simple data types, arrays, formatted input and output, and text file processing. For students with little or no background in computer programming.
This course introduces syntax and semantics of a programming language; covers variable declaration and scope, loops, selection, functions, arrays, data types, language library use, command-line applications, and may include simple graphical output. The course is also designed to provide an introduction to the lab environment, compiling, testing and debugging. Currently this course teaches Java which inherently introduces object concepts. The course also introduces the community aspects of programming using an appropriate subset of departmental coding standards and introduces the idea of code reviews but does not rely on peer-review. The coding standards followed are designed to re-enforce good practices and provide shared experiences and common vocabulary necessary for community. Successful students of this course will be able to answer the question: How can I instruct a computer to perform a useful task?
CS 125 Personal Web Development (3-0-3)
Introduction to building a simple, personal web site using the office productivity software that typically accompanies a personal computer. Topics include an introduction to the Internet, web pages, HTML, server-side and client-side scripting, applets, databases, and security.
This course provides an introduction for students, from any major, for building a personal web site using productivity software readily available. By the end of the course, students should be able to make web pages for their own use and for organizations or projects with which they are associated. The following topics are covered introduction to the Internet, graphical tools for building web pages, writing HTML and CSS for greater control over page content and appearance, server-side and client-side scripting especially JavaScript, mounting web pages on a server, applets, Internet and security issues, and introduction to database access using PHP or Perl .
Successful students of this course will be able to answer the question: How can I communicate to others using the web?
CS 130 Programming II: Low-Level (3-0-3)
An introduction to programming emphasizing implementation details such as pointers, array and data structure physical memory layout, stack conventions for function calls, string manipulation, heaps, allocation, object construction including canonical object form for C++, and portability. The primary language is C++, with substantial reference to C, and assembly language.
Introduces implementation details and additional programming concepts using C++, in particular pointers, pointer arithmetic, function pointers, libraries, string and array manipulation, enumerated types, typedefs, structs, unions, interfaces (such as between modules or provided by the operating system or a library or an object), bit fields, scope, lifetime, and ownership. C++ topics covered include: allocation, memory pools, canonical object form, polymorphism, and operator overloading. (Important C++ topics covered elsewhere in the curriculum include generic programming, templates, and exceptions.)
Some very low-level details such as stack conventions across function calls, register usage conventions and memory layout will be covered by introducing assembly language programming, as used with C/C++ in a specific environment. Some lifetime details such as construction and shallow- v. deep-copies will be covered.
Successful students of this course will be able to answer the question: How does a program go about performing its task?
CS 220 Machine Organization and Single-User Systems (3-0-3)
An introduction to machine organization covering digital circuits, functional units, caches, virtual memory, devices, the interrupt mechanism, and bus arbitration in the context of a single-user system. Prerequisite: CS 130. This course is an introduction to machine organization covering digital circuits, functional units, caches, virtual memory, devices, the interrupt mechanism, and bus arbitration in the context of a single-user system. A significant portion of the course deals with the design of contemporary CPUs, covering ISA, pipelining, procedure invocation, context switch, privilege levels, machine state, cache memory, microcode and peripherals. Although the discussion is confined to single-user systems, spooling and kernel services introduce some discussion of multi-tasking. In particular, test-and-set instructions and their usefulness in mutual exclusion will be covered. Successful students of this course will be able to answer the questions: What factors contribute to a computer's speed? What is the relationship between hardware and software?
CS 221 Networks and Multi-User Systems (3-0-3)
An introduction to larger computer systems covering IP networks, services, security, process scheduling, resource sharing, deadlock, interrupt handlers, client-server systems, and web-centric computing in the context of a multi-user system. Prerequisite: CS 130.
This course treats virtual memory, interrupts, and devices as primitives while discussing operating systems within a multi-user context. A high-level language is used to illustrate algorithms as well as for completing assignments. Topics include process deadlock, various solutions to mutual exclusion, test-and-set instructions, access-control lists, categories of secure operating systems, password encryption schemes, kernel and privileged execution, file systems, process scheduling and policies, and networks and security threats.
Successful students of this course will be able to answer the question: How are resources shared among users, processes, and computers?
CS 320 Introduction to Database Theory (3-0-3)
Database theory with an emphasis on relational databases. Include data representation, relations, base tables, indexes, SQL, relational algebra, and relational calculus. Exercises will be done on a state-of-the-art relational database. Prerequisite: CS 110.
In addition to gaining facility with SQL as a practical skill, students will also learn how a DBMS operates, how "relationally complete" differs from "Turing complete," how to design a database using ER methods, how to protect data, how to apply normal forms to scheme designs, how integrity constraints set policy, and when relational operators are inadequate for solving a given problem (i.e., when a high-level language should be employed).
Successful students of this course will be able to answer the question: How can enterprise activities and policies be modeled (using DB schemas)?
CS 330 The Human-Computer Interface (3-0-3)
Introduction to both the programmatic and psychological considerations surrounding shaping the computer tool to the user. The course will cover the details of implementing a graphical user interface, and how to make the interface as user-friendly as possible. Prerequisites: CS 110; two of CS 120, CS 125, CS 130; and 60 earned hours.
This course explores the method in which computing power is delivered to the user. The material in this course extends beyond computing because the user is explicitly consider as part of the system.
Successful students of this course will be able to answer the question: How can the tool more intuitively assist the user in reaching the user's goal?
CS 332 Elementary Algorithms and Data Structures (3-0-3)
Design and scientific and mathematical study of algorithms. Analytic and experimental performance determination. Includes searching and sorting, trees, graphs, asymptotic (e.g., big-O) performance bounds, and the halting problem. Prerequisites: CS 110, CS 120, CS 130, MATH 127.
Implementation and introduction to theoretical and experimental analysis of standard searching, sorting, graph and tree algorithms and data structures, including randomization. Students study asymptotic notation (i.e., big-O) and use it to analyze algorithms in several dimensions (e.g., time, space, storage). In addition, NP-complete problems, dynamic programming, and generic programming are covered.
Successful students of this course will be able to answer the questions: Which data structure should be chosen for a particular problem, and why? What are the worst-case time and space bounds for a particular fundamental algorithm?
CS 341 Numerical Methods (3-0-3)
Survey of elementary numerical methods used in scientific computing applications. Topics include computer representation of integer and real numbers, sequences, series approximations, finite differences, interpolation, curve fitting, numerical differentiation and integration, and roots of a single non-linear equation. Selected algorithms to be solved using the computer. Programming experience required. Prerequisites: MATH 186. Same as MATH 341.
Successful students of this course will be able to answer the questions: What function was this data derived from? How can "computational mathematics" be used to manipulate hard, implicit, or unknown functions?
CS 352 Programming Languages (3-0-3)
Students will improve their understanding of languages, increase their vocabulary of useful programming constructs and be able to learn or design a language more easily. Prerequisites: CS 120, CS 220.
This course provides some familiarity with a variety of language paradigms for the purpose of developing appreciation for the philosophies that underlie a given programming language. Languages may include C++ (generic programming, templates, OO), Eiffel (mix-ins), Prolog (search, unification, declarative), Perl (regular expressions, context-sensitive results) and a data languages such as XML or BNF. Expertise in languages is not expected, rather enough appreciation of each should be developed to allow language design to compared and contrasted. Language ideas studied may include: continuation, closure, unification, subclassing, lazy evaluation, late- and early binding.
Successful students of this course will be able to answer the questions: What philosophical differences exist between C++ and Perl? How do those differences effect software designed and written in each language?
CS 356 Operating Systems (3-0-3)
Topics include dynamic procedure activation, system structure, evaluation, memory and process management, and recovery procedures. Prerequisites: CS 220, CS 221.
A detailed study of modern operating systems including: threaded applications such as producer-consumer, scheduling, protection and security models, file systems, memory management, and drivers. Contrasts between Linux and Windows solutions will be used to discuss goals and design tradeoffs.
Successful students of this course will be able to answer the question: What are the essential design trade-offs made in modern operating systems?
CS 365 Theory of Computation (3-0-3)
Introduction to formal languages and automata, computability, and complexity. Topics include the DFAs, CFGs, pumping lemmas, Turing machines, the Church-Turning thesis, non-determinism, and NP-completeness. Prerequisites: CS 220, CS 332.
This course begins by exploring underlying, fundamental computing devices such finite-state automata (deterministic and non-deterministic), Turing machines, and pushdown automata. Using these devices, proofs about computability, NP-completeness, and decidability are developed.
Successful students of this course will be able to answer the questions: What does it mean to "compute?" What are the limits of computation?
CS 374 Software Engineering (3-0-3)
A study of the development of large scale software systems. Includes an overview of currently used analysis and design methodologies, including both structured and object-oriented paradigms. Projects will afford practical experience in the development of interpersonal communications skills needed for team software development. Prerequisite: CS 332.
This course provides a opportunity to practice software development in a group environment. It explores issues of organization, communication, planning, policies, process, quality, and ethics involved in large scale software development. A large group project provides experiential learning; readings and discussion allow alternative development models to be considered and appreciated based on the insight gained from the development method used for the group project.
Successful students of this course will be able to answer the question: How can a group of software developers successfully deliver a quality product?
CS 381 Computer Graphics (3-0-3)
A study of 2D and 3D rendering algorithms and representations, including homogeneous coordinate systems and their attendant transformations. Includes study of light and color and a survey of photo-realistic 3D rendering techniques. Prerequisites: CS 220, MATH 325.
Students in this course are given the opportunity to experience the complexity and attention to detail required to deliver stunning computer graphics. They will study and write code demonstrating several classic graphics problems such as: Breshenham's line and circle algorithms, polygon filling, polygon clipping in 2D and 3D, z-buffering clipping, hidden line removal, and lighting models. Appropriate math concepts are introduced as they apply to graphics, such as homogeneous and non-homogenous coordinate systems and transformations, splines and spline surfaces, and surfaces of revolution.
Successful students of this course will be able to answer the questions: What factors are significant in visual representation? How can a visually convincing image be generated by a computer?
CS 383 File Structures (3-0-3)
Disk-based data management. Topics include sequential, indexed, indexed-sequential, hashed, and B-tree file organizations. Prerequisite: CS 130.
Creation of both simple file organizations (e.g., sequential and indexed) and more complex "standard" organizations such as hashed and B-trees for large quantities of data are presented. Disk-based sorting algorithms or another interesting problem will be explored for each organization discussed. In addition to the general algorithms, this course explores the difficulties of both writing and using software specifications (i.e., "design by contract"). In this case, the contract is a file format specification which may be ambiguous or even wrong. Schemes and strategies are explored for addressing these situations.
Successful students of this course will be able to answer the question: Why was this data storage scheme chosen?
CS 420 Networks (3-0-3)
Investigation of real-world networking covering design, implementation, and security. Prerequisite: CS 220, CS 221, and CS 332.
Students examine the design and implementation of network protocols with reference to the layers of the IP model. Projects include comparing service models, comparing network architectures, threat evaluation, intrusion prevention and detection, research protocol details from their RFC history, critique protocol proposals with respect to security and other goals, implement protocols, implement a network security policy, construct a firewall given a security policy, set-up a virtual private network, diagnose intrusion attempts against various machines on a network, and describe schemes to defend against specific attacks.
Successful students of this course will be able to answer the question: What is the purpose, the means, and the consequences of sharing resources with other machines?
CS 442 Numerical Analysis (3-0-3)
Solution of linear systems of equations by direct and iterative methods, matrix inversion, and evaluation of determinants. Matrix solution of least-square problems. Approximation of eigenvalues. Selected algorithms to be solved empirically using a computer. Prerequisites: CS 341, MATH 325. Same as MATH 442.
Successful students of this course will be able to answer the question: How can computational mathematics be used to model hard, implicit, or unknown functions in multiple dimensions?
CS 455 Principles of Compiler Design (3-0-3)
A formal treatment of programming language translation and compiler design concepts. Emphasis is on scanners, parsers, and translation. Prerequisites: CS 332, CS 352.
Implement a simple language by compiling to C. Implement scanning using flex, implement parsing using bison and/or a hand constructed recursive descent parser. This course includes: construction and use of a symbol table, code generation, error diagnostics and reporting. Depending on student progress, this may include optimization and runtime aspects of compilers.
Successful students of this course will be able to answer the question: How can the machine preserve high-level semantics while translating algorithms to low-level, executable code?
CS 467 Introduction to Artificial Intelligence (3-0-3)
Survey of the search, reasoning, control, learning, and knowledge representation principles underpinning intelligent systems such as games, theorem provers, expert systems, neural networks, planning, machine learning, and natural language. Prerequisites: CS 332.
Each offering of this course will cover two of the above principles in detail and cover one system in detail as well, leaving the students to learn the briefly covered other principles as they implement the semester project. For example, one offering might be directed toward building a game and cover search, neural networks, and genetic programming in detail, the final project being a competition between student implementations of a system to play checkers.
Successful students of this course will be able to answer the question: What is the relationship between "intelligence" and "computation"?
CS 474 Object-Oriented Design (3-0-3)
Systematic object-oriented design. Topics include interface design, design patterns, and the implementation of a medium-sized application. Prerequisite: CS 332.
Successful students of this course will be able to answer the questions: Which design patterns may apply in a specific design context? How could a specific design pattern be applied?
CS 495 Computer Science Senior Seminar (2-0-2)
Supervised study of selected topics in the field of computer science that are not normally or not often available as part of the regular course offerings. A comprehensive term project is normally required. A writing-intensive course. For computer science majors; must be taken during the last spring semester before graduation.
The format of this course is somewhat like a guided study. Considerable individual time is spent with each student. In all cases the goal is to help the student transition to the next step in their career whether that is additional studies or industry. For those students pursuing an industry position an appropriate project designed to both showcase the student's skills and help them "package" their experiences at the university into an integrated whole will be designed. An example project might be an architecture or design patterns for building software in a specific domain. Students planning to continue to graduate school will be expected to write and present a "state of the discipline" paper including a literature review and study in a specific area in some considerable depth.
Successful students of this course will be able to answer the question: How does my undergraduate education allow me to make a positive contribution to this world?