Department of Computer Science, Johns Hopkins University
spacerHomeAbout UsWhy Join UsPeopleAcademicsResearchEventsServices
Department of Computer Science, Johns Hopkins Universityspacer

Course Catalog: 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]

Houlahan 4 credits fall, spring

 

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. Prereq: 600.101 or equiv. knowledge. [General]

Froehlich 4 credits

 

600.103 (E) Introduction to Computer Science

(Last offered Spring 2005.) Department faculty take turns presenting their research areas to give a broad perspective on the discipline of computer science. Satisfactory/unsatisfactory only. [General]

Houlahan 1 credit

 

600.104 (H) 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.

Staff 1 credit

 

600.105 M&Ms: Freshman Experience

This course is required for all freshmen 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]

Houlahan 1 credit fall

 

600.106 (E) 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]

Houlahan 3 credits fall, 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]

Houlahan 1 credit

 

600.109 (E) Introduction to Programming in C/C++

(Last offered Spring 2005.) This course introduces the fundamental programming concepts and techniques in C and C++, the languages most commonly used in modern programming applications. The course is intended for all who plan to use computer programming in their studies and careers. Topics 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 introduced. Students generally take only one of 600.107 or 600.109. Prerequisite: familiarity with computers. [General]

Houlahan 3 credits spring, summer

 

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. Pre-requisites: pre-calc required; knowledge of linear algebra helpful. Short course. [General]

Taylor 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.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]

Froehlich 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.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. 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

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]

Shapiro 4 credits spring

 

600.319 (E) Storage Systems

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.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]

Monrose 3 credits fall

 

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

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 & 600.226. [Systems]

Froehlich 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. [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, and 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; 600.211 recommended. [Systems]

Amir 3 credits fall even years

 

600.341 (E, Q) Basics of Applied Cryptography

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. Prerequisite: 600.120 & 600.226. [Analysis]

Ateniese 3 credits

 

600.344 (E) Computer Network Fundamentals

This course considers intrasystem 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]

Masson, Terzis 3 credits spring

 

600.348 (E,Q) Theory of Network Communication

The course covers current topics in the area of communication in distributed systems. This includes an introduction to parallel computational models and important routing parameters and networks, as well as the presentation and analysis of strategies for broadcasting, unicasting, and multicasting in static and dynamic networks, load balancing, and distributed data management. Weekly assignments. Some knowledge of probability theory is helpful. Prerequisite: 600.344/444 or permission. [Analysis]

Scheideler 3 credits

 

600.349 (E) Internet Protocols

[Replaced by 600.450 starting Fall 2007.] This course covers the most important Internet protocols in detail. The goal is to get a solid technical understanding of the Internet's foundations and a concrete example of complete network protocol family. The course material will be taken from the textbook but the students will also be required to read the actual protocol specifications (RFCs). A major part of this course is the two group projects where students are going to implement realistic network protocols. In addition to the projects, there will be homework assignments, a midterm, and a final. Prerequisites: 600.120 and 600.344/600.444; 600.211 is recommended but not required. [Systems]

Terzis 3 credits

 

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.359 (E) Projects in Graphics and Multimedia

Students in this course collaborate to work on a large scale project in the area of computer graphics and multi-media. From initial brainstorming to investigation of existing systems to the development of a full-scale system, students shape a project into something that may be useful to either the research community or the general public. Prerequisites: Students should have a background in computer science or in films. CS students must have completed Data Structures (600.226) and at least one 300-level course with a semester programming project (or comparable experience). Film students should provide an appropriate faculty reference to the instructor. Both CS and film students must get approval of the instructor for registration. [Applications]

Cohen 3 credits

 

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.371 (E,Q) Modern Complexity Theory

Topics covered will be polynomial complexity classes and beyond, complexity of logic and arithmetics, cryptography and complexity, interactive proof systems and probabilistically checkable proofs, inapproximability, and new directions including Quantum computing and complexity of evolutionary systems. Weekly assignments. Prerequisites: 600.271 or permission. [Analysis]

Scheideler 3 credits

 

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]

Froehlich 3 credits

 







spacerSearchContact UsIntegrity CodeAcademics FAQLibrary ResourcesJob Center