College of Engineering

Computer Science

www.cs.vt.edu
E-mail: csundg@cs.vt.edu

University Exemplary Department

Barbara G. Ryder, Head and J. Byron Maupin Professor of Engineering
Thomas L. Phillips Professor: N. Ramakrishnan
Professors: J. D. Arthur; O. Balci; C. L. Barrett1; I. R. Chen; E. A. Fox; L. S. Heath; D. G. Kafura; M. Marathe1; F. Quek;
A. Sandu; C. A. Shaffer; L. T. Watson
Associate Professors: G. Back; D. Bowman; K. W. Cameron; S. H. Edwards; C. J. Egyhazy; W. Feng; D. Gracanin; W. Lou; C. T. Lu; D. S. McCrickard; T. M. Murali; C. L. North; A. Onufriev; M. A. Pérez-Quiñones; C. J. Ribbens; D. G. Tatar;
|A. Vullikanti1; L. Zhang
Assistant Professors: A. Butt; Ya. Cao; Yo. Cao; E. Tilevich; D. Yao
Associate Professor of Practice: S. Harrison
Senior Instructors: N. D. Barnette; W. McQuain
Academic Advisors: T. Arthur; L. Bradford
Professor Emeritus: D. C. S. Allison; J. D. Arthur; R. W. Ehrich; J. A. N. Lee; H. R. Hartson; R. E. Nance
1 Joint appointment with Virginia Bioinformatics Institute

Virtual experience

The Field of Computer Science

    In a contemporary world where every educated person must have some knowledge of computing, the Department of Computer Science offers courses to meet a variety of needs. The department offers a bachelor of science program to prepare specialists in the area of computer science itself, a minor in computer science, and individual courses directed to the needs of non-majors who will be using computers as tools in their chosen careers. The department also offers the M.S. and Ph.D. in computer science (see Graduate Catalog).

    As a major, computer science involves far more than just writing computer programs. It is a technically rigorous field that requires a strong background in mathematics. Computer scientists must be good at problem solving. Their work requires the ability to think abstractly and to represent real-world objects and interactions as symbols that can be manipulated by a computer. The field of computer science is characterized by rapid change, with new opportunities emerging every year to improve life in diverse areas such as education, communication, science, commerce and entertainment.

Accreditation and Program Objectives

    The bachelor of science degree in Computer Science is accredited by the Computing Accreditation Commission of ABET, http://www.abet.org.

    Part of the accreditation process is a clear statement of program objectives and desired outcomes for graduates. The objective of the computer science program is to provide majors with a balanced breadth and depth of knowledge in computer science that allows them the choice between continuing their education in graduate school and beginning their professional career, and to excel in either environment.

    Desired outcomes for graduates are organized into the following six areas:

  • Foundations of computing: ability to apply knowledge of mathematics and science to carry out analysis of computer science problems and design appropriate solutions; ability to use techniques, skills, and modern software development tools necessary for computing practice.
  • Depth of knowledge: ability to identify, formulate, and solve computer science problems; ability to design a computing system to meet desired needs; ability to apply problem-solving strategies to new, unknown, or open-ended situations in computer science.
  • Breadth of knowledge: knowledge and understanding of the impact of the many sub-disciplines of computer science.
  • Communication skills: ability to function in teams; ability to use written and oral communication skills effectively.
  • Professional ethics: understanding of professional and ethical responsibility.
  • Lifelong learning: recognition of the need for and ability to engage in lifelong learning; ability to acquire and use the ever-changing technical knowledge required of computing professionals.

