Department of Computer Science
 

Computer Science Course Descriptions for Spring of 1998

CMPSCI 102: Computers and Society (R2)

Professor: Spinelli

There are three principal components to this course: 1) what computers are, 2) how they are used in society, and 3) how their use affects society. In the first part we explore the origin of computers and the historical, economic, and scientific forces that brought them into existence. We also study the essential hardware components that make up a computer and we learn the basic software methods of programming using the BASIC language. In the second part, usage of computers by business in the office and in factory automation, by the professions such as medicine, and by artists and scientists is covered; special attention is given to the advent of the Information Super Highway, how to use it and how it can benefit individual users. Finally the economic and socio-political impact that computers are having on society and on the individual are discussed; these issues range from questions of privacy to the impact of robots in the factory, to the use of computers in political action. The primary aim of the course is to impart sufficient computer literacy to enable the student to 1) write simple, but non-trivial programs, 2) make use of and benefit from available computer facilities, and 3) understand why computers have become such a powerful force in the modern society. CMPSCI majors and pre-majors may not pre-register. 3 credits.

CMPSCI 105: Computer Literacy (R2)

Professor: Verts

Microcomputers are now used widely not only in academia but in all areas of modern life. For this reason it's important that all students understand how computers work and how computers can be used as a problem-solving tool. The focus of this course is on computer applications. The course stresses the ways in which computers can help you solve problems efficiently and effectively. The course provides a broad introduction to hardware and software aspects of microcomputers. Then four application areas are discussed: word processing, spreadsheets, databases and telecommunications (access to the Internet). The course uses the university's microcomputer labs, and weekly 90 minute lab sessions are an integral part of the course. Students who are more interested in computer programming should take CMPSCI 121 or 187. Prerequisites: reasonable high school math skills. Typing ability is also an important asset for the course. Previous computer experience is not expected. CMPSCI majors and pre-majors may not pre-register. 3 credits.

CMPSCI 105C: Computer Literacy (R2)

Professor: Verts

CMPSCI 105V: Computer Literacy (R2)

Professor: Verts

CMPSCI 105X: Computer Literacy (R2)

Professor: Verts

CMPSCI 120: Introduction to Problem Solving with the Internet

Professor: Lehnert

The Internet is a goldmine of information and software resources for those who know how to plug into it and navigate it. Originally designed for computer scientists, the net is now open to the general public through educational computing accounts and commercial services. Unfortunately, much of the enabling technology associated with net navigation is still aimed at computer specialists. This course will provide non-CMPSCI majors with the basic skills needed to tap the net. We will cover basic UNIX commands, e-mail management, listserv software, Usenet newsgroups, ftp file transfers, telnet sessions, web browsers, basic web page design, strategies for finding things on the web, and PGP-based cryptography. In addition, we will survey key social and political topics that are relevant to the Internet, such as copyright laws, First Amendment issues, privacy in a digital world, and the culture of the Internet. Prerequisites: some hands-on experience with PCs or MACs or UNIX (programming experience is NOT required). CMPSCI majors and pre-majors may not pre-register. 3 credits.

CMPSCI 121: Introduction to Problem Solving with Computers (R2)

Professor: Moll

An introductory course in problem solving and computer programming using the programming language Pascal. The course focuses on the fundamental concepts of problem solving and the techniques associated with the development of algorithms and their implementation as computer programs. This course or its equivalent is required for all additional courses in CMPSCI. 3 hours of lecture/recitation per week. About 6 programming problems are assigned. In addition there are assigned homework problems, a mid-term exam and a final. No computer science prerequisite, although high school algebra and basic math skills (e.g. R1) are assumed. Use of computer is required. 3 credits.

CMPSCI 187: Programming with Data Structures (R2)

Professor: Utgoff, Singhai

The course introduces and develops methods for designing and implementing data structures. The main focus is on how to build and encapsulate data objects and their associated operations. Specific topics include pointer variables, linked structures, recursive structures and algorithms, binary trees, balanced trees, and hash tables. There will be weekly assignments, consisting of programming and written exercises. There will be one midterm, and a final exam. Prerequisites: CMPSCI 121 (or equivalent)and Basic Math Skills (R1). 4 credits.

CMPSCI 187D: Programming with Data Structures

Professor: Utgoff

CMPSCI 191L: Seminar - CMPSCI 121 for Non-majors

Professor: Moll

A serious but gentle introduction to programming. Can be thought of as CMPSCI 121 Lite. Does not satisfy R2. Students who wish to ADD 191L should attend the first class meeting of CMPSCI 121, Lect. 2 (Th: LGRT 323). 3.0 credits.

CMPSCI 192S: Seminar - Undergraduate Colloquium

Professor: Barrington

Presentations from a variety of computer science faculty, students, and staff, targeted to first-year and second-year undergraduates but open to all. Topics may include introductions to areas of research or any other topics of general interest. Registered students must attend at least eight of the ten sessions and write 1-2 page reaction papers on three of them. 1 credit (may be repeated for credit).

CMPSCI 197J: Programming in Java

Professor: Ridgway

Continuing Education course. 2 credits.

CMPSCI 201: Architecture and Assembly Language (E)

Professor: Graham

