CATALOG: Introduction -- Undergraduate Programs -- Graduate Programs -- *Undergraduate Courses* -- Combined Courses -- Graduate Courses

Undergraduate Courses

600.101 (E) Computer Fluency
Students will become fluent with information technology through coverage of basic underlying concepts and use of common applications. Concepts will include the building blocks of computer systems and software, as well as historical perspectives and social implications. Students will learn basic and selected advanced skills with MS Office (word processing, spreadsheets, presentations, databases), as well as webpage design in HTML, with programming in JavaScript, and Unix operating system basics. The goal is to empower students so that they remain skilled computer users and will have confidence and success learning and applying new technologies on their own in the future. Prerequisite: none. Note: This course is for non-CS majors only. [General]
Selinski     4 credits     (last offered Fall 2007)

600.102 (E) CS Foundations
This course is an introduction to computer science for majors and non-majors. Students are exposed to the discipline through vignettes of logic and algebra, computer systems and networks, algorithms, programming languages, computation theory, and selected applications. CS majors can only take this course in their first year of CS coursework. Prerequisite: 600.101 or equivalent knowledge. [General]
Fröhlich     4 credits

600.104 (HE) Computer Ethics—Theory and Practice
Students will examine a variety of issues regarding various policy, legal, and moral issues related to the computer science profession itself and to the proliferation of computers in all aspects of society, especially in the era of the Internet. The course will cover general issues related to various ethical frameworks and move to topics specifically related to computers. The topics will include privacy issues, computer crime, intellectual property law—specifically copyright and patent issues, globalization, and ethical responsibilities for computer science professionals. Short course.
Kosaraju     1 credit

600.105 M&Ms: Freshman Experience
This course is required for all freshman computer science majors. Transfers into the major and minors may enroll by permission only. Students will attend three 4-week blocks of meetings with different computer science professors, focused on a central theme. Active participation is required. Satisfactory/Unsatisfactory only. [General]
Selinski     1 credit     fall

600.106 Pre-Programming: Algorithmic Thinking
This course is intended for novice programmers, to be taken before or in conjunction with 600.107 or 600.109. The purpose is to provide students with the abstraction and logical thinking tools necessary for writing computer programs. It will introduce students to fundamental concepts and algorithms common to many programming languages. Students will primarily do paper solutions. Short course. Satisfactory/Unsatisfactory only. [General]
Staff     1 credit

600.107 (E) Introduction to Programming in Java
This course introduces the fundamental programming concepts and techniques in Java and is intended for all who plan to use computer programming in their studies and careers. Topics covered include control structures, arrays, functions, recursion, dynamic memory allocation, simple data structures, files, and structured program design. Elements of object-oriented design and programming are also introduced. Prerequisite: familiarity with computers. [General]
Selinski     3 credits     fall, spring, summer

600.108 (E) Introduction to Programming Lab
This course is intended for novice programmers, and must be taken in conjunction with 600.107. The purpose of this course is to give novice programmers extra hands-on practice with guided supervision. Students will work in pairs each week to develop working programs, with checkpoints for each development phase. Prerequisite: familiarity with computers. Co-requisite: 600.107. Satisfactory/ Unsatisfactory only. [General]
Selinski     1 credit     fall, spring

600.120 (E) Intermediate Programming
This course covers intermediate to advanced object-oriented programming in both C and C++. The focus of the course is on programming techniques, class design, and the use of class libraries. Topics to be covered include polymorphism, overloading, inheritance, pointers, dynamic memory allocation, templates, collections, exceptions, and others as time permits. Students are expected to learn syntax and low-level language features independently. Course work involves significant programming projects in both languages. Prerequisite: 600.107 or AP CS. [General]
Staff     4 credits     fall, spring

600.145 (E) Introduction to Computer-Integrated Surgery
This course will give an introduction to the concepts and major elements of computer-integrated surgery (CIS) through clinical applications. Students will learn to ask questions and look for answers the way clinical engineers build and analyze CIS systems. Major topics will include medical imaging, image processing, surgical planning, surgical robotics, robot navigation, systems integration, and clinical validation. Optional visits to CIS laboratories and clinical experiments will also be offered. No computer programming will be necessary to complete the assignments. Prerequisites: pre-calc required; knowledge of linear algebra helpful. Short course. [General]
Taylor     1 credit     intersession

600.146 (E) Introduction to Medical Imaging
This intersession class will provide an introduction to the principles of medical imaging. X-ray, CT and ultrasound imaging will be covered. The course will offer an introduction to the principles, instrumentation and applications of each modality. The class will be a mixture of lectures, class discussions and imaging demos using medical imaging resources at the Computational Sciences and Engineering Building. Assignments will test theoretical knowledge and also practical applications. Basic Matlab knowledge and pre-calculus math are recommended. Note: Students should not expect an in depth analysis of medical imaging systems. This class is not intended as a substitute for Medical Imaging courses offered during Fall and Spring terms.
1 credit     intersession