Degree Requirements

    A total of 123 semester credits are required for graduation. (The details below are for students graduating in 2013.)

    The curriculum in computer science is designed to provide a broad general computer science background that will prepare a student for a professional career as a computer scientist or to continue study at the graduate level. All majors take a set of foundational courses in software design and development, algorithms, and computer organization at the freshmen and sophomore level. Students at the junior and senior level select one theoretical course, four specialty courses and a capstone course according to their individual interests within the field. In all, a minimum of 43 credit hours of computer science is required: 1114 or 1124, 2104, 2114, 2505, 2506, 3114, 3214, 3304, 3604, two 3000 or 4000 level electives, one 4000 level elective, a CS theory course (4104 or 4114 or 4124), a CS capstone course, a one credit senior seminar and an approved technical elective. To qualify for a B.S. degree in Computer Science, a student must earn a “C” (2.0) or better in 1114 or 1124, 2104, 2114, 2505, 2506, and 3114.

    Computer science majors are required to take an additional 36 credits distributed over five disciplines. Mathematics comprises 22 of these credits, which include Math 1114, 1205, 1206, 1224, 2214, 2224, 2534, and 3134. CS/Math double majors take 3034 and 3124 in place of 2534 and 3134. Depending on their selection of CS courses, CS majors need at most one additional math course to obtain a math minor.

    The other specific disciplines represented in the departmental requirements are engineering education, English, statistics, and communication studies. Students must take ENGE 1024 and 1104, Engl 3764, Stat 4705 or 4714, and COMM 2004. The final four additional credits come from taking one more physics or chemistry lab course beyond the two required by the General Engineering requirements.

Opportunities for Majors

    The department offers computer science majors the opportunity to enhance their education through a variety of curricular and extracurricular activities. Students who meet the requirements for independent study or undergraduate research can pursue research or individualized study under the direction of a faculty member. Through the honors program, superior students can work toward earning their degree "in honors" or even elect to earn both the bachelor's and master's degrees in an accelerated undergraduate/graduate program. The Cooperative Education Program makes it possible for students to acquire professional experience while pursuing their degree.

    The department sponsors chapters of three national computer science organizations: the Association for Computing Machinery (ACM), the national professional organization for computer scientists; the Association for Women in Computing (AWC), which is dedicated to the advancement of women in information technology fields; and Upsilon Pi Epsilon (UPE), the national computer science honor society. Additional recognition of student achievements is made during the annual graduation ceremonies. Among the awards given are the Gorsline award, awarded to a rising senior who has overcome freshman-year academic difficulties and subsequently demonstrated great academic achievement.

Information for Non-Majors

    The department offers a CS minor for non-majors seeking a strong background in computer science. The requirements for the minor include: 1114 or 1124, 2114, 2505, 3114, and six credits from 3000/4000-level courses except 3604, 4004, or 4014. Minors must meet the same prerequisites as majors. This includes Math 2534 as a co-requisite for CS 2505 and achievement of a "C" (2.0) or better in all CS courses which are prerequisites for subsequent CS courses.

Computational Facilities

    The Department of Computer Science possesses extensive facilities for both instruction and research. There are several undergraduate teaching laboratories and a number of specially equipped research laboratories. These include two large parallel computing clusters and numerous compute and file servers for research and instruction in areas such as animation, digital libraries, software engineering, data mining, bioinformatics and networking. The department also operates extensively equipped laboratories for human-computer Interaction, virtual environments and information visualization. These labs include display walls, state-of-the-art 3D and head-mounted displays, and a 4-wall CAVE immersive theater.

Satisfactory Progress

    University policy requires that students who are making satisfactory progress toward a degree meet minimum criteria toward the Curriculum for Liberal Education (see Academics) and toward the degree in computer science.

    Satisfactory progress toward the B.S. in Computer Science requires that a Computer Science major must:

  1. be registered in at least one 3-credit course required in the major during each on-campus semester of the regular academic year;
  2. maintain a GPA of 2.0 or better in the major;
  3. not take any CS course required in the major more than twice, including attempts ending in course withdrawal; and
  4. not repeat more than 3 CS courses required in the major, including attempts ending in course withdrawal.

Undergraduate Course Descriptions (CS)

1004: COMPUTER LITERACY
Introduction to personal computer applications. Overview of basic computer hardware and system software concepts. Projects using various application software packages including word processing, spreadsheets, databases, and graphics (analytical and presentation), using electronic-mail, computer network browsers, and on-line training systems. Not for CS major or minor credit. Duplicates ACIS 1504, ALS 1514. (3H,3C)

1044: INTRODUCTION TO PROGRAMMING IN C
Fundamental concepts underlying software solutions of many problems. Structured data, statement sequencing, logic control, input/output, and functions. The course will be taught using a structured approach to programming. Partially duplicates 1344. (3H,3C) I, II, III, IV.