Lecture, lab. The architecture and machine-level operations of modern computers at the logic, component, and system levels: topics include binary and floating point arithmetic, logic gates, Boolean algebra, arithmetic units, control units, buses and direct memory access, memory, interrupts, input-output, caches, virtual memory, pipelining, and multiprocessor systems. Simple assembly language is used to explore how common computational tasks, such as procedure calls and parameter passing, are accomplished by a computer. Three hours of lecture per week, laboratory exercises, homework exercises, two midterm exams, and a final exam are required. Prerequisite: CMPSCI 187 or equivalent. 4 credits.

CMPSCI 250: Introduction to Computation (E)

Professor: Barrington

Lecture, discussion. Basic concepts of discrete mathematics useful to computer science, with the theory of regular languages and finite-state machines as the prime motivating example. The language of mathematics: Set theory, strings and formal languages, propositional and predicate calculus, relations and functions, basic number theory. Induction and recursion: Interplay of inductive definition, inductive proof, and recursive algorithms. Elementary combinatorics. Basic graph theory. Finite-state machines and regular languages: Myhill-Nerode Theorem, nondeterministic finite automata, Kleene's Theorem. Problem sets, 2-3 midterm exams, timed final. Corequisite: MATH 132/136 or equivalent. Prerequisite: CMPSCI 187 or equivalent. 4 credits.

CMPSCI 287: Programming Language Paradigms

Professor: Popplestone

Lecture, discussion, programming projects, lab. Programming Language Paradigms provide a basic philosophy to support the construction of reliable large-scale systems. This course discusses four such paradigms. In the functional paradigm software is constructed in such a way as to minimize the use of side-effects, thereby simplifying the conceptual structure of programs and making them easier to analyze and understand. The logic paradigm supports the development of software in which the concept of relation (for example a relation between people) is more important than the concept of function. In the imperative paradigm we are concerned with principled ways in which software that is state-dependent can be constructed. Finally, in the object-oriented paradigm we are concerned with combining data with code to create "objects" which exhibit behavior. Prerequisite: CMPSCI 187. Corequisites: CMPSCI 250 and MATH 132. 4 credits.

CMPSCI 311: Introduction to Algorithms

Professor: Sitaraman

This course will introduce you to algorithms in a variety of areas of interest, such as sorting, searching, string-processing, and graph algorithms. You will learn to study the performance of various algorithms within a formal, mathematical framework. There will be a few programming assignments as well to help you relate the empirical performance of an algorthim to theoretical predictions. Mathematical experience (as provided by CMPSCI 250) is required. You should also be able to program in Pascalor C (or some other closely related language). 4 credits.

CMPSCI 320: Introduction to Software Engineering

Professor: Clarke

In this course, students learn and gain practical experience with software engineering principles and techniques. The practical experience centers on a semester-long team project in which a software development project is carried through all the stagesof the software life cycle. Topics in this course include requirements analysis, specification, design, abstraction, programming style, testing, maintenance, and software project management. Particular emphasis is placed on designing and developing maintainable software and on the use of object-oriented techniques throughout the software lifecycle. Use of computer required. Two exams, several homeworks, major term project. Prerequisite: CMPSCI 287. 4 credits.

CMPSCI 377: Operating Systems

Professor: Lerner

In this course we examine the important issues in operating system design and implementation. The operating system provides a well-known, convenient, and efficient interface between user programs and the bare hardware of the computer on which they run. The operating system is responsible for allowing resources (e.g., disks, networks, and processors) to be shared, providing common services needed by many different programs (e.g., file service, the ability to start or stop processes, and access to the printer), and protecting individual programs from one another. The course will start with a brief historical perspective of the evolution of operating systems over the last fifty years, and then cover the major components of most operating systems. This discussion will cover the tradeoffs that can be made between performance and functionality during the design and implementation of an operating system. Particular emphasis will be given to three major OS subsystems: process management (processes, threads, CPU scheduling, synchronization, and deadlock), memory management (segmentation, paging, swapping), file systems, and operating system support for distributed systems. Assignments: 3 labs in C++, 3 exams, 6 or more written homeworks. Prerequisites: CMPSCI 187, CMPSCI 201. 4 credits.

CMPSCI 377X: Operating Systems

Professor:

CMPSCI 383: Artificial Intelligence

Professor: Zilberstein

Introduction to techniques for building intelligent machines: problem solving, state-space representation, heuristic search techniques, game playing, knowledge representation, logical reasoning, planning, reasoning under uncertainty, learning, expert systems, natural language processing, image understanding. Prerequisites: CMPSCI 250 and CMPSCI 287. 3 credits.

CMPSCI 391F: Seminar - HTML for Poets

Professor: Spinelli

An exploration of the Hyper Text Markup Language and its philosophical implications for Society at the threshold of the year 2000. Java Script will also be discussed. Students cannot receive credit for both this course and CMPSCI 591_ Seminar-HTML forPoets. May not be used as an elective for the CMPSCI minor. 3 credits.

CMPSCI 396A: Independent Study - Debugging and Consulting

Professor: Spinelli