600.161 (E) Exploring Vision in the Real World
The course will focus on real world applications of computer vision and image processing, primarily in the areas of medicine and sports. The goal is to introduce students to computer vision concepts and explain how they are the building blocks for interesting and practical applications. One such example is the use of stereo vision to enhance micro surgery. Another example is the use of computer vision to create realistic 3D real-time video fly-through in sporting events, such as the NFL Super Bowl. The class will consist of lectures and class discussions. Students will be evaluated on weekly assignments and participation in discussions. This course is designed to introduce computer vision to interested students with or without a computer science background. An engineering background is recommended but not required. Matlab programming will be part of homeworks. Pre-calculus level math and some linear algebra is required.
1 credit     intersession

600.202 (E) Introduction to Public Health and Biomedical Informatics
Information technology should radically change the practice of medicine, the research of health science, and the assurance of public health. In this course, we review the core technologies of informatics and how those technologies ought to be considered, used, and evaluated, using examples from Johns Hopkins, from developing countries, and from around the world. Topics covered include basic technology, data, information, knowledge, standards and interoperability, software engineering frameworks, electronic patient records, biosurveillance, and clinical research systems. This course should be of interest to those aiming towards the biosciences, computers, the information sciences, and cognate social sciences.
Lehmann     3 credits     summer

600.211 (E) UNIX Systems Programming
This course covers a variety of topics in UNIX programming, including process control, signal handling, daemon processes, and interprocess communication. Participants must be familiar with using the UNIX environment and be fluent in the C programming language. Prerequisite: 600.120. [General]
Fröhlich     3 credits

600.226 (E,Q) Data Structures
This course covers the design and implementation of data structures including collections, sequences, trees, and graphs. Other topics include sorting, searching, and hashing. Course work involves both written homework and Java programming assignments. An overview of Java will be provided. Prerequisite: 600.107. [General]
Staff     3 credits     fall, spring

600.245 (E) Foundations of Computer Integrated Surgery
This course will give an introduction to the concepts and major elements of computer-integrated surgery (CIS) through clinical applications. Major topics will include medical imaging, image processing, surgical planning, surgical robotics, robot navigation, systems integration, and clinical validation. The class includes a human cadaver lab module to perform minimally invasive spine surgery with the use of novel technologies discussed in class. Grades will be calculated based on participation in class and three homework assignments. No computer programming will be necessary or required to complete the assignments, but bonus offered for demonstrating programming skills.  Pre-req: pre-calculus; recommended: linear algebra and vector calculus.
Kumar     3 credits     summer

600.255 (E) Introduction to Video Game Design
A broad survey course in video game design (as opposed to mathematical game theory), covering artistic, technical, as well as sociological aspects of video games. Students will learn about the history of video games, archetypal game styles, computer graphics and programming, user interface and interaction design, graphical design, spatial and object design, character animation, basic game physics, plot and character development, as well as psychological and sociological impact of games.  Students will design and implement an experimental video game in interdisciplinary teams of 3-4 students as part of a semester-long project. Pre-req: sophomores and above, permission of instructor, technical students should have taken at least one (preferably two or more) programming-related courses; artistic students should have taken at least one (preferably two or more) multimedia-related courses; co-req: 600.256.
Froehlich     3 credits

600.256 Introduction to Video Game Design Lab
A lab course in support of 600.255: Introduction to Video Game Design covering a variety of multi-media techniques and applications from image processing, through sound design, to 3D modeling and animation. See 600.255: Introduction to Video Game Design for details about enrolling.  Co-req: 600.255.
Froehlich     1 credit

600.271 (E,Q) Automata and Computation Theory
This course is an introduction to the theory of computing. Topics include design of finite state automata, pushdown automata, linear bounded automata, Turing machines and phrase structure grammars; correspondence between automata and grammars; computable functions, decidable and undecidable problems, P and NP problems, NP-completeness, and randomization. Students may not take both 600.271 and 600.471, unless one is for an undergrad degree and the other for grad. Prerequisite: none. [General]
Kosaraju     3 credits     fall, summer

600.315 (E) Database Systems
Introduction to database management systems and database design, focusing on the relational and object-oriented data models, query languages and query optimization, transaction processing, parallel and distributed databases, recovery and security issues, commercial systems and case studies, heterogeneous and multimedia databases, and data mining. Course work includes significant practical implementation experience. Prerequisite: 600.226. [Systems]
Yarowsky     3 credits     fall

