Department of Computer Science

Computer science is a relatively young but extremely rich and diverse discipline. At one end of the spectrum, computer science may be viewed as the formal study of what can be computed and what resources are required for computation. At the other end of the spectrum, computer science may be seen as the application of human resources, software, and, of course, computers to solve computational problems relating to society’s and individuals’ needs.

A well-trained computer scientist requires knowledge of both ends of this spectrum—and several points in between. The Computer Science program in the Department of Computer Science is intended to provide that broad background. Along with a strong theoretical component, the Computer Science program places special emphasis on the development of applied skills in design, implementation, and validation of computer systems. In our experience, industry and graduate programs alike value—above all—people who can solve real problems, and who come prepared to use the tools of their trade.

All students acquire a common background in the fundamental areas of computer science: computer systems, organization and architecture, algorithms and data structures, principles of software design, elements of the theory of computation, and operating systems. In addition, students obtain specialized backgrounds through the selection of five technical elective courses in computer science. Required and elective courses in the sciences and mathematics, along with additional courses in writing, humanities, social sciences, and the arts give students the opportunity to expand their horizons and to prepare for multidisciplinary careers.

There are very few areas in modern society untouched by computer science. Computer science is present in everything from healthcare, telecommunications, and entertainment, to transportation, education, and defense. The result of this diversity is that a computer scientist must be capable of working with people outside his or her field. In support of this, the Computer Science program provides its students with a well-rounded education requiring significant course work outside the Department of Computer Science, placing a strong emphasis on writing and communication skills.

Given the breadth and diversity of the computer science discipline, the Department of Computer Science also offers a Computer Systems Concentration within the BS in Computer Science program. The Computer Systems Concentration represents a sub-specialty that provides more emphasis on understanding and designing computer hardware. The student continues to learn the fundamental areas of computer science, including programming, data structures, discrete math, algorithms, formal languages, architecture, and operating systems. Unlike traditional computer science, however, the student also studies low-level circuit analysis and high-level system design, and has the option to take additional hardware-oriented courses. The result is a unique blend of computer science and computer engineering.

The Department of Computer Science also offers a Human-Centered Computing Concentration (HCC) within the BS in Computer Science program. The HCC concentration emphasizes the knowledge and skills needed to begin a professional practice in areas such as: user-interface design and development for desktop or mobile devices; computer graphics and animation for video games, movie special effects; and scientific, engineering, and medical visualization. The concentration continues to cover in depth the fundamental areas of computer science including programming, data structures, discrete mathematics, algorithms, formal languages, computer architecture, and operating systems. In addition the concentration focuses on key topics of human-centered computing practice such as user-interface design, computer graphics, visual media, and natural language processing.

The Department of Computer Science also offers a Software Engineering Concentration within the BS in Computer Science program. The Software Engineering Concentration emphasizes the knowledge and skills needed to begin a professional practice in software engineering. The concentration continues to cover in depth the fundamental areas of computer science, including programming, data structures, discrete mathematics, algorithms, formal languages, computer architecture, and operating systems. In addition, the concentration focuses on key topics of software engineering practice such as software cost estimation, large-scale software development, and risk management.

Courses

CS 100. Discovering Computer Science. 3 hours.

Fundamentals of computing; history of computation; computer organization; program design, testing and debugging; web design; computer animation; software tools; societal and legal issues in computing. Course Information: Credit is not given for CS 100 if the student has credit in either CS 101 or MCS 260. No graduation credit for students enrolled in a major offered by the Departments of Computer Science or Electrical and Computer Engineering. Extensive computer use required. Class Schedule Information: To be properly registered, students must enroll in one Laboratory and one Lecture-Discussion. Natural World - No Lab course.

CS 107. Introduction to Computing and Programming. 4 hours.

Access and use of computing resources. Programming and program design. Problem solving. Data types, control structures, modularity, information hiding. Course Information: Credit is not given for CS 107 if the student has credit for CS 102. Previously listed as EECS 171. Prerequisite(s): Credit or concurrent registration in MATH 180. Class Schedule Information: To be properly registered, students must enroll in one Laboratory and one Lecture.

CS 109. C/C ++ Programming for Engineers with MatLab. 3 hours.

Program design using C/C++: Data types and operators, control structures, functions, file I/O, arrays and structures. Engineering applications: Matrices, equation solution, MatLab. Programming assignments. Course Information: Credit is not given for CS 109 if the student has credit for CS 110. Extensive computer use required. Prerequisite(s): Credit or concurrent registration in MATH 180. Class Schedule Information: To be properly registered, students must enroll in one Laboratory-Discussion and one Lecture-Discussion.