In this course we teach students how to consult on topics involving E-mail, e.g., Pine or Goldmail or Mail; Operating Systems such as VMS and Unix; Editors such as LSE and Pico; one computer language: BASIC; and some elementary HTML. Necessary skills on how to debug Home Pages written in HTML and simple but non trivial programs written in BASIC are also acquired. Consultants are required to attend all weekly meetings [mandatory], consult with CMPSCI 102 students to review basic concepts and help debug programs [2 hrs minimum weekly at a terminal]. Consultants are also required to grade programming assignments [6 for each student]. In general each consultant will be responsible for no less than 6 students. May not be repeated for credit more thantwice. 3.0 credits.

CMPSCI 401: Formal Language Theory

Professor: Barrington

The mathematical classification of computational problems as solvable or unsolvable, and as easy or difficult. Review of finite state machines and regular languages. Introduction to context-free languages and pushdown automata. General models of computation, provably unsolvable problems. Resource-bounded computation, the classes P and NP, further topics in complexity theory such as interactive proofs. Problem sets, midterm, final, some group activities. Prerequisites: CMPSCI 250 and 311 or permission of instructor. 3 credits.

CMPSCI 405: Social Issues in Computing

Professor: Constantine

Designed to satisfy the Junior Year writing requirement, CMPSCI 405 introduces the student to technical writing and editing, scientific journalism and the social essay. The course combines practical, scientific writing as found in industry and businesswith explorative essays that focus attention upon the technological and humanistic concerns inherent in society. Ten written assignments-two longer papers, eight shorter ones and one oral presentation. 3 credits.

CMPSCI 445X: Information Systems

Professor:

CMPSCI 453: Computer Networks

Professor: Towsley

This course provides an introduction to fundamental concepts in the design and implementation of computer communication networks, their protocols, and applications. Topics to be covered include: layered network architectures, applications, network programming interfaces (e.g., sockets), transport, congestion, routing, and data link protocols, local area networks, emerging high-speed networks, network management, and network security. Examples will be drawn primarily from the Internet (e.g., TCP, UDP, and IP) protocol suite. There will be five written assignments, three programming assignments (in C), one midterm and a final exam. This course will be lectured to both graduate and undergraduate students. Students enrolled for graduate-level credit will be required to complete additional homework problems and additional readings from the literature. Prerequisites: A rudimentary understanding of computer architecture and operating systems, while not required, would be helpful. Text: Computer Networks, A. Tanenbaum, Prentice Hall, 3rd ed., 1996. Copies of the instructors class notes will be available at Collective Copies (downtown Amherst) and are highly recommended. 3 credits.

CMPSCI 520X: Software Engineering

Professor:

CMPSCI 521: Advanced Software Engineering

Professor: Adrion

Modern software engineering is concerned with issues related to the specification, design, development, production and maintenance of software products and processes. The high-level goals of software engineering are to: improve productivity; reduce resources (e.g., time, cost, personnel); improve predictability; improve maintainability; improve quality and insure safety, robustness and reliability. This course goes beyond the typical course on testing of programs and modules, extending the scope to include analysis of all software products across the lifecycle and of software processes. Topics Include: We begin with the theoretical foundations of static and dynamic analysis, software models (AST's, CFG's, Call Graphs), and the concept of conservative analysis. We discuss a number of methods for static analysis, including: reviews and inspections; specification and verification (predicate calculus specifications, proof of correctness, axiomatic specification techniques, and trace specifications); symbolic execution; control and data flow analysis; intra- and inter-procedural analysis; and software metrics. Dynamic analysis techniques and issues studied include: assertions; error seeding; mutation testing; coverage criteria; data flow coverage; dependency analysis; fault-based testing; specification-based testing; and reliability models. Following the introduction and overview of general analysis methods, techniques and strategies, the course focuses on domain-specific areas of analysis. Concurrent and real-time systems raise issues related to: concurrency analysis; liveness and safety; Petri nets; reachability graphs; data flow analysis; model checking; and constraint expressions. Software safety stresses the difference in analyzing safety requirements as contrasted with analyzing reliability. We discuss the need for analysis to support maintenance, reuse and re-engineering. The course concludes with a study of software architecture. CMPSCI 521(591G)/621(691G) is a companion to CMPSCI 520/620 Software Engineering, which examines methodologies, formalisms and processes for describing and synthesizing software systems. Each course may be taken independently, but together the courses cover the broad set of topics that form the basisof modern software engineering. The courses are appropriate for anyone that intends to participate in or manage the design, development, maintenance and/or evolution of high-quality and reliable software systems. Requirements: Students will be required to carry out an individual or group project that applies advanced techniques and methods in some depth or which extends existing or synthesizes new techniques and methods. Course Requirements: Course packet, access to PC workstation, mainframe, internet. Prerequisites: For CMPSCI 521(591G): CMPSCI 320 (or equivalent course). For CMPSCI 621(691G): graduate status or consent of the instructor. 3 credits.

CMPSCI 521X: Advanced Software Engineering

Professor:

CMPSCI 530: Programming Languages

Professor: Wileden

