Notes: (1) COMP 120 is not part of the core curriculum.
(2) A student who earns a grade below "C" in COMP 170 or 271 cannot count
this course as a prerequisite for a subsequent computer science course.
101. Exploring the Internet. (1)
This one-credit course offers non-computer science
majors an introduction to the use of the vast resources available on the
Internet. The course will be taught in a laboratory environment with practical
hands-on instruction. Most of the material in this course is included in
COMP 120, so a student will not be permitted to take both for credit. The
scope of COMP 120 is much broader; there are many students who wish to
acquire only Internet skills without examining other uses of computers.
102. Web Site Design. (1)
An introduction to the basic components and tools
used in developing pages for the World Wide Web. Topics will include HTML,
HTML Standards and validation, Cascading Style Sheets (CSS), and scripting.
Tools appropriate for each of these will be discussed. Other topics may
include CGI programming and graphics editors. The course is taught in a
laboratory environment with hands-on instruction.
120. Introduction to Computer Applications.
(MATH 149)
Prerequisite: Math Placement Test or Math 099.
This course, intended for non-science majors,
offers a hands-on introduction to the development, functions, and applications
of computers. Topics include e-mail, exploring the Internet, spread-sheets,
word-processing, database, desktop software, statistical packages, and
programming. Uses of computing technology in business and the arts. Ethical,
security, and privacy issues as they relate to computers. Weekly lab assignments.
125. Introductory Programming.
Prerequisite: Math Placement Test or MATH 100
(with grade of "C" or better).
An elementary introduction to programming using
a language such as Visual Basic. Topics include variables, formatted input/output,
arrays, looping, conditional execution, subroutines, functions, computer
graphics, animation. Applications to other disciplines are stressed.
150. Introduction to Computer Science.
Prerequisite: Math Placement Test or MATH 100
(with grade of "C" or better).
An introduction to computer science providing
a broad survey of the discipline while emphasizing the computer’s role
as a tool for describing, organizing, and manipulating information. Topics
to include machine architecture, software, data organization, and the potential
and limitation of machines. Serves as a terminal course for students who
want a one course introduction to the field, as well as a preliminary course
to upper level computer science offerings. Note: this is NOT a programming
class and it may be taken concurrently with COMP 125 or 170.
170. Structured Programming.
Prerequisite: Math Placement Test or MATH 117
(with grade of "C" or better).
An introduction to the computer science major,
covering basic concepts using an object-oriented programming language such
as Java. The course addresses the following questions: What is an algorithm?
How does one write a computer program? How does one convert an algorithm
into a computer program? How does one judge a program? Topics include:
variables, data types, input/output, repetition, choice, classes/objects,
methods, arrays and recursion. This course is programming intensive. A
weekly lab component is required.
211. Discrete Structures.
Prerequisites: COMP 170 and MATH 118.
Mathematical foundations of computer science.
Topics include: complexity of algorithms; modular arithmetic; induction
and proof techniques; graph theory; combinatorics; Boolean algebra and
switching systems (including Karnaugh maps and the Quine-McCluskey method);
symbolic logic and logic circuits; and an introduction to automata and
formal languages.
219. Introduction to UNIX. (1)
Prerequisite: COMP 170.
An introduction to the UNIX operating system.
Topics include files and directories, electronic mail, security, advanced
file systems, network utilities, network file sharing, text utilities,
shell programming, UNIX internals, UNIX system administration, the X windowing
system, and systems programming. Programming assignments involve the UNIX
shell script language.
225. Introduction to Web Programming.
Corequisite: COMP 271.
This course offers an introduction to Web programming.
Topics include: Web forms and other CGI programs using Perl and C++; Java
Scripting and client/server Java Applets. Security issues will also be
examined.
227. Client/Server Web Programming.
Prerequisite: COMP 225; Corequisite: COMP 272.
This course is a continuation of COMP 225, with
a change of emphasis from CGI programming to Java Servlets. The Client/Server
model will be studied since Java servlets are able to communicate more
easily with Java Applets. Additional topics include: Cookies, RMI, simple
concurrency, Java Scripting, and security issues. Optional topics include:
Database connectivity, Sockets, Object-Oriented Perl, PHP and XML.
251. Introduction to Database Systems.
Prerequisite: COMP 170.
Design and implementation of a large database.
Hardware and software considerations. Relational, hierarchical, and network
models. Object-oriented databases. Data independence, security, and integrity.
Examination of databases such as Oracle and Microsoft Access.
260. Digital Logic and Computer Design.
Prerequisite: COMP 170. An introduction to digital
logic and computer design. Design of a simple computer with a complete
instruction set starting from the gate level and extending through the
Register Transfer Language level. Development of an assembly language for
this computer. Additional topics chosen from: microprogrammed control,
advanced ALU’s, RISC computers.
266. Digital Electronics Laboratory.
(PHYS 266) Prerequisite: PHYS 112 or 114 or permission.
Lecture and laboratory. Logic devices, oscillators
and timers, microprocessor components, machine language and digital/analog
conversion. Special emphasis upon individual components of microprocessor
systems.
271. Structured Programming and Data Structures.
Prerequisite: COMP 170.
This continuation of COMP 170 introduces the concepts
of data abstraction and data structure, including stacks, queues, lists,
sets, and trees. The issues of implementing a data structure in a language
such as Java are examined using classes, arrays, and linked structures.
Sorting and searching techniques are analyzed. The concepts of correctness
and efficiency of algorithms are developed. Time/space comparisons of iterative
algorithms with recursive algorithms are made. The course includes several
major programming projects. A weekly lab component is required.
272. Data Abstraction and Object-Oriented Programming.
Prerequisite: COMP 271.
An examination of object-oriented programming
and design in C++ and Java. Classes and objects. Composition, inheritance,
and parametrization. Dynamic versus static binding. Applications such as
graphical user interface. This course is programming intensive.
277. COBOL and Advanced Data Management.
Prerequisite: COMP 271.
Programming in COBOL, including tables, searches,
sorts, and character string manipulation. File organization and management.
Sequential and non-sequential file structures, including relative files,
direct files, ISAM and VSAM.
281. Problem-Solving Strategies in Computer
Science. (1)
Prerequisite: COMP 271.
This seminar offers students an opportunity to
explore program development and design as part of a small team of programmers.
Problems are selected from local and national A.C.M. programming contests
and other sources. May be repeated for credit.
288. Topics in Computer Science. (1-3)
Course title and content vary; prerequisites are
established by the instructor. May be repeated for credit.
309. Numerical Methods. (MATH 309)
316. Ethics and Computers. (1)
Prerequisites: COMP 170; PHIL 120.
This seminar will explore a variety of ethical
and legal issues facing those who use or program computers. Issues can
be divided broadly into professional ethics, dealing with the ethical responsibilities
of the programmer, and social issues, dealing with concerns we all have
as citizens.
330. Software Engineering.
Prerequisite: COMP 272.
Using an object-oriented language such as C++
or Java, the student (working in a small team) will learn to plan, design,
implement, and test a large software project.
331. Cryptography. (MATH 331)
Prerequisite: COMP 363 or MATH 313 or MATH 322.
This course introduces the formal foundations
of cryptography and also investigates some well known standards and protocols.
The intended audience is senior undergraduates and beginning graduate students.
Topics to be covered in this course include: information-theoretic security,
private key encryption, DES, public key encryption, background on modular
arithmetic, RSA, hashing and message authentication codes (MACs), digital
signatures, DSS, key distribution and management, PGP, network security,
Fiat-Shamir protocol, kerberos.
332. Design Patterns and Object-Oriented Design.
Prerequisite: COMP 272.
This course is a project-intensive course in software
engineering. It takes students through the entire software life cycle by
involving them in a semester long team project. The course emphasizes the
use of design patterns and object-oriented design methods such as Object
Modeling Technique (OMT) throughout the project.
333. Formal Methods in Software Engineering.
Prerequisite: COMP 272.
This course covers formal methods used in the
development of software. It covers languages such as Z, for specifying
abstract data types, and temporal logic, for specifying behavior of concurrent
systems.
337. Java Programming and Concurrency.
Prerequisite: COMP 272.
This course explores component-based programming
frameworks for concurrent programming. Process algebras, specification
and testing are used as tools in the engineering of concurrent systems;
threads are employed in the implementation of such systems. Coursework
includes several substantial programming projects (in a language such as
Java) involving applications of concurrency and event driven programming
such as graphical user interfaces, web-based services using Hypertext Transfer
Protocol (HTTP) and distributed services using Remote Method Invocation
(RMI).
338. Interactive Services Programming.
Prerequisite: COMP 337
This course introduces Sisl, a domain-specific
language for service logics of interactive services. The student then learns
how to use the Java Servlet API to connect the service logic with concrete
interfaces based on applets, HTML forms, and automatic speech recognition
(ASR) using JSAPI or VoxML.
343. Introduction to Computer Networks.
Prerequisite: COMP 272.
This course surveys the various levels of a packet-switched
computer network, using the TCP/IP protocol suite as the primary model.
Other network protocol stacks (e.g., Novell) may also be considered as
time permits. At the Physical and Data Link Layers, various protocols such
as Ethernet and Token Ring are compared, and their implications for network
topology are considered. At the Network Layer, a wide variety of routing
protocols and name resolution protocols are studied. At the Transport Layer,
students are introduced to the various methods for building end-to-end
reliability on top of less reliable lower layers. Finally, at the Application
Layer a variety of standard protocols such as telnet, ftp, and electronic
mail are examined, together with the related issues of security and authentication.
Some programming in the C language is required.
346. Introduction to Telecommunications.
Prerequisite: COMP 374.
This course introduces the fundamental concepts
of telecommunication networks. Engineering principles of telephone, computer
and integrated digital networks. Topics include: telephone and data networks
overview; OSI layers; data link protocol; flow and congestion control,
routing; local area networks (Ethernet, Token Ring and FDDI); transport
layer; and high-speed networks.
350. Introduction to Microprocessors.
Prerequisites: COMP 260, 271. This course is an
introduction to microprocessor architecture, emphasizing the Intel 80x86
family. Topics include: memory addressing, instruction sets, interrupt
structure, operating system interfacing, and high-level language interfacing.
353. Database Programming.
Prerequisites: COMP 251, 272.
This course covers the fundamentals of database
application development using C++, C, or Java by accessing a transaction-oriented
database server. A commercial database environment such as Oracle is used.
Additional topics may include enabling access to database via the web,
and administering large databases.
356. Computer Principles of Modeling and Simulation.
(STAT 356)
360. Computer Organization.
Prerequisite: COMP 260.
A continuation of COMP 260, this course presents
advanced topics in computer architecture such as arithmetic and instruction
pipelining, vector and array computers, peripheral devices and current
I/O techniques, hierarchical memory organization, field programmable gate
arrays (FPGA’s) and reconfigurable computers.
363. Design and Analysis of Computer Algorithms.
Prerequisites: COMP 211, 271.
Techniques for the description and analysis of
computer algorithms. Correctness, average and worst case analysis, space
complexity, and asymptotic growth analysis of functions. Algorithms for
searching, selection and sorting. Graph algorithms. Divide and conquer,
greedy, and dynamic programming paradigms. Models of computation, the classes
P and NP, and the complexity hierarchy.
364. Supercomputing.
Prerequisite: COMP 271.
Introduction to parallel computing and parallel
programming. Models of parallel computation, parallel computer performance
measures, parallel computer architectures, design and analysis of parallel
algorithms, parallelizing sequential programs.
366. Microcomputer Design and Interfacing. (PHYS
366)
Prerequisite: COMP 260 or PHYS 266.
Lecture and laboratory work. Microprocessor logic,
instruction, and clocked sequential circuits; memory devices; data acquisition,
manipulation and transfer circuitry; machine and assembly languages; microprocessor
support devices, and computer interfaces.
372. Programming Languages.
Prerequisite: COMP 272.
Study of the principles underlying the design
and implementation of commonly used programming languages. Programming
in a variety of languages such as C++, Java, Lisp, and ML may be required.
373. Object-Oriented Programming.
Prerequisite: COMP 272.
Advanced treatment of the main constituents of
the object-oriented methodology introduced in COMP 272: data abstraction,
inheritance, and polymorphism. Comparison of several object-oriented languages,
such as C++, Java and Smalltalk. Paradigms and implementation techniques
associated with object-oriented languages. Advanced topics, such as prototyping,
delegation, and concurrent object-oriented programming. The course includes
substantial programming projects involving object-oriented design and application
programming.
374. Introduction to Operating Systems.
Prerequisite: COMP 272.
Introduction to the basic concepts and components
of a multi-tasking operating system. Topics include processes, scheduling,
resource management, I/O and file-systems, virtual memory, synchronization
semaphores, deadlocks, race conditions, context switching, system calls,
security, distributed systems and networks. Examination of an existing
operating system.
376. Formal Languages and Automata.
Prerequisite: COMP 211 or MATH 313.
Introduction to formal language theory. Finite-state
machines and regular languages. Stack machines and context-free languages.
Turing machines and computability. Undecidability and the Halting Problem.
378. Artificial Intelligence.
Prerequisite: COMP 271.
Concepts of problem representation and search,
knowledge representation and reasoning. Selected topics may include game
playing, theorem proving, natural language processing, machine learning,
connectionist models, expert systems, robotics, pattern recognition, machine
vision, and neural networks.
380. Introduction to Computer Graphics.
Prerequisite: COMP 271.
An introduction to modern computer graphics with
an emphasis on rendering 3-dimensional scenes. Topics include modeling,
viewing, hidden surface removal, lighting and illumination, and rasterization.
The student will obtain practical experience in graphics applications programming
using an industry standard API such as GKS, OpenGL, or PHIGS.
382. Introduction to Compilers.
Prerequisites: COMP 260, 272.
This course examines the design of compilers.
Tools and related topics include context-free grammars, parsing, syntax-directed
translation, lexical analysis, and code generation. Students will write
a compiler for a small language.
388. Topics in Computer Science. (1-3)
Course title and content vary; prerequisites are
established by the instructor. May be repeated for credit.
390. Computer Science Project.
Prerequisite: permission of chair.
Research and preparation for a project supervised
by a faculty member.
391. Internship in Computer Science. (1-3)
Prerequisites: COMP 272 and approval of the internship
director; junior/ senior majors. An opportunity to obtain experience in
software development, design, or related activities in computer science
in a professional setting. Placement requires approval of the internship
coordinator and acceptance by an employer. Students will submit periodic
written reports, possibly including a project, based upon their internship
activities and results. The number and frequency of reports must be approved
in advance by the internship director. (This course may not be used to
satisfy the 3-credit elective requirement in the computer science or math
and CS majors.)
398. Independent Study. (1-3)
Prerequisite: permission of chair.
Independent study of selected topics in computer
science under the supervision of a faculty member.
399H. Honors Tutorial. (1-3)
Prerequisite: permission of chair.
Independent study of selected topics in computer
science for students in the honors program.
Back to Undergraduate Studies Main