1054: INTRODUCTION TO PROGRAMMING IN JAVA
This course provides an introduction to object oriented programming using the Java language. Fundamental concepts underlying programming and software solutions to many problems. Structured data, statement sequencing, logic control, classes, objects, methods, instantiation of classes, sending messages to objects. (2H,2L,3C) I, II, III.

1104: INTRODUCTION TO COMPUTER SCIENCE
This course (a) presents the fundamental concepts of computer programming, (b) introduces the history of computing, (c) provides an introduction to and preliminary investigation of the fundamental concepts found throughout the computer science discipline, and (d) overviews computer science subdisciplines such as algorithms, artificial intelligence, computer architecture, human-computer interaction, language translation, operating systems, parallel computation, and software engineering. Co: 1044 or 1344. (3H,3C)

1114: INTRODUCTION TO SOFTWARE DESIGN
Fundamental concepts of programming from an object-oriented perspective. Basic software engineering principles and programming skills in a programming language that supports the object-oriented paradigm. Simple data types, control structures, array and string data structures, basic algorithms, testing and debugging. A basic model of the computer as an abstract machine. Modeling and problem-solving skills applicable to programming at this level. Partially duplicates 1054, 1124, and 1705. Programming experience may be substituted for pre-requisite ENGE 1024 with instructor's permission. Pre: ENGE 1024. (2H,2L,3C)

1124: INTRODUCTION TO MEDIA COMPUTATION
This course teaches fundamental manipulations of digital media as an introduction to computer science. Basic software engineering principles and programming skills are taught with a programming language that supports object-oriented programming. Simple data types, control structures, array and string data structures and algorithms, testing and debugging. Partially duplicates 1054 and 1705. (2H,2L,3C)

1204: INTERNET AND SYSTEM SOFTWARE
An on-line self-paced tutorial to the Internet and World Wide Web, Program Development Tools, and common applications. Introduction to Web publishing, communication, and searching. Instruction in the use of an integrated program development environment, debugger, and related program development tools. Introduction to spreadsheets, databases, and slide presentation software package. Partially duplicates 1604. Co: 1344, 1044. (1H,1C)

1344: PROGRAMMING IN C
A course designed to build on prior knowledge of a high level programming language and to teach the fundamentals of structured programming in C. Expression, statement, and module level constructs are discussed; programming assignments are used to reinforce concepts and to provide the requisite experience to pursue advanced Computer Science courses. Partially duplicates 1044. Pre: 1014 or 1034. (1H,1C)

1604: INTRODUCTION TO THE INTERNET
Introduces the concepts, software, data organization and issues involved with using networked information. Also covers file formats (as applied in networked hypermedia and multimedia sound/video documents), local and global (Internet) network access, electronic mail, transferring files, network news, the World Wide Web, digital libraries, on-line public access catalogs and electronic journals, CD-ROMs and on-line databases, and commercial and other networks. Word processing ability required. (1H,1C)

1614 (ACIS 1614) (BIT 1614): INTRODUCTION TO LIVING IN THE KNOWLEDGE SOCIETY (LIKES)
Introduces computing concepts needed by students to live in the emerging Knowledge Society. Prepares students to take courses in the Curriculum for Liberal education that are part of the pathway with theme Living In the KnowlEdge Society (LIKES) - i.e., the LIKES themed core. Surveys key
paradigms of computing, including problem solving, programming, modeling and simulation, and software engineering. Relates these to the Knowledge Society, covering data, information, and knowledge, considering hypermedia, human-computer interaction, presentation, visualization, networking, and communication. Students are prepared to understand the (potential) application of computing to society in general and in their disciplines. (1H,1C)

1704: INTRODUCTION TO DATA STRUCTURES AND SOFTWARE ENGINEERING
Introduces a disciplined approach to problem-solving and emphasizes the utility of software engineering principles applied to programming practices. Also stressed are program design and implementation involving multiple modules, verification of program correctness, and abstract data types and objects such as strings, arrays, sets, linked lists, stacks, queues, and files. Pre: 1044 or 1344. Co: 2304, 1206. (3H,3C)

