Detailed Descriptions of the BA and BS Computer Sciences Degrees from current University Catalogs
Introductory logic in the context of computing; introduction to formal notations; basic proof techniques; sets, relations, and functions. Prerequisite: Credit with a grade of at least C or registration for Computer Science 303E or 307.
An introduction to the fundamental concepts of computing: how computers work, what they can do, and how they can be used effectively. Some programming is required. Three lecture hours and one discussion hour a week for one semester. May not be counted toward a degree in computer sciences.
Problem solving and fundamental algorithms for various applications in science and business and on the World Wide Web. Introductory programming in a modern object-oriented programming language. May not be counted toward a degree in computer sciences. Prerequisite: Credit with a grade of at least C or registration for Mathematics 305G, or equivalent score on the SAT II: Mathematics Level I, Level IC, or Level IIC test.
An introduction to programming in a particular computer language. Students design and implement programs. One lecture hour a week for one semester. May be repeated for credit when the languages vary. Prerequisite: Computer Sciences 315 or 315H with a grade of at least C.
Introduction to computer science concepts. Programming in a modern object-oriented programming language. Three lecture hours and one discussion hour a week for one semester. Computer Sciences 303E and 305J may not both be counted. Credit for Computer Sciences 305J may not be earned after a student has received credit for Computer Sciences 307. Prerequisite: Some knowledge of and experience in computer programming; and credit with a grade of at least C or registration for Mathematics 305G, or equivalent score on the SAT Mathematics Level 1 or Level 2 test.
Fundamental computer science concepts: data types, data structures, algorithms, and programming; functions and recursion; abstraction and encapsulation. Correctness: specification, testing, and proving. Simple sorting and searching algorithms. Introduction to analysis of algorithms. Three lecture hours and one laboratory hour a week for one semester. Prerequisite: One of the following: One year of programming in high school, Computer Sciences 303E with a grade of at least C, or consent of instructor; and credit or registration for Mathematics 408C or 308L, or an appropriate score on the SAT II: Mathematics Level I, Level IC, or Level IIC test.
Introduction to the use of a particular software system. Students build applications that exploit the system being studied. One lecture hour a week for one semester. May be repeated for credit when the topics vary. Offered on the pass/fail basis only. Prerequisite: Computer Sciences 315 or 315H with a grade of at least C.
Basic computer organization; machine representation of instructions and data; hardware/software interface. Three lecture hours and one discussion hour a week for one semester. Computer Sciences 310 and 310H may not both be counted. Prerequisite: 315 or 315H with a grade of at least C.
Basic computer organization; machine representation of instructions and data; hardware/software interface. Three lecture hours and one discussion hour a week for one semester. Computer Sciences 310 and 310H may not both be counted. Prerequisite: 315 or 315H with a grade of at least C, and consent of the honors director.
Object-oriented design of software in a modern high-level language, using software library packages. Introduction to elementary data structures and complexity of algorithms. May not be counted toward a degree in computer sciences. Prerequisite: Computer Sciences 303E with a grade of at least C.
Set, relations, functions, sentential and predicate logic, proof techniques, algorithms, and elementary metatheory. Introduction to analysis of algorithms and techniques for proving properties of programs. Three lecture hours and one discussion hour a week for one semester. Prerequisite: Consent of the honors director.
Propositional and predicate logic; proof techniques, including induction, sets, relations, and functions. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Sciences 313H, 313K, Philosophy 313, 313K, 313Q. Prerequisite: Credit or registration for Mathematics 408C or 408K.
Implementation of basic data structures, including stacks, queues, lists, priority queues, trees, binary search trees, graphs, and sets. Recursion. Efficient sorting and searching algorithms. Hashing. Multithreaded programs. Three lecture hours and one laboratory hour a week for one semester. Computer Sciences 315 and 315H may not both be counted. Prerequisite: Computer Sciences 307 with a grade of at least C and credit or registration for Philosophy 313K.
Data types, data structures, algorithms, and programming; functions and recursion; abstraction and encapsulation. Correctness: specification, testing, proving. Introduction to analysis of algorithms. Implementation and use of basic data structures, including stacks, queues, lists, priority queues, trees, binary search trees, graphs, sets. Efficient sorting and searching algorithms. Hashing. Multithreaded programs. Three lecture hours and one discussion hour a week for one semester. Computer Sciences 315 and 315H may not both be counted. Prerequisite: Consent of the honors director.
This course is used to record credit the student earns while enrolled at another institution in a program administered by the University's Study Abroad Office. Credit is recorded as assigned by the study abroad adviser in the Department of Computer Sciences. University credit is awarded for work in an exchange program; it may be counted as coursework taken in residence. Transfer credit is awarded for work in an affiliated studies program. May be repeated for credit when the topics vary.
For each semester hour of credit earned, one lecture hour a week for one semester. May be repeated for credit when the topics vary. May not be counted toward a degree in computer sciences. Prerequisite: Varies with the topic and is given in the Course Schedule.
Introduction to functional and symbolic programming and to the use of these concepts throughout computer science. Prerequisite: Credit with a grade of at least C or registration for Computer Sciences 337 or 337H, and consent of the honors director.
Fundamentals of software issues related to scientific computing. Topics include floating-point computations, numerical computation errors, interpolation, integration, solution of linear systems of equations, optimization, and initial value problems of ordinary differential equations. Implementation of algorithms are investigated using MATLAB for matrix and vector computations. Examples are drawn from a variety of science and mathematics areas. May not be counted toward a degree in computer sciences. Prerequisite: Computer Sciences 303E or the equivalent, Mathematics 408C, 408D, and credit with a grade of at least C or registration for Mathematics 341 (or 311) or 340L.
Basics of two- and three-dimensional computer graphics systems, modeling and rendering, and selected graphics software APIs. Other topics may include interactive graphics, animation, graphical user interfaces, and the graphical presentation of information. May not be counted toward a degree in computer sciences. Prerequisite: Computer Sciences 303E, 313E, and Mathematics 408C with a grade of at least C in each.
Introduction to the principles and basic concepts of the Internet. Networking applications and protocols. Simple client/server applications. Other topics may include network technologies and topologies, packet and circuit switching, LANS and WANS, Internet security, and network management. May not be counted toward a degree in computer sciences. Prerequisite: Computer Sciences 303E and 313E with a grade of at least C in each.
A practical introduction to database management systems, with discussion of database administration and management. Survey of logical modeling, database design with a focus on relational databases, SQL query language, and current applications. Topics may include data integrity, performance, concurrency, transaction processing, recovery, security, and Web applications. May not be counted toward a degree in computer sciences. Prerequisite: Computer Sciences 303E and 313E with a grade of at least C in each.
May be repeated for credit when the topics vary. May not be counted toward a degree in computer sciences. Prerequisite: Computer Sciences 303E and 313E with a grade of at least C in each, and consent of instructor.
This course is used to record credit the student earns while enrolled at another institution in a program administered by the University's Study Abroad Office. Credit is recorded as assigned by the study abroad adviser in the Department of Computer Sciences. University credit is awarded for work in an exchange program; it may be counted as coursework taken in residence. Transfer credit is awarded for work in an affiliated studies program. May be repeated for credit when the topics vary.
This course covers the work period of computer sciences students in the Cooperative Education program, which provides supervised work experience by arrangement with the employer and the supervising instructor. Forty laboratory hours a week for one semester. The student must repeat the course each work period and must take it twice to receive credit toward the degree; at least one of these registrations must be during a long-session semester. However, no more than three semester hours may be counted toward the major requirement. The student's first registration must be on the pass/fail basis; the second must be on the letter-grade basis. Prerequisite: Computer Sciences 336 or 336H with a grade of at least C, and consent of the undergraduate adviser.
Application of techniques and strategies of effective technical writing, and of conventions used in documents such as letters, memos, proposals, abstracts, and reports. Two lecture hours a week for one semester. Only one of the following may be counted: Computer Sciences 134, 234, 138, 178 (Topic: Technical Writing). May not be counted toward the number of hours in computer sciences required for the Bachelor of Science in Computer Sciences degree. Prerequisite: Computer Sciences 310 or 310H with a grade of at least C.
Proofs of program correctness and a survey of mathematical techniques useful in the analysis and verification of programs. Computer Sciences 336 and 336H may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 315 or 315H, Mathematics 408C, and Philosophy 313K or Computer Sciences 313H.
A survey of mathematical techniques useful in the analysis and verification of programs. Computer Sciences 336 and 336H may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 315 or 315H, Philosophy 313K or Computer Sciences 313H, and Mathematics 408C; and consent of the honors director.
Application of program-analysis theory to program design. Methodologies for large-scale program design. Designed to help students bring together theoretical and programming skills. Three lecture hours and one discussion hour a week for one semester. Computer Sciences 337 and 337H may not both be counted. Prerequisite: Computer Sciences 315 or 315H with a grade of at least C; Computer Sciences 336 or 336H with a grade of at least C, or consent of the honors director; and Mathematics 408C with a grade of at least C.
Application of program-analysis theory to program design. Methodologies for large-scale program design. Designed to help students bring together theoretical and programming skills. Three lecture hours and one discussion hour a week for one semester. Computer Sciences 337 and 337H may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 315 or 315H, Computer Sciences 336 or 336H, 336 or 336H, and Mathematics 408C; and consent of the honors director.
Introduction to the formal study of automata and of related formal languages with applications in computer science. Only one of the following may be counted: Computer Sciences 341, 341H, Linguistics 340. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, 328 or 337 or 337H, and Mathematics 408D.
Introduction to the formal study of automata and of related formal languages with applications in computer science. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Sciences 341, 341H, Linguistics 340. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, 337 or 337H, and Mathematics 408D; and consent of the honors director.
Biological information processing; architectures and algorithms for supervised learning, self-organization, reinforcement learning, and neuro-evolution; hardware implementations and simulators; applications in engineering, artificial intelligence, and cognitive science. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
A survey of current artificial intelligence issues, including search, production systems, knowledge representation, knowledge-based systems, planning, natural language processing, and machine learning. Artificial intelligence programming projects are required. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
Introduction to autonomous agents, with an emphasis on multiagent systems. Students use a robotics simulator. Emphasis on computer science research activities, including speaking, writing, programming, and working in groups.
Survey of significant concepts underlying modern programming languages, including syntax, functions, expressions, types, polymorphism, assignment, procedures, pointers, encapsulation, classes, and inheritance, with some discussion of implementation issues. Prominent programming paradigms, such as sequential, concurrent, object-oriented, functional, and logic programming. Illustrative examples drawn from a variety of current languages. Computer Sciences 345 and 345H may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
Survey of significant concepts underlying modern programming languages, including syntax, functions, expressions, types, polymorphism, assignment, procedures, pointers, encapsulation, classes, and inheritance, with some discussion of implementation issues. Prominent programming paradigms, such as sequential, concurrent, object-oriented, functional, and logic programming. Illustrative examples drawn from a variety of current languages. Computer Sciences 345 and 345H may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D; and consent of the honors director.
A theoretical introduction to cryptography. Topics include private key cryptosystems, public key cryptosystems, digital signatures, secret sharing schemes, and the necessary mathematical background. Computer Sciences 346 and 378 (Topic: Cryptography) may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
Concepts of database design and database system implementation. Data models, query processing, database design theory, crash recovery, concurrent control, and distributed databases. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
Social, professional, and ethical issues involved in the use of computer technology. Topics may include software engineering ethics, computer safety and reliability, constitutional issues, intellectual property, computer crime, societal impact, emerging technologies, philosophical issues. Computer Sciences 349 and 378 (Topic: Contemporary Issues in Computer Science) may not both be counted. Prerequisite: Computer Sciences 315 or 315H with a grade of at least C.
Symbolic computation for artificial intelligence, such as pattern-matching, unification, frames, flavors, semantic networks, deductive retrieval, rule-based and constraint-based inference. Substantial programming projects in LISP. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
Computer architecture and organizational issues; structural and behavioral characteristics of system components. Processor, memory hierarchy, and input/output issues. Evaluation of design alternatives. The relationship between hardware and software. Computer Sciences 352 and 352H may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, Electrical Engineering 316, Mathematics 408D.
Computer architecture and organizational issues; structural and behavioral characteristics of system components. Processor, memory hierarchy, and input/output issues. Evaluation of design alternatives. The relationship between hardware and software. Computer Sciences 352 and 352H may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, Electrical Engineering 316, and Mathematics 408D; and consent of the honors director.
A survey of the theoretical bases of computation: computational complexity (including the classes P and NP) and formal models of the semantics of programming languages. Prerequisite: Computer Sciences 341 or 341H with a grade of at least C.
Introduction to techniques for human-machine communication through imagery. Topics include display hardware, transformations, interactive techniques, geometric modeling, two- and three-dimensional display algorithms, graphics software systems architecture, and hidden-line and surface elimination. Projects are assigned and in-depth exploration is encouraged. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, Mathematics 408D, and Mathematics 341 (or 311) or 340L.
Introduction to computer networks, including common terminology, basic design issues, and types of networks and protocols. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D; and credit with a grade of at least C or registration for Computer Sciences 352 or 352H.
Algorithmic paradigms: divide and conquer, greedy algorithms, dynamic programming, branch and bound. NP-completeness and topics selected from the following: cryptography algorithms, approximation algorithms, randomized algorithms, parallel algorithms, lower bounds. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, 328 or 337 or 337H, and Mathematics 408D.
Topics include systems of linear equations, numerical integration, ordinary differential equations, and nonlinear equations. Construction and use of large numerical systems. Influence of data representation and computer architecture on algorithm choice and development. Only one of the following may be counted: Computer Sciences 367, Mathematics 368K, Physics 329. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, Mathematics 408D, and Mathematics 341L (or 311) or 340L.
Introduction to performance modeling, with emphasis on computer systems. Modeling methodology, queueing network models, simulation, analysis of results. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 362K.
Supervised study of selected problems in computer sciences, by individual arrangement with supervising instructor. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, Mathematics 408D; and consent of the undergraduate adviser.
Models, principles, and fundamental protocols, including event ordering and global predicate detection, atomic commit, state-machine replication, rollback recovery, primary backup, consensus for synchronous and asynchronous systems, and byzantine fault-tolerance.
Programming using class derivation, inheritance, and dynamic polymorphism. Application of a simple object-oriented design methodology to several software development problems. Computer Sciences 371P and 378 (Topic: Object-Oriented Design and Programming) may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, 328 or 337 or 337H, and Mathematics 408D.
Introduction to traditional and recent methodologies for indexing, processing, querying, and classifying unstructured and semistructured textual data, including hypertext and World-Wide Web documents.
Object-oriented formulations of software systems as executable specifications, object-oriented analysis, design of software architectures, translation of high-level specification systems. Computer Sciences 371S and 378 (Topic: Object-Oriented Software Engineering) may not both be counted. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
Basic concepts of operating systems: concurrent process management, virtual memory, file systems, scheduling, and protection. Computer Sciences 372 and 372H may not both be counted. Prerequisite: Computer Sciences 328, 337, or 337H with a grade of at least C, and Computer Sciences 352 or 352H with a grade of at least C.
Basic concepts of operating systems: concurrent process management, virtual memory, file systems, scheduling, and protection. Computer Sciences 372 and 372H may not both be counted. Prerequisite: Computer Sciences 328, 337, or 337H with a grade of at least C, Computer Sciences 352 or 352H with a grade of at least C, and consent of the honors director.
Introduction to current knowledge, techniques, and theories in large software system design and development. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
Formal description of languages, lexical analysis, syntax analysis, syntax-directed translation, run-time system management, code generation, code optimization, compiler-building tools. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D. Computer Sciences 341 or 341H and 345 or 345H are recommended.
Models of parallel computation, fundamental concepts for representation of parallel computation structures, study of representative parallel programming systems, programming of parallel algorithms and computations. Prerequisite: Computer Sciences 345 or 345H with a grade of at least C.
One or three lecture hours a week for one semester. May be repeated for credit when the topics vary. Only one of the following may be counted unless the topics vary: Computer Sciences 178, 378, 178H, 378H. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D.
One or three lecture hours a week for one semester. May be repeated for credit when the topics vary. Only one of the following may be counted unless the topics vary: Computer Sciences 178, 378, 178H, 378H. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D; and consent of the honors director.
Directed reading, research, and/or projects in areas of computer sciences, under supervision of a faculty member, leading to an honors thesis. The thesis must be approved by a committee of three readers. The equivalent of three lecture hours a week for one semester, by arrangement with a faculty member. Prerequisite: The following courses, with a grade of at least C in each: Computer Sciences 310 or 310H, 336 or 336H, and Mathematics 408D; nine additional semester hours of upper-division coursework in computer sciences, with a grade of at least C in each course; and consent of the undergraduate adviser.