This course uses a detailed examination of the Java programming language as a basis for studying fundamental principles underlying the design and implementation of modern programming languages. We address a wide range of programming language concepts and issues from both a practical and a theoretical perspective. Some attention is given to such traditional topics as control constructs, type systems and type checking, since these are the foundations for all subsequent developments. The bulk of the course, however, is devoted to more contemporary language features such as object orientation, modularity, polymorphism and concurrency. Our study of both traditional topics and contemporary features is driven by first exploring their realization in Java,then comparing and contrasting with the realizations found in other modern languages such as C++, Ada 95, CLOS, ML and Modula-3. In addition, we consider some emerging concepts and directions for programming languages such as orthogonal persistence, reflection, interoperability and open implementation. While the predominant paradigm for contemporary programming languages -- the imperative, object-oriented paradigm -- is our primary focus, other paradigms such as the functional and logic programming paradigms are also discussed. Homework problems, programming exercises and projects reinforce the material covered in lectures and readings. Prerequisites: CMPSCI 287, 320 and 377. Corequisite: CMPSCI 401. Honors module when requested. 3 credits.

CMPSCI 530X: Programming Languages

Professor:

CMPSCI 551: Three-Dimensional Animation and Digital Editing

Professor: Woolf

This seminar is dedicated to the production of high quality computer animation using 3-dimensional graphics technology. Activities include using design, modeling, rendering, surfaces, textures and lighting to make 3-dimensional objects. Techniques to bend and twist shapes around objects and trace over images including digitized pictures are also explored. Digital editing, sound and music are used to make animated sequences. The course is directed at group production of an informative and approachable video of a ten minute 3-dimensional animated piece. Students first develop individual 3-dimensional assignments and then work together in structured teams to create a high quality publishable animated piece. Prerequisite: No specific experience is required, but students must be able to master new technology quickly. Admission to the course is based on performance on the initial assignment, during the first two weeks. Permission of the instructor required: contact Beverly Woolf, 545-4265. 3 credits.

CMPSCI 551: Supplement to CMPSCI 591K

Professor: Woolf

Supplement to CMPSCI 591K Three-Dimensional Animation and Digital Editing. Students will complete five independent projects and one group project, and will be evaluated based on the quality of animations and participation in the final project. 1 credit.

CMPSCI 552: Interactive Multimedia Production

Professor: Woolf

This course develops high quality interactive multimedia systems which are responsive to a user's actions. Both theoretic issues and current capabilities of interactive multimedia are discussed. A programming language within a professional multimedia package is used to define and manipulate graphics, animations, text, sound and music according to the student's storyboards. Students develop six interactive animated projects and submit them on their Web pages. Knowledge of 2 and 3-dimensional modeling, rendering, animation and Internet programming are assumed. Prerequisite: CMPSCI 591_ Seminar - 3-Dimensional Animation and Digital Editing. Permission of the instructor required: contact Beverly Woolf 545-4265. 3 credits.

CMPSCI 571: Knowledge-Based Computer Vision

Professor: Hanson, Riseman

Building computer systems that can interpret visual information. The construction of computer models which describe the physical world depicted in an image. The basic components required to build vision systems and their possible organizations into functioning systems. The use of general world and domain specific knowledge in image understanding applications. Mathematical and algorithmic techniques to describe images in terms of extracted features which can be related to knowledge structures. The knowledge structures and the control mechanisms necessary to build the interpretation. Prerequisite: CMPSCI 570 Introduction to computer vision course, introduction to AI. The graduate version; CMPSCI 671(691J) has greater homework requirements. 3 credits.

CMPSCI 589: Machine Learning

Professor: Barto, Utgoff

This course introduces methods that permit machines to learn. These methods make it possible to build programs that acquire the ability to perform tasks of interest. Such approaches are already displacing explicit programming as a software engineering discipline. The course starts with fundamental notions of capturing and exploiting regularity. A variety of single-step prediction methods are presented, including decision tree induction, cover generation, candidate elimination, Bayesian learning, least-mean-squares fitting, instance-based learning, neural networks, and inductive logic programming. Computational learning theory and learnability are introduced. Then the course introduces multi-step methods and their application to problem solving tasks. A variety of multi-step prediction methods are presented, including reinforcement learning, apprentice learning, condition-action rule learning, macro learning, and explanation-based learning. Required work consists of readings from the text and theliterature, written homeworks and programs, and a final exam. Prerequisite: CMPSCI 383. The graduate version; CMPSCI 689 has greater homework requirements. 3 credits.

CMPSCI 591I: Seminar - Theoretical Foundations of Programming Languages and their Practical Realisation

Professor: Popplestone

To study and comprehend the basic theoretical ideas underlying the design of programming languages, particularly with respect to the functional paradigm. To design a functional programming language with the following features: (a) The main target machine is the Java Virtual Machine. (b) A type-system that supports type-union in a natural way. Ideally, this will embody an extension of Hindley-Milner type inference to handle non-disjoint types. (c) Following Milner, to incorporate a -theorem- datatype in the language whose only members are valid statements about expressions of the language. (d) Extensive use of name-value mappings to implement module capabilities more powerful than those of SML using no additional encapsulation mechanism other than the basic closure mechanism. To exhibit a prototype implementation of the language within the JVM. 3 credits.

CMPSCI 596A: Independent Study - TA for CMPSCI 591K 3D Animation

Professor: Woolf

Description not on file. 3 credits.