1705-1706: INTRODUCTION TO OBJECT-ORIENTED DEVELOPMENT
Fundamental concepts of programming from an object-oriented perspective. Basic software engineering principles and programming skills taught with a programming language that supports the object-oriented paradigm. 1705: Simple data types, control structures, array and string data structures and algorithms, testing and debugging. 1706: Detailed coverage of data structures, algorithms, and the methods of object-oriented design and software construction. Design and construction of medium-sized object-oriented programming projects with an emphasis on teamwork and software engineering. Programming experience in C++ or Java may be substituted for ENGE 1024 prerequisite. Must have a C or better in prerequisite CS 1705. Pre: (MATH 1205 or MATH 1526), ENGE 1024 for 1705; 1705 for 1706. (2H,2L,3C) I, II.

1705H-1706H: HONORS INTRODUCTION TO OBJECT-ORIENTED DEVELOPMENT
(2H,2L,3C)

1944: COMPUTER SCIENCE FIRST YEAR SEMINAR
An introduction to academic and career planning for computer science majors. Pass/Fail only. (1H,1C)

2104: INTRODUCTION TO PROBLEM SOLVING IN COMPUTER SCIENCE
This course introduces the student to a broad range of heuristics for solving problems in a range of settings that are relevant to computation. Emphasis on problem-solving techniques that aid programmers and computer scientists. Heuristics for solving problems "in the small" (classical math and word problems), generating potential solutions to "real-life" problems encountered in the profession, problem solving through computation, and problem solving in teams. Programming experience may be substituted for the ENGE 1024 pre-requisite. Pre: ENGE 1024, (MATH 1205 or MATH 1526). (3H,3C)

2114: SOFTWARE DESIGN AND DATA STRUCTURES
A programming-intensive exploration of software design concepts and implementation techniques. Builds on knowledge of fundamental object-oriented programming. Advanced object-oriented software design, algorithm development and analysis, and classic data structures. Includes a team-based, semester-long software project. Co-requisite MATH 1205 may be substituted with MATH 1526. A grade of C or better is required in CS pre-requisite 1114 or 1124 Pre: 1114 or 1124. Co: MATH 1205. (2H,2L,3C)

2204: UNIX
A hands-on introduction to the modern operating system UNIX. Introduction to the basic operating systems concepts employed by UNIX. Students gain experience with basic system usage, system installation and administration, the UNIX programming environment, and system utilities. Duplicates 2304 (UNIX). A grade of C or better required in CS prerequisite 1706. Pre: 1706 or ECE 2574. (2H,2C)

2304: SELF STUDY IN A PROGRAMMING SYSTEM
Guided self-study in a specific programming system, its syntax and applications; based on prior knowledge of the programming process and experience in programming with some high level language; may be taken three times for credit with different system each time; may be taken only
twice for CS major or minor credit; systems to be offered may include FORTRAN, COBOL, C, UNIX, LISP. A grade of C or better required in CS prerequisite 1706. Pre: 2114. (1C)

2504: INTRODUCTION TO COMPUTER ORGANIZATION
Basic computer organization at the machine language and assembly language level. Digital logic and circuits. Basic components of computer hardware and their implementation. Interaction with the operating system. Alternative computer organizations and implementations. Partially duplicates ECE 2504. A grade of C or better required in CS prerequisites 2204 and 2605. Pre: 2204, 2605. (3H,3C)

2505-2506: INTRODUCTION TO COMPUTER ORGANIZATION
An introduction to the design and operation of digital computers. Works up from the logic gate level to combinational and sequential circuits, information representation, computer arithmetic, arithmetic/logic units, control unit design, basic computer organization, relationships between high level programming languages and instruction set architectures. A grade of C or better is required in CS pre-requisite 2114. Pre: 2114 for 2505; 2505, 2114, MATH 2534 for 2506. Co: MATH 2534 for 2505. (3H,3C)

2604: DATA STRUCTURES AND FILE MANAGEMENT
This course extends the concepts of primitive data types by teaching the student a classical set of data structures that pervades both the theoretical and practical domains of computer science. Topics discussed include lists, trees, graphs, searching, sorting, file system organization and access methods. A grade of C or better required in CS prerequisites 2204 and 2704. Pre: 2204, 2704, MATH 2534. (3H,3C)

