# 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 USM 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 substantial 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. Offered each semester. This course must be taken concurrently with COS 160. Cr 1.

**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, 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 from offering to offering. 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 instructor's permission. 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, and 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-sideframeworks, 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 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 in spring semester only. Prerequisite: junior or senior standing. Cr 3.

**COS 399 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 400 Introduction to Simulation Modeling**

Introduction to general principles of discrete event simulation modeling. Topics include design of simulation models, their implementation in a computer simulation language, and analysis of simulation data. Applications will emphasize computer and communication science. Requirements include a substantial programming component. Typically offered once every two years. Prerequisites: COS 285 and MAT 380 or equivalent. 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 once every two years. Prerequisite: COS 285. Cr 4.

**COS 444 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. Experts from industry will present case studies of success and failure. Typically offered once every two years. Prerequisite: COS 420. 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 to have some experience with UNIX or another multiprogramming operating system. Typically offered once every two years. Prerequisites: COS 250, 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, 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 the 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. Typically offered once every two years 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 larger 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 the more advanced components of the 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 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. We will survey these standards and evaluate their security, efficiency, and completeness. We will construct several case studies, including Web-based commerce. As a team, we will acquire and learn how to use available tooling, and we will 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 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. Normally offered once every two years. Prerequisite: graduate standing. Cr 3.

**COS 541 Software Architecture**

Successful design of complex software systems requires the ability to describe, evaluate and create systems at an architectural level of abstraction. This course introduces architectural design of complex software systems. The course considers commonly-used software system structures, techniques for designing and implementing these structures, models and formal notations for characterizing and reasoning about architectures, tools for generating specific instances of an architecture, and case studies of actual system architectures. It teaches the skills and background needed to evaluate the architectures of existing systems and to design new systems in principled ways using well-founded architectural paradigms. Prerequisite: COS 420 or an equivalent. 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 543 Distributed Systems: A Second Course**

A continuation of COS 465/542, the course covers advanced topics relating to distributed systems that are not addressed in the first course. Specific topics include shared data, managing file replication, currency control, distributed transactions, fault tolerance and security. Case studies of existing systems and examination of new developments are also addressed. Normally offered once every two years. Prerequisites: COS 465 or COS 542. Cr 3.

**COS 544 Software Project Management**

Students will learn how to lead and participate in significant software projects. The course will cover the project life cycle, including developing the charter, plans, and justification; outsourcing and other procurement decisions; management of scope, time, cost, quality, personnel, and risk; and the critical role of communications inside and outside the project. Experts from industry will present case studies of success and failure. Prerequisite: previous bachelor's degree, and COS 420 or an equivalent. 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 552 Advanced Computer Networks**

This second course in computer networks explores recent developments with particular emphasis on fiber optic high speed networks. A laboratory component involving performance evaluation of network protocols may be included. Prerequisite: MAT 380 and COS 460/540 or permission of instructor. 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 566 Simulation and Analytical Modeling**

The theoretical limitations of analytical modeling will be contrasted with the practical limitations of simulation. The BCMP family of analytical models will be presented along with the computational solutions of these models. The use of simulation will be discussed with regard to a high level language (such as SIM-SCRIPT). Such topics as model verification and evaluation of experimental results will be considered. 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. Normally offered once every two years. Prerequisite: graduate standing. Cr 3.

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

Topics vary from year to year. Will include current research, emerging technologies, case studies. Normally offered once every two years. 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. The course includes hands-on experience with advanced database management systems such as db4 and Objectivity, LINQ, and object-oriented interfaces to XML. The requirements include object-oriented software and database development projects, and a term paper. Normally offered once every two years. Prerequisite: Permission of the 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 larger 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 574 Advanced Computer Graphics**