CMPSCI 601: Computation Theory

Professor: Immerman

An in-depth introduction to the main models and concepts of the mathematical theory of computation, including: Computability: What problems can be solved in principle? How might you prove that a problem can't be solved? Complexity: What problems can be solved within given resource constraints? How do constraints on different resources (e.g., time, space, or parallel time) relate? Logic: What are the best ways to formally specify a problem, and how do these specifications relate to the difficulty of the problem? Text: Papadimitriou, "Computational Complexity". Prerequisites: Undergraduate-level courses in discrete mathematics (e.g., CMPSCI 250) and analysis of algorithms (e.g., CMPSCI 311 or better yet 611), plus additional mathematical maturity (e.g., CMPSCI 611, A's in 250 or 311, or other mathematical background). Previous background in formal languages (e.g., CMPSCI 401) useful but not required -- students with none may wish to consult Lewis and Papadimitriou, "Elements of the Theory of Computation", or Hopcroft and Ullman, "Introduction to Automata Theory, Languages, and Computation". Course requirements: about six problem sets, timed midterm and final. Also open to qualified undergraduates. 3 credits.

CMPSCI 601X: Computation Theory

Professor:

CMPSCI 603: Robotics

Professor: Grupen

This course is concerned with the design and analysis of adaptive, closed-loop physical systems. The focus will be sensorimotor machines that interpret and manipulate their environments. Techniques for modifying the dynamics of the closed-loop systemin response to cumulative information to achieve goal oriented behavior will be presented. Toward this end, we will study mechanisms (kinematics and dynamics), actuators, sensors, (with a focus on machine vision), optimal estimators, connectionist approaches to pattern recognition, feedback control theory, reinforcement learning, task level planning, and we will conclude with a discussion of system architectures for organizing behavior. Wherever possible, we will relate these techniques to biologicalsystems. 3 credits.

CMPSCI 603X: Robotics

Professor:

CMPSCI 621: Advanced Software Engineering

Professor: Adrion

Modern software engineering is concerned with issues related to the specification, design, development, production and maintenance of software products and processes. The high-level goals of software engineering are to: improve productivity; reduce resources (e.g., time, cost, personnel); improve predictability; improve maintainability; improve quality and insure safety, robustness and reliability. This course goes beyond the typical course on testing of programs and modules, extending the scope to include analysis of all software products across the lifecycle and of software processes. Topics Include: We begin with the theoretical foundations of static and dynamic analysis, software models (AST's, CFG's, Call Graphs), and the concept of conservative analysis. We discuss a number of methods for static analysis, including: reviews and inspections; specification and verification (predicate calculus specifications, proof of correctness, axiomatic specification techniques, and trace specifications); symbolic execution; control and data flow analysis; intra- and inter-procedural analysis; and software metrics. Dynamic analysis techniques and issues studied include: assertions; error seeding; mutation testing; coverage criteria; data flow coverage; dependency analysis; fault-based testing; specification-based testing; and reliability models. Following the introduction and overview of general analysis methods, techniques and strategies, the course focuses on domain-specific areas of analysis. Concurrent and real-time systems raise issues related to: concurrency analysis; liveness and safety; Petri nets; reachability graphs; data flow analysis; model checking; and constraint expressions. Software safety stresses the difference in analyzing safety requirements as contrasted with analyzing reliability. We discuss the need for analysis to support maintenance, reuse and re-engineering. The course concludes with a study of software architecture. CMPSCI 521(591G)/621(691G) is a companion to CMPSCI 520/620 Software Engineering, which examines methodologies, formalisms and processes for describing and synthesizing software systems. Each course may be taken independently, but together the courses cover the broad set of topics that form the basisof modern software engineering. The courses are appropriate for anyone that intends to participate in or manage the design, development, maintenance and/or evolution of high-quality and reliable software systems. Requirements: Students will be required to carry out an individual or group project that applies advanced techniques and methods in some depth or which extends existing or synthesizes new techniques and methods. Course Requirements: Course packet, access to PC workstation, mainframe, internet. Prerequisites: For CMPSCI 521(591G): CMPSCI 320 (or equivalent course). For CMPSCI 621(691G): graduate status or consent of the instructor. 3 credits.

CMPSCI 621X: Advanced Software Engineering

Professor:

CMPSCI 630: Programming Languages

Professor: Wileden

This course uses a detailed examination of the Java programming language as a basis for studying fundamental principles underlying the design and implementation of modern programming languages. We address a wide range of programming language concepts and issues from both a practical and a theoretical perspective. Some attention is given to such traditional topics as control constructs, type systems and type checking, since these are the foundations for all subsequent developments. The bulk of the course, however, is devoted to more contemporary language features such as object orientation, modularity, polymorphism and concurrency. Our study of both traditional topics and contemporary features is driven by first exploring their realization in Java,then comparing and contrasting with the realizations found in other modern languages such as C++, Ada 95, CLOS, ML and Modula-3. In addition, we consider some emerging concepts and directions for programming languages such as orthogonal persistence, reflection, interoperability and open implementation. While the predominant paradigm for contemporary programming languages -- the imperative, object-oriented paradigm -- is our primary focus, other paradigms such as the functional and logic programming paradigms are also discussed. Homework problems, programming exercises and projects reinforce the material covered in lectures and readings. Prerequisites: Graduate standing or permission of instructor. 3 credits.