2605-2606: DATA STRUCTS & OO DEVELOPMENT
Design and implementation of data structures, intermediate software engineering design principles, and object-oriented programming skills. Emphasis on algorithm analysis, design patterns, testing, debugging, and organizing and managing larger problems. 2605: Designing, implementing, and using data structures, introductory algorithm analysis, object-oriented design principles, and low-level design techniques. 2606: Sorting, searching, file processing, indexing, hashing, algorithm analysis, and advanced tree structures. 2605: Must have C or better in prerequisite CS 1706. 2606: Must have C or better in prerequisite 2605. Pre: 1706, MATH 2534 for 2605; 2605 for 2606. 2605: (2H,2L,3C) 2606: (3H,3C)

2704: ORJECT-ORIENTED SOFTWARE DESIGN AND CONSTRUCTION
Introduces the principles of object-oriented programming with emphasis on objects, classes, inheritance, and polymorphism. A programming language such as C++ is used to apply these principles in several application domains. Also stressed are tools and techniques for testing, debugging, and organizing and managing larger programs. A grade of C or better required in CS prerequisite 1706. Pre: 1706 or ECE 2574. (3H,3C)

2964: FIELD STUDY
Pass/Fail only. Variable credit course.

2974: INDEPENDENT STUDY
Variable credit course.

2984: SPECIAL STUDY
Variable credit course.

3114: DATA STRUCTURES AND ALGORITHMS
Advanced data structures and analysis of data structure and algorithm performance. Sorting, searching, hashing, and advanced tree structures and algorithms. File system organization and access methods. Course projects require advanced problem-solving, design, and implementation skills. A grade of C or better is required in CS prerequisites 2114 and 2505. Pre: 2114, 2505, MATH 2534. (3H,3C)

3204: OPERATING SYSTEMS
Covers the concept of a "process", its abstract and physical representations, its creation, management and scheduling. Study of: a thread process and how it relates to the parent; asynchronous concurrently executing processes, shared memory access, synchronization via semaphores, critical regions and monitors. Additional topics: deadlock prevention, avoidance, and detection, including Banker's Algorithm; memory management strategies including virtual memory; file representation and storage management; and device management. UNIX will be the reference system and the one used for project development and submission. A grade of C or better required in CS prerequisites 2504, and CS (2604 or 2606). X-grade allowed. Pre: (2504 or ECE 2504), (CS 2604 or CS 2606). (3H,3C) I, II.

3214: COMPUTER SYSTEMS
Introduction to computer systems as they are relevant to application programmers today, with emphasis on operating system principles. Operating system design and architectures; processes; threads, synchronization techniques, deadlock; CPU scheduling; system call interfaces, system level I/O and file management; shell programming; separate compilation, loading and linking; inter-process communication (IPC); virtual and physical memory management and garbage collection; network protocols and programming; virtualization; performance analysis and optimization. A grade of C or better is required in CS pre-requisites 2506 and 2114. Pre: 2506, 2114. (3H,3C)

3304: COMPARATIVE LANGUAGES
This course in programming language constructs emphasizes the run-time behavior of programs. The languages are studied from two points of view: (1) the fundamental elements of languages and their inclusion in commercially available systems; and (2) the differences between implementations of common elements in languages. A grade of C or better required in CS prerequisite 3114. Pre: 3114. (3H,3C)

3414 (MATH 3414): NUMERICAL METHODS
Computational methods for numerical solution of non-linear equations, differential equations, approximations, iterations, methods of least squares, and other topics. Partially duplicates Math 4554. A grade of C or better required in CS prerequisite 1044 or 1705 or 1114 or 1124. Pre: 1044, MATH 2214, MATH 2224, (CS 1705 or CS 1114 or CS 1124). (3H,3C)

3604: PROFESSIONALISM IN COMPUTING
Studies the ethical, social, and professional concerns of the computer science field. Covers the social impact of the computer, implications and effects of computers on society, and the responsibilities of computer professionals in directing the emerging technology. The topics are studied through case studies of reliable, risk-free technologies, and systems that provide user friendly processes. Specific studies are augmented by an overview of the history of computing, interaction with industrial partners and computing professionals, and attention to the legal and ethical responsibilities of professionals. This is a web-supported course, incorporating writing intensive exercises, making extensive use of active learning technologies. A grade of C or better required in CS prerequisite 3114. Pre: 3114, COMM 2004. (3H,3C)

