# Department of Computer Science

## Course Descriptions

#### Undergraduate

##### Course Fees

In some computer science courses fees are assessed to cover the cost of materials, supplies, and tutorial support staff.

**COS 160 Structured Problem Solving: Java**

An introduction to the use of digital computers for problem solving, employing the Java programming language as a vehicle. Content includes elementary control structures and data representation methods provided by Java and the object-oriented programming methodology. Course requirements include a substantial number of programming projects. This course must be taken concurrently with COS 170. Offered each semester. Prerequisite: successful completion of the University's mathematics readiness requirement. Cr 3.

**COS 161 Algorithms in Programming**

The development of algorithms and their implementations in a higher-level programming language, with emphasis on proper design principles and advanced programming concepts. Introduction to the performance analysis of algorithms. Course requirements include a substantial number of programming projects. Offered each semester. Prerequisites: COS 160, and working knowledge of word processing and Web browsing. Cr 4.

**COS 170 Structured Programming Laboratory**

Computational experiments will be designed to teach students how to construct reliable software using Java. Topics to be covered include: Windows system, conditional program flow, iteration, procedures and functions, and symbolic debugging. This course must be taken concurrently with COS 160. Offered each semester. Cr 1.

**COS 184 Python Programming**A first introduction to computer programming for solving practical problems, taught in Python, a modern object-oriented, dynamic computer language. The course teaches how to represent aggregates of data, process data selectively and repetitively, structure programs with functions and use predefined libraries with an eye towards acquiring, managing, visualizing and performing basic analysis of sets of data. Lots of hands-on programming, both at home and in the lab. Prerequisites: MAT 108 or permission of the instructor. Cr 4.

**COS 200 Introduction to Cyber Security**An introduction to the fundamentals of cyber security and information assurance. Students will develop a knowledge base for defining and recognizing both online threats and potential targets. Students will develop intellectual tools for evaluating relative risks within cyberspace, and apply theories and best practices for addressing potential costs of countermeasures for cyber attacks. Prerequisites: COS 160/170 or ITT 181 or permission of instructor. Cr 3.

**COS 246 Programming** **Topics**

Topics to be covered may include programming languages not otherwise offered (e.g., Ada, Smalltalk), different programming methodologies (e.g., object-oriented programming), assembly languages, and other specific areas of programming. Prerequisite: COS 161 or permission of instructor. Cr 3.

**COS 250 Computer Organization**

The basic hardware, architecture, and software of computer systems are covered. Subjects include digital logic design, microprogramming, machine languages, assembly languages, and operating systems. Typically offered only in the spring semester. Prerequisite: COS 161. This course must be taken concurrently with COS 255. Cr 3.

**COS 255 Computer Organization Laboratory**

Students design, build, and test combinational and sequential logic circuits and write assembly language programs. Typically offered only in the spring semester. This course must be taken concurrently with COS 250. Cr 1.

**COS 280 Discrete Mathematics II**

Concepts of modern algebra, set theory, Boolean algebra and predicate logic, elements of graph theory, and their application to computer science. This course emphasizes a syntactic approach to proof discovery. Typically offered only in the fall semester. Prerequisites: MAT 145 and COS 160. Cr 4.

**COS 285 Data Structures**

Basic abstract data types and their representations, fundamental algorithms, and algorithm analysis. Consideration is given to applications. Specific topics include linked structures, trees, searching and sorting, priority queues, graphs, and hashing. Course requirements include a substantial programming component. Typically offered only in the fall semester. Prerequisites: COS 161 and either MAT 145 or MAT 152, or their equivalents. Cr 4.

**COS 350 Systems Programming**

A study of systems programming concepts and software, including the C programming language and the Unix programming environment and operating system interface. Students develop their abilities in these areas through programming exercises and projects. Typically offered only in the spring semester. Prerequisites: COS 250 and COS 285. Cr 3.

**COS 360 Programming Languages**

Students will acquire principles of programming languages and systems, such as (i) core notions (syntax, semantics, types, and implementation models), (ii) differing language paradigms (procedural, object-oriented, functional, logic), their design principles, and their implications for programming along with their mathematical foundations. These principles are studied as the basis for (i) applications in modeling and design of computer software, (ii) usage of modern techniques and tools associated with programming language. Typically offered only in the fall semester. Prerequisite: COS 285. Cr 3.

**COS 368 Graphical User Interface Design**

Principles of graphical user interface design are utilized to build working interfaces. The programming language used may vary. Possible languages include Java and C++. Students will work in an object-oriented, event-driven environment. Typically offered once every two years. Prerequisite: COS 285 or permission of instructor. Cr 3.