CMPSCI 630X: Programming Languages

Professor:

CMPSCI 635: Modern Computer Architecture

Professor: Weems

This course will examine modern high performance computer architectures, including superscalar, superpipeline, multithreaded, vector, data parallel, control parallel, and heterogeneous systems. The performance, economic, and design considerations leading to each of the architectural approaches will be examined together with the implications for software support of the architectures (both language and OS issues). Prerequisites: CMPSCI 402 and CMPSCI 535. [This course will be renumbered as CMPSCI 635 in the new curriculum.] 3 credits.

CMPSCI 635X: Modern Computer Architecture

Professor:

CMPSCI 646: Information Retrieval

Professor: Callan, Croft

The course will cover basic and advanced techniques for text-based information systems. Topics covered include retrieval models, indexing and text representation, browsing and query formulation, routing, distributed information retrieval, and integration with database systems. The course will include implementation of major elements of an information retrieval system. Prerequisite: CMPSCI 545 or equivalent. 3 credits.

CMPSCI 650X: Empirical Methods for Computer Science

Professor:

CMPSCI 653: Computer Networking

Professor: Towsley

This course provides an introduction to fundamental concepts in the design and implementation of computer communication networks, their protocols, and applications. Topics to be covered include: layered network architectures, applications, network programming interfaces (e.g., sockets), transport, congestion, routing, and data link protocols, local area networks, emerging high-speed networks, network management, and network security. Examples will be drawn primarily from the Internet (e.g., TCP, UDP, and IP) protocol suite. There will be five written assignments, three programming assignments (in C), one midterm and a final exam. This course will be lectured to both graduate and undergraduate students. Students enrolled for graduate-level credit will be required to complete additional homework problems and additional readings from the literature. Prerequisites: A rudimentary understanding of computer architecture and operating systems, while not required, would be helpful. Text: Computer Networks, A. Tanenbaum, Prentice Hall, 3rd ed., 1996. Copies of the instructors class notes will be available at Collective Copies (downtown Amherst) and are highly recommended. 3 credits.

CMPSCI 653X: Computer Networking

Professor:

CMPSCI 671: Knowledge-Based Computer Vision

Professor: Hanson, Riseman

Building computer systems that can interpret visual information. The construction of computer models which describe the physical world depicted in an image. The basic components required to build vision systems and their possible organizations into functioning systems. The use of general world and domain specific knowledge in image understanding applications. Mathematical and algorithmic techniques to describe images in terms of extracted features which can be related to knowledge structures. The knowledge structures and the control mechanisms necessary to build the interpretation. Prerequisite: CMPSCI 570 Introduction to computer vision course, introduction to AI. 3 credits.

CMPSCI 677: Operating Systems

Professor: Ramamritham

This course provides an in-depth examination of principles of distributed operating systems. Covered topics include processes and threads, concurrent programming, distributed interprocess communication, distributed process scheduling, shared virtual memory, distributed file systems. An introduction to performance evaluation and networking might also be included. In-depth examples will be taken from current operating systems such as UNIX and MACH. Some coverage of operating system principles for multiprocessors will also be covered. Prerequisites: The student should be able to easily program in a high-level language such as C, have had a course on data structures, be familiar with linkers, loaders, and compilers, elements of computer architectureand have had previous exposure to the operating system concepts of processes, virtual memory, and scheduling. An understanding of elementary probability theory is also assumed. A previous course on uniprocessor operating systems (e.g., CMPSCI 377) will be helpful but not required. 3 credits.

CMPSCI 677X: Operating Systems

Professor:

CMPSCI 681: Multi-Agent Problem Solving

Professor: Lesser

The next generation of complex computer systems will involve large collections of intelligent, heterogeneous agents (both man and machine) working cooperatively and competitively over wide-area distributed processing networks. These networks will be highly reliable in face of incomplete and possibly inconsistent information and processor failure, operate in a satisficing mode in which they do the best with available information, negotiate among themselves to resolve differences, exploit organizational structuring when there are large numbers of agents, and reorganize themselves both on a short-term and long-term based on the capabilities of the evolving agent set and environment. This course will focus on the intellectual ideas and techniques, both heuristic and formal, involved in building such systems, and the agents that populate them. It will also discuss a number of specific applications systems in the areas of distributed situation assessment, distributed planning and resource allocation, cooperative information gathering, concurrent design, electronic commerce etc. that provide concrete examples. The underlying software architecture that supports the building of such system will also be analyzed. 3 credits.

CMPSCI 683X: Artificial Intelligence

Professor:

CMPSCI 684: Case-Based Reasoning

Professor: Rissland

