Computer Science Course Descriptions
CS 141 Introduction to Computer Science and Programming I
This lecture and lab for students interested in the major/minor or for those who want an exciting and challenging introduction to the field, includes information processing, algorithms, Turing machines, base systems, Boolean logic, the Church-Turing hypothesis, BNF, languages, computer organization, and data representation. Students learn to express their understanding of these topics through problem solving and the art of programming (describing a process precisely and unambiguously). Programming constructs and concepts include variables, looping, conditionals, recursion, arrays, functions, procedures, debugging, top-down design, stepwise refinement, modularization, classes, abstraction, and encapsulation. The primary language is Java; the course explores other languages to illustrate computational equivalence. No previous experience is needed. Four credits.
CS 142 Introduction to Computer Science and Programming II
Topics in this continuation of CS 141 include cellular automata, interpreters, universal computers, simulations, binary circuits, graphics, finite state machines, operating systems, and abstract data types. Programming constructs and concepts include static and non-static methods and fields, objects, constructors, overloading, APIs, garbage collection, recursion, LISP, and data structures. The primary language for this lecture and lab course is Java; LISP is also used. (Prerequisite: CS 141) Four credits.
CS 221 Computer Organization and Assembler
This course introduces computer organization using several levels of abstraction to represent a simple computer, starting with logic gates, progressing to assembly language, and ending with a high-level programming language. The course concludes with the design of an assembler/simulator for the model computer. (Prerequisite: CS 142) Three credits.
CS 231 Discrete Mathematics
For course description see MA 231 Discrete Mathematics.
CS 232 Data Structures
This course presents problem solving with abstract data types such as lists, linked lists, stacks, queues, and trees. The course revisits recursion and discusses algorithm efficiency. Time permitting, the course includes sorting, reachability, and minimal paths in graphs and their algorithms. (Prerequisites: CS 142 or CS 132, Co-requisite MA 231) Three credits.
CS 322 Computer Architecture
This course examines the theory of logic design including gates, timing diagrams, truth tables, design of basic arithmetic operations, and control mechanisms, as well as general properties of major hardware components (central processing unit, arithmetic-logic unit, memory, input/output devices) and communication between them (buses, interrupts). The course surveys actual computer systems. (Prerequisite: CS 221) Three credits.
CS 324 Microprocessors
This course reviews conventional logic design using MSI building blocks: multiplexers, decoders, comparators, arithmetic-logic units, registers, and memory. It introduces microprocessor controllers, applying them to the design of several small projects such as a serial-parallel converter, a four-function calculator, and a traffic-light controller. Students design a process controller as their final project. (Prerequisite: CS 221) Three credits.
CS 331 Operating Systems
This course introduces the major system utilities of a general-purpose computer: editors, assemblers, interpreters, linkers, loaders, and compilers. The course then presents the operating system for the computer: command language, access and privacy, management of processes, memory, and input/output devices. (Prerequisites: CS 221) Three credits.
CS 342 Theory of Computation
This course explores what computers can and can't do. Topics include finite state machines, pushdown automata, Turing machines, and recursive functions; mechanisms for formal languages such as regular grammars, context-free grammars, and context-sensitive grammars; decidable versus undecidable problems. This course is also listed as MA 342. (Prerequisite: CS/MA 231) Three credits.
CS 343 Analysis of Algorithms
This course looks at the efficiency of computer algorithms including their use of time and memory. Topics include algorithm complexity measures, determination of upper bounds and mean performance of algorithms, determination of lower bounds for problems, and NP completeness. (Prerequisite: CS 232) Three credits.
CS 351 Database Management System Design
This course examines methods for designing and implementing information storage and retrieval systems including specification of information systems, search strategies, index methods, data compression, security, query languages, relational techniques, and performance analysis. The course surveys interesting existing database systems. (Prerequisite: CS 232) Three credits.
CS 353 Principles of Compiler Design
This course examines the use of language theory and automata theory in the design of compilers and includes symbol table organization, lexical analysis, syntax analysis, and code generation; code generation versus interpretation; and storage management, optimization, and error handling. Students apply learned concepts to the development of a significant part of a compiler. This is the required capstone course for all majors in computer science. (Prerequisites: CS 221, CS 232, and CS 342) Three credits.
CS 354 Theory of Programming Languages
Topics in this course include the design of programming languages; organization, control structures, data structures; run time behavior of programs; and formal specification and analysis of programming languages. The course includes a comparative survey of several significantly different languages. (Prerequisite: CS 232) Three credits.
CS 355 Artificial Intelligence
This course, which examines computer implementation of processes of thought, includes knowledge representation, games, theorem proving, heuristics, symbolic techniques, neural networks, genetic algorithms, and artificial life. (Prerequisite: CS 232) Three credits.
CS 377 Numerical Analysis
For course description see MA 377 Numerical Analysis.
CS 391 Cognitive Science Seminar
In this course, students explore the intersection of computation and such diverse fields as psychology, neuroscience, philosophy, and linguistics in searching for an understanding of cognition, be it real or abstract, human, animal, or machine. How does the mind work? How do we acquire knowledge, represent that knowledge, and manipulate those representations? Can a computer be conscious? Are animals intelligent? (Prerequisite: CS 131 or CS 141) Three credits.
CS 392 Computer Science Seminar
Students take this course, which was designed to cover topics not in the curriculum, by invitation only and are expected to prepare topics under faculty direction. Three credits.
CS 397-398 Internship in Computer Science
The internship program provides senior computer science majors with opportunities to gain practical, career-related experience in a variety of supervised field settings. Student interns choose from a wide selection of placements, including computer software and hardware applications, and numerical methods. Interns spend a minimum of 10 hours per week in on-site work, complete a required academic component specified by a faculty advisor, and satisfy the University Internship Policy requirements (available from the Career Planning Center). Students may register for internships during the summer session and/or one or two semesters and may earn a maximum of six internship credits. (Prerequisites: Senior standing, completed application form, acceptance by the field placement supervisor, and approval by the Department of Mathematics and Computer Science.) One-to-three credits per semester.
CS 399 Independent Study in Computer Science
Independent study provides students with the opportunity to study areas not covered in the undergraduate curriculum. Under the guidance of a faculty member, advanced students examine an aspect in computer science through reading and research. While the study may focus on a software or hardware project, it must incorporate an analysis of written material comparable to other upper-division elective courses. Students must apply to a professor under whose direction they wish to study and obtain the approval of the department chair. This course does not fulfill the computer science elective requirements for majors. Three credits.
Non-Major Course Descriptions
CS 111 Computer Programming I (Visual Basic)
This course provides an overview of computer organization and hardware, and an introduction to the science and theory of programming including top-down structured program design, problem specification and abstraction, algorithms, data structures, documentation, debugging, testing, and maintenance. The course also covers engineering applications in a high-level programming language (Visual Basic) including input/output, selection, repetition, arrays, functions, and procedures; and ethical and social issues in computing. The course, which emphasizes communication skills in documentation and design of user interface, may not be used toward a computer science major or minor. Three credits.
CS 131 Computer Programming I
This course provides an overview of computer organization and hardware, and an introduction to the science and theory of object-oriented programming including top-down structured program design, problem specification and abstraction, algorithms, data structures, documentation, debugging, testing, and maintenance. The course presents programming applications including input/output, selection, repetition, arrays, functions, and procedures. The course, which also addresses the ethical and social issues in computing, emphasizes communication skills in documentation and design of user interface. Three credits.
CS 132 Computer Programming II
This continuation of CS 131 covers additional topics in the science and theory of programming including modular design, recursion, program verification, robustness, and portability. The course presents high-level language programming applications including records, sets, files, class design, inheritance, and polymorphism; introduces data structures such as stacks, linked lists, searching, and sorting; and discusses ethical and social issues in computing. The course continues to emphasize the communication skills introduced in CS 131. (Prerequisite: CS 131) Three credits.
CS 133 Introduction to C Programming
This course focuses on the use of C language in top-down structured program design. Topics include C data types, functions, and file input/output. The course introduces software engineering as applied to a project such as a database management system. Three credits.
CS 233 Introduction to C++ Programming
This course introduces object-oriented programming using the C++ programming language. The first part of the course introduces C++ extensions the C language such as stream input/output, classes, and operator overloading. The second part of the course focuses on design of a graphics interface and illustrates the object-oriented programming concepts of inheritance, object constructors/destructors, and message passing. Three credits. |