3704: INTERMEDIATE SOFTWARE DESIGN AND ENGINEERING
Explores the principles of software design in detail, with an emphasis on software engineering aspects. Includes exposure of software lifecycle activities including design, coding, testing, debugging, and maintenance, highlighting how design affects these activities. Peer reviews,
designing for software reuse, CASE tools, and writing software to specifications are also covered. A grade of C or better required in CS prerequisite 3114. Pre: 3114. (3H,3C)

3714: MOBILE SOFTWARE DEVELOPMENT
Technologies and concepts underlying software development for mobile devices (handheld computers). Mobile computing platforms, including architecture, operating system, and programming environment. Software design patterns and structuring for mobile applications. Network-centric mobile software development. Data persistence. Programming for mobile device components such as cameras, recorders, accelerometer, gyroscope and antennas. Location-aware software development. Pre: 2114. (3H,3C)

3724: INTRODUCTION TO HUMAN-COMPUTER INTERACTION
Survey of human-computer interaction concepts, theory, and practice. Basic components of human-computer interaction. Interdisciplinary underpinnings. Informed and critical evaluation of computer-based technology. User-oriented perspective, rather than system-oriented, with two thrusts: human (cognitive, social) and technological (input/output, interactions styles, devices). Design guidelines, evaluation methods, participatory design, communication between users and system developers. A grade of C or better required in CS prerequisite 2114. Pre: 2114. Co: 3744. (3H,3C)

3744: INTRO GUI PROGRAMMING/GRAPHICS
Design and implementation of object-oriented graphical user interfaces (GUI) and two-dimensional computer graphics systems. Implementation methodologies including callbacks, handlers, event listeners, design patterns, layout managers, and architectural models. Mathematical foundations of computer graphics applied to fundamental algorithms for clipping, scan conversion, affine and convex linear transformations, projections, viewing, structuring, and modeling. A grade of C or better is required in CS pre-requisite 2114. Pre: 2114, MATH 1224, MATH 1114. (3H,3C)

3824: INTRODUCTION TO COMPUTATIONAL BIOLOGY AND BIOINFORMATICS
Introduction to computational biology and bioinformatics (CBB) through hands-on learning experiences. Emphasis on problem solving in CBB. Breadth of topics covering structural bioinformatics; modeling and simulation of biological networks; computational sequence analysis; algorithms for reconstructing phylogenies; computational systems biology; and data mining algorithms. Pre-requisite: Grade of C or better in CS 3114. Pre: 3114. (3H,3C)

4004: DATA AND INFORMATION STRUCTURES
Formal underpinnings of computer science: logic, sets, relations as they apply to computer science. Principles of data structures, algorithm analysis, file management, databases. Not for CS major or minor credit; not for graduate credit in CSA program. Pre: 1704. (3H,3C)

4014: PRINCIPLES OF COMPUTER ARCHITECTURE AND OPERATING SYSTEMS
Principles of computer hardware organization and operating systems. From individual microprocessor hardware components to computer network architectures. Operating system principles, with emphasis on concurrency and synchronization, deadlock, memory, scheduling and performance. Not for CS major or minor credit; not for graduate credit in CSA program. Pre: 4004.(3H,3C) II.

4104: DATA AND ALGORITHM ANALYSIS
This course emphasizes the understanding of data structures and algorithms from an analytical perspective rather than from an implementation standpoint. The concepts developed allow discussion of the efficiency of an algorithm and the comparison of two or more algorithms with respect to space and run-time requirements. Analytical methods are used to describe theoretical bounds as well as practical ones. In general, this course addresses the constraints that affect problem solvability. A grade of C or better required in CS prerequisite 3114. Pre: 3114, (MATH 3034 or MATH 3134). (3H,3C)

4114: INTRODUCTION TO FORMAL LANGUAGES AND AUTOMATA THEORY
The course presents a study of formal languages and the correspondence between language classes and the automata that recognize them. Formal definitions of grammars and acceptors, deterministic and nondeterministic systems, grammar ambiguity, finite state and push-down automata, and normal forms will be discussed. Pre: MATH 3134 or MATH 3034. (3H,3C)

4124: THEORY OF COMPUTATION
Theoretical analysis of the computational process; fundamental concepts such as abstract programs, classes of computational machines and their equivalence, recursive function theory, unsolvable problems, Church's thesis, Kleene's theorem, program equivalence, and generability, acceptability, decidability will be covered. Pre: MATH 3134 or MATH 3034. (3H,3C)