Case-based reasoning is a technique to solve new problems by reusing solutions to previously solved, similar problems. For instance, new situations can be classified or interpreted by considering the way in which similar, previous ones were; new design problems can be solved by adapting existing ones. In this course, we will study the key ingredients of CBR: the case-base, indexing and retrieval from the case-base, case analysis and comparison, adaptation and interpretation, explanation, and learning.In addition to studying several classic CBR systems, we will explore state-of-the-art research and applications, such as the use of CBR to enhance standard information retrieval. We will also study the use of CBR in concert with other reasoning techniques (e.g., rule-based reasoning). Based on the interests of class members, we will delve further into a few selected areas, such as, CBR as a cognitive model, the relation of CBR to topics in machine learning, CBR and argumentation by analogy, and the use of CBR in the problem of information extraction. The course will use the text Case-Based Reasoning by Kolodner, and the new collection of papers Case-Based Reasoning: Research and Development published by Springer. Prerequisites: CMPSCI 383 or CMPSCI 683. For graduates or advanced undergraduate students. 3 credits.

CMPSCI 689: Machine Learning

Professor: Barto, Utgoff

This course introduces methods that permit machines to learn. These methods make it possible to build programs that acquire the ability to perform tasks of interest. Such approaches are already displacing explicit programming as a software engineering discipline. The course starts with fundamental notions of capturing and exploiting regularity. A variety of single-step prediction methods are presented, including decision tree induction, cover generation, candidate elimination, Bayesian learning, least-mean-squares fitting, instance-based learning, neural networks, and inductive logic programming. Computational learning theory and learnability are introduced. Then the course introduces multi-step methods and their application to problem solving tasks. A variety of multi-step prediction methods are presented, including reinforcement learning, apprentice learning, condition-action rule learning, macro learning, and explanation-based learning. Required work consists of readings from the text and theliterature, written homeworks and programs, and a final exam. Prerequisite: CMPSCI 383. The homework requirements are greater than those of CMPSCI 589. 3 credits.

CMPSCI 691O: Seminar - User Modeling

Professor: Woolf, Eliot

This seminar focuses on techniques that allow computer programs to develop and maintain representations of properties of individual users, and to use these properties to customize the interactions with each user. The techniques for user modeling that we will study include overlay models, model tracing, Bayesian networks, and machine learning. This seminar will focus on applying user modeling techniques to the area of intelligent tutoring systems; however, they can also be applied to other domains such as information retrieval and natural language systems. Students will read and critique source documents, present an analysis of approximately six papers to the class, and develop a final project which provides a detailed specification for a novel usermodel. Prerequisites: CMPSCI 383 Artificial Intelligence (required) and 691_ Explanatory and Intelligent Tutors (helpful). 3 credits.

CMPSCI 691T: Seminar - Cyberlaw

Professor: Rissland

Cyberlaw the law of computers is an area of exploding interest and emerging legal problems. In this seminar, we will explore several selected topics in this fast-moving area. We will begin with discussion of selected topics in constitutional law concerning the First Amendment (e.g., free speech) and the Fourth Amendment (e.g., warrantless search and seizure). Next, we will sample some of the on-going controversies in the area of intellectual property law, including the problem of applying traditional copyright and patent law to software. We will also explore the current debate on cryptography. Each topic will involve reading of primary sources, such as appellate case opinions, as well as commentaries on them, such as articles from the computer science, legal, and popular media. Each seminar participant will be responsible for working up one topic in depth for presentation and discussion by the seminar. This seminar will be interdisciplinary in nature and will include students from both computer science and legal studies. We will enlist the expertise of participants in their home disciplines to inform our discussions. For instance, a participant well-versed in the area of computer networks might discuss problems of security and privacy in thecontext of a networked environment, or a participant well-versed in constitutional law might discuss the broad doctrines of current First Amendment law and their relevance in the context of the internet. The seminar will be led by Professor Edwina Rissland, from Computer Science, and Professor Ethan Katsh, from Legal Studies. Permission of the instructors is required. For graduate students or advanced undergraduates. 3 credits.

CMPSCI 691X: Performance Evaluation

Professor:

CMPSCI 711: Parallel Algorithms and Architectures

Professor: Rosenberg

A study of parallel algorithms and architectures, emphasizing theoretical formulations and developments. Two classes of algorithmic problems will be studied. In the realm of "application-oriented algorithms", the development will flow from idealized shared-memory algorithmic paradigms that ignore communication costs, to distributed-memory emulations of shared memory, to distributed-memory algorithmic paradigms. Concepts will be illustrated via important applications such as sorting. In the realm of"systems-oriented algorithms", discussions will center on problems such as task scheduling, load balancing, message routing, and latency hiding. Sources will include research and survey articles, and Leighton's recent book. Each student will take detailed lecture notes on some topic, for distribution to the class. Additionally, each student will prepare an in-depth report on a topic selected in consultation with the instructor. Prerequisite: CMPSCI 611 or equivalent, or consent of the instructor.3 credits.

CMPSCI 791G: Seminar - Applying Machine Learning to Systems Problems

Professor: Moss, Barto

The primary student activity in this seminar will be the designing, performing, and reporting on actual experiments carried out by the students. Instructors will offer a practical overview of machine learning techniques and related tools available to the class, and will present some specific systems problems to which machine learning is being applied successfully. Students may work individually or in teams. The instructors have problems and tools for the students to choose, or students may propose other problems or tools for instructor approval. Grading will be based on effort expended and quality of participation. Students will also prepare summary reports of their work through the semester. 3 credits.

CMPSCI 791Q: Seminar - Topics in Information Retrieval