CS 110. MATLAB Programming for Engineers. 1 hour.

Program design and problem solving using MATLAB. Numeric computation, control structures, vectors, matrices, file I/O, data analysis, visualization. Engineering applications; programming assignments. Course Imformation: Credit is not given for CS 110 if the student has credit for CS 109. Extensive computer use required. Meets 3 days each week for 5 weeks of the semester. Prerequisite(s): CS 107 or CS 111; or appropriate score on the department placement test.

CS 111. Program Design I. 3 hours.

Introduction to programming: control structures; variables and data types; problem decomposition and procedural programming; input and output; aggregate data structures including arrays; programming exercises. Course Information: 3 hours. Previously listed as CS 101. Extensive computer use required. Class Schedule Information: To be properly registered, students must enroll in one Laboratory and one Lecture-Discussion.

CS 141. Program Design II. 3 hours.

Data abstraction and modular design; recursion; lists and stacks; dynamic memory allocation; file manipulation; programming exercises. Course Information: 3 hours. Previously listed as CS 102. Extensive computer use required. Credit is not given for CS 141 if the student has credit for CS 102 or CS 107. Prerequisite(s): CS 109 or CS 111; and credit or concurrent registration in MATH 180. Class Schedule Information: To be properly registered, students must enroll in one Laboratory-Discussion and one Lecture-Discussion.

CS 151. Mathematical Foundations of Computing. 3 hours.

Discrete mathematics concepts fundamental to computing: propositional logic, predicates and quantifiers; proofs; sets; recursive definitions and induction; functions, relations and graphs; combinatorics and discrete probability; applications. Course Information: 3 hours. Credit is not given for CS 151 if the student has credit in MCS 361. Prerequisite(s): MATH 180; and Grade of C or better in CS 111. Class Schedule Information: To be properly registered, students must enroll in one Lecture and one Discussion.

CS 201. Data Structures and Discrete Mathematics I. 4 hours.

Lists, stacks, queues, sets, hash tables, introduction to trees and graphs. Algorithm correctness and complexity, inductive proofs, logic. Programming projects. Course Information: Previously listed as EECS 260. Credit is not given for CS 201 if the student has credit for MCS 261. Prerequisite(s): MATH 180; and grade of C or better in CS 102 or grade of C or better in CS 107.

CS 211. Programming Practicum. 2 hours.

Software development tools and practices; debugging and testing; advanced language features; standard libraries; code management. Course Information: 2 hours. Extensive computer use required. Prerequisite(s): Grade of C or better in CS 141; or Grade of C or better in CS 107. The option to use CS 107 as a prerequisite (in place of CS 141) is only for Computer Engineering majors or students doing a Computer Engineering minor. Class Schedule Information: To be properly registered, students must enroll in one Lecture-Discussion and one Laboratory-Discussion.

CS 251. Data Structures. 4 hours.

Design, usage and analysis of data structures: review of lists, stacks and queues; hash tables, priority queues, search trees, introduction to graphs; searching and sorting; runtime analysis; programming projects and lab exercises. Course Information: 4 hours. Credit is not given for CS 251 if the student has credit in CS 202. Prerequisite (s): CS 151 or CS 201; and credit or concurrent registration in CS 211. To be properly registered, students must enroll in one Lecture-Discussion and one Laboratory.

CS 261. Machine Organization. 3 hours.

Data representation and computer arithmetic; machine language; addressing; memory hierarchy; subroutines; data structures; processor architecture: hardwdare components, pipelining. Course Information: 3 hours. Credit is not given for CS 261 if the student has credit for CS 366 or ECE 267 or ECE 366. Extensive computer use required. Prerequisite(s): Credit or concurrent registration in CS 211. Class Schedule Information: To be properly registered, students must enroll in one Lecture-Discussion and one Laboratory.

CS 301. Languages and Automata. 3 hours.

Regular sets and finite automata. Context-free languages and push-down automata. Parsing. Computability theory including Turing machines and decidability. Course Information: Previously listed as EECS 361. Prerequisite(s): Grade of C or better in CS 151 or grade of C or better in CS 201; and credit or concurrent registration in CS 251. Class Schedule Information: To be properly registered, students must enroll in one Discussion/Recitation and one Lecture.

CS 341. Programming Language Design and Implementation. 3 hours.

