50:198:100
A Tour through Computer Science (3)
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
nonmajors.
Prerequisite: 50:640:042 or appropriate score on the mathematics placement test.
|
50:198:105
Introduction to Computing for Engineers and Scientists (3)
Fundamental concepts of structured programming and algorithmic problem solving using MATLAB. The course content will be substantially similar to that in 50:198:111 but with an emphasis on problems and techniques (such as model building and plotting) for engineers and scientists. Computer science majors cannot use the credits from this course toward their major requirements.
Corequisites: 50:640:121 or 129 or 130.
|
50:198:111
Programming Fundamentals (R) (3)
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.
Corequisites: 50:640:121, 129, or 130 and 50:198:112.
|
50:198:112
Software Laboratory I (R) (1)
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.
Corequisite: 50:198:111.
|
50:198:113
Object-Oriented Programming (R) (3)
Principles of object-oriented program design and advanced algorithmic
problem solving illustrated through an object-oriented language. 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.
Prerequisites: 50:640:121, 129, or 130, and 50:198:111.
|
50:198:114
Software Laboratory II (R) (1)
Formal laboratory that provides practice in designing and testing
computer programs based closely on lecture material presented in
50:198:113.
Prerequisite: 50:198:112. Corequisite: 50:198:113.
|
50:198:171
Mathematical Foundations of Computer Science (R) (3)
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, geometric
progressions, and summations; properties of special functions such as
logarithms, exponentials, and factorials; permutations and
combinations, solving recurrences; graphs and trees; basic
discrete probability.
Prerequisite: 50:640:113 or by placement.
|
50:198:213
Data Structures (R) (3)
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).
Prerequisites: 50:198:113 and 171.
|
50:198:231
Introduction to Computer Organization (3)
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.
Prerequisites: 50:198:111 and 171.
|
50:198:316
Parallel Programming (3)
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.
Prerequisites: 50:198:113 and 171.
|
50:198:321
Programming Language Concepts (3)
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.
Prerequisites: 50:198:113 and 171.
|
50:198:323
Software Methodology and Engineering (3)
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, and performance improvement. A treatment of human factors and user interfaces included.
Prerequisites: 50:198:113 and 171.
|
50:198:325
Java Applications (3)
Java class hierarchy and inheritance; applications and applets; graphical user
interfaces, exception handling, input/output; multithreading, multimedia,
and networking.
Prerequisites: 50:198:113 and 231.
|
50:198:333
Computer Hardware and Interfacing (3)
Introduction to digital logic, combinational circuits, and sequential circuits. Introduction to microprocessor architecture and organization, operation and programming, interfacing, and application of microprocessors.
Prerequisites: 50:198:171 and 231. Credit not given for both this course and 50:750:308. Corequisite: 50:198:334.
|
50:198:334
Computer Hardware and Interfacing Laboratory (1)
Provides hands-on experience in digital design using PLA/PLD devices, EEPROM, and MSI/LSI circuits, and interfacing of microprocessors to memory and peripherals.
Credit not given for both this course and 50:750:312. Corequisite: 50:198:333.
|
50:198:347
Computer Systems Administration (3)
Basic administration of networked computer systems (such as Unix and/or Windows NT). 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.
Prerequisite: 50:198:231.
|
50:198:361
Artificial Intelligence (3)
Techniques and applications of artificial intelligence: search, rule-based reasoning, statistical reasoning, game playing, machine learning, and knowledge representation. The use of heuristics to obtain satisfactory solutions to intractable problems.
Prerequisites: 50:198:113 and 171.
|
50:198:371
Design and Analysis of Algorithms (3)
Algorithm design techniques: divide-and-conquer, greedy method, dynamic programming, backtracking, and branch-and-bound. Advanced data structures, graph algorithms, and algebraic algorithms. Complexity analysis, complexity classes, and NP-completeness. Introduction to approximation algorithms and parallel algorithms.
Prerequisites: 50:198:171 and 213.
|
50:198:381
Introduction to Numerical Methods (3)
Methods of finding roots, interpolation, curve fitting, integration, differentiation, and minimization; estimation and control of various computational errors.
Prerequisites: 50:198:111 and 50:640:221.
|
50:198:421
Compiler Construction (3)
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.
Prerequisite: 50:198:321.
|
50:198:431
Computer Systems Architecture (3)
Processor design; memory hierarchy design; cache coherence and
consistency; input/output subsystems. Multiprocessor and
massively parallel architectures.
Prerequisite: 50:198:231.
|
50:198:437
Signal Processing (3)
Signal modeling 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.
Prerequisites: 50:640:221 and 50:198:231.
|
50:198:441
Parallel and Distributed Computing (3)
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.
Prerequisites: 50:198:113 and 171.
|
50:198:443
Operating Systems (3)
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
nonpreemptive scheduling; memory
management and analysis of paging and segmentation policies;
and file systems.
Prerequisite: 50:198:231.
|
50:198:446
Computer Networks (3)
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.
Prerequisite: 50:198:231.
|
50:198:451
Database Systems (3)
Relational database theory and practice, including database design. Database concepts, relational algebra, data integrity, query languages, and views. Introduction to object-oriented databases. Application project with a practical database management system.
Prerequisites: 50:198:113 and 171.
|
50:198:456
Computer Graphics (3)
Graphics systems and imaging principles, graphics programming
using packages such as OpenGL, input devices, interactive
techniques, animation techniques, geometric transformations and
modeling in two and three dimensions, viewing in 2-D and 3-D,
lighting and shading, and fundamental graphics algorithms (such as
clipping and hidden surface removal).
Prerequisite: 50:198:113.
|
50:198:471
Advanced Algorithms (3)
Advanced and specialized topics in algorithms, selected from parallel
algorithms, randomized algorithms, and combinatorial optimization.
Prerequisite: 50:198:371.
|
50:198:473
Introduction to Computational Geometry (3)
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.
Prerequisites: 50:198:113 and 171.
|
50:198:475
Cryptography and Computer Security (3)
Secret-key cryptography, public-key cryptography, key arrangement, secret sharing, digital signatures, message and user authentication, one-way functions, key management; attacks; and practical applications to computer and communication security.
Prerequisites: 50:198:113 and 171.
|
50:198:476
Introduction to the Theory of Computation (3)
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.
Prerequisites: 50:198:171 and 213.
|
50:198:481
Advanced Numerical Methods (3)
Numerical techniques for solving linear algebraic systems, eigenvalue problems, least squares, and quadrature. Numerical solution of initial and boundary value problems for ordinary and partial differential equations.
Prerequisites: 50:198:381, 50:640:250 and 314.
|
50:198:487
Visualizing Mathematics by Computer (3)
A comprehensive introduction to symbolic computational packages and scientific visualization through examples from calculus and geometry. Covers 2-D, 3-D, and animated computer graphics using Maple, Mathematica, and Geomview.
Prerequisite: 50:640:221. Credit not given for both this course and 50:640:497.
|
50:198:491,492
Special Topics in Computer Science (3,3)
In-depth study of areas not covered in regular curriculum. Topics vary from semester to semester.
Prerequisite: As announced or permission of instructor.
|
50:198:493
Senior Design Project (3)
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 used to discuss such issues as the historical and social context of computing, responsibilities of the computing professional, risks and liabilities, and intellectual property. This course is intended for computer science majors in their senior year who have completed at least three 300- or 400-level courses in computer science.
Prerequisite: 50:198:213, 231, and approval by department.
|
50:198:494
Independent Study (BA)
Individual study under the supervision of a computer science faculty member; intended to provide an opportunity to investigate areas not covered in regular courses.
Prerequisite: Permission of instructor.
|
50:198:495-496
Honors Program in Computer Science (BA,BA)
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.
Prerequisite: Approval by department.
|
50:198:497
Computer Science Internship (BA)
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 semester. Students should consult the department for detailed instructions before registering for this course.
Prerequisite: Approval by department.
|