Undergraduate Program in CS

Undergraduate Program In Computer Science

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


TABLE OF CONTENTS


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


Computer Science Faculty


Professor and Chair:
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

Deepinder Sidhu
Computer networks, distributed systems,
distributed and heterogeneous databases,
parallel and distributed algorithms,
computer and communication security,
distributed artificial intelligence,
high performance computing

Yaacov Yesha
Parallel computing, parallel
algorithms, computational complexity,
algorithms, theory of computing

Associate Professors:
Brooke Stephens, Director of Undergraduate Studies
Parallel processing, database
systems, numerical analysis

Assistant Professors:
Richard Chang
Computational complexity
theory, structural complexity,
analysis of algorithms

David Ebert
Computer graphics, computer animation,
scientific visualization, modeling
natural phenomena, realistic image
synthesis

James Mayfield
Natural language processing,
information extraction, and hypertext

Howard Motteler
Parallel processing and
distributed computation

Charles Nicholas, Director of Graduate Studies
Electronic document processing,
software engineering, and database
management

Yun Peng
Artificial intelligence, neural
network computing, and medical
applications

James Sasaki
Programming languages, language design,
formal semantics, and program verification

Alan T. Sherman
Discrete algorithms, cryptology,
VLSI layout algorithms

Yelena Yesha
Distributed systems, database
systems, performance modeling


INTRODUCTION

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:


MAJOR PROGRAM

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

  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.

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.

     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

* 1990-91 and 1991-92


PROGRESSION OF STUDIES



                 +----------+
+----------------| 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 |
				+----------+ +----------+   +----------+


SUGGESTED CLASS SCHEDULES

The following schedules may be used to plan a course of study in Computer Science:

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


MINOR PROGRAM

Students who wish to pursue a minor in Computer Science are required to complete the following:

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

CMSC 100 Introduction to Computers and Programming (MS) (3)
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.

CMSC 101 Introduction to Computer Science I for Majors(4)
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.

CMSC 102 Introduction to Computer Science II for Non-Majors (3)
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.

CMSC 103 Scientific Computing (4)
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.

CMSC 104 Problem Solving and Computer Programming (3)
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.

CMSC 105 Programming in Ada (3)
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.

CMSC 106 Programming in C (2)
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.

CMSC 107 Programming in LISP (2)
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.

CMSC 108 Programming in Prolog (2)
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.

CMSC 109 Programming Topics (2)
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 201 Computer Science I for Majors (MS) (4)
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 202 Computer Science II for Majors (MS) (4)
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.

CMSC 203 Discrete Structures (3)
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.

CMSC 211 Assembly Language Programming (3)
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.

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

CMSC 312 Switching Theory and Logical Design (3)
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.

CMSC 331 Principles of Programming Languages (3)
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.

CMSC 341 Data Structures (3)
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.

CMSC 404 The History of Computers and Computing (3)
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.

CMSC 411 Computer Architecture (3)
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.

CMSC 412 Microprocessor Systems (3)
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.

CMSC 421 Principles of Operating Systems (3)
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.

CMSC 422 Operating System Design (3)
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.

CMSC 425 Performance Analysis of Computer Systems (3)
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.

CMSC 431 Compiler Design Principles (3)
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.

CMSC 432 Object-Oriented Programming Languages and Systems (3)
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.

CMSC 435 Computer Graphics (3)
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.

CMSC 441 Algorithms (3)
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.

CMSC 442 Information and Coding Theory (3)
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.

CMSC 443 Cryptology (3)
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.

CMSC 445 Software Engineering (3)
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.

CMSC 451 Automata Theory and Formal Languages (3)
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.

CMSC 452 Logic for Computer Science (3)
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.

CMSC 453 Applied Combinatorics and Graph Theory (3)
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.

CMSC 455 Numerical Computations (3)
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.

CMSC 461 Database Management Systems (3)
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.

CMSC 471 Artificial Intelligence (3)
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.

CMSC 472 Knowledge-Based Systems (3)
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.

CMSC 481 Computer Networks (3)
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.

CMSC 482 Computer Systems Security (3)
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.

CMSC 483 Parallel and Distributed Processing (3)
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.

CMSC 491 Special Topics in Computer Science (1-4)

CMSC 498 Independent Study in Computer Science for CMSC Interns
and Co-op Students (3)

CMSC 499 Independent Study in Computer Science (1-4)



INDEPENDENT STUDY

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.


PROFESSIONAL PRACTICE (CO-OP AND INTERNSHIP)

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.


DEPARTMENTAL EMPLOYMENT OPPORTUNITIES

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.


TRANSFER STUDENTS

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.


                      

CMSC CREDIT WORKSHEET

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

Rev 9/93


UNDERGRADUATE CONCENTRATIONS
IN COMPUTER SCIENCE

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.

  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