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