Professor: Allan

This seminar covers current and recent research in Information Retrieval as well as significant results from the past. We will discuss how this research relates (or does not relate) to the work done locally. Specific topics may include probabilistic IR, visualization, passage handling, routing (feedback), query expansion, summarization, integration with databases, natural language processing, and so forth. Participants will be expected to read 1-3 papers per week (rarely more than 2). A short (halfpage) synopsis of each paper will be due before the class in which a paper is discussed. One or more attendees will be responsible for presenting a 10-15 minute summary of each paper. When possible, researchers will be asked to relate their work to the papers. Discussion of the papers will follow. A prerequisite for this seminar is CMPSCI 691I (646), the Information Retrieval course, or its equivalent. Contact James Allan (allan@cs.umass.edu) if you are uncertain whether you have the necessary background. 1 credit.

CMPSCI 791S: Seminar - Out of Core Algorithms

Professor: Moss, Mckinley

This seminar will review the literature pertaining to efficient algorithms for problems whose size significantly exceeds main memory, i.e., they tend to execute "out of core". It is intended for students, researchers, and faculty, with some knowledge ofcompiler optimization methods, particularly those related to loops, parallelism, and memory hierarchy and/or intending to work with Professors Moss and McKinley on their research in this area. Responsibilities include reading the papers, attending the seminar sessions, and leading one or more seminar discussions of particular papers. The seminar meets once per week. 1 credit.

CMPSCI 891S: Theory of Computation

Professor: Immerman

Lectures on various topics in the theory of computation by CMPSCI theory faculty, possible guest speakers, and seminar students. May be repeated for credit. Prerequisite: Graduate standing in CMPSCI or permission of the instructor. 1 credit.

CMPSCI H01: Honors Colloquium for CMPSCI 287

Professor: Popplestone

We will examine how the programming paradigms discussed in 287 are exhibited in more modern Functional Languages (SML, Haskell), Logic Languages (Prolog), Object Oriented Languages (C++ & the objectclass extension of Pop-11). Recommended for Juniors, Seniors. 1 credit.

CMPSCI H02: Honors Colloquium for CMPSCI 201

Professor: Graham

We select one or more of the course topics and explore them in more depth than is possible in the main course. In particular, we see how the architectural concepts are applied in a real computer rather than the simple instructional computer used in class. Readings are assigned and discussed in once-a-week meetings. Students are assigned one or more projects using an Intel I86 based computer, such as the IBM PC, that require application of the concepts studied studied in class. Grades are based on written reports, participation in discussions, and the application of concepts in the projects. 1 credit.

CMPSCI H03: Honors Colloquium for CMPSCI 311

Professor: Sitaraman

We study more advanced material in the theory and implementation of algorithms. Possible topics include approximate string matching, computational biology, computational geometry, cryptography, approximate solution to combinatorial optimization problems, advanced data structures, parallel algorithms, and data compression. Typically, students research an area of mutual interest, and present it to the rest of the class. 1 credit.

CMPSCI H04: Honors Colloquium for CMPSCI 530

Professor: Wileden

The Honors section will meet with the instructor one hour per week to conduct additional readings in the area of programming languages. Programming projects are also possible if student interest allows. 1 credit.

CMPSCI H05: Honors Colloquium for CMPSCI 591G (521)

Professor: Adrion

This course explores testing and analysis techniques for software systems, particularly large, complex systems used in life-critical applciations such as medical devices and air traffic control. Honors students will work with the instructor on special projects, depending on their individual interests and opportunities that arise. For example, students might help implement or enhance a specific technique, conduct an experimental study using a small number of techniques, or design a quality assurance plan for a company or project. Recommended for Juniors and Seniors; Majors. 1 credit.

CMPSCI H06: Honors Colloquium for CMPSCI 383

Professor: Zilberstein

Honors section will involve advanced study and implementation of one of the AI techniques covered in CMPSCI 383. The particular application will be determined based on student interest. Possible projects include game playing, automated information gathering over the internet, software agents, hierarchical planning systems, satisfying reasoning techniques. Recommended for Juniors and Seniors; Majors and Non-majors. 1 credit.

CMPSCI H07: Honors Colloquium for CMPSCI 401

Professor: Barrington

Students will study additional topics in computability and complexity, through discussions (1 hour/week with professor), readings, and exercises. Specific topics will depend on student interest but may include algebraic automata theory, alternate models of computability, and interactive proofs. 1 credit.

CMPSCI H08: Honors Colloquium for CMPSCI 453

Professor: Towsley

Students enrolled in the honors section of CMPSCI 453 will meet for an additional hour per week with the instructor to discuss advanced topics in Computer Networks. Additional readings from the literature and a short paper will be required. 1 credit.

CMPSCI H09: Honors Colloquium for CMPSCI 320

Professor: Clarke

In this course, students learn and gain practical experience with software engineering principles and techniques. The practical experience centers on a semester-long team project in which a software development project is carried through all the stagesof the software life cycle. Honors students will be expected to assume responsibility for some of the more complex aspects as well as to study more advanced concepts. 1 credit.


Comments:
www-admin@cs.umass.edu

Copyright © 2002
This is an
official page of the University of Massachusetts Amherst.