4204: COMPUTER GRAPHICS
Hardware and software techniques for the display of graphical information. 2D and 3D geometry and transformations, clipping and windowing, software systems. Interactive graphics, shading, hidden surface elimination, perspective depth. Modeling and realism. A grade of C or better required in CS prerequisite 3114 and 3744. Pre: 3114, 3744. (3H,3C)

4214: SIMULATION AND MODELING
Overview of discrete-event digital computer simulation and modeling. Fundamentals of model development, Monte Carlo simulation, the life cycle of a simulation study, input and output data analysis, world views and time control, random number and variate generation, credibility assessment of simulation results, simulation languages, applications of simulation using the General Purpose Simulation System (GPSS). A grade of C or better required in CS prerequisite 2114. Pre: 2114. (3H,3C)

4224: PERFORMANCE EVALUATION OF COMPUTER SYSTEMS
Overview of techniques for measuring, improving, and tuning the performance of computer systems. Procurement, workload characterization, measurement principles, the representation of measurement data, software and hardware monitors, capacity planning, bottleneck detection, system and program tuning, simulation and analytic models and their applications, case studies. Pre: 3204, (STAT 4714 or STAT 4105 or STAT 4705). (3H,3C)

4234: PARALLEL COMPUTATION
Survey of parallel computer architectures, models of parallel computation, and interconnection networks. Parallel algorithm development and analysis. Programming paradigms and languages for parallel computation. Example applications. Performance measurement and evaluation. A grade of C or better required in CS prerequisite 3214. Pre: 3214. (3H,3C)

4244: INTERNET SOFTWARE DEVELOPMENT
Key technology underlying the World-Wide Web. Web architecture, including client and server design, network protocols, and related standards. Static and dynamic content, caching, state management, fault tolerance, error handling. Programming systems and abstractions, e.g., sockets, remote procedures, Web services, frameworks and component models. Document representations and processing. Security. Entrepreneurial issues and emerging technologies. A grade of C or better required in CS 3214 prerequisite. Pre: 3214. (3H,3C)

4254: COMPUTER NETWORK ARCHITECTURE AND PROGRAMMING
Introduction to computer network architecture, and methods for programming network services and applications (e.g. DNS, Email and MIME, http, SNMP, multimedia). Wired, wireless, and satellite network architectures. OSI protocol model, with an emphasis on upper layers. Congestion control, quality of service, routing. Internet protocol suite (e.g. IP, TCP, ARP, RARP). Server design (e.g. connectionless, concurrent). Network programming abstractions (e.g. XDR, remote procedure calls, sockets, DCOM). Case studies (e.g. TELNET). A grade of C or better required in CS prerequisite 3214. Pre: 3214. (3H,3C)

4284: SYSTEMS & NETWORKING CAPSTONE
Advanced topics in computer systems & networking, e.g. distributed and parallel processing, emerging architectures, novel systems management & networking design, fault-tolerance, and robust and secure data management. Team-based approach to solving open-ended computer systems & networking problems. Designing, implementing and documenting advanced computer/networking systems. A grade of C or better is required for pre requisites CS 3114 and CS 3214. Pre: 3114, 3214. (3H,3C)

4304: COMPILER DESIGN AND IMPLEMENTATION
This course includes the theory, the design, and the implementation of a large language translator system. Lexical analysis, syntactic analysis, code generation, and optimization are emphasized. A grade of C or better required in CS prerequisite 3214. Pre: 3214. (3H,3C)

4414 (MATH 4414): ISSUES IN SCIENTIFIC COMPUTING
Theory and techniques of modern computational mathematics, computing environments, computational linear algebra, optimization, approximation, parameter identification, finite difference and finite element methods and symbolic computation. Project-oriented course; modeling and analysis of physical systems using state-of-the-art software and packaged subroutines. Pre: MATH 2214, MATH 3214. (2H,3L,3C)

4504 (ECE 4504): COMPUTER ORGANIZATION
Information representation and transfer; instructions and data access methods; the control unit and microprogramming; memories; input/output and interrupts; secondary storage; the von Neumann SISD organization; high level language machines; the RISC concept; special purpose processors including operating system, file, text, floating point, communication, etc. Multicomputers; multiprocessors; concurrent processing support; Pipeline machines, processor arrays, database machines; the data flow/data directed approach; computer networks. A grade of C or better required in CS prerequisite 3214. Pre: 3214. (3H,3C)