600.316 (E) Transaction Processing Systems
[Last offered 2009.] This course covers the design and implementation of transaction processing and database systems. Topics include transaction semantics, write-ahead logging, memory management, checkpoints, concurrency control, replication, restart recovery, and distributed commit protocols. The course employs examples of advanced database applications to develop this material. Examples include Internet databases, TP monitors, multidatabases, and federated databases. Course work includes a project. Prerequisites: 600.315/415 or equivalent, 600.120. [Systems]
Burns     3 credits

600.318 (E) Operating Systems
This course covers the fundamental topics related to operating systems theory and practice. Topics include processor management, storage management, concurrency control, multi-programming and processing, device drivers, operating system components (e.g., file system, kernel), modeling and performance measurement, protection and security, and recent innovations in operating system structure. Course work includes the implementation of operating systems techniques and routines, and critical parts of a small but functional operating system. Prerequisites: 600.120, 600.226, and 600.333; 600.211 recommended. [Systems]
staff     4 credits     spring

600.319 (E) Storage Systems
[Last offered 2008.] Storage systems is one of the fastest growing and most interesting research areas in computer science. Storage systems often dominate the performance of computer systems as a whole. Also, they are responsible for the safe-keeping of an organization’s most valuable assets—information! The course will cover the design and implementation of storage systems and the architecture and characteristics of the components on which storage systems are built. Topics will range from the device level up to distributed systems concepts. This will include disk drive hardware and firmware, file system and database structures, mirroring and RAID, disk array controllers, local storage interconnects, storage area networks, capacity planning and configuration, distributed file systems and network-attached storage, backup/restore and disaster recovery, and security for storage. Prerequisites: 600.226 and 600.333/433. [Systems]
Burns     3 credits

600.320 (E) Parallel Programming
This course prepares the programmer to tackle the massive data sets and huge problem size of modern scientific and enterprise computing. Google and IBM have commented that undergraduate CS majors are unable to "break the single server mindset” (http://www.google.com/intl/en/press/pressrel/20071008_ibm_univ.html).  Students taking this course will abandon the comfort of serial algorithmic thinking and learn to harness the power of cutting-edge software and hardware technologies. The issue of parallelism spans many architectural levels.  Even ``single server'' systems must parallelize computation in order to exploit the inherent parallelism of recent multi-core processors. The course will examine different forms of parallelism in four sections. These are: (1) massive data-parallel computations with Hadoop!; (2) programming compute clusters with MPI; (3) thread-level parallelism in Java; and, (4) GPGPU parallel programming with NVIDIA's Cuda.  Each section will be approximately 3 weeks and each section will involve a programming project. The course is also suitable for second-year undergraduate CS majors and undergraduate and graduate students from other science and engineering disciplines that have prior programming experience.  Prerequisites: 600.120 or equiv. [Systems]
Burns     3     credits

600.321 (E) Object-Oriented Software Engineering
This course covers object-oriented software construction methodologies and their application. The main component of the course is a large team project on a topic of your choosing. Course topics covered include object-oriented analysis and design, UML, design patterns, refactoring, program testing, code repositories, team programming, and code reviews. Prerequisites: 600.226 and 600.120. [Systems or Applications]
Smith     3 credits     fall

600.324 (E) Network Security
This course focuses on communication security in computer systems and networks. The course is intended to provide students with an introduction to the field of network security. The course covers network security services such as authentication and access control, integrity and confidentiality of data, firewalls and related technologies, Web security and privacy. Course work involves implementing various security techniques. A course project is required. Prerequisites: 600.226, 600.344/444 or permission; 600.120 (or equivalent) recommended. [Systems]
staff     3 credits

600.325 (E) Declarative Methods
Suppose you could simply write down a description of your problem, and let the computer figure out how to solve it. What notation could you use? What strategy should the computer then use? In this survey class, you’ll learn to recognize when your problem is a special case of satisfiability, integer programming, rational pattern transduction, Bayesian network inference, or weighted logic programming. For each of these paradigms, you’ll learn to reformulate hard problems in the required notation and apply off-the-shelf software that can solve any problem in that notation—including many of the problems you’ll see in other courses and in the real world. You’ll also gain some understanding of the general-purpose algorithms that power the software. Prerequisites: 600.226, 600.271, Calc II. [Analysis]
Eisner     3 credits     spring

600.328 (E) Compilers and Interpreters
Introduction to compiler design, including lexical analysis, parsing, syntax-directed translation, symbol tables, run-time environments, and code generation and optimization. Students are required to write a compiler as a course project. Prerequisite: 600.120 and 600.226. [Systems]
Fröhlich     3 credits