Advanced computer graphics techniques are described and analyzed. Subjects considered include the projection of 3D objects to 2D, hierarchical object representation, representation of 3D curves and surfaces, illumination and shading, solid modeling, and advanced graphics hardware. Prerequisite: COS 452 or permission of instructor. 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: 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 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 also has a significant hands-on implementation component, and, after completing this course, students will have practical experience with several leading-edge distributed object technologies, including AJAX, Web Services, Enterprise JavaBeans, JDBC, and Servlets. The course is structured so that 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. Normally offered once every two years. Prerequisites: COS 420 or permission of instructor. Cr 4.

**COS 582 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. 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. We will survey these standards and critically evaluate their security, efficiency, and completeness. We will construct several case studies, including Web-based commerce. As a team we will acquire and learn how to use available tooling, and we will put together working Web services and test their ability to interact with each other. Normally 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 instructor and Department chair. 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 698 Master's Thesis**

A six-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.

**COS 699 Master's Project**

A three-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.

**ELE 517 Robot Modeling**

This course focuses on the concepts of kinematics, statics, and the dynamics of serial manipulators, as well as on the analysis and design of robotic structures. Students will conduct case studies of multiple platforms in the Robotics and Intelligence Systems Laboratory. This course complements ELE 418. Prerequisites: ELE 210, COS 160 or permission of instructor. (Lecture 3 hrs.) Cr 3.

**ELE 542 Digital VLSI Circuits and Design**

This course will examine the principles of internal circuit and layout design of digital VLSI circuits, with an emphasis on CMOS technology. Topics include NMOS and CMOS processes, device physics and SPICE models, logic circuits, electrical and physical design of logic gates, dynamic CMOS circuits, memory, chip layout principles, parasitics, and performance estimation. Simulation, layout, and electronic design automation tools are demonstrated and used. Prerequisites: ELE 172, ELE 342. (Lecture 3 hrs; Lab 1 hr.) Cr 3.

**ELE 544 Analog Integrated Circuits and Design**

This course will examine the principles of internal circuit operation and design of analog integrated circuits, with emphasis on CMOS technology. Topics include analog CMOS processes, devices and device models, bias and reference sources, differential and high gain amplifiers, OTAs and operational amplifiers, frequency response, feedback, stability, and internal compensation with emphasis on the design of CMOS operational amplifiers, power stages, and dc regulators. SPICE simulation, layout, and electronic design automation tools are demonstrated and used in homework assignments and design projects. Prerequisite: ELE 343 or permission. (Lecture 3 hrs; Lab 1 hr.) Cr 3.

**ELE 545 Special Topics in CMOS Integrated Circuit Design**

This course will cover special topics, such as, high performance operational amplifiers, silicon integrated sensors and sensor interface circuits, switched capacitor circuits, oscillators and integrated waveform generators, phase-locked-loop circuits, and memory, among others. Three chosen topics will be emphasized and students will conduct instructor-guided projects that will culminate with chip level design of these circuits. SPICE simulation verifications, layout, and electronic design automation tools will be used extensively. Prerequisite: ELE 442/542 or ELE 444/544. (Lecture 3 hrs; Lab 1 hr.) Cr 3.

**ELE 586 Digital Signal Processing**

This course will cover the basic principles of processing digital signals. Other concepts covered will include sampling and quantization, time and frequency domain representation, analysis of discrete-time signals and systems, FIR and IIR systems, digital filter design, review of classic analog filter design (Butterworth, Chebychev), quantization and finite-precision effects, and DSP hardware. Computers will be used to design and realize various signal processors. Prerequisites: ELE 314 and COS 160 or equivalent. (Lecture 3 hrs.) Cr 3.

**ELE 589 Digital Image Processing**

This course will focus on the theory and practice of digital processing of images by computer. Students will be introduced to two-dimensional signal processing theory, including sampling, transforms, and filters. Image acquisition and representation, enhancement methods, image coding, image analysis, and image processing hardware also will be covered. Prerequisites: ELE 314 and COS 160 or equivalent. (Lecture 3 hrs; Lab 1 hr.) Cr 3.