Programming language paradigms, design and implementation: syntax and semantics; parsing; runtime systems; control; data types; subroutines and exceptions; data and procedural abstraction; functional programming. Course Information: Extensive computer use required. Prerequisite(s): CS 251 and CS 261; or approval of the department. Credit is not given for CS 341 if the student has credit in CS 473 or CS 476.

CS 342. Software Design. 3 hours.

Software design principles and practices: Object-oriented design; design patterns; software reuse; testing; event driven programming and concurrency; graphical user interface design and development; Team development. Course Information: Extensive computer use required. Credit is not given for CS 342 if the student has credit for CS 340. Prerequisite(s): CS 251.

CS 361. Systems Programming. 3 hours.

Study of computer systems emphasizing impact on application level programming. Virtual memory and memory management; code optimization; system-level I/O; concurrency: processes, threads, synchronization; introduction to network programming. Course Information: Extensive computer use required. Prerequisite(s): CS 251 and CS 261. Class Schedule Information: To be properly registered, students must enroll in one Lecture-Discussion and one Laboratory.

CS 362. Computer Design. 3 hours.

Computer hardware building blocks. logic gates; combinational circuits; arithmetic circuits; flip flops and sequential circuits; registers and memory; CPU design; I/O design. Course Information: 3 hours. Extensive computer use required. Credit is not given for CS 362 if the student has credit in CS 266 or ECE 265. Prerequisite(s): CS 261. Class Schedule Information: To be properly registered, students must enroll in one Lecture-Discussion and one Laboratory.

CS 377. Communication and Ethical Issues in Computing. 3 hours.

Communication skills for computing professionals: presentation organization, visual aides, delivery techniques, argument support. Ethical and societal issues in computing: privacy, intellectual property and ownership, crime. Course Information: 3 hours. Extensive computer use required. Credit is not given for CS 377 if the student has credit in CS 335 or CS 376. Prerequisite(s): CS 251. Class Schedule Information: To be properly registered, students must enroll in one Lecture-Discussion and one Laboratory-Discussion.

CS 398. Undergraduate Design/Research. 3 hours.

Design and/or research experience for undergraduate Computer Science majors under close supervision of a CS faculty member. Course Information: Previously listed as EECS 398. Prerequisite(s): Consent of the instructor.

CS 401. Computer Algorithms I. 3 or 4 hours.

Design and analysis of computer algorithms. Divide-and-conquer, dynamic programming, greedy method, backtracking. Algorithms for sorting, searching, graph computations, pattern matching, NP-complete problems. Course Information: Same as MCS 401. 3 undergraduate hours. 4 graduate hours. Prerequisite(s): Grade of C or better in MCS 360; or Grade of C or better in CS 202.

CS 411. Artificial Intelligence I. 3 or 4 hours.

Problem representation; rule-based problem-solving methods; heuristic search techniques. Application to expert systems, theorem proving, language understanding. Individual projects. Course Information: 3 undergraduate hours. 4 graduate hours. Prerequisite(s): CS 251.

CS 412. Introduction to Machine Learning. 3 or 4 hours.

Theory and implementation of systems that improve automatically based on past experience, including classification, density estimation, clustering, and online learning tasks and solutions. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. MATLAB will be used for some of the homework assignments, but prior experience with it is not required. Prerequisite(s): CS 251; and IE 342 or STAT 381; or consent of the instructor.

CS 415. Computer Vision I. 3 or 4 hours.

Computer vision system design. Segmentation and representation of regions and boundaries; image filtering; object recognition; advanced topics (examples: texture, stereo, color); applications. Programming assignments. Course Information: 3 undergraduate hours. 4 graduate hours. Previously listed as EECS 487. Prerequisite(s): CS 202 or MCS 360; or consent of the instructor.

CS 418. Introduction to Data Science. 3 or 4 hours.

Provides an in-depth overview of data science in engineering. Topics include modeling, storage, manipulation, integration, classification, analysis, visualization, information extraction, and big data in the engineering domain. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. Prerequisite(s): CS 251 and STAT 381; or IE 342 or ECE 341.

CS 421. Natural Language Processing. 3 or 4 hours.

Design of natural language processing systems; part-of speech tagging, statistical and symbolic parsers; semantic interpretation; discourse and dialogue processing; natural language generation; applications. Course Information: 3 undergraduate hours. 4 graduate hours. Prerequisite(s): CS 301 or MCS 441.

CS 422. User Interface Design and Programming. 3 or 4 hours.