600.333 (E) Computer System Fundamentals
CSF addresses the design and performance of the principal operational components of a reduced-instruction-set computing system (RISC) which supports the efficient execution of widely used instruction sets. Arithmetic and logic units, memory hierarchy designs, state-machine controllers, and other related hardware and firmware components are studied, and the qualities of their combined processing capabilities are assessed by means of execution times associated with a range of benchmark programs. Assembly language programming projects, homework problems, and exams are employed to assess a student's fundamental understanding of the tradeoffs resulting from an assortment of variations in digital system design decisions that ultimately characterize the performance of the computing system architecture that is developed. Prerequisite: 600.107 or equiv. [Systems]
Masson     4 credits     fall, summer

600.335 (E) Artificial Intelligence
Artificial Intelligence (AI) is introduced by studying knowledge representation mechanisms, automated reasoning, automatic problem solvers and planners, production systems, game playing, and machine learning. The class is recommended for all scientists and engineers with a genuine curiosity about the fundamental obstacles to getting machines to perform tasks such as deduction, learning, planning, and navigation. Prerequisite: 600.226, 550.171; linear algebra, prob/stat recommended. [Applications]
Hager, Sheppard     3 credits     spring

600.336 (E) Algorithms for Sensor-Based Robotics
This is an introductory course presenting a series of algorithms related to the representation and use of geometric models acquired from sensor data. Course topics include: basic sensing and estimation techniques, geometric model representations, and motion planning algorithms. The course will also discuss applications in diverse areas such as mobile systems, robot manipulation, and medicine. Prerequisite: 600.226, calculus, prob/stat. [Analysis]
Hager     3 credits

600.337 (E) Distributed Systems
This course teaches how to design and implement protocols that enable processes to exchange information, cooperate, and coordinate efficiently in a consistent manner over a computer network. Topics include communication protocols, group communication, distributed databases, distributed operating systems, and security. The course gives hands-on experience as well as some theoretical background. Prerequisites: 600.120 and 600.226. [Systems]
Amir     3 credits    

600.341 (E, Q) Basics of Applied Cryptography
(No longer offered.) This course is an introduction to algorithms, cryptography and network security, meant to give students a good foundation for upper-level courses in the area. Students will learn how to implement a simple cryptographic library in C. Prerequisites: 600.120 and 600.226. [Analysis]
Ateniese     3 credits

 600.344 (E) Computer Network Fundamentals
This course considers intersystem communication issues. Topics include layered network architectures; the OSI model; bandwidth, data rates, modems, multiplexing, error detection/correction; switching; queuing models, circuit switching, packet switching; performance analysis of protocols, local area networks; and congestion control. Prerequisite: 600.333 or general knowledge of computer architecture. [Systems]
Terzis     3 credits     spring

600.355 (E) Video Game Design Project
An intensive capstone design project experience in video game development. Students will work in groups of 4-8 on developing a complete video game of publishable quality. Teams will (hopefully) include programmers, visual artists, composers, and writers. Students will be mentored by experts from industry and academia. Aside from the project itself, project management and communication skills will be emphasized. Enrollment is limited to ensure parity between the various disciplines. Prerequisite: 600.255/256 or permission; junior or senior standing recommended.  [General]
Froehlich

600.357 (E,Q) Computer Graphics
This course introduces computer graphics techniques and applications, including image processing, rendering, modeling and animation. Prerequisites: 600.120, 600.226, and linear algebra; or permission of instructor. [Applications]
Kazhdan     3 credits     spring

600.361 (E,Q) Computer Vision
This course gives an overview of fundamental methods in computer vision from a computational perspective. Methods include computation of 3-D geometric constraints from binocular stereo, motion, texture, shape-from-shading, and photometric stereo. Edge detection and color perception are studied as well. Elements of machine vision and biological vision are also included. Prerequisites: 600.226. [Applications]
Hager     3 credits     fall

600.363 (E,Q) Introduction to Algorithms
This course concentrates on the design of algorithms and the rigorous analysis of their efficiency. Topics include the basic definitions of algorithmic complexity (worst case, average case); basic tools such as dynamic programming, sorting, searching, and selection; advanced data structures and their applications (such as union-find); graph algorithms and searching techniques such as minimum spanning trees, depth-first search, shortest paths, design of online algorithms and competitive analysis. Prerequisite: 600.226. [Analysis]
Awerbuch     3 credits     fall

600.392 (E) Senior Design Project
This course will give senior CS majors an intensive capstone design project experience. Students will work in groups with real world customers to develop a working system. Project design, management and communication skills will be emphasized. Software development methodologies may also be presented. Prerequisites: 600.120, 600.226; 600.321 recommended. [General]
Fröhlich     3 credits