**COS 374 Numerical Analysis**

A study of the theory and application of computational algorithms for interpolation, equation solving, matrix methods, integration; error analysis. Typically offered once every two years. Prerequisites: MAT 252, MAT 295, COS 160, or permission of instructor. Cr 3.

**COS 375 Web Applications Development**

This course focuses on development of well-designed web applications. Students will learn how to build rich user interfaces using client-side frameworks, develop web services, and use design patterns in their software applications. Course requirements include a substantial number of programming projects. Prerequisites: COS 285, or permission of instructor. Cr 4.

**COS 389 Programming Autonomous Robots**

Introduction to the programming concepts involved with autonomous robotic systems. Using off-the-shelf "robot kits" students will design a simple robotic platform to meet specific goals. Then, using a common platform for the remainder of the course, students will develop their programming capabilities. Simple open-ended, feedback, and artificial intelligence systems will be explored throughout the course. Several benchmarks and robot competitions will be used to demonstrate the platform and programming learned in the course. Typically offered once every two years. Prerequisite: COS 285. Cr 3.

**COS 398 Professional Ethics and Social Impact of Computing**

A study of ethical perspectives and social responsibilities of computer professionals. Assigned readings provide the basis for class discussions of such issues as social control and privacy, computer viruses, ACM code of professional conduct, hacking, limits of correctness in computer software, military influence on computer science research and education. Typically offered only in the spring semester. Prerequisite: COS 161 or permission of instructor. Cr 3.

**COS 420 Object-Oriented Design**

This course will focus on the construction of object-oriented software. Students will learn conceptual models for organizing objects and object hierarchies, an object-oriented design notation, the application of design patterns, and the use of software development methodologies such as the Agile development process. The capabilities will be used to solve relatively complex problems in a group setting. Typically offered only in the spring semester. Prerequisite: COS 285. Cr 4.

**COS 444 Software Project Management**

This course covers project life cycle, including developing the charter, plans and justification, outsourcing and procurement decisions, scope management, time and cost estimation, quality control, personnel management, risk assessment, and the critical role of communication, both internal and external, to the project. Students will learn to lead and participate in significant software projects. Experienced professionals from industry will visit the class. Typically offered once every two years. Prerequisite: junior standing and some programming experience. Cr 3.

**COS 450 Operating Systems**

Bottom up construction of a layered operating system beginning with the hardware interface and ending with the user interface. Specific topics covered include concurrent processes, process management, I/O, virtual memory, file management, resource scheduling, and performance measurement. Students are assumed to be familiar with general machine architecture, functions of system software (compilers, loaders, editors, etc.), data structures, and have some experience with UNIX or other multiprogramming operating system. Typically offered once every two years. Prerequisites: COS 250 and COS 350. Cr 3.

**COS 452 Computer Graphics**

A study of the techniques involved in computer graphics systems. Topics include: point-plotting and line drawing in two- and three-dimensional space; clipping and windowing; geometric modeling; algorithmic solutions to the hidden line and hidden surface problems. Typically offered once every two years. Prerequisite: COS 285. Cr 4.

**COS 457 Database Systems**

Study of the methods and principles of database management systems (DBMS). Topics addressed include DBMS objectives and architecture, data models, the SQL data definition and data manipulation language, and providing Internet access to databases. The entity-relationship and relational models are emphasized and their use required in a design project. Typically offered once every two years. Prerequisites: COS 280 and COS 285. Cr 3.

**COS 460 Computer Networks**

An introduction to computer networks, computer network architecture is described. Other topics include digital data communication, local area networks, wide area networks, internetworks, and the Internet. Specific technologies, including Ethernet and ATM, and protocols, including TCP/IP, will be considered in detail. Typically offered once every two years. Prerequisite: COS 285. Cr 3.

**COS 465 Distributed Systems**

An introduction to the design and operation of distributed systems. Topics include client-server models, interprocess communications, RPC, replication and consistency, online transaction processing, error and fault recovery, encryption and security. Examples will be taken from extant distributed systems. Prerequisites: COS 450 and COS 460, or their equivalents, or permission of instructor. Cr 3.

**COS 469 Compiler Construction**

Definition of languages via context-free grammars. Organization of a compiler into phases of lexical analysis, parsing, code generation, and optimization. Students will implement a compiler for a Pascal-like language. Typically offered once every two years. Prerequisite: COS 360. Cr 3.

**COS 470 Topics in Computer Science**

Topics to be covered may include philosophy of computers, history of computers, computers and society, simulation, graphics, and other advanced topics. Prerequisite: COS 285 or permission of the instructor. Cr 3.