4570 (ECE 4570): WIRELESS NETWORKS AND MOBILE SYSTEMS
Multidisciplinary, project-oriented design course that considers aspects of wireless and mobile systems including wireless networks and link protocols, mobile networking including support for the Internet Protocol suite, mobile middleware, and mobile applications. Students complete multiple experiments and design projects. Pre: 4254 or ECE 4564. (3H,3C)

4604: INTRODUCTION TO DATA BASE MANAGEMENT SYSTEMS
Emphasis on introduction of the basic data base models, corresponding logical and physical data structures, comparisons of models, logical data design, and data base usage. Terminology, historical evolution, relationships, implementation, data base personnel, future trends, applications, performance considerations, data integrity. Senior standing required. A grade of C or better required in CS prerequisite 3114. Pre: 3114. (3H,3C)

4624: MULTIMEDIA, HYPERTEXT AND INFORMATION ACCESS
Introduces the architectures, concepts, data, hardware, methods, models, software, standards, structures, technologies, and issues involved with: networked multimedia information and systems, hypertext and hypermedia, networked information videoconferencing, authoring/electronic publishing, and information access. Coverage includes how to capture, represent, link, store, compress, browse, search, retrieve, manipulate, interact with, synchronize, perform, and present: text, drawings, still images, animations, audio, video, and their combinations (including in digital libraries). Pre: 3114. (3H,3C)

4634: DESIGN OF INFORMATION
Survey of the higher-order properties that allow data to become information, that is, to inform people. The course focuses on the analysis of user needs, user comprehension and local semantics; the design of information organization; and the design of information display appropriate to use and setting. A grade of C or better is required in CS prerequisites 3114 and 3724. Pre: 3114, 3724. (3H,3C)

4644: CREATIVE COMPUTING STUDIO
Capstone computer science course at the intersection of arts and technology. Intensive immersion in different approaches to digital arts such as game design, interactive art, digital music, and immersive virtual reality. Students work in teams to conduct an end-to-end integrative design project. A grade of C or better is required for prerequisite CS 3724. Pre: 3724. (3H,3C)

4704: SOFTWARE ENGINEERING
Introduction to the basic principles of software engineering. Issues in the software life cycle. Emphasis on methods for software design and testing. Project management and quality assurance. Significant software project required. A grade of C or better required in CS prerequisite 3704. Pre: 3704. (2H,3L,3C)

4784: HUMAN-COMPUTER INTERACT CAPSTN
Advanced, project-based course in Human-Computer Interaction. Team-based, end-to-end, integrative interface design project drawn from area of expertise in the department, e.g., virtual reality, augmented reality, embodied cognition, visualization, semiotic engineering, game design, personal information management, mobile computing, design tools, educational technology, and digital democracy. Pre-requisite: Senior Standing required. A grade of C or better is required in CS pre-requisite 3724 and 3744 Pre: 3724, 3744. (3H,3C)

4804: INTRODUCTION TO ARTIFICIAL INTELLIGENCE
Overview of the areas of problem solving, game playing, and computer vision. Search trees and/or graphs, game trees, block world vision, syntactic pattern recognition, object matching, natural language, and robotics. Senior standing required. A grade of C or better required in CS prerequisite 3114. Pre: 3114. (3H,3C)

4884: COMP BIO & BIOINFO CAPSTONE
Advanced topics in computational biology and bioinformatics (CBB). Team-based approach to solving open-ended problems in CBB. Projects drawn from areas of expertise in the department, e.g., algorithms for CBB, computational models for biological systems, analysis of structure function relationships in biomolecules, genomic data analysis and data mining, computational genomics, systems biology. Design, implementation, documentation and presentation of solutions. A grade of C or better required in CS prerequisite 3824. Pre: 3824. (3H,3C)

4944: SEMINAR
Pass/Fail only. (1H,1C)

4964: FIELD STUDY
Pass/Fail only. Variable credit course.

4974: INDEPENDENT STUDY
Variable credit course.

4984: SPECIAL STUDY
Variable credit course.

4994: UNDERGRADUATE RESEARCH
Variable credit course.

TOP