cs homeabout usnewseventspeopleresearchacademicsservices

Computer Science Academic Integrity Code

FAQ for Academic Programs

Technical Reports

Library Resources

Job Resource Center

ARCHIVES

Fall 2002 Class Schedule

Spring 2002 Class Schedule

Summer 2002 Class Schedule


printer friendly version
pdf version
email this page




[Introduction] [Undergraduate Programs] [Masters Program] [Ph.D Program] [Undergraduate Courses] [Combined Courses] [Graduate Courses]


Undergraduate Courses

600.101 (E) Computer Literacy
In this introduction to computers and information technology, students develop an appreciation of the capabilities of computers and a basic proficiency in their uses. Survey topics include the history of computing and the principle components of a computer system. Students discuss and use application software including databases, word processors, spreadsheets, presentation software, electronic mailers, network bulletin boards, and the world wide web. Students also learn elementary programming. Course assignments require daily computer use and give students a familiarity with both PC and UNIX platforms. Students attend lectures and 1 lab section per week. Prerequisite: none. [NOTE: This course is for non-CS majors only.] [Beach, General, Fall/Spring/Summer]
4 credits Fa/Sp, 3 credits Su

600.103 (E) Introduction to Computer Science
Required for all computer science undergraduate majors and minors. All other students welcome. Department faculty take turns presenting their research areas to give a broad perspective on the discipline of computer science. S/U only. [Houlahan, General, Fall/Spring]
1 credit

600.104 (E) 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, the economic effects of a computerized society, computer law - especially copyright matters, and ethical responsibilities for computer science professionals. Short course. [staff, General]
1 credit

600.106 (E) 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. [staff, General]
credit varies

600.107 (E) Introduction To Programming In Java
This course introduces the fundamental programming concepts and techniques in Java, the leading-edge language for Internet applications. The course 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. Students generally take only one of 600.107 or 600.109. Prereq: familiarity with computers. [Houlahan, General, Fall/Summer]
3 credits

600.108 (E) Intro Programming Lab
This course is intended for novice programmers, and must be taken in conjunction with 600.107 or 600.109. 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. Satisfactory/Unsatisfactory only. [Houlahan, General, Fall/Spring]
1 credit

600.109 (E) Introduction to Programming in C/C++
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 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. Students generally take only one of 600.107 or 600.109. Prerequisite: familiarity with computers. [Houlahan, General, Spring/Summer]
3 credits

600.111 (E) Practical C
This course provides practical C notions for students who have taken an introductory programming class in C++ or Java. The class is intended for students interested in taking systems courses such as Operating Systems and Distributed Systems, but not exclusively so. The course also addresses issues such as writing portable code and debugging programs on UNIX systems. Short course. [staff, General]
1 credit

600.113 (E) Internet
This course defines and provides a brief history of the Internet, introduces issues relating to computer networking and discusses how the Internet protocols (such as TCP/IP and DNS) handle these issues. Covered are the basic networking facilities (remote login, file transfer, e-mail, net-news, browsers, search, etc.). UNIX commands and their PC counterparts are utilized. Course assignments require daily computer use and interaction amongst the students. By writing web pages, the students learn HTML, Javascript and file formats. The course project requires each student to create websites. Students attend lectures and 1 lab section per week. Prerequisite: 600.101 or equivalent knowledge. [NOTE: This course is for non-CS majors only.] [Beach, General, Fall/Spring/Summer]
4 credits Fa/Sp, 3 credits Su

600.118 (E) Intermediate Programming in C++
This course teaches intermediate programming concepts and design using the language C++. The emphasis is on showing how data abstraction and modularity are supported through the use of object-oriented programming techniques such as classes, inheritance, and virtual functions, rather than syntax and low-level language features. Students are expected to have procedural programming experience (preferably in C, C++ or Java), including an understanding of variables, control structures, arrays, functions, etc. Students without such experience should enroll in 600.109 or 600.107 instead. Prerequisites: 600.109 or 600.107. [Wilson, General, replaced by 600.120]
3 credits

600.120 (E) Intermediate Programming
This course replaces 600.118 and 600.121 beginning Spring 2002. It covers intermediate to advanced object-oriented programming in both C++ and Java. 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. Coursework involves significant programming projects in both languages. Prerequisites: 600.107 or 600.109. Students who have taken 600.118 or 600.121 may not take this course. They should register for 600.122 instead. [Wilson, General, Fall/Spring/Summer]
4 credits

