|
||
|
||
CoursesDescriptionsCore CoursesCMSC 141, Introduction to Object-Oriented ProgrammingCMSC 145, Discrete Mathematics CMSC 201, Data Structures CMSC 225, Computer Architecture CMSC 244, Discrete Math and Functional Programming CMSC 273, Scientific Programming CMSC 301, Algorithms CMSC 305, Design of Programming Languages CMSC 312, Theory of Computation CMSC 326, Operating Systems CMSC 335, Computer Networks CMSC 351, Artificial Intelligence Elective CoursesCMSC 111, Introduction to Computing: Automated ReasoningCMSC 112, Introduction to Computing: Graphics and Animation CMSC 113, Introduction to Computing: Robotics CMSC 114, Introduction to Computing: Understanding the Computer CMSC 115, Introduction to Computing: Simulating Reality CMSC 116, Introduction to Computing: Semantic Web CMSC 117, Introduction to Computing: Interactive Systems CMSC 131, Cognitive Science: Languages of the Mind CMSC 251, Introduction to Artificial Intelligence CMSC 303, Computational Geometry CMSC 321, Databases: Theory and Practice CMSC 323, Computer Graphics CMSC 325, Multiprocessor Computer Architecture CMSC 352, Biologically Inspired Machine Learning CMSC 353, Modeling and Simulation CMSC 360, Intelligent Robotics and Perception CMSC 373, Software Interface Design CMSC 401, Topics in Computational Complexity CMSC 425, Compiler Design CMSC 451, Topics in Advanced Artificial Intelligence Course DescriptionsIntroduction to Object-Oriented ProgrammingThis course introduces students with prior programming experience to the methodologies of object-oriented design and programming, which are used throughout the Computer Science curriculum. Students will learn how to move from informal problem statement, through increasingly precise problem specifications, to design and implementation of a solution. Good programming habits will be emphasized. Discrete MathematicsDiscrete mathematics includes those areas of mathematics that are essential to computer science, information theory, combinatorics, and genetics. This course emphasizes creative problem solving, linking language to logic, and learning to read and write proofs. The topics covered include propositional logic, predicate logic, inductive proof, sets, relations, functions, introductory combinatorics and discrete probability. Applications drawn from computation will motivate most topics. Data StructuresThis course introduces students to the basic ideas underlying data storage and retrieval. Several standard data structures will be covered, including stacks, queues, lists, hash tables, and balanced binary trees. The course will balance implementation of structures and formal analysis of their properties. Prerequisite: Computer Science 141. Computer ArchitectureAn introduction to the structure and operation of a modern computer architecture. Topics include instruction sets, pipelining, instruction-level parallelism, caches, memory hierarchies, storage systems, and multiprocessors. Assembly language programming is used to demonstrate concepts. Corequisite: Computer Science 201, with Physics 212 recommended. Discrete Math and Functional ProgrammingThis course covers many mathematical concepts of importance to the foundation of the modern computer scientist, employing a functional programming language as a vehicle for computational expression. General discrete mathematics topics will include logic and formal proof, sets, relations, functions, induction and co-induction, number theory, and graph theory. Functional programming concepts will include lambda calculus, type theory, lists and algebraic data types, recursion and co-recursion, and polymorphism. This course satisfies the functional programming requirement for moderation into the computer science program. Scientific ProgrammingIntroduces numerical methods used in the physical sciences, and the C programming language. Common techniques of data analysis, approximation, and numerical solutions of integral and differential equations are developed for their own sake and also as an introduction to available analysis packages. AlgorithmsThis course covers design and analysis of correct and efficient computer algorithms. Topics include sorting, greedy algorithms, divide-and-conquer algorithms, dynamic programming algorithms, and graph algorithms. Advanced topics in algorithms may be selected from specialized areas of the mathematical and empirical sciences. Design of Programming LanguagesCovers a selection of important issues in the design of programming languages including, but not limited to, type systems, procedure activation, parameter passing, data encapsulation, dynamic memory allocation, and concurrency. In addition, the functional, logic, and object-oriented programming paradigms are presented, along with a brief history of high-level programming languages. Prerequisite: Computer Science 201. Theory of ComputationAn introduction to several computational models developed to formalize the notion of an algorithm, the course also offers detailed discussion of primary topics in the theory of computation, including the theory of recursive functions, Turing machines, and several undecidable problems, such as the Halting problem. Operating SystemsCovers traditional topics of operating systems, including interprocess communication, semaphores, monitors, scheduling algorithms, deadlocks, virtual memory, and file system design. In addition, discussion may include issues in distributed systems such as the client-server model, remote procedure call, distributed synchronization, transactions, threads, and file servers. Computer NetworksTakes a bottom-up approach to computer networking, covering in detail the physical, data link, MAC, network, transport, and application layers. TCP/IP and OSI reference models are introduced, with examples taken from the Internet, ATM networks, and wireless networks. Artificial IntelligenceProvides a broad introduction to topics in artificial intelligence, including knowledge representation and reasoning, planning and problem solving, and machine learning. Advanced topics may include natural language processing, multiagent systems, and image processing. Introduction to Computing: Automated ReasoningThis course explores the application of computing to logical deduction. Students will design programs that automate many aspects of human reasoning. Topics include natural language processing, natural language generation, automated theorem proving, and verification. Introduction to Computing: Graphics and AnimationThis course provides an introduction to the use of computer programming for creating and displaying a wide variety of objects, patterns, and digital images. Students will learn to use a programming language and graphics interface to write algorithms that represent and render two-dimensional and three-dimensional geometrical objects, beginning with points and lines and extending three-dimensional solids. Topics will include applied geometry, coordinate transformations, projection, perspective, object modeling, and basic animation. Introduction to Computing: RoboticsThis course introduces students to ideas that are fundamental to robotics and to computing in general. Teams of students will design and build shoebox-sized robots, with guidance from the instructor. These rather minimalist robots will be mobile and will have multiple sensors. The student teams will use a simple programming language to program their robots to carry out simple tasks, and will move to a more robust programming language and more complex tasks by the end of the semester. Introduction to Computing: Understanding the ComputerThis course examines several fundamental ideas from computer science, from the point of view of understanding the computer as a machine. Over the course of a semester, we will move from the very concrete (digital circuits) through increasingly abstract descriptions of computing machinery. Along the way, we will learn how to decode the jargon of computer advertising GB's, RAM, GHz, and so on. Students will explore the basics of computer programming via several simple assignments. Introduction to Computing: Simulating RealityHow do rumors and fashions spread in society? Does a small change in environmental temperature disrupt an ecosystem? Questions like these are explored using computers to create virtual worlds. This introduction to modeling and simulation is intended for students who are interested in creating computer models of objects, processes, and complex systems using computer software. Students will create and run several different simulation model types drawn from a variety of disciplines, including: artificial life, cognitive science, economics, environmental science, evolution, neuroscience, physics, and political science. Students will gain a practical understanding of how to combine mathematical modeling, computer simulation, and data analysis as they use and create software that enables them to build simulation models that answer a practical need and/or scientific question. No prior knowledge of computer programming is required. Introduction to Computing: Semantic WebThis course is an introduction to semantically intelligent content management for the World Wide Web. Participants in this course will construct social networking software, similar in scope to weblogs or facebook, using an advanced content management system. Strong emphasis will be placed on the development of flexible applications that efficiently store and process data and metadata. In addition to basic computer programming, various XML technologies will be introduced and employed. Introduction to Computing: Interactive SystemsThis course introduces students to computing through the construction of interactive computing systems. Students will explore computing by programming graphics, perception, and robotics systems; learning how computers can manipulate the physical world as well as calculate in the virtual world. Programming projects include creating 2D and 3D pieces of art, automatically analyzing photos and video from digital cameras, and making machines walk and talk. No prior knowledge of computer programming is required. Cognitive Science: Languages of the MindHow do brains make minds? Can computers think? Is my dog conscious? Cognitive science assumes that the brain is some sort of computational engine, and, beginning with that premise, attempts to find answers to such questions. This course will be taught by faculty from biology, computer science, linguistics, philosophy, and psychology, who will combine their different approaches to explore how humans and other intelligent systems feel, perceive, reason, plan, and act. In particular, the course will focus on the fundamental importance of language, signaling, and representation at many levels, from the neural to the organismal. Laboratories will provide students with hands-on experience analyzing neural and behavioral data as well as with computational modeling. Introduction to Artificial IntelligenceAn introdution to artificial intelligence principles and techniques with an emphasis on elements of artificial intelligence that are compatible with current understanding of biologically-based intelligence (e.g., neural computation). This course is intended to provide a first course in artificial intelligence, particularly for students interested in cognitive science and neuroscience. The course will explore the application of artificial intelligence techniques to particular application areas. Techniques include automated reasoning, machine learning, evolutionary learning, heuristic search, and behavior-based robot control. Application examples will be drawn from artificial life, robotics, game play, logic, visual perception, and natural language processing. Prerequisites: One of CMSC 111-117, 141-143, or programming experience. Computational GeometryThis class will cover a variety of topics from computational geometry. Focus will be given to computational complexity of the algorithms presented as well as appropriate data structures. Topics may include Voronoi Diagrams, convex hull calculations, line segment intersections and more. Pre-requisites: Math 212, Math 242 and some programming knowledge. Databases: Theory and PracticeAn introduction to the design, implementation, and uses of databases. Topics include database design, database models, integrity, concurrency, security, and database query languages. Computer GraphicsComputer graphics have become ubituitous in today's society, from magazine ads to movies to video games. In this course students explore the basic algorithms used to create and manipulate two- and three-dimensional graphic objects. Among the topics covered are coordinate transformations, projection, hidden surfaces, shading, ray tracing, and texture mapping. A strong mathematical and programming background is necessary. Multiprocessor Computer ArchitectureModern desktop computers typically contain multiple microprocessors. In order to take full advantage of these new machines, one must understand a number of interlocking hardware and software issues, including instruction-level and thread-level parallelism, architectures for shared memory, and dynamic scheduling. This course will combine principles of computer organization as applied to multiprocessor systems with case studies of several extant multicore architectures. Prerequisite: CMSC 201. Biologically Inspired Machine LearningExamines computation as a metaphor for understanding adaptive systems. Several biological systems are studied and related to abstract models that incorporate elements of their data structures, information processing, and learning. Neuron models, neural networks, and evolutionary learning are studied using mathematics and computer simulation. This course emphasizes information processing, pattern recognition, and associated computational abilities of artificial models, but takes an ethological approach to understanding how natural and artificial intelligent systems adapt to their environment. Modeling and SimulationThis course provides an introduction to mathematical modeling and the computer simulation of discrete and continuous systems. Examples will be drawn from the computational, physical, and social sciences. Students will learn to create mathematical models of systems, design simulation experiments, construct simulations, test their validity, and statistically analyze model output. Students will complete final projects in which they undertake the modeling and simulation of a system of their choice. Intelligent Robotics and PerceptionThis course provides an overview of topics in computational perception, machine learning, and robotics. Students will learn the underlying principles and methods of intelligent robotic systems, including techniques from sensor processing, robot software architecture, and supervised, unsupervised, and reinforcement learning. Throughout the semester, students will collaborate as a team to build an intelligent robotic system of their choice. Prerequisite: Computer Science 201 or permission of the instructor. Software Interface DesignFocuses in detail on desiderata for good user interface design, including questions of layout, command entry, and display of information. The course centers on event-driven programming, using the Java programming language. Topics in Computational ComplexityTopics for this course may include logic and undecidability, NP-complete problems, co- NP and function problems, randomized algorithms, cryptography, approximation algorithms, and logarithmic space. Compiler DesignAn introduction to the process of writing a language translator. Topics include lexical analysis, parsing, syntax-directed translation, optimization, and code generation. Students complete a project involving design and implementation of a compiler for a simple high- level programming language. Topics in Advanced Artificial IntelligenceThis course covers a selection of topics from artificial intelligence, which may include robotics, natural language processing, machine learning, neural networks, genetic algorithms, genetic programming, planning, and computer vision. Selection of topics will be guided in part by student interest and background.
|






