Undergraduate Course Catalog: 2005 Curriculum
50:198:100 A Tour through Computer Science (3)
Prerequisite: 50:640:042 or appropriate score on Mathematics Placement Examination.
A broad overview of the field designed to provide students with an appreciation for and an understanding of the history of computing, basic concepts in logic, algorithmic problem solving, computer systems architecture, programming, operating systems, networks and the world-wide web. No background in computer science is assumed. This course is intended for majors as well as non-majors.
50:198:111 Programming Fundamentals (3)
Corequisites: 50:640:121 or 129 or 130, and 50:198:112 Software Laboratory I.
Remark: Differs from 50:198:111 Introduction to Computers in the 2003-2005 catalog
Fundamental concepts of structured programming and algorithmic problem solving: primitive data types, control structures, functions and parameter passing, top-down design, arrays, files, and the mechanics of compiling, running, testing and debugging programs. These concepts will be taught using a high-level language such as C/C++ or Java. Must be taken concurrently with 50:198:112.
50:198:112 Software Laboratory I (1)
Corequisite: 50:198:111
Formal laboratory that provides practice in designing and testing computer programs based closely on lecture material presented in 50:198:111. Also provides a quick introduction to the Unix operating system including the Unix shell, the file system and programming tools such as editors, compilers, debuggers, libraries and other utilities.
50:198:113 Object-Oriented Programming (3)
Prerequisite: 50:198:111 and 50:640:121 or 129 or 130.
Corequisite:50:198:114
Remark: Differs substantially from 50:198:113 Programming with Data Structures in the 2003-2005 catalog
Principles of object-oriented program design and advanced algorithmic problem solving illustrated through an object-oriented language such as C++ or Java. Topics include encapsulation and information-hiding; classes, subclasses and inheritance; polymorphism; class hierarchies, and the creation, implementation and reuse of APIs (Application Programming Interfaces). Extensive practice with designing and implementing object-oriented programs, especially using elementary data structures such as linked lists, stacks and queues. Must be taken concurrently with 50:198:114.
50:198:114 Software Laboratory II (1)
Prerequisite: 50:198:111 and 50:198:112
Corequisite: 50:198:113
Formal laboratory that provides practice in designing and testing computer programs based closely on lecture material presented in 50:198:113.
50:198:171 Mathematical Foundations of Computer Science (3)
Prerequisite: 50:640:113 or placement
Remark: This course replaces 50:640:237 Discrete Mathematics (in the 2003-2005 catalog) as a required course in the two CS degree programs.
Sets, Relations and Functions; Pigeon-hole principle; Cardinality, countability and uncountability; Propositional and predicate logic; Universal and existential quantification; Proof techniques: formal proofs using counterexample, contraposition, contradiction and induction; Recursive definitions; Basic counting: inclusion-exclusion, arithmetic and geometric progressions, summations, properties of special functions like logarithms, exponentials and factorials, permutations and combinations, solving recurrences; Graphs and trees; Basic discrete probability.
50:198:213 Data Structures (3)
Prerequisites: 50:198:113 and 50:198:171
Basic algorithmic analysis: asymptotic notation (Big-Oh, little-oh and Theta) for estimating the complexity of a problem, using recurrence relations to analyze the complexity of recursive algorithms. Tree-based data structures: binary search trees, heaps, and balanced search trees; Hash functions and hash tables; Abstract dictionaries; Using data structures to implement basic algorithms (such as searching, sorting, and depth- and breadth-first search in graphs, data compression etc.).
50:198:231 Introduction to Computer Architecture and Operating Systems (3)
Prerequisite: 50:198:111
Remark:Differs substantially from 50:198:231 Computer Organization and Assembly Language Programming
Elementary digital logic; Machine-level representation of data; Assembly-level machine organization: the von Neumann machine with its fetch-decode-execute cycle, instruction sets and assembly language programming, addressing modes, subroutine calls and returns, I/O and interrupts; Memory systems: hierarchy, organization and operations, virtual memory; Fundamental operating system principles
50:198:316 Parallel Programming (3)
Prerequisites: 50:198:113 and 50:198:171
Fundamental issues in the design and development of parallel programs for various types of parallel computers. Various programming models according to both machine type and application area. Cost models, debugging, and performance evaluation of parallel programs with actual application examples. Programming techniques and optimization. Programming exercises on a contemporary parallel machine.
50:198:321 Programming Language Concepts (3)
Prerequisites: 50:198:113 and 50:198:171
Remark:Differs from 50:198:221 Programming Language Concepts
This course develops an understanding of the design space of programming languages via the study of interpreters for a sequence of increasingly robust object languages. Topics include abstract and concrete syntax, operational semantics, functions as first-class values, recursion over data types, substitution model and environment model interpreters, call-by-name and call-by-value interpretation, binding constructs and scope, desugaring, and dynamic type checking. Interpreters are implemented in the functional programming language Scheme.
50:198:323 Software Methodology and Engineering (3)
Prerequisites: 50:198:113 and 50:198:171
Principles and techniques for the design and construction of reliable, maintainable, and useful software systems. Software life cycle, requirements specifications, and verification and validation issues. Implementation strategies (e.g., top-down, bottom-up, teams), support for reuse, performance improvement. A treatment of human factors and user interfaces is included.
50:198:325 Java Applications (3)
Prerequisites: 50:198:113 and 50:198:231
Note: Credit cannot be obtained for both this course and "Special Topics: Advanced Java" (50:198:491,492).
Java class hierarchy, inheritance; applications and applets; graphical user interfaces, exception handling, input/output; multi-threading, multimedia, networking.
50:198:333 Computer Hardware and Interfacing (3)
Prerequisites:50:198:171 and 50:198:231
Corequisite:50:198:334
Remark: Cross-listed as 50:750:308 Computer Hardware and Interfacing. This course is now an elective course.
Introduction to digital logic, combinational circuits, sequential circuits. Introduction to microprocessor architecture and organization, operation and programming, interfacing and application of microprocessors.
50:198:334 Computer Hardware and Interfacing Laboratory (1)
Corequisite: 50:198:333
Remark: Cross-listed as 50:750:312 Computer Hardware and Interfacing. This course is now an elective course.
Formal laboratory accompanying 50:198:333. Provides hands-on experience in digital design using PLA/PLD devices, EEPROM, and MSI/LSI circuits, and interfacing of microprocessors to memory and peripherals.
50:198:347 Computer Systems Administration (3)
Prerequisite: 50:198:231
Basic administration of networked computer systems (such as Unix and/or Windows NT systems). Installing and configuring the operating system, upgrading software and hardware, installing patches, system backups, security issues, account creation and deletion, system accounting and log files, job scheduling, performance monitoring, tcp/ip and networking, client/server file sharing and printing, file layout and organization, disk and tape administration and a look at several administrative tools.
50:198:361 Artificial Intelligence (3)
Prerequisites: 50:198:113 and 50:198:171
Techniques and applications of artificial intelligence: search, rule-based reasoning, statistical reasoning, game playing, machine learning, knowledge representation. The use of heuristics to obtain satisfactory solutions to intractable problems.
50:198:371 Design and Analysis of Algorithms (3)
Prerequisite: 50:198:213
Remark: Formerly 50:198:271 Design and Analysis of Algorithms in the 2003-2005 catalog.
Algorithm design techniques: divide-and-conquer, greedy method, dynamic programming, backtracking, and branch-and-bound. Advanced data structures, graph algorithms, algebraic algorithms. Complexity analysis , complexity classes, and NP-completeness. Introduction to approximation algorithms and parallel algorithms.
50:198:381 Introduction to Numerical Methods (3)
Prerequisites: 50:198:111 and 50:640:221.
Methods of finding roots, interpolation, curve fitting, integration, differentiation, and minimization; estimation and control of various computational errors.
50:198:421 Compiler Construction (3)
Prerequisite: 50:198:321
Introduction to compiler design and implementation, including lexical analysis, formal syntax specification, parsing techniques, syntax-directed translation, semantic analysis, execution environment, storage management, code generation, and optimization techniques.
50:198:431 Computer Systems Architecture (3)
Prerequisite: 50:198:231
Remark: Differs from 50:198:431 High-Performance Computer Architectures in the 2003-2005 catalog
Processor design; Memory hierarchy design; Cache coherence and consistency; Input/output subsystems. Multiprocessor and massively parallel architectures.
50:198:437 Signal Processing (3)
Prerequisites: 50:640:221 and 50:198:231
Remark: This course is cross-listed with 56:645:559 Signal Processing (3) offered in the M.S. program in Mathematics.
Signal modelling and system representation. Themes in system design; Representation of discrete causal signals: Fourier analysis and fast Fourier transforms. Realization of linear recurrent structures; Stability analysis. Prediction, filtering and identification.
50:198:441 Parallel and Distributed Computing (3)
Prerequisites: 50:198:113 and 50:198:171
Remark: Differs from 50:198:441 Distributed Systems in the 2003-2005 catalog
Fundamental issues in the design and development of algorithms and programs for parallel computers. Programming models and performance optimization techniques; Application examples and programming exercises on a contemporary parallel machine; Cost models and performance analysis and evaluation.
50:198:443 Operating Systems (3)
Prerequisite: 50:198:231
Remark: Differs from 50:198:341 Principles of Operating Systems in the 2003-2005 catalog
A comprehensive, hands-on coverage of operating system principles, design and implementation. Topics include kernel development; process concurrency issues such as starvation, mutual exclusion, deadlock avoidance, concurrency models and mechanisms, producer-consumer problems and synchronization; scheduling policies and algorithms for preemptive and non-preemptive scheduling; real-time scheduling; memory management and analysis of paging and segmentation policies; security and protection; file systems; fault tolerance and performance evaluation.
50:198:446 Computer Networks (3)
Prerequisite: 50:198:231
Remark: Formerly 50:198:346 Computer Networks in the 2003-2005 catalog
Introduction to computer communication networks, including physical and architectural components, communication protocols, switching, network routing, congestion control, and flow control. End-to-end transport services, network security and privacy. Networking software and applications. Network installation, testing, and maintenance.
50:198:451 Database Systems (3)
Prerequisites: 50:198:113 and 50:198:171
Remark: Formerly 50:198:351 Database Systems in the 2003-2005 catalog
Relational database theory and practice, including database design. Database concepts, relational algebra, data integrity, query languages, views. Introduction to object-oriented databases. Application project with a practical database management system.
50:198:456 Computer Graphics (3)
Prerequisites: 50:198:113
Remark: Differs from 50:198:356 Computer Graphics in the 2003-2005 catalog
Graphics systems and imaging principles, graphics programming using packages like OpenGL, input devices and interactive techniques, animation techniques, geometric transformations and modeling in two and three dimensions, viewing in 2D and 3D, lighting and shading, fundamental graphics algorithms (such as clipping, hidden surface removal etc.).
50:198:471 Advanced Algorithms (3)
Prerequisite: 50:198:371
Advanced and specialized topics in algorithms, selected from parallel algorithms, randomized algorithms, combinatorial optimization.
50:198:473 Introduction to Computational Geometry (3)
Prerequisite: 50:198:113 and 50:198:171
Algorithms and data structures for geometric problems that arise in various applications such as computer graphics, CAD/CAM, robotics, and geographical information systems (GIS). Topics include point location, range searching, intersection, decomposition of polygons, convex hulls, and Voronoi diagrams.
50:198:475 Cryptography and Computer Security (3)
Prerequisites: 50:198:113 and 50:198:171
Secret-key cryptography, public-key cryptography, key agreement, secret sharing, digital signatures, message and user authentication, one-way functions, key management; attacks; practical applications to computer and communication security.
50:198:476 Introduction to the Theory of Computation (3)
Prerequisite: 50:198:171 and 50:198:213
Remark: Formerly 50:198:376 Introduction to the Theory of Computation in the 2003-2005 catalog
Formal languages, automata and computability: regular languages and finite-state automata; context-free grammars and languages; pushdown automata; the Church-Turing theses; Turing machines; decidability and undecidability.
50:198:481 Advanced Numerical Methods (3)
Prerequisites: 50:198:381 and 50:640:250 and 50:640:314.
Numerical techniques for solving linear algebraic systems, eigenvalue problems, least squares, quadrature. Numerical solution of initial and boundary value problems for oridinary and partial differential equations.
50:198:487 Visualizing Mathematics by Computer (3)
Prerequisite: 50:640:221.
Remark: Cross-listed as 50:640:497 Visualizing Mathematics by Computer.
A comprehensive introduction to symbolic computational packages and scientific visualization through examples from calculus and geometry. Covers 2D, 3D and animated computer graphics using Maple, Mathematica and Geomview.
50:198:491,492 Special Topics in Computer Science (3)
Prerequisite: As announced or permission of instructor.
In-depth study of areas not covered in regular curriculum. Topics vary from term to term.
50:198:493 Senior Design Project (3)
Prerequisite: Senior standing or permission of instructor.
Design, implementation, and demonstration of a significant software and/or hardware project. Project proposals must be submitted and approved by instructor. Part of the lecture time is used to discuss such issues as the historical and social context of computing, responsibilities of the computing professional, risks and liabilities, and intellectual property.
50:198:494 Independent Study (By Arr.)
Prerequisite: Permission of instructor.
Individual study under the supervision of a computer science faculty, intended to provide an opportunity to investigate areas not covered in regular courses.
50:198:495-496 Honors Program in Computer Science (By Arr.)
Prerequisite: Approval by department.
A program of readings and guided research in a topic proposed by the student, culminating in an honors thesis presented to the departmental faculty for approval.
50:198:497 Computer Science Internship (By Arr.)
Prerequisite: Approval by department.
The practical application of computer science knowledge and skills through an approved internship in a sponsoring organization. Arrangements for the internship must be agreed upon by the sponsoring organization and approved by the department before the beginning of the term. Students should consult the detailed instructions before registering for this course.