**COS 472 Artificial Intelligence and Data Mining**

An introduction to the underlying concepts and applications of intelligent systems. Topics include heuristic search techniques, pattern matching, rule-based systems, computer representations of knowledge, and machine learning and data mining techniques. Course work includes regular labs and large projects. Students will learn to conduct research in artificial intelligence and will complete a modest research project. Typically offered once every two years. Prerequisite: COS 285 or permission of instructor. Cr 3.

**COS 475 Machine Learning**The basic theory, algorithms, and applications of Machine Learning are covered in this course. Students will develop an understanding of learning theory, supervised and unsupervised learning algorithms, and reinforcement learning techniques. The course will also explore recent practical applications of machine learning. Prerequisite: COS 285 or a knowledge of basic computer science principles and skills, at a level sufficient to write a reasonably non-trivial computer program. Cr 4.

**COS 478 Advanced Java Technology**

The goal of this course is to provide an in-depth study of the most important and more advanced components of Java technology. The course covers topics such as concurrent object-oriented programming in Java, Java Core Reflection, the underlying virtual platform (the Java Virtual Machine), genericity (parametric polymorphism), persistence, and assertions. Programming assignments include concurrent programming, programming with parametric collection types, dynamic loading and compilation, usage of the Java reflective capabilities, and usage of persistent capabilities available in Java and in its extensions. The outcome of this course is a high-level of professional expertise in the overall Java technology. Typically offered once every two years. Prerequisite: COS 360. Cr 3.

**COS 485 Design and Analysis of Computing Algorithms**

An introduction to the design and analysis of algorithms. Techniques for designing algorithms, such as divide-and-conquer, greedy method, dynamic programming, and backtracking are emphasized and illustrated. Many problems of practical importance are covered including: minimum spanning tree, single source shortest path, traveling salesperson, and graph search. The concepts of NP-completeness are also considered. Substantial programming in a high-level language. Typically offered only in the spring semester. Prerequisite: COS 285. Cr 3.

**COS 495 Advanced Web Architectures**

The focus of communication over the Internet is shifting to computer-to-computer interaction. Standards for this interaction (ebXML, SOAP, WSFL) are now in place and maturing, and commercial use is exploding. Students will survey these standards and evaluate their security, efficiency, and completeness. Several case studies will be constructed, including Web-based commerce. As a team, students will acquire and learn how to use available tooling, put together working Web services, and test their ability to interact with each other. Typically offered once every two years. Prerequisites: COS 285 and junior standing. Cr 3.

**COS 497 Independent Study in Computer Science**

An opportunity for juniors and seniors who have demonstrated critical and analytical capability to pursue a project independently, charting a course and exploring an area of interest within their major field. At most, three credits of COS 497 can be used to satisfy degree requirements. Prerequisites: junior or senior standing and permission of the Department chair and instructor. Cr 1-3.

**COS 498 Computer Science Internship**

An opportunity for students to gain practical experience in computer science-related employment. The University's internship program provides placement. This course is offered on a pass/fail basis only, does not fulfill any computer science requirement, and a maximum of 6 credits may be taken. Cr 3.

#### Graduate (Back to top)

Graduate level computer science courses are generally restricted to graduate students who have successfully gone through an admissions procedure, but others may take them by permission from the instructor.

**COS 540 Computer Networks**

An introduction to computer networks, computer network architecture is described. Other topics include digital data communication, local area networks, wide area networks, internetworks, and the Internet. Specific technologies, including Ethernet and ATM, and protocols, including TCP/IP, will be considered in detail. Typically offered once every two years. Prerequisite: graduate standing. Cr 3.

**COS 542 Distributed Systems**

An introduction to the design and operation of distributed systems. Topics include client-server models, interprocess communications, RPC, replication and consistency, online transaction processing, error and fault recovery, encryption, and security. Examples will be taken from extant distributed systems. Students will design and implement a distributed system. Prerequisites: COS 450 and COS 460, or their equivalents, or permission of instructor. Cr 3.

**COS 544 Software Project Management**

The course covers project life cycle, including developing the charter, plans and justification, outsourcing and procurement decisions, scope management, time and cost estimation, quality control, personnel management, risk assessment, and the critical role of communication, both internal and external, to the project. Students will learn to lead and participate in significant software projects. Experienced professionals from industry will visit the class. Typically offered once every two years. Prerequisite: junior standing and some programming experience. Cr 3.

**COS 550 Operating Systems**

Topics include concurrent processes, process management, I/O, virtual memory, file management, resource scheduling and performance measurement. Prerequisite: graduate standing. Cr 3.

**COS 558 Database Systems**

