University of Maryland Baltimore County
Department of Computer Science
Engineering Computer Science Building
Room 210
5401 Wilkens Avenue
Baltimore, MD 21228-5398
(410) 455-3000
Dr. Timothy W. Finin
Professor and Chair
Dr. Brooke Stephens
Director for Undergraduate Studies
Ms. Beth K. Currie
Student Advisor
(410) 455-3096
FAX (410) 455-3969
Email - dept@cs.umbc.edu
Gopher - gopher.cs.umbc.edu
1. Faculty
2. Introduction
3. Major Program
4. Progression of Studies
5. Suggested Class Schedules
6. Minor Program
7. Computer Science Course Descriptions
8. Independent Study
9. Professional Practice (Co-Op and Internship)
10. Departmental Employment Opportunities
11. Transfer Students
12. CMSC Credit Worksheet
13. Undergraduate Concentrations
Professor and Chair:
Deepinder Sidhu
Yaacov Yesha
Associate Professors:
Assistant Professors:
David Ebert
James Mayfield
Howard Motteler
Charles Nicholas, Director of Graduate Studies
Yun Peng
James Sasaki
Alan T. Sherman
Yelena Yesha
The Computer Science
Department offers a course of study leading to a B.S. degree
in computer science. The curriculum is based upon the recommendations
of the Association for Computing Machinery for undergraduate study,
and it is expected to satisfy the criteria for accreditation under
development by the IEEE Computer Society and the ACM Joint Task Force
on Computer Science Program Accreditation. The objective of the
program is to provide training in computer programming and computer
science principles as professional disciplines. Graduates of the
program will be prepared to apply their knowledge within field
settings and to pursue graduate training in computer science.
A five-year combined B.S./M.S. program is also available. Click here
for more information.
The B.S. degree in computer science will be awarded upon successful
completion of at least 46 hours of required and elective courses in
computer science, 15 hours of required courses in mathematics and
statistics, 4 hours of a required science course, and additional
University requirements. Elective and independent study opportunities
allow students to investigate topical areas of special interest.
Field placement internships for credit are encouraged, and students
may partially finance their education through participation in
cooperative educational programs. Evening sections of many computer
science courses are also offered.
Graduates of the program can be expected to demonstrate proficiency
in at least the following areas:
Students will also study at least two of the following four areas
in detail:
Students who wish to earn a Bachelor of Science degree in Computer
Science must complete nineteen required and elective courses taken
within six groups (63/65* credits total).
Honors sections are offered in CMSC 201 and
202. Departmental
recommendation is required for registration.
In addition to the requirements outlined above, students majoring
in computer science are encouraged to consider taking the following
courses for elective credit. These courses do not contribute to
the satisfaction of elective requirements for the computer science
major. They do, however, contribute to professional growth and
university degree requirements.
* 1990-91 and 1991-92
The following schedules may be used to plan a course of study in
Computer Science:
Students who wish to pursue a minor in Computer Science are
required to complete the following:
CMSC 100 Introduction to Computers and Programming (MS) (3)
CMSC 101 Introduction to Computer Science I for Majors(4)
CMSC 102 Introduction to Computer Science II for Non-Majors (3)
CMSC 103 Scientific Computing (4)
CMSC 104 Problem Solving and Computer Programming (3)
CMSC 105 Programming in Ada (3)
CMSC 106 Programming in C (2)
CMSC 107 Programming in LISP (2)
CMSC 108 Programming in Prolog (2)
CMSC 109 Programming Topics (2)
CMSC 201 Computer Science I for Majors (MS) (4)
CMSC 202 Computer Science II for Majors (MS) (4)
CMSC 203 Discrete Structures (3)
CMSC 211 Assembly Language Programming (3)
CMSC 291 Special Topics in Computer Science (1-4)
CMSC 299 Independent Study in Computer Science (1-4)
CMSC 311 Introduction to Computer Organization (3)
CMSC 312 Switching Theory and Logical Design (3)
CMSC 331 Principles of Programming Languages (3)
CMSC 341 Data Structures (3)
CMSC 404 The History of Computers and Computing (3)
CMSC 411 Computer Architecture (3)
CMSC 412 Microprocessor Systems (3)
CMSC 421 Principles of Operating Systems (3)
CMSC 422 Operating System Design (3)
CMSC 425 Performance Analysis of Computer Systems (3)
CMSC 431 Compiler Design Principles (3)
CMSC 432 Object-Oriented Programming Languages and Systems (3)
CMSC 435 Computer Graphics (3)
CMSC 441 Algorithms (3)
CMSC 442 Information and Coding Theory (3)
CMSC 443 Cryptology (3)
CMSC 445 Software Engineering (3)
CMSC 451 Automata Theory and Formal Languages (3)
CMSC 452 Logic for Computer Science (3)
CMSC 453 Applied Combinatorics and Graph Theory (3)
CMSC 455 Numerical Computations (3)
CMSC 461 Database Management Systems (3)
CMSC 471 Artificial Intelligence (3)
CMSC 472 Knowledge-Based Systems (3)
CMSC 481 Computer Networks (3)
CMSC 482 Computer Systems Security (3)
CMSC 483 Parallel and Distributed Processing (3)
CMSC 491 Special Topics in Computer Science (1-4)
CMSC 498 Independent Study in Computer Science for CMSC Interns
CMSC 499 Independent Study in Computer Science (1-4)
Independent Study allows students to earn academic credit for study
that extends their knowledge beyond the scope of standard course
offerings. Those interested must develop a project and enlist a
computer science faculty member to act as sponsor. The credits for
the projects range from one to four, depending upon the nature of
the work involved. The requirements for independent study are the
equivalent of those for a course with a similar number of credits.
Students interested should obtain an Independent Study Form from
the Computer Science Department office. This must be completed in
collaboration with the faculty sponsor. Independent Study credits
do not satisfy any computer science major requirements; however,
they do help to fulfill the 120 credits required for graduation.
Students may elect to participate in internship or co-op programs
during their undergraduate studies. Eligibility is based upon the
completion of thirty credits, fifteen of which must be from a full-
time semester on a University of Maryland campus. The student must
have a GPA of at least 2.5. Internships are part-time professional
on-the-job which positions which are completed within a semester. Many
internships are paid. Co-op positions, which extend beyond a
single semester, are normally full-time paid experiences. For
several reasons the Computer Science Department feels every student
should seriously consider at least one tour of professional
practice during his or her undergraduate program. The experience
may clarify and help determine succeeding semester course choices,
both in computer science and in other disciplines. Those who co-op
may earn enough money to pay tuition expenses for a subsequent
semester. In addition, upper-level academic elective credit may be
earned. Finally, both internships and co-op tours arm the new
college graduate with what most employers are looking
for -- experience.
Undergraduate students may apply for positions as grader assistants
for faculty members within the Computer Science Department. These
paid positions afford visibility within the department and the
opportunity to work with a faculty member. The duties of grader
assistants may include grading programming projects and holding
office hours to assist students. Typically, one grader assistant
will be responsible for a 40-student section. Grader assistant
positions are competitive, and grader assistants are expected to be
superior computer science students. Applications for grader
assistant positions are available from the department secretaries.
Acceptance of an application by the department does not imply
acceptance of a student as a grader assistant.
The Computer Science Department welcomes transfer students from
other accredited colleges and also individuals with degrees in
other disciplines who wish to pursue undergraduate studies in
computer science. The Undergraduate Catalog should be consulted
for details regarding credits that may be accepted by the university
for advanced standing. The Computer Science Department requires
that at least 25 CMSC credits toward the B.S. degree in computer
science be earned in residence at UMBC. Details regarding courses
eligible for transfer may be obtained from the transfer office in
Admissions, the Advisement Center, or the Computer Science
Department.
Rev 9/93
The Computer Science Department has organized our elective courses
into three concentrations: Theoretical Computer Science, Computer
Systems, and Computer Applications. Our purpose is to offer
students some direction in their choice of electives.
If you elect to follow one of the concentrations, you are asked to
complete at least six of the computer science courses in that
category. In the first and second concentrations, specific courses
are starred, indicating courses which must be among your six
choices.
In addition to the list of Computer Science courses, you will find
selections from other disciplines listed. These are suggestions
for electives to augment your computer science choices, but they
are not required for the completion of the concentration.
Upon completion of the requirement for a concentration, the student
must contact the department with an up-to-date transcript. The
department will then write a letter to the student indicating the
concentration and specific courses that have been satisfied. This
may be of value in the search for employment.
The decision to follow or not to follow a concentration is up to
you. It is not required for your computer science major.
Each student must take six computer science courses.
Computer Science Faculty
Tim Finin
Artificial intelligence,
knowledge representation and reasoning,
knowledge and database systems, natural
language processing, logic programming
Professors:
Samuel Lomonaco
Algebraic coding theory, cryptography,
programming languages, supercomputing,
parallel processing, heterogeneous
computing
Computer networks, distributed systems,
distributed and heterogeneous databases,
parallel and distributed algorithms,
computer and communication security,
distributed artificial intelligence,
high performance computing
Parallel computing, parallel
algorithms, computational complexity,
algorithms, theory of computing
Brooke Stephens, Director of Undergraduate Studies
Parallel processing, database
systems, numerical analysis
Richard Chang
Computational complexity
theory, structural complexity,
analysis of algorithms
Computer graphics, computer animation,
scientific visualization, modeling
natural phenomena, realistic image
synthesis
Natural language processing,
information extraction, and hypertext
Parallel processing and
distributed computation
Electronic document processing,
software engineering, and database
management
Artificial intelligence, neural
network computing, and medical
applications
Programming languages, language design,
formal semantics, and program verification
Discrete algorithms, cryptology,
VLSI layout algorithms
Distributed systems, database
systems, performance modeling
Automata theory and formal languages
Computer architecture
Compiler design principles
Database management systems
I. Required Computer Science courses
CMSC 106 Programming in C (*)
201/H Computer Science I
202/H Computer Science II
203 Discrete Structures
211 Assembly Language Programming
311 Introduction to Computer Organization
331 Principles of Programming Languages
341 Data Structures
421 Principles of Operating Systems
441 Algorithms
II. Required Mathematics courses
MATH 151 Calculus and Analytical Geometry I
152 Calculus and Analytical Geometry II
221 Introduction to Linear Algebra
III. Required Statistics course
STAT 355 Applied Statistics I
IV. Required Science course
BIOL 100 Concepts of Biology
CHEM 101 Principles of Chemistry I
PHYS 121 Introductory Physics I
V. Two Computer Science electives chosen from the following courses
CMSC 411 Computer Architecture
431 Compiler Design Principles
451 Automata Theory & Formal Languages
461 Database Management Systems
VI. Three Computer Science electives chosen from (V) above, or
from the following courses
CMSC 312 Switching Theory & Logical Design
412 Microprocessor Systems
422 Operating System Design
425 Performance Analysis of Computer Systems
432 Object Oriented Programming Languages and Systems
435 Computer Graphics
442 Information and Coding Theory
443 Cryptology
445 Software Engineering
452 Logic for Computer Science
453 Applied Combinatorics & Graph Theory
455 Numerical Computations
471 Artificial Intelligence
472 Knowledge Based Systems
481 Computer Networks
482 Computer Systems Security
483 Parallel & Distributed Processing
491 Special Topics in Computer Science
No course may be used in more than one of the above six categories.
A grade of ``C'' or better is required in each course submitted in
fulfillment of these requirements and in all prerequisites.
CMSC 105 Programming in Ada
107 Programming in Lisp
108 Programming in Prolog
109 Programming Topics
299 Independent Study in Computer Science
404 The History of Computers and Computing
498 Independent Study in Computer Science
for CMSC Interns and Co-op Students (P/F)
499 Independent Study in Computer Science
ENGL 393 Technical Writing
+----------+
+----------------| MATH 152 |-----------------------------+
| +----------+ |
| |
| |
| |
| +----------+ |
| +-----------| MATH 221 |-----------------------------+
| | +----------+ |
| | |
| | |
| | | +----------+
| | +----------+ +-| CMSC 441 |
| | +-----| STAT 355 |-----------------------------+ +----------+
| | | +----------+ |
| | | |
| | | |
+----------+ +----------+ |
| MATH 151 |-+ +-| CMSC 203 |-+ |
+----------+ | | +----------+ | |
| | | +----------+ +----------+ |
+-+ +-| CMSC 341 |-| CMSC 331 |-+
| | | +----------+ +----------+ |
+----------+ | | +----------+ | |
| CMSC 201 |-+ +-| CMSC 202 |-+ |
+----------+ +-----+----+ |
| |
| +----------+ +----------+ | +----------+
+--------| CMSC 211 |-| CMSC 311 |-+-| CMSC 421 |
+----------+ +----------+ +----------+
8-Semester Schldule: 1. CMSC 201 2. CMSC 202
MATH151 MATH 152
3. CMSC 203 4. CMSC 311
CMSC 211 CMSC 341
SCIENCE COURSE MATH 221
5. CMSC 331 6. CMSC 441
CMSC 421
STAT 355
7. CMSC 4xx 8. CMSC 4xx
CMSC 4xx CMSC 4xx
CMSC 4xx
7-Semester Schedule 1. CMSC 201 2. CMSC 202
MATH 151 CMSC 203
MATH 152
3. CMSC 211 4. CMSC 311
CMSC 341 CMSC 331
SCIENCE COURSE MATH 221
5. CMSC 421 6. CMSC 4xx
CMSC 441 CMSC 4xx
STAT 355 CMSC 4xx
7. CMSC 4xx
CMSC 4xx
6-Semester Schedule 1. CMSC 201 2. CMSC 202
MATH 151 CMSC 203
MATH 152
SCIENCE COURSE
3. CMSC 211 4. CMSC 311
CMSC 341 CMSC 331
MATH 221 STAT 355
5. CMSC 421 6. CMSC 4xx
CMSC 441 CMSC 4xx
CMSC 4xx CMSC 4xx
CMSC 4xx
Required Courses: 14 credits
CMSC 201 (M/S) Computer Science I
CMSC 202 (M/S) Computer Science II
CMSC 203 Discrete Structures
CMSC 341 Data Structures
Options: 6 credits
Hardware
CMSC 211 Assembly Language Programming
CMSC 311 Introduction to Computer Organization
Or
Software
CMSC 331 Principles of Programming Languages
CMSC 441 Algorithms
Required Elective: 3 credits
CMSC 400-level course
Students must complete four required core courses and select either
the hardware or software option. Students must choose one
additional 400-level CMSC elective excluding CMSC 404. No grade
lower than a "C" in any course will be accepted. Please note: The
various CMSC courses have math prerequisites.
COMPUTER SCIENCE COURSE DESCRIPTIONS
This course is a one-semester introduction to computers and their
uses and is intended for non-science majors. Topics include
computer programs, information, computer systems, PC's and
packages, simulation, databases, artificial intelligence, computers
in education and industry and the effects of computers on society.
Note: Not open to students who have passed CMSC
101 or 103. This
course should not be taken by students planning to take CMSC 103 or 201.
This course provides an introduction to computer programming,
problem solving, and algorithm design using higher-level languages
such as C and Pascal. Structured programming techniques.
Assignment statements, input-output statements, control structures,
repetition structures, procedures, functions, arrays, records and
files. Program tracing, testing and documentation. Searching and
sorting. Note: Not open to students intending to major in computer science.
Prerequisites: MATH 150.
This course extends the concepts introduced in CMSC 101 and
introduces more advanced topics using higher-level languages such
as C and Pascal. Program design discipline and style, debugging
and testing of large programs. String processing, recursion,
internal sorting and searching techniques, pointers and dynamic
data structures, including lists, stacks, queues and trees. Note:
Not open to students intending to major in computer science.
Prerequisites: CMSC 101, MATH 151 or 155.
This course is an introduction to computers and programming and is
intended for students who will major in scientific disciplines
other than CMSC. The current programming language is FORTRAN.
Computer components, structured programming, flowcharts, algorithms
and programs. 2 Elements of FORTRAN including assignment
statements, input/output statements, control structures, repetition
structures, subroutines, functions, arrays and files. Problem
solving and programming techniques, including testing, debugging
and documentation. Scientific applications. Note: Not open to
students intending to major in computer science.
Prerequisite: MATH 151.
This course is specifically designed to prepare students with
insufficient backgrounds for CMSC 201. Topics include introduction
to computer organization and architecture, data representation and
memory usage, start-up sequences, comparison of mainframes and
PC's, introduction to operating systems, problem solving and
algorithm development, introduction to software engineering using
top-down design, use of support tools in engineering and executing
programs (CASE environments, compilers, linkers, and execution
processes), high-level language programming, and re-engineering
and re-use based on algorithm selection and design techniques. This
course does not fulfill any of the CMSC major requirements.
Prerequisite: Permission of the Computer Science Department.
An introduction to programming in ADA. Topics to be covered
include: data types, control structures and I/O in ADA; the use of
packages and the notion of information hiding; user-defined data
types; parallel processing and exception handling. Students will
be expected to complete a significant programming project using the
ADA language. Note: Not open to students who have had previous
programming experience using the ADA language.
Prerequisites: CMSC 101, 103 or 201.
An introduction to programming in C. Topics to be covered include:
elementary data structures, control structures and I/O in C; the
use of the C preprocessor; user-defined types such as arrays,
records and structures; system calls and the use of a symbolic
debugger. Students will be expected to complete a significant
programming project using the C language. Note: Not open to
students who have had previous programming experience using the C
language.
Prerequisites: CMSC 101, 103 or 201 in a language other than C.
An introduction to programming in LISP. Topics include atoms,
lists, the basic LISP functions, evaluation, representation of
data, recursion, functional programming and imperative programming.
Students will be expected to complete a significant programming
project using the LISP language. Note: Not open to students who
have had previous programming experience using the LISP language.
Prerequisites: CMSC 101, 103 or 201.
This course is designed for students interested in logic program-
ming and artificial intelligence. Introduction to Prolog syntax
and data structures; manipulating trees and lists in Prolog;
operation of the Prolog interpreter, including the use of cut;
built-in predicates including those for input and output; the
relationship between Prolog and first-order predicate calculus;
selected applications. Students will be expected to complete a
significant programming project using the Prolog language. Note:
Not open to students who have had previous programming experience
using the Prolog language.
Prerequisites: CMSC 101, 103 or 201.
An introduction to programming in a specific programming language,
which may vary from semester to semester. Notes: Not open to
students who have had programming experience using the specified
language. This course may be repeated when the language is
different.
Prerequisites: CMSC 101, 103 or 201.
CMSC 201H Computer Science I (Honors) (4)
Introduction to computer science through problem solving and
computer programming. Programming techniques including modularity,
abstraction, top-down design, specifications, documentation,
debugging, and testing. Selected topics in computer science
introduced through programming projects in a modern high-level
programming language (C running under the Unix Operating System).
The core material for this course includes basic data types,
expressions, control structures, functions, recursion, arrays,
strings, pointers, records, and files. This is the first course
for students interested in pursuing further study in computer
science. Note: Credit will not be given for both (CMSC 101 or 102) and CMSC 201.
Prerequisite: MATH 150.
CMSC 202H Computer Science II (Honors) (4)
Continued development of programming and problem-solving skills,
focusing on recursion, pointers, data abstraction, and procedural
abstraction. Lists, stacks, queues, and binary trees. Sorting and
searching. Programming projects using a modern high-level
programming language (such as C). This is the second course for
students interested in pursing further study in computer science.
Note: Credit will not be given for both (CMSC
101 or 102) and CMSC 202.
Prerequisites: CMSC 201 and MATH 151.
Fundamental tools, topics, and concepts of discrete mathematics
needed to study computer science. This course emphasizes problem-
solving strategies and formal proof techniques including induction.
Topics include logic, sets, numbers, functions and relations,
graphs, combinatorics, discrete probability, modular arithmetic,
summations, and recurrences.
Prerequisites: CMSC 101, 103 or 201 and MATH 151.
Basic concepts in digital logic. Machine representation of numbers
and characters, digital arithmetic, assembly language, addressing
techniques, program segmentation and linkage, and assembler
construction. Programming projects.
Prerequisites: CMSC 102, 103 or 202.
Concepts of Boolean algebra, logic gates, simplication of logical
expressions, Karnaugh maps, combinational circuit design and
analysis, half-adders, full-adders, n-bit-adders, decoders
multiplexers, arithmetic logic units, flip-flops, clocked circuit
design and analysis, registers, counters, register transfer and
computer operation, control unit, microprogramming, random-access
memories, read-only memory, input-output devices.
Prerequisite: CMSC 211.
Combinatoric logic, switching algebra, switching functions, gate
networks, minimization of switching functions, logical design,
functional decomposition, hazards, fault detection in combinatoric
logic, failure-tolerant design, synchronous sequential circuits,
the finite-state model and asynchronous sequential circuits.
Prerequisite: CMSC 311.
The syntax and semantics of programming languages. Topics include
formal specification of syntax, declarations, binding, allocation,
data structures and datatypes, control structures, control and data
flow, the implementation and execution of programs, functional
programming and imperative programming. Other possible topics
include nonprocedural and logic programming, object-oriented
programming and program verification. Programming projects will
provide experience in a number of languages.
Prerequisite: CMSC 341.
The topics in this course include: definitions and implementations
of basic data structures including arrays, stacks, queues and
linked lists; recursion as an algorithm design tool; searching and
sorting algorithms and their designs, implementations and
applications; advanced data structures including balanced trees and
graphs; tree traversals and graph traversals and their applications;
file management techniques including hashing and indexing.
Prerequisites: CMSC 202 and 203.
This course is an historical account of the pioneers of computing
and the rise of the computer and related industries. Although
technical and institutional developments are the focus of the
class, such developments are explained in a broad historical
context -- one including such factors as the state of scientific
knowledge, economic conditions, defense requirements, the nature of
business and financial systems, and governmental policies. Note:
Also listed as HIST 404 and IFSM 404.
Prerequisite: junior/senior status or permission of instructor.
Information representation, tags, check bits, floating-point
arithmetic, instruction sets, RISC vs. CISC, ALU design, bit
slicing, microprogrammed control, microinstruction types, microprogram
optimization, cache memories, interleaved memories, communication
methods, bus control and timing, input-output, programmed I/O,
interrupts and DMA, parallel and vector processors, pipelines,
shared vs. distributed memory, interconnection networks, hypercube
computers.
Prerequisite: CMSC 311.
A study of microprocessor hardware and software. Topics will
include the architecture, addressing schemes, and data manipulation
mechanisms of popular microprocessors.
Prerequisites: CMSC 311 and 331.
An introduction to the fundamentals of operating systems. Topics
include interprocess communication, process scheduling, deadlock,
memory management, virtual memory, file systems, and distributed
systems. Formal principles are illustrated with examples and case
studies of one or more contemporary operating systems.
Prerequisites: CMSC 106, 311 and 341.
The study of the internal design of a widely used operating system
such as VMS or UNIX with an emphasis on system programming for the
operating system. Topics include: kernel design, the I/O system,
scheduling algorithms, process control, interprocess communication,
system calls and memory management.
Prerequisite: CMSC 421.
Review of probability theory, birth-death processes, Markov chains,
mean-value analysis, approximation techniques, simulation studies
on the performance of computer systems.
Prerequisite: STAT 355 or permission of the instructor.
A detailed study of the design and implementation of a high-level
programming language compiler. Topics include lexical analysis and
parsing techniques, including LL and LR parsers. Semantic
routines, run-time storage allocation, code generation and
optimization.
Prerequisites: CMSC 311 and 331.
This course will introduce the concepts of Object-Oriented
Programming (OOP) Languages and Systems. Introduction to fundamental
abstraction, modularity and encapsulation mechanisms in OOP
from a SE and representational perspective. Contrasts with
imperative PLs. Basic OOP concepts: polymorphism and operator
overloading, message passing viz generic functions, late versus
early binding times, inheritance mechanisms and their relationship
to PL type systems. Survey of OOP and systems with applications.
Contrast of pure OOP environments with mixed paradigm languages.
Prerequisite: CMSC 331.
An introduction to the fundamentals of interactive computer
graphics. Topics include: graphics hardware such as plotters,
laser printers, storage tubes and bitmapped displays, graphics
software and standards such as Postscripts, PHIGS, and the X window
system, line drawing, geometrical transforms, 3D representation,
hidden surfaces, color and shading models, fractals, ray tracing.
Prerequisites: CMSC 106 and 341,
MATH 221.
Introduction to the design and analysis of computer algorithms.
Topics include fundamental algorithms, mathematical tools for
analyzing algorithms, and strategies for designing algorithms.
Fundamental algorithms include graph algorithms, and algorithms for
sorting, searching, hashing, integer arithmetic, and selected
combinatorial tasks. Mathematical tools include asymptotic
notations, and methods for solving recurrences. Algorithm design
strategies include scanning, greedy method, divide-and-conquer,
dynamic programming, and randomization.
Prerequisites: CMSC 341 and MATH 152.
This course is an introduction to information and coding theory.
The error-control coding problem, entropy, channels, Shannon's
theorems, error correcting codes, applications of coding theory,
algebraic coding theory, block codes, linear codes, cyclic codes,
decoding algorithms, BCH codes, convolutional codes, sequential
circuits and sequential decoding.
Prerequisites: CMSC 203 and MATH 221.
Introduction to cryptology -- the science of making and breaking
codes and ciphers. Conventional and public-key cryptosystems,
including DES, RSA, shift-register systems, and selected classical
systems. Examples of cryptanalytic techniques. Digital signatures,
pseudorandom number generation, cryptographic protocols, and their
applications. Introduction to theories of cryptographic strength
based on information theory and complexity theory.
Prerequisites: CMSC 203 and MATH 221.
The software development process is described in detail including:
the software life cycle and models of software development;
requirements analysis and software design techniques, such as SADT
and Jackson Design Methodology; techniques for software quality
assurance, including design reviews, testing, metrics and an
introduction to program verification; software project planning,
organization and management. Students will be expected to
participate in a team programming project.
Prerequisites: CMSC 211,
331 and 341.
Regular grammars, finite automata, context-free grammars, pushdown
automata and Turing machines. Introductory treatment of computable
and non-computable functions. Halting problems.
Prerequisites: CMSC 202 and 203.
Fundamental topics in sentential and first order logic, including
models, logical consequence, deduction, and the completeness
theorem. Undecidability theorems, including Goedel's incompleteness
theorem and Tarski's theorem. Herbrand's theorem;
applications, including resolution, logic programming, automatic
deduction, and program specification and verification.
Prerequisite: Though not a formal prerequisite (the material is independent),
CMSC 451 is strongly recommended.
This course is an introduction to the application of combinatorial
methods to computer science. Enumeration methods, recurrence
relations, generating functions, graph theory and graph algorithms,
connectivity, Euler tours, Hamiltonian cycles, flow graphs and
transport networks, matching theory, planarity, Kuratowski's
theorem and NP-complete combinatorial problems.
Prerequisites: CMSC 341, MATH 152 and 221.
Topics include: Numerical linear algebra, interpolation, solving
non-linear systems and the numerical solution of differential
equations. Some emphasis on numerical algorithms and computation
in a parallel environment.
Prerequisites: CMSC 341 and MATH 221.
Database management and the different data models currently used to
structure the logical view of the database: relational, hierarchical
and network. Implementation techniques including file
organization, query processing, concurrency control, recovery,
integrity and security.
Prerequisite: CMSC 341.
This course is designed as a broad introduction to artificial
intelligence. Overview of AI, its subfields and applications,
knowledge representation, techniques and issues; introduction to
the Lisp programming language; natural language understanding;
search; logic and deduction; basic robot plan generation; expert
systems and handling uncertainty; learning.
Prerequisite: CMSC 341.
This course is designed for students interested in expert systems
and other computer programs whose performance depends upon
specialized domain knowledge such as that possessed by human
experts. Production system fundamentals, knowledge representation
for expert systems, problem solving methods including forward and
backward chaining, belief and uncertainty and an expert system case
study.
Prerequisites: CMSC 341 and one of the following:
CMSC 451, 452, PHIL 348
or some formal background in mathematics or logic.
Fundamentals of data communication and computer networking
including circuit and packet switching, network architectures and
protocols, local/metropolitan/wide area networks, OSI protocols,
TCP/IP suite, X.25, ISDN, network management, network programming.
Prerequisites: CMSC 106 and 311.
Introduction to computer security concepts: security and integrity
policies; access and flow controls; security models; trojan horses
and covert channels; formal security specifications and verification;
security architectures; DOD classification of secure systems.
Prerequisite: CMSC 421.
A project-and applications-oriented approach to parallel and
distributed programming. Students will learn a specific parallel
language and programming environment and will complete a large
programming project. Topics include a selected parallel programming
language, a survey of parallel and distributed architectures
and associated programming styles, an introduction to parallel and
distributed algorithms, and a study of tradeoffs between computation
and communication in parallel processing.
Prerequisites: CMSC 331 and 421.
and Co-op Students (3)
PROFESSIONAL PRACTICE (CO-OP AND INTERNSHIP)
DEPARTMENTAL EMPLOYMENT OPPORTUNITIES
Student___________________________________________________________________
GER: Fine Arts & Humanities______//______/______ ENGL 100_________________
Social Sciences ______//______/______ PHED _________________
Math & Sciences ______//______/______ 45 UP LEV________________
Language/Culture (2L or C)__________/_______/______________
I. Required computer science courses
CMSC 106 Programming in C (*) ............................. 2
201 Computer Science I ............................... 4
202 Computer Science II .............................. 4
203 Discrete Structures .............................. 3
211 Assembly Language ................................ 3
311 Introduction to Computer Organization ............ 3
331 Principles of Programming Languages .............. 3
341 Data Structures .................................. 3
421 Principles of Operating Systems .................. 3
441 Algorithms ....................................... 3
II. Required math courses
MATH 151 Calculus I ....................................... 4
152 Calculus II....................................... 4
221 Linear Algebra ................................... 3
III. Required statistics course
STAT 355 Applied Statistics I ............................. 4
IV. Required science course - One of the following:
BIOL 100 Concepts of Biology............................... 4
CHEM 101 Principles of Chemistry I......................... 4
PHYS 121 Introductory Physics I ........................... 4
V. Two computer science electives chosen from the following:
CMSC 411 Computer Architecture ............................ 3
431 Compiler Design Principles ....................... 3
451 Automata Theory and Formal Languages ............. 3
461 Database Management Systems ...................... 3
VI. Three computer science electives chosen from the following:
CMSC 312 Switching Theory and Logical Design .............. 3
411 Computer Architecture ............................ 3
412 Microprocessor Systems ........................... 3
422 Operating System Design .......................... 3
425 Performance Analysis of Computer Systems ......... 3
431 Compiler Design Principles ....................... 3
432 Object-Oriented Programming Languages and Systems. 3
435 Computer Graphics ................................ 3
442 Information and Coding Theory .................... 3
443 Cryptology ....................................... 3
445 Software Engineering ............................. 3
451 Automata Theory and Formal Languages ............. 3
452 Logic for Computer Science ....................... 3
453 Applied Combinatorics and Graph Theory............ 3
455 Numerical Computations............................ 3
461 Database Management Systems....................... 3
471 Artificial Intelligence........................... 3
472 Knowledge-Based Systems........................... 3
481 Computer Networks................................. 3
482 Computer Systems Security ........................ 3
483 Parallel and Distributed Processing .............. 3
491 Special Topics in Computer Science.............. 1-4
TOTAL: 63/65* credits
VII. Electives - The following do not satisfy requirements for the
major, but they will contribute to your professional growth
and to the total credits for graduation:CMSC CREDIT WORKSHEET
CMSC 105 Programming in Ada ............................... 3
107 Programming in LISP .............................. 2
108 Programming in Prolog............................. 2
109 Programming Topics ............................... 2
299 Independent Study .............................. 1-4
404 The History of Computers and Computing ........... 3
498 Independent Study - Co-op/Internship ............. 3
499 Independent Study .............................. 1-4
ENGL 393 Technical Writing ................................ 3
* 1990-91 and 1991-92
UNDERGRADUATE CONCENTRATIONS
IN COMPUTER SCIENCE
I. Theoretical Computer Science - Designed to prepare the
student for graduate work in computer science or for post-
bachelor employment.
CMSC 312 Switching Theory and Logical Design
425 Performance Analysis of Computer Systems
431 Compiler Design Principles (*)
441 Algorithms (*)
442 Information and Coding Theory
443 Cryptology
451 Automata Theory and Formal Languages (*)
452 Logic for Computer Science
453 Applied Combinatorics and Graph Theory
455 Numerical Computations
461 Database Management Systems
471 Artificial Intelligence
MATH 251 Multivariable Calculus
301 Introduction to Mathematical Analysis I
408 Introduction to Abstract Algebra
441 Introduction to Numerical Analysis
II. Computer Systems - Designed to prepare the student
for graduate work in computer science or for immediate
employment in software development or systems programming.
This concentration stresses deep technical understanding of
complex software systems. A basic understanding of theoreti-
cal computer science is gained through the existing BS degree
requirements.
CMSC 312 Switching Theory and Logical Design
411 Computer Architecture
412 Microprocessor Systems
421 Principles of Operating Systems (*)
422 Operating System Design
425 Performance Analysis of Computer Systems
431 Compiler Design Principles
432 Object-Oriented Programming Languages and Systems
435 Computer Graphics
445 Software Engineering
453 Applied Combinatorics and Graph Theory
461 Database Management Systems
481 Computer Networks
482 Computer Systems Security
483 Parallel and Distributed Processing
IFSM 438 Project Management
STAT 453 Introduction to Mathematical Statistics
454 Applied Statistics II
III. Computer Applications - Designed for those students who
intend to seek positions in industry or government upon
graduation.
CMSC 421 Principles of Operating Systems
432 Object-Oriented Programming Languages and Systems
435 Computer Graphics
443 Cryptology
445 Software Engineering
455 Numerical Computations
461 Database Management Systems
471 Artificial Intelligence
472 Knowledge-Based Systems
482 Computer Systems Security
ECON 121 Principles of Accounting I
122 Principles of Accounting II
221 Intermediate Account I
222 Intermediate Accounting II
320 Elements of Quantitative Methods for Management
423 Economic Forecasting
IFSM 425 Decision Support Systems
MATH 381 Linear Methods in Operations Research
411 Linear Algebra
441 Introduction to Numerical Analysis
482 Nonlinear Optimization
483 Linear and Combinatorial Optimization
484 Stochastic Methods in Operations Research
STAT 453 Introduction to Mathematical Statistics
454 Applied Statistics II
Other courses may be substituted for the courses listed above
with permission of the Undergraduate Committee.
Students may also take appropriate graduate-level computer
science courses in fulfillment of the requirements of any of
these three areas with permission of the Undergraduate
Committee and the course instructor. Qualified undergradu-
ates are encouraged to do this. Note: All courses must be
taken for a letter grade. No course may be taken on a Pass/
Fail basis.
rev 8/94 kaf