User interface design, implementation, and evaluation: user-centered design methodologies, windowing systems, I/O devices and techniques, event-loop programming, user studies. Programming projects. Course Information: 3 undergraduate hours. 4 graduate hours. Prerequisite(s): CS 342.

CS 424. Visualization and Visual Analytics. 3 or 4 hours.

Geospatial visualization, scientific visualization, medical visualization, information visualization, and social network visualization, interaction, data analysis, human factors, dynamic data, privacy, uncertainty, data transforms. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. Prerequisite(s): CS 251; or graduate standing; or consent of the instructor.

CS 425. Computer Graphics I. 0-4 hours.

Principles of interactive computer graphics. Raster and vector display, techniques and hardware considerations. Introduction to two-dimensional and three dimensional rendering. Course Information: 3 undergraduate hours. 4 graduate hours. Previously listed as CS 488. Extensive computer use required. Prerequisite(s): CS 251. Class Schedule Information: To be properly registered, students must enroll in one Laboratory-Discussion and one Lecture-Discussion.

CS 426. Video Game Design and Development. 3 or 4 hours.

Theory and practice of video game design and programming. Students will form interdisciplinary teams, to design, build and demonstrate video games or related interactive simulation environments. Course Information: Same as DES 426. 3 undergraduate hours. 4 graduate hours. Prerequisite(s): CS 251 or consent of the instructor.

CS 440. Software Engineering I. 3 or 4 hours.

Software life-cycle model, requirement specification techniques, large-scale software design techniques and tools, implementation issues, testing and debugging techniques, software maintenance. Course Information: 3 undergraduate hours. 4 graduate hours. Previously listed as EECS 470. Prerequisite(s): CS 342.

CS 441. Engineering Distributed Objects For Cloud Computing. 3 or 4 hours.

Provides a broad but solid overview of engineering distributed object for cloud computing. Students will learn the theory and principles of engineering distributed objects for cloud environments. Programming assignments required. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. Prerequisite(s): Grade of C or better in CS 341 or Grade of C or better in CS 342; and Grade of C or better in CS 361.

CS 442. Software Engineering II. 3 or 4 hours.

Advanced concepts in software development: requirements engineering, cost estimation, risk analysis, extreme programming, regression test case selection, and design patterns. Software lab assignments required. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. Prerequisite(s): CS 440.

CS 450. Introduction to Networking. 3 or 4 hours.

Network protocols, algorithms, and software issues. Topics include the Open Systems Interconnect model, data link, network and transport layers, TCP/IP, ATM, mobile networks. Course Information: 3 undergraduate hours. 4 graduate hours. Credit is not given for CS 450 if the student has credit for ECE 433. Prerequisite(s): CS 361.

CS 455. Design and Implementation of Network Protocols. 3 or 4 hours.

Network protocols and their software, Examines OS network interface through network layers. Topics include routing, congestion control, fault tolerance, security, name servers, multicast, and performance. Course Information: 3 undergraduate hours. 4 graduate hours. Prerequisite(s): CS 340 and CS 450.

CS 461. Operating Systems Design and Implementation. 3 hours.

Kernel design and implementation; process management; effective management of machine resources: resource allocation and scheduling, mutual exclusion, deadlock avoidance, memory management policies, devices and file systems, and client-server systems. Course Information: Previously listed as CS 385. Extensive computer use required. Prerequisite(s): CS 361.

CS 466. Advanced Computer Architecture. 3 or 4 hours.

Design and analysis of high performance uniprocessors. Topics include arithmetic: multiplication, division, shifting; processor: pipelining, multiple function units. instruction sets; memory: caches, modules; virtual machines. Course Information: Same as ECE 466. 3 undergraduate hours. 4 graduate hours. Prerequisite(s): ECE 366 or CS 366.

CS 469. Hardware Description Language Modeling and Datapath Design. 0-5 hours.

This is a design lab-based course that will teach important aspects of an HDL such as VHDL, arithmetic circuits, datapath-and-controller design, and simple pipelined processor design. Course Information: 4 undergraduate hours. 5 graduate hours. Same as ECE 469. Prerequisite(s): CS 366 and ECE 465. Class Schedule Information: To be properly registered, students must enroll in one Lecture and one Discussion.

CS 473. Compiler Design. 3 or 4 hours.