Study of the methods and principles of database management systems (DBMS). Topics addressed include DBMS objectives and architecture, data models, data definition and manipulation languages (in particular, SQL) and providing internet access to databases. The entity-relationship and relational models are emphasized and their use required in a design project. Prerequisite: graduate standing. Cr 3.

**COS 569 Compiler Construction**

Definition of languages via context-free grammars. Organization of a compiler into phases of lexical analysis, parsing, code generation, and optimization. Students will implement a compiler for a Pascal-like language. Typically offered once every two years. Prerequisite: graduate standing. Cr 3.

**COS 570 Seminar: Advanced Topics in Computer Science**

Topics vary from year to year and will include current research, emerging technologies, and case studies. Cr 3.

**COS 571 Advanced Database Systems**

This course covers advanced, post-relational database systems such as object-oriented databases, XML database technologies, integration of different technologies such as LINQ, object oriented interfaces to XML and integration with the object-oriented technology. Object-oriented topics include developments from industrial standards such as ODMG and Java Data Objects, query languages such as OQL, Java database technology, object-relational systems and language integrated queries such as LINQ. Object-oriented interfaces to XML include DOM, LINQ to XML, LINQ to XSD, as well as other industrial developments. Requirements include object-oriented software and database development projects, and a term paper. Typically offered once every two years. Prerequisite: permission of instructor. Cr 3.

**COS 572 Artificial Intelligence and Data Mining**

An introduction to the underlying concepts and applications of intelligent systems. Topics include heuristic search techniques, pattern matching, rule-based systems, computer representations of knowledge, and machine learning and data mining techniques. Course work includes regular labs and large projects. Students will learn to conduct research in artificial intelligence and will complete a modest research project. Typically offered once every two years. Cr 3.

**COS 575 Machine Learning**The basic theory, algorithms, and applications of Machine Learning are covered in this course. Students will develop an understanding of learning theory, supervised and unsupervised learning algorithms, and reinforcement learning techniques. The course will also explore recent practical applications of machine learning. Prerequisite: knowledge of basic computer science principles and skills, at a level sufficient to write a reasonably non-trivial computer program. Cr 4.

**COS 576 Advanced Object-Oriented Design**

This course considers developing object-oriented, multi-tier, Web-based applications. Topics will include object-oriented design patterns in distributed environments, software components, and software frameworks. The course has a significant hands-on implementation component, and, after completing the course, students will have practical experience with several leading-edge distributed object technologies, including AJAX, Web Services, Enterprise JavaBeans, JDBC, and Servlets. Students will work in teams to develop a medium-sized, multi-tier application that incorporates several of the technologies mentioned above. Lectures will provide an introduction to the technologies and discuss principled ways to apply these technologies. Typically offered once every two years. Prerequisite: COS 420 or permission of instructor. Cr 4.

**COS 582 Design and Analysis of Computing Algorithms**Techniques for designing algorithms, such as divide-and-conquer, greedy method, dynamic programming, and backtracking are emphasized and illustrated. Many problems of practical importance are covered, including minimum spanning tree, single source shortest path, traveling salesperson, and graph search. The concepts of NP-completeness are also considered. Prerequisite: graduate standing. Cr 3.

**COS 595 Advanced Web Architectures**

The focus of communication over the Internet is shifting to "computer-to-computer" interaction. Standards for this interaction (ebXML, SOAP, WSFL) are now in place and maturing, and commercial use is exploding. Students will survey these standards and evaluate their security, efficiency, and completeness. Several case studies will be constructed, including Web-based commerce. As a team, students will acquire and learn how to use available tooling, put together working Web services, and test their ability to interact with each other. Typically offered once every two years. Prerequisite: graduate standing. Cr 3.

**COS 598 Internship**

Students apply their learning to a specific problem in a practical context under faculty and managerial supervision. See Departmental guidelines for more details. Prerequisites: full graduate standing and prior approval of proposal by the Department chair and instructor. Cr 1-3.

**COS 697 Independent Study**

An opportunity for graduate students to pursue areas not currently offered in the graduate curriculum. Cr 1-4.

**COS 696 Master's Project**

A 3-credit project that is one of two options for completing the Master's degree requirements. The project must be supervised by a committee and the project proposal approved in advance. Offered only as a pass/fail course. Prerequisites: full graduate standing and faculty approval. Cr 3.

**COS 698 Master's Thesis**

A 6-credit thesis that is one of two options for completing the Master's degree requirements. The thesis project must be supervised by a committee and the project proposal approved in advance. Offered only as a pass/fail course. Prerequisites: full graduate standing and faculty approval. Cr 6.