600.121 (E) Intermediate Java Programming
This course covers intermediate level object-oriented programming in Java. The focus of the course is on programming techniques and the use of Java class libraries, including the classes and language features that support network programming and multi-threaded programming, rather than syntax and low-level language features. Students are expected to have procedural programming experience (in C, C++ or Java preferably), including an understanding of variables, control structures, arrays, functions, etc. Students without such experience should enroll in 600.107 or 600.109 instead. Prereq: 600.107 or 600.109. [Wilson, General, replaced by 600.120]
3 credits

600.122 (E) Intermediate Programming
This course is a 2 credit version of 600.120 for students who have already taken either 600.118 or 600.121. It will only be offered during a 1 year transition period (2002). Prerequisites: 600.118 or 600.121, but not both. Students who have both 600.118 and 600.121 may not take this course. [Wilson, General]
2 credits

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. Grades will be calculated based on participation in class and written homework assignments. The assignments will involve block-level design of CIS systems and mathematical problems pertinent to medical image processing and surgical navigation. No computer programming will be necessary or required to complete the assignments. Short Course. [Taylor/Fichtinger, General, Intersession/Summer]
1 credit

600.201 (E) IT Project Management
Students will study IT project management while actively managing a project. Students work in teams to complete their project within the framework of IT Project Management (e.g. feasibility, requirements, definition, documentation, software lifecycle, etc.). Presentations at the end of the semester will be made to 600.101 & 600.113 students. Application process: students (preferably in teams of 3-5) submit a one page proposal of an applied project (preferably on campus, preferably with faculty/staff support/interest) to the instructor (lsb@cs.jhu.edu). Projects should build and expand upon knowledge and technology covered in 600.101 & 600.113. Projects will be evaluated based on scope & viability. Projects will be accepted based on at least the following: enrollment limit, well formed requirements definition, feasibility, and utility. Prerequisites: 600.101, 600.113 and permission of instructor. [NOTE: This course is for non-CS majors only.] [Beach]
3 credits

600.211 (E) UNIX Systems Programming
This course expands upon 600.110, covering 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.109. Recommended: 600.111. Note: At most 3 credits of 600.110 and 600.211 can count toward computer science requirements. [Wilson, General]
3 credits

600.212 (E) X Windows Programming
This course covers GUI programming using X and Motif. The focus is on Motif, with lower-level libraries, Xlib and Xt, covered as necessary. This is a programming intensive course. Prerequisite: 600.109 or equivalent, user-level familiarity with UNIX and graphical user interfaces. [Wilson, General]
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 (preferred) or 600.109; intermediate programming highly recommended. [staff, General, Fall/Spring/Summer]
3 credits

600.271 (E,Q) Automata and Computation Theory
[Formerly called Computational Models.]
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. [Kosaraju, General, Spring/Summer]
3 credits

600.301 (E) Software Process and Design
The software process is a collection of activities that begins with the identification of a real-world problem and concludes with the retirement of the software product that responds to it. In this context, design involves the modeling of the problem domain with the specification of a software-supported solution, the transformation of that solution into product design, and the realization of that design as an implemented product. The topics covered include models of the software process and methods for design. Emphasis is placed on the underlying concepts, the methods widely used in practice, and the alternatives being explored. Prerequisite: none. Short course. [Systems]
1 credit

600.303 (E) High Performance Computing
(Formerly listed as "Supercomputing".) Speed is a function of architecture, technology, software, and algorithms. In this course we look at major architectural advances (and study them in the context of the systems that introduced them) that are responsible for significant increases in speed. We observe their impact on and interplay with technology, software, and algortihms. Prerequisite: none. Short course. [Systems]
1 credit

600.307 (E,Q) Logic in Computer Science
An introduction to the role and use of logic in computer science. First order logic and natural deduction, inductive proof methods, programming language types and types-as-logics will be covered. Prerequisites: 600.107 or 600.109; 600.271 or 550.271 or permission; 600.226 recommended. Short course. [Analysis]
1 credit

600.312 (E) Agent Based Simulation
This course covers the design, implementation and interpretation of agent-based simulations and the use of adaptive programming techniques, such as genetic algorithms, in such simulations. Prerequisites: 600.109 and 600.226. [Wilson, Systems, Spring]
3 credits

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. [Yarowsky, Systems, Fall]
3 credits