Language translation: lexical analysis, parsing schemes, symbol table management, syntax and semantic error detection, and code generation. Development of fully-functional compiler. Course Information: Same as MCS 411. 3 undergraduate hours. 4 graduate hours. Prerequisite(s): Grade of C or better in CS 301 or Grade of C or better in MCS 441; and Grade of C or better in CS 251 or Grade of C or better in MCS 360; and Grade of C or better in CS 261.

CS 474. Object-Oriented Languages and Environments. 3 or 4 hours.

Data abstraction, classes and objects, messages and methods, polymorphism and dynamic binding, inheritance. Object-oriented design. Pure and hybrid object-oriented languages. Course Information: 3 undergraduate hours. 4 graduate hours. Previously listed as EECS 474. Prerequisite(s): CS 342.

CS 475. Object-Oriented Programming. 3 or 4 hours.

OO Paradigm: classes, messages, methods, variables, inheritance, polymorphism; the C++ and Java languages; programming labs required. Course Information: 3 undergraduate hours. 4 graduate hours. Credit is not given for CS 475 if the student has credit for CS 340 or CS 474. Extensive computer use required. Prerequisite(s): CS 202; and consent of the instructor.

CS 476. Programming Language Design. 3 or 4 hours.

Definition, design, and implementation of programming languages. Syntactic and semantic description; variable bindings, control and data structures, parsing, code generation, optimization; exception handling; data abstraction. Course Information: Same as MCS 415. 3 undergraduate hours. 4 graduate hours. Previously listed as EECS 476. Prerequisite(s): MCS 360; or CS 341.

CS 477. Public Policy, Legal, and Ethical Issues in Computing, Privacy, and Security. 3 or 4 hours.

Contemporary topics involving legal, public policy, and/or ethical issues in computing, especially privacy, security, and surveillance. Course Information: 3 undergraduate hours. 4 graduate hours. Prerequisite(s): Consent of the instructor.

CS 478. Software Development for Mobile Platforms. 3 or 4 hours.

Design and implementation of mobile applications; operating systems, object-oriented languages and programming environments for mobile platforms; integration with hardware components; and location-aware applications. Programming assignments required. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. Prerequisite(s): CS 342.

CS 480. Database Systems. 3 or 4 hours.

Database design, logical design, physical design. Relational databases. Recovery, concurrency control. Normalization. Course Information: 3 undergraduate hours. 4 graduate hours. Prerequisite(s): CS 251.

CS 485. Networked Operating Systems Programming. 4 or 5 hours.

Concepts, design, and programming of multi-process and distributed systems; inter-process communications; fault tolerance; distributed programming semantics. Programming assignments and project required. Course Information: 4 undergraduate hours. 5 graduate hours. Previously listed as EECS 471. Prerequisite(s): CS 385.

CS 486. Secure Operating System Design and Implementation. 3 or 4 hours.

Design of operating systems; operating system kernel implementation; secure coding and systems; virtual machines; extensive programming in a systems language such as C. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. Prerequisite(s): Credit or concurrent registration in CS 385; and credit or concurrent registration in CS 450 or consent of the instructor.

CS 487. Building Secure Computer Systems. 3 or 4 hours.

Building and programming secure systems; protecting systems from threats and reduction of vulnerabilities; Includes application, host and network security. Course Information: 3 undergraduate hours. 4 graduate hours. Extensive computer use required. Prerequisite(s): Grade of C or better in CS 385; and senior standing or above; or consent of the instructor.

CS 489. Human Augmentics. 3 or 4 hours.

Study of technologies for augmentation of human capabilities; human limitations; implants and wearable technologies; implants; brain-computer interfaces; exoskeletons; sensors and networks. Includes project work. Course Information: Extensive computer use required. Prerequisite(s): Senior standing or above; or consent of the instructor; or senior majoring in communications or psychology.

CS 491. Seminar. 1-4 hours.

Topics of mutual interest to a faculty member and a group of students. Offered as announced by department bulletin or the Timetable. Course Information: May be repeated. Previously listed as EECS 491. Prerequisite(s): Consent of the instructor.

CS 493. Special Problems. 2-4 hours.

Special problems or reading by special arrangement with the faculty. Course Information: Previously listed as EECS 493. No graduate credit for Computer Science majors. Prerequisite(s): Consent of the instructor.

CS 499. Professional Development Seminar. 0 hours.

Graduating seniors will be provided with information regarding future career paths and will provide information regarding the program to be used for assessment purposes. Students take the CS Major Field Exam as part of this course. Course Information: Satisfactory/Unsatisfactory grading only. Prerequisite(s): Open only to seniors; and approval of the department. Must be taken in the student's last semester of study.