600.316 (E) Transaction Processing Systems
[Revision of former 600.416 Distributed Database Systems course.] 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. Students may receive credit for 600.316 or 600.416, but not both. Prerequisites: 600.315/415 or equiv., C++ programming. [Burns, Systems]
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: intermediate programming, 600.211 (or equiv. exp.), 600.226, 600.333/433; 600.111 recommended. [Shapiro, Systems, Spring]
4 credits

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 wil 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. [Burns, Systems, Fall]
3 credits

600.321 (E) Object-Oriented Systems
The main goal of this course is to gain expertise in object-oriented system design and implementation. The primary coursework is a large team programming project. Students will learn how to work as a team to produce well-structured designs and implementations. Course topics include Object-Oriented Design, The Unified Modeling Language (UML), Design Patterns, Extreme Programming, Refactoring, and software testing. Advanced features of Java are also covered, including graphical user interface (GUI) programming with Swing, Remote Method Invocation (RMI), reflection, the JVM internals, and the Java security architecture. Prerequisites: 600.226 and intermediate programming. [Smith, Systems or Applications, Fall]
3 credits

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. Prereq: 600.226, 600.344/444 or permission. 600.120 (or equivalent) recommended. [Monrose, Systems, Fall]
3 credits

600.333 (E) Computer System Fundamentals
Analysis and design of subsystems of computers together with their interconnection and utilization in computing systems: basic logic circuits, combinational and sequential modules, computer arithmetic, registers and register-transfer logic, arithmetic units, memory, processor units, bus interconnections, control logic design and microprogramming, instruction set implementation, computer architecture. Prerequisite: 600.107 or 600.109. [Masson, Systems, Fall/Summer]
3 credits

600.334 (E) Computer System Architecture
A continuation of 600.433, this course provides a further study of architectural concepts in computer systems. Students will learn to evaluate the impact of different processor and system architectures on performance in order to decide which system architecture is appropriate for a given task. The course consists of three major parts: hardware architectures, software development and system design. Prerequisite: 600.333 or 600.433 or permission. [Systems]
3 credits

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, machine learning, and elementary natural language understanding. This introductory AI class emphasizes basic concepts and fundamental ideas necessary to develop practical solutions for various applications. The course also covers the elements of an AI programming language such as LISP. 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. Prerequisite: 600.226 or knowledge of elementary data structures. [Sheppard, Applications, Spring]
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: intermediate programming and 600.226; 600.111 recommended. [Amir, Systems, Fall]
3 credits

600.344 (E) Computer Network Fundamentals
This course considers intrasystem communications issues. Topics covered 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, Spring]
3 credits

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. [Scheideler, Analysis]
3 credits

600.349 (E) Internet Protocols
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 (or 600.111) is recommended but not required. [Terzis, Systems]
3 credits

600.356 (E,Q) Rendering Techniques
Color and Light theory, Raytracing, Global Illumination, Caustics, Participative media, Image based Rendering, Volume Rendering, Morphing and Animation. Prerequisites: Data Structures (600.226), Linear Algebra (550.291 or 110.201). [Cohen, Applications]
3 credits

600.357 (E,Q) Computer Graphics
This course introduces the graphics pipeline and hardware. It covers 2D and 3D transformations, clipping, scan conversion, filtering and anti-aliasing, hidden surface removal, color, shading, transparency, raytracing, global illumination, curves and surfaces, textures, volume rendering, and user interactions. Prerequisites: intermediate programming, 600.226, or permission of instructor. Co-req: 600.333. Recommended: 550.291 or 110.201. [Kumar, Applications]
3 credits

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 multimedia. 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. Pre-requisites: Students should have a background in computer science or in film. 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. [Cohen, Applications]
3 credits

600.363 (E,Q) Introduction to Algorithms
This course concentrates on the design of algorithms and the rigorous analysis of their efficiency. Topics covered 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. [Awerbuch, Analysis, Fall]
3 credits

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. [Scheideler, Analysis]
3 credits

600.391 (E) Software Development with XP
Course is primarily Java project based, with an emphasis on software development methodologies. Lectures early in the semester will cover XP (eXtreme Programming) techniques. Students will work in teams on significant projects, and hopefully create something of good enough quality to be made available to the public. Roughly 1/3 lectures, 2/3 project development. Prerequisite: 600.226 and permission of instructor. [Wilson, General]
3 credits



 
Today is Tuesday, November 24, 2009

The Department of Computer Science   © 2002